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
-
- - nuclei-operator - A Kubernetes operator that automatically scans Ingress and VirtualService resources using Nuclei security scanner
-
-
- 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
+
+ - nuclei-operator - A Kubernetes operator that automatically scans Ingress and VirtualService resources using Nuclei security scanner
+
+
+ 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