From 519ed32de3803a049747e2834fd51370c716866c Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Fri, 12 Dec 2025 19:49:36 +0100 Subject: [PATCH] ci: fix release pipeline so it auto bumps versions --- .github/workflows/gh-pages.yml | 131 ------------------- .github/workflows/release.yml | 230 +++++++++++++++++++++++---------- 2 files changed, 165 insertions(+), 196 deletions(-) delete mode 100644 .github/workflows/gh-pages.yml diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml deleted file mode 100644 index 3392041..0000000 --- a/.github/workflows/gh-pages.yml +++ /dev/null @@ -1,131 +0,0 @@ -name: GitHub Pages - -on: - push: - branches: - - main - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Helm - uses: azure/setup-helm@v4 - with: - version: v3.14.0 - - - name: Setup Pages - uses: actions/configure-pages@v5 - - - name: Create Helm packages directory - run: mkdir -p _site - - - name: Package Helm chart - run: | - helm package charts/nuclei-operator -d _site - - - name: Generate Helm repo index - run: | - helm repo index _site --url https://morten-olsen.github.io/homelab-nuclei-operator - - - name: Create index.html - run: | - cat > _site/index.html << 'EOF' - - - - - - Nuclei Operator Helm Repository - - - -

🔬 Nuclei Operator Helm Repository

-

- This is the Helm chart repository for the - Nuclei Operator. -

- -

Usage

-

Add this repository to Helm:

-
helm repo add nuclei-operator https://morten-olsen.github.io/homelab-nuclei-operator
-          helm repo update
- -

Install the chart:

-
helm install nuclei-operator nuclei-operator/nuclei-operator \
-            --namespace nuclei-operator-system \
-            --create-namespace
- -

Available Charts

- - -

Links

- - - - EOF - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: _site - - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51359f8..fda43f5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,7 +5,7 @@ on: branches: - main tags: - - 'v*' + - "v*" pull_request: branches: - main @@ -15,9 +15,38 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: + # Determine version and create tag on main branch pushes (not tag pushes) + version: + name: Determine Version + runs-on: ubuntu-latest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + permissions: + contents: write + outputs: + new_tag: ${{ steps.tag_version.outputs.new_tag }} + new_version: ${{ steps.tag_version.outputs.new_version }} + changelog: ${{ steps.tag_version.outputs.changelog }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Bump version and push tag + id: tag_version + uses: mathieudutour/github-tag-action@v6.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + default_bump: patch + release_branches: main + tag_prefix: v + + # Build and push container image build-and-push: name: Build and Push Container Image runs-on: ubuntu-latest + needs: [version] + if: always() && (needs.version.result == 'success' || github.event_name == 'pull_request' || startsWith(github.ref, 'refs/tags/v')) permissions: contents: read packages: write @@ -52,6 +81,7 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=sha + type=raw,value=${{ needs.version.outputs.new_version }},enable=${{ needs.version.outputs.new_version != '' }} - name: Build and push Docker image uses: docker/build-push-action@v6 @@ -64,65 +94,12 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - release-helm-chart: - name: Release Helm Chart - runs-on: ubuntu-latest - needs: build-and-push - if: startsWith(github.ref, 'refs/tags/v') - permissions: - contents: write - pages: write - id-token: write - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - 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: Install Helm - uses: azure/setup-helm@v4 - with: - version: v3.14.0 - - - name: Extract version from tag - id: version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - - - name: Update Chart version and appVersion - run: | - sed -i "s/^version:.*/version: ${{ steps.version.outputs.VERSION }}/" charts/nuclei-operator/Chart.yaml - sed -i "s/^appVersion:.*/appVersion: \"${{ steps.version.outputs.VERSION }}\"/" charts/nuclei-operator/Chart.yaml - - - name: Package Helm chart - run: | - helm package charts/nuclei-operator -d .helm-packages - - - name: Checkout gh-pages branch - uses: actions/checkout@v4 - with: - ref: gh-pages - path: gh-pages - - - name: Update Helm repository - run: | - cp .helm-packages/*.tgz gh-pages/ - cd gh-pages - helm repo index . --url https://morten-olsen.github.io/homelab-nuclei-operator - git add . - git commit -m "Release Helm chart ${{ steps.version.outputs.VERSION }}" - git push - + # Create GitHub Release create-release: name: Create GitHub Release runs-on: ubuntu-latest - needs: build-and-push - if: startsWith(github.ref, 'refs/tags/v') + needs: [version, build-and-push] + if: needs.version.result == 'success' && needs.version.outputs.new_tag != '' permissions: contents: write @@ -140,26 +117,149 @@ jobs: curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash sudo mv kustomize /usr/local/bin/ - - name: Extract version from tag - id: version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - - name: Generate install manifests run: | - cd config/manager && kustomize edit set image controller=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.VERSION }} + cd config/manager && kustomize edit set image controller=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.new_version }} cd ../.. kustomize build config/default > install.yaml - name: Package Helm chart run: | - sed -i "s/^version:.*/version: ${{ steps.version.outputs.VERSION }}/" charts/nuclei-operator/Chart.yaml - sed -i "s/^appVersion:.*/appVersion: \"${{ steps.version.outputs.VERSION }}\"/" charts/nuclei-operator/Chart.yaml + sed -i "s/^version:.*/version: ${{ needs.version.outputs.new_version }}/" charts/nuclei-operator/Chart.yaml + sed -i "s/^appVersion:.*/appVersion: \"${{ needs.version.outputs.new_version }}\"/" charts/nuclei-operator/Chart.yaml helm package charts/nuclei-operator - name: Create Release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ needs.version.outputs.new_tag }} + name: Release ${{ needs.version.outputs.new_tag }} + body: ${{ needs.version.outputs.changelog }} generate_release_notes: true files: | install.yaml - nuclei-operator-*.tgz \ No newline at end of file + nuclei-operator-*.tgz + + # Update Helm repository on GitHub Pages + update-helm-repo: + name: Update Helm Repository + runs-on: ubuntu-latest + needs: [version, build-and-push] + if: needs.version.result == 'success' && needs.version.outputs.new_tag != '' + permissions: + contents: read + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + concurrency: + group: "pages" + cancel-in-progress: false + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Helm + uses: azure/setup-helm@v4 + with: + version: v3.14.0 + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Create Helm packages directory + run: mkdir -p _site + + - name: Update Chart version + run: | + sed -i "s/^version:.*/version: ${{ needs.version.outputs.new_version }}/" charts/nuclei-operator/Chart.yaml + sed -i "s/^appVersion:.*/appVersion: \"${{ needs.version.outputs.new_version }}\"/" charts/nuclei-operator/Chart.yaml + + - name: Package Helm chart + run: | + helm package charts/nuclei-operator -d _site + + - name: Generate Helm repo index + run: | + helm repo index _site --url https://morten-olsen.github.io/homelab-nuclei-operator + + - name: Create index.html + run: | + cat > _site/index.html << 'EOF' + + + + + + Nuclei Operator Helm Repository + + + +

🔬 Nuclei Operator Helm Repository

+

+ This is the Helm chart repository for the + Nuclei Operator. +

+ +

Usage

+

Add this repository to Helm:

+
helm repo add nuclei-operator https://morten-olsen.github.io/homelab-nuclei-operator
+          helm repo update
+ +

Install the chart:

+
helm install nuclei-operator nuclei-operator/nuclei-operator \
+            --namespace nuclei-operator-system \
+            --create-namespace
+ +

Available Charts

+ + +

Links

+ + + + EOF + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: _site + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4