Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
893dae7
ci: add helper for running spell checks
O7EG Feb 2, 2025
8055c06
chore: add initial `.gitignore`
O7EG Feb 4, 2025
c0b1e8a
ci: add helper for generating changelogs
O7EG Feb 4, 2025
26e2a10
ci: include commit authors in changelogs
O7EG Feb 4, 2025
c79a060
ci: include commit PRs in changelogs
O7EG Feb 4, 2025
802db3b
ci: include commit bodies in changelogs
O7EG Feb 4, 2025
357e1eb
ci: add links to more detailed changelogs
O7EG Feb 4, 2025
51f5956
ci: enhance issue references in changelogs
O7EG Feb 4, 2025
b24b726
ci: add helper for running chart linter
O7EG Feb 4, 2025
3770cb1
ci: add helper for running chart validator
O7EG Feb 4, 2025
a3088f0
ci: add job for running spell checks
O7EG Feb 4, 2025
f70a5ff
ci: add job for running chart linters
O7EG Feb 4, 2025
e644e1d
ci: add job for running chart tests
O7EG Feb 4, 2025
ed9f183
ci: add reusable action for installing `committed`
O7EG Feb 24, 2025
06a5474
ci: add workflow for enforcing commit style
O7EG Feb 24, 2025
9a446db
ci: add helpers for controlling Minikube clusters
O7EG Feb 24, 2025
98fe0c7
ci: add helpers for running common Helm operations
O7EG Feb 24, 2025
415533c
docs: describe how chart helpers can be used for development
O7EG Feb 24, 2025
1e32ec2
docs: describe how Minikube helpers can be used for development
O7EG Feb 24, 2025
367e22e
docs: describe how to use helpers for adding chart repositories
O7EG Feb 24, 2025
389a691
ci: add reusable action for installing `helm`
O7EG Feb 24, 2025
de28d78
refactor: reuse step for installing `helm` in multiple jobs
O7EG Feb 24, 2025
75dad11
refactor: reuse step for installing `ct` in multiple jobs
O7EG Feb 24, 2025
fd60b70
ci: add reusable action for installing `just`
O7EG Mar 18, 2025
8b0c9e8
ci: register external chart repositories required for validation
O7EG Mar 18, 2025
3f01b0f
ci: register external chart repositories required for testing
O7EG Mar 18, 2025
dba04aa
ci: reuse helper for starting Minikube test clusters
O7EG Mar 18, 2025
136f0c1
ci: add workflow for running various CI checks
O7EG Mar 18, 2025
6642742
ci: add step for extracting a list of validated charts
O7EG Mar 18, 2025
c6f0f23
ci: export validated chart list from reusable workflow
O7EG Mar 18, 2025
4a6c145
ci: add job for checking chart changelogs
O7EG Mar 18, 2025
5a27439
ci: add support for limiting reusable checks to specific chart
O7EG Mar 18, 2025
c5ae73d
ci: add workflow for packaging and releasing charts
O7EG Mar 18, 2025
13dda06
ci: register external chart repositories required for releasing
O7EG Mar 18, 2025
5f24907
ci: add step for preparing chart release notes
O7EG Mar 18, 2025
5bd1a53
ci: configure `cr` to consume prepared release notes
O7EG Mar 18, 2025
f80a714
ci: add reusable action for running `typos`
O7EG Mar 19, 2025
9dee4c1
refactor: reuse local action for running `typos`
O7EG Mar 19, 2025
9b15ad6
ci: add workflow for enforcing PR naming convention
O7EG Mar 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/actions/check-typos/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

name: check-typos
description: Helper for running Typos
inputs:
files:
description: Files to check
required: false
default: ''
runs:
using: composite
steps:
- name: Install and run Typos
uses: crate-ci/typos@v1.29.7
with:
config: ./configs/typos.toml
files: ${{ inputs.files }}
13 changes: 13 additions & 0 deletions .github/actions/setup-committed/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

name: setup-committed
description: Helper for installing Committed
runs:
using: composite
steps:
- name: Install Committed
uses: jaxxstorm/action-install-gh-release@v2.1.0
with:
repo: crate-ci/committed
tag: v1.1.7
12 changes: 12 additions & 0 deletions .github/actions/setup-helm/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

name: setup-helm
description: Helper for installing Helm
runs:
using: composite
steps:
- name: Install Helm
uses: azure/setup-helm@v4
with:
version: v3.17.0
12 changes: 12 additions & 0 deletions .github/actions/setup-just/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

name: setup-just
description: Helper for installing Just
runs:
using: composite
steps:
- name: Install Just
uses: taiki-e/install-action@v2
with:
tool: just@1.40.0
130 changes: 130 additions & 0 deletions .github/workflows/checks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

# Reusable workflow for running various checks on Helm charts

name: checks
on:
workflow_call:
inputs:
enable-change-detection:
description: Enable change detection
default: false
type: boolean
chart:
description: Limit checks to a specific chart
default: ''
type: string
outputs:
charts:
description: List of validated charts
value: ${{ jobs.helm-linter.outputs.charts }}

permissions:
contents: read

env:
CLICOLOR: 1

