Skip to content

Generate documentation #584

Generate documentation

Generate documentation #584

name: "helm-charts/test"
on: pull_request
jobs:
generate-charts:
runs-on: ubuntu-latest
name: Generate Charts
outputs:
deprecated: ${{ steps.deprecated.outputs.charts }}
maintained: ${{ steps.maintained.outputs.charts }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: |
charts/
- name: Get values files
uses: tj-actions/glob@v22
id: charts
with:
separator: ","
files: |
charts/${{ matrix.chart }}/**/Chart.yaml
- name: Deprecated Charts
id: deprecated
run: |
printf "charts=%s" $(echo "${{ steps.charts.outputs.paths }}" | docker run -i -q --rm -v $(pwd):$(pwd) -w $(pwd) ghcr.io/wyrihaximusnet/php:8.4-nts-alpine-root php -r 'echo str_replace(["charts", "Chart.yaml", "/", "\\"], "", json_encode(array_values(array_filter(explode(",", trim(fgets(STDIN))), static fn (string $path): bool => str_contains(file_get_contents($path), "deprecated: true") && !str_contains($path, "commons"))))) . "\n";') >> $GITHUB_OUTPUT
- name: Maintained Charts
id: maintained
run: |
printf "charts=%s" $(echo "${{ steps.charts.outputs.paths }}" | docker run -i -q --rm -v $(pwd):$(pwd) -w $(pwd) ghcr.io/wyrihaximusnet/php:8.4-nts-alpine-root php -r 'echo str_replace(["charts", "Chart.yaml", "/", "\\"], "", json_encode(array_values(array_filter(explode(",", trim(fgets(STDIN))), static fn (string $path): bool => !str_contains(file_get_contents($path), "deprecated: true") && !str_contains($path, "commons"))))) . "\n";') >> $GITHUB_OUTPUT
- name: Show chart lists
run: |
echo "Deprecated:"
echo ${{ steps.deprecated.outputs.charts }}
echo "Maintained:"
echo ${{ steps.maintained.outputs.charts }}
ensure-readme-is-up-to-date:
name: Ensure ${{ matrix.chart }} README is up to date
needs:
- generate-charts
strategy:
fail-fast: false
matrix:
chart: ${{ fromJson(needs.generate-charts.outputs.maintained) }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Move current README
run: |
mv charts/${{ matrix.chart }}/README.md charts/${{ matrix.chart }}/README.current.md
- name: Generate README.md
run: |
make generate
- name: Check that the files are the exact same
uses: LouisBrunner/[email protected]
with:
old: charts/${{ matrix.chart }}/README.current.md
new: charts/${{ matrix.chart }}/README.md
mode: strict
tolerance: same
token: ${{ secrets.GITHUB_TOKEN }}
notify_check: true
notify_issue: true
validate-values-schema:
runs-on: ubuntu-latest
name: Validate values schema json
needs:
- generate-charts
strategy:
fail-fast: false
matrix:
chart: ${{ fromJson(needs.generate-charts.outputs.maintained) }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: |
charts/${{ matrix.chart }}/
- name: Get values files
uses: tj-actions/glob@v22
id: valueFiles
with:
separator: ","
files: |
charts/${{ matrix.chart }}/**/*values.yaml
- name: Validate values schema json
uses: losisin/helm-values-schema-json-action@v1
with:
input: ${{ steps.valueFiles.outputs.paths }}
output: charts/${{ matrix.chart }}/values.schema.json
fail-on-diff: true
lint:
name: Lint
runs-on: ubuntu-latest
needs:
- validate-values-schema
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Fetch history
run: git fetch --prune --unshallow
- name: Install Chart Tester
uses: helm/[email protected]
- name: Add WyriHaximusNet repo
run: helm repo add WyriHaximusNet https://helm.wyrihaximus.net/
- name: Lint charts
id: lint
run: ct lint --all
test:
name: Test on Kubernetes v${{ matrix.k8s }}
runs-on: ubuntu-latest
needs:
- generate-charts
- lint
strategy:
fail-fast: false
matrix:
k8s:
- "1.23"
- "1.24"
- "1.25"
- "1.26"
- "1.27"
- "1.28"
- "1.29"
- "1.30"
- "1.31"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Fetch history
run: git fetch --prune --unshallow
- name: Create kind cluster
uses: helm/[email protected]
with:
node_image: "kindest/node:v${{ matrix.k8s }}.0"
config: etc/kind.yaml
- run: kubectl get nodes --show-labels=true
- run: kubectl get pods -A
- run: kubectl get svc -A
- name: Install PiHole
uses: evryfs/[email protected]
id: helm-pihole
with:
repo: https://mojo2600.github.io/pihole-kubernetes/
chart: pihole
helm: 'helm' # optional, default value is 'helm'
args: '--wait --atomic --timeout 13m' #optional, default value is '--wait --timeout 2m' in order to wait for the chart-install to stabilize into ready state
- run: kubectl get pods -A
- run: kubectl get svc -A
- name: Create PiHole HostName
id: pihole
run: |
echo ::set-output name=hostname::$(echo "${{ steps.helm-pihole.outputs.releaseName }}-web.default" | base64)
- name: Add WyriHaximusNet repo
run: helm repo add WyriHaximusNet https://helm.wyrihaximus.net/
- name: Install Chart Tester
uses: helm/[email protected]
- name: Run List Changed
id: list-changed
run: |
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }})
if [[ -n "$changed" ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Prepare charts
run: |
echo -e " PIHOLE_HOSTNAME: \"${{ steps.pihole.outputs.hostname }}\"\r\n" >> charts/pi-hole-exporter/library-ci/secret.yaml
cp charts/commons/library-ci/*.yaml charts/commons/templates/
cp charts/cron-jobs/library-ci/*.yaml charts/cron-jobs/templates/
cp charts/pi-hole-exporter/library-ci/*.yaml charts/pi-hole-exporter/templates/
sed -i 's/library/application/g' charts/commons/Chart.yaml
sed -i 's/library/application/g' charts/cron-jobs/Chart.yaml
echo '${{ needs.generate-charts.outputs.deprecated }}' >> charts.json
cat charts.json
jq -c '.[]' charts.json | while read chart; do
rm -Rfv $(echo "charts/${chart}" | docker run -i -q --rm ghcr.io/wyrihaximusnet/php:8.4-nts-alpine-root php -r 'echo str_replace("\"", "", fgets(STDIN));')
done
rm -f charts.json
- run: ls -lasth charts/
- run: kubectl get pods -A
- run: kubectl get svc -A
- name: Test Changed Charts
if: steps.list-changed.outputs.changed == 'true'
run: ct install
- name: Test All Charts
if: steps.list-changed.outputs.changed != 'true'
run: ct install --all
- run: kubectl get pods -A
- run: kubectl get svc -A