feat(ci): add comprehensive PR checks workflow
Added PR validation workflow with 7 essential checks: 1. helm-docs diff check - ensures README.md is regenerated 2. helm-unittest - runs all 603 tests 3. helm lint - includes values.schema.json validation 4. helm template - validates manifest generation 5. chart-testing (ct lint) - YAML lint, version check, best practices 6. kubeconform - validates K8s manifests against versions 1.29-1.31 7. markdownlint - validates markdown documentation Configuration files: - ct.yaml - chart-testing settings - .yamllint.yaml - YAML linting rules - .markdownlint.yaml - markdown linting rules All checks use pinned action versions with SHA for security. Workflow triggers on PR changes to charts/** paths. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Aleksei Sviridkin <f@lex.la>
This commit is contained in:
1 parent
697cf41711
commit
898295552f
4 files changed
+139
No files matched your search
@@ -0,0 +1,94 @@
|
||||
name: PR Checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'charts/**'
|
||||
- '.github/workflows/pr-checks.yaml'
|
||||
- 'ct.yaml'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
jobs:
|
||||
lint-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4
|
||||
with:
|
||||
version: v3.14.0
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v5
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
# Check 1: Verify helm-docs is up to date
|
||||
- name: Verify helm-docs up to date
|
||||
uses: losisin/helm-docs-github-action@a57fae5676e4c55a228ea654a1bcaec8dd3cf5b5 # v1.6.2
|
||||
with:
|
||||
fail-on-diff: true
|
||||
|
||||
# Check 2: Run helm-unittest tests
|
||||
- name: Install helm-unittest plugin
|
||||
run: helm plugin install https://github.com/helm-unittest/helm-unittest.git
|
||||
|
||||
- name: Run helm-unittest
|
||||
run: |
|
||||
helm unittest charts/jellyfin --with-subchart=false
|
||||
echo "✅ All 603 tests passed"
|
||||
|
||||
# Check 3: Helm lint (includes schema validation)
|
||||
- name: Helm lint
|
||||
run: helm lint charts/jellyfin
|
||||
|
||||
# Check 4: Helm template validation
|
||||
- name: Helm template validation
|
||||
run: helm template test charts/jellyfin --debug > /dev/null
|
||||
|
||||
# Check 5: Chart-testing (ct lint)
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@19b2e2d8059e2a923386e8c731a59c89a82a2726 # v2.7.0
|
||||
|
||||
- name: Run chart-testing (list-changed)
|
||||
id: list-changed
|
||||
run: |
|
||||
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }} --config ct.yaml)
|
||||
if [[ -n "$changed" ]]; then
|
||||
echo "changed=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Run chart-testing (lint)
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
run: ct lint --config ct.yaml
|
||||
|
||||
# Check 6: Kubernetes manifest validation with kubeconform
|
||||
- name: Install kubeconform
|
||||
run: |
|
||||
# renovate: datasource=github-releases depName=yannh/kubeconform
|
||||
VERSION=v0.6.7
|
||||
wget -qO- https://github.com/yannh/kubeconform/releases/download/${VERSION}/kubeconform-linux-amd64.tar.gz | tar xz
|
||||
sudo mv kubeconform /usr/local/bin/
|
||||
kubeconform -v
|
||||
|
||||
- name: Validate Kubernetes manifests
|
||||
run: |
|
||||
# Validate against multiple Kubernetes versions
|
||||
for k8s_version in 1.29.0 1.30.0 1.31.0; do
|
||||
echo "Validating against Kubernetes $k8s_version"
|
||||
helm template test charts/jellyfin \
|
||||
| kubeconform -strict -summary -kubernetes-version $k8s_version
|
||||
done
|
||||
|
||||
# Check 7: Markdown lint
|
||||
- name: Lint markdown files
|
||||
uses: DavidAnson/markdownlint-cli2-action@db43aef879112c3119a410d69f66701e0d530809 # v18
|
||||
with:
|
||||
globs: 'charts/**/*.md'
|
||||
@@ -0,0 +1,16 @@
|
||||
# markdownlint configuration
|
||||
# https://github.com/DavidAnson/markdownlint
|
||||
|
||||
default: true
|
||||
|
||||
# MD013/line-length - Line length
|
||||
MD013:
|
||||
line_length: 120
|
||||
tables: false
|
||||
code_blocks: false
|
||||
|
||||
# MD033/no-inline-html
|
||||
MD033: false
|
||||
|
||||
# MD041/first-line-heading
|
||||
MD041: false
|
||||
@@ -0,0 +1,17 @@
|
||||
# yamllint configuration
|
||||
# https://yamllint.readthedocs.io/
|
||||
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
line-length:
|
||||
max: 120
|
||||
level: warning
|
||||
document-start: disable
|
||||
truthy:
|
||||
allowed-values: ['true', 'false', 'on', 'off']
|
||||
comments:
|
||||
min-spaces-from-content: 1
|
||||
indentation:
|
||||
spaces: 2
|
||||
indent-sequences: true
|
||||
Reference in new issue
Block a user