name: Release Helm Charts on: push: branches: - release paths: - '.github/workflows/helm-release.yaml' - 'charts/**' jobs: release: runs-on: ubuntu-22.04 permissions: contents: write packages: write id-token: write steps: - name: Checkout uses: actions/checkout@v6.0.3 with: fetch-depth: 0 - name: Configure Git run: | git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Setup cosign uses: sigstore/cosign-installer@v4.1.2 with: cosign-release: v2.2.3 - name: Set up Helm uses: azure/setup-helm@v5 with: version: v3.10.3 - name: Add required Helm repos for release packaging run: | helm repo add smallstep https://smallstep.github.io/helm-charts/ - name: Run chart-releaser uses: helm/chart-releaser-action@v1.7.0 env: CR_TOKEN: '${{ secrets.GITHUB_TOKEN }}' - name: Login to GitHub Container Registry uses: docker/login-action@v4.2.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Push charts to GHCR and sign # when filling gaps with previously released charts, cr would create # nothing in .cr-release-packages/, and the original globbing character # would be preserved, causing a non-zero exit. Set nullglob to fix this run: | shopt -s nullglob for pkg in .cr-release-packages/*; do if [ -z "${pkg:-}" ]; then break fi helm push "${pkg}" oci://ghcr.io/"${GITHUB_REPOSITORY_OWNER}"/helm-charts |& tee .digest file="${pkg##*/}" # extracts file name from full directory path name="${file%-*}" # extracts chart name from filename digest="$(awk -F "[, ]+" '/Digest/{print $NF}' < .digest)" cosign sign ghcr.io/"${GITHUB_REPOSITORY_OWNER}"/helm-charts/"${name}"@"${digest}" done env: COSIGN_YES: true