name: Release on: push: tags: - "v*" - "kks-provider-plugin-*" permissions: contents: write packages: write jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Resolve release version id: version run: | tag="${{ github.ref_name }}" if [[ "$tag" == v* ]]; then echo "app_version=${tag#v}" >> "$GITHUB_OUTPUT" echo "is_app_release=true" >> "$GITHUB_OUTPUT" else echo "is_app_release=false" >> "$GITHUB_OUTPUT" fi - name: Install Helm if: steps.version.outputs.is_app_release == 'true' uses: azure/setup-helm@v4 - name: Package Helm chart if: steps.version.outputs.is_app_release == 'true' run: | version="${{ steps.version.outputs.app_version }}" chart_dir="charts/kks-provider-plugin" sed -i "s/^version:.*/version: ${version}/" "${chart_dir}/Chart.yaml" sed -i "s/^appVersion:.*/appVersion: \"${version}\"/" "${chart_dir}/Chart.yaml" helm lint "${chart_dir}" mkdir -p dist helm package "${chart_dir}" --destination dist echo "CHART_PACKAGE=dist/kks-provider-plugin-${version}.tgz" >> "$GITHUB_ENV" - name: Build changelog id: changelog uses: mikepenz/release-changelog-builder-action@v5 with: configurationJson: | { "template": "#{{CHANGELOG}}\n\n**Full Changelog**: #{{RELEASE_DIFF}}", "categories": [ { "title": "## Features", "commits": ["^feat", "^feature"] }, { "title": "## Bug Fixes", "commits": ["^fix", "^Fix"] }, { "title": "## Other Changes", "commits": [".*"] } ] } env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create or update GitHub release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ github.ref_name }} CHANGELOG: ${{ steps.changelog.outputs.changelog }} run: | if gh release view "$TAG" >/dev/null 2>&1; then gh release edit "$TAG" --notes "$CHANGELOG" else gh release create "$TAG" --title "$TAG" --notes "$CHANGELOG" fi - name: Upload Helm chart to release if: steps.version.outputs.is_app_release == 'true' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ github.ref_name }} run: gh release upload "$TAG" "$CHART_PACKAGE" --clobber - name: Log in to GHCR if: steps.version.outputs.is_app_release == 'true' uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Push chart to OCI registry if: steps.version.outputs.is_app_release == 'true' run: | owner=$(echo "${GITHUB_REPOSITORY_OWNER}" | tr '[:upper:]' '[:lower:]') helm push "$CHART_PACKAGE" "oci://ghcr.io/${owner}/charts" - name: Make OCI chart public if: steps.version.outputs.is_app_release == 'true' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | owner=$(echo "${GITHUB_REPOSITORY_OWNER}" | tr '[:upper:]' '[:lower:]') gh api --method PATCH "/orgs/${owner}/packages/container/charts%2Fkks-provider-plugin/visibility" -f visibility=public || true