jobs:
helm-linter:
runs-on: ubuntu-latest
outputs:
charts: ${{ steps.ct-log-parser.outputs.charts }}
env:
CHART_TESTING_LOG: chart-testing.log
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
# Fetch whole history required for change detection (if enabled)
fetch-depth: ${{ (inputs.enable-change-detection) && '0' || '1' }}
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
check-latest: true
- &install-just-step
name: Install Just
uses: ./.github/actions/setup-just
- &install-helm-step
name: Install Helm
uses: ./.github/actions/setup-helm
- &install-ct-step
name: Install chart-testing
uses: helm/chart-testing-action@v2.7.0
- &add-chart-repos-step
name: Add external chart repositories
run: just add-chart-repos
- name: Run chart linters and validators
run: |
set -o pipefail
if ${{ inputs.enable-change-detection }}; then
# Enable change detection if requested
set -- "--target-branch" "main"
elif test -n "${{ inputs.chart }}"; then
# Process only the specified chart
set -- "--charts" "./charts/${{ inputs.chart }}"
else
# Process all charts
set -- "--all"
fi
ct lint --config ./configs/chart-testing.yaml "$@" \
| tee "${{ env.CHART_TESTING_LOG }}"
- id: ct-log-parser
name: Parse chart-testing logs
uses: eaasi/chart-list-action@v0.3
with:
ct-log-file: ${{ env.CHART_TESTING_LOG }}

helm-tester:
runs-on: ubuntu-latest
needs:
- helm-linter
steps:
- name: Checkout repository
uses: actions/checkout@v4
- *install-just-step
- name: Install Minikube
uses: medyagh/setup-minikube@v0.0.20
with:
start: false
- name: Start Minikube cluster
run: just cluster-start
- *install-helm-step
- *install-ct-step
- *add-chart-repos-step
- name: Install and test charts
run: ct install --config ./configs/chart-testing.yaml --all

spell-checker:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run spell checker
uses: ./.github/actions/check-typos

changelog-checker:
runs-on: ubuntu-latest
needs:
- helm-linter
- spell-checker
if: ${{ needs.helm-linter.outputs.charts != '[]' }}
strategy:
matrix:
chart: ${{ fromJSON(needs.helm-linter.outputs.charts) }}
env:
CHANGELOG_FILE: ${{ matrix.chart.path }}/CHANGELOG.md
steps:
- name: Checkout chart's changelog
uses: actions/checkout@v4
with:
sparse-checkout: ${{ env.CHANGELOG_FILE }}
- name: Check chart's changelog
uses: eaasi/release-notes-action@v0.6
with:
changelog-file: ${{ env.CHANGELOG_FILE }}
release-version: '${{ matrix.chart.version }}'
# Ignore missing changelogs for default chart version
continue-on-error: ${{ matrix.chart.version == '0.1.0' }}
25 changes: 25 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

# Workflow for running various CI checks

name: continuous-integration
on:
push:
branches:
- main
pull_request:
branches:
- '**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}

permissions:
contents: read

jobs:
checks:
uses: ./.github/workflows/checks.yaml
with:
enable-change-detection: ${{ github.ref != 'refs/heads/main' }}
44 changes: 44 additions & 0 deletions .github/workflows/commit-style.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

# Workflow for enforcing commit style conventions

name: commit-style
on:
push:
branches:
- main
pull_request:
branches:
- '**'

permissions:
contents: read

env:
CLICOLOR: 1

jobs:
commit-linter:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
# Fetch full history for merge-base detection!
fetch-depth: 0
- id: commit-range
name: Determine commit range
uses: eaasi/commit-range-action@v0.5
- name: Install commit style linter
uses: ./.github/actions/setup-committed
- name: Run commit style linter
run: |
range="${{ steps.commit-range.outputs.commit-range }}"
echo "Linting commits:"
git log --color=always --graph --oneline "${range:?}" || true
echo ""
committed -vv --color=always \
--config ./configs/committed.toml \
"${range}"
echo "DONE: Commits follow the required style conventions."
86 changes: 86 additions & 0 deletions .github/workflows/pr-naming.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# SPDX-FileCopyrightText: 2025 Yale University
# SPDX-License-Identifier: Apache-2.0

# Workflow for enforcing PR naming conventions

name: pr-naming
on:
pull_request:
types:
- opened
- edited
- reopened

permissions:
contents: none

env:
COMMIT_MESSAGE_FILE: ./commit-message.txt
CLICOLOR: 1

jobs:
commit-message:
runs-on: ubuntu-latest
outputs:
content: ${{ steps.message-constructor.outputs.content }}
steps:
- id: message-constructor
name: Construct commit message
env:
PR_TITLE: ${{ github.event.pull_request.title }}
PR_BODY: |
${{ github.event.pull_request.body }}
run: |
print-commit-message() {
echo "${PR_TITLE:?}"
if test -n "${PR_BODY}"; then
echo ""
echo "${PR_BODY}"
fi
}
# Output commit message
{
echo "content<<ENDOFMSG"
print-commit-message
echo "ENDOFMSG"
} >> "${GITHUB_OUTPUT}"

commit-linter:
runs-on: ubuntu-latest
needs:
- commit-message
steps:
- &checkout-repository-step
name: Checkout repository
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/actions
configs
- &prepare-commit-message-step
name: Prepare commit message
run: |
echo -n '${{ needs.commit-message.outputs.content }}' > "${{ env.COMMIT_MESSAGE_FILE }}"
- name: Install commit style linter
uses: ./.github/actions/setup-committed
- name: Run commit style linter
run: |
echo "Linting commit message:"
cat "${{ env.COMMIT_MESSAGE_FILE }}" | sed 's/^/> /'
echo ""
committed -vv --color=always \
--config ./configs/committed.toml \
--commit-file "${{ env.COMMIT_MESSAGE_FILE }}"
echo "DONE: PR follows the required naming conventions."

spell-checker:
runs-on: ubuntu-latest
needs:
- commit-message
steps:
- *checkout-repository-step
- *prepare-commit-message-step
- name: Run spell checker
uses: ./.github/actions/check-typos
with:
files: ${{ env.COMMIT_MESSAGE_FILE }}
Loading
Loading