Files
unifi-network-operator/.github/workflows/release.yaml
Vegard Engen 599bf7c3a9
All checks were successful
Build project / build (push) Successful in 2m28s
Disable integration tests in CI workflows
Add SKIP_INTEGRATION_TESTS environment variable to skip tests that
require spinning up temporary Kubernetes clusters (envtest).

Changes:
- Add skip check to internal/controller/suite_test.go
- Add skip check to test/e2e/e2e_suite_test.go
- Set SKIP_INTEGRATION_TESTS=true in all GitHub Actions workflows
- Remove envtest setup steps from workflows (no longer needed)
- Tests now run quickly in CI without cluster dependencies

When SKIP_INTEGRATION_TESTS=true:
- Controller integration tests are skipped
- E2E tests are skipped
- Only unit tests (if any) will run

This significantly speeds up CI and avoids envtest-related failures.
2025-10-26 14:43:46 +01:00

226 lines
6.9 KiB
YAML

name: Release
on:
push:
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
tag:
description: 'Tag to release (e.g., v1.0.0)'
required: true
type: string
permissions:
contents: write
packages: write
pages: write
id-token: write
jobs:
# Build and push multi-arch Docker images
build-images:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
cache: true
- name: Run tests
run: go test -v ./...
env:
SKIP_INTEGRATION_TESTS: "true"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.tag }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "version_no_v=${VERSION#v}" >> $GITHUB_OUTPUT
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
ghcr.io/${{ github.repository }}:${{ steps.version.outputs.version }}
ghcr.io/${{ github.repository }}:${{ steps.version.outputs.version_no_v }}
ghcr.io/${{ github.repository }}:latest
labels: |
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.version=${{ steps.version.outputs.version }}
cache-from: type=gha
cache-to: type=gha,mode=max
# Package and release Helm chart
release-chart:
needs: build-images
runs-on: ubuntu-latest
steps:
- name: Checkout
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
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.tag }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
VERSION_NO_V="${VERSION#v}"
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "version_no_v=${VERSION_NO_V}" >> $GITHUB_OUTPUT
- name: Update Chart.yaml version and appVersion
run: |
sed -i "s/^version:.*/version: ${{ steps.version.outputs.version_no_v }}/" helm/unifi-network-operator/Chart.yaml
sed -i "s/^appVersion:.*/appVersion: \"${{ steps.version.outputs.version }}\"/" helm/unifi-network-operator/Chart.yaml
- name: Update values.yaml image tag
run: |
sed -i "s/tag: \".*\"/tag: \"${{ steps.version.outputs.version }}\"/" helm/unifi-network-operator/values.yaml
sed -i "s|repository: .*|repository: ghcr.io/${{ github.repository }}|" helm/unifi-network-operator/values.yaml
- name: Package Helm chart
run: |
mkdir -p .cr-release-packages
helm package helm/unifi-network-operator -d .cr-release-packages
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
with:
charts_dir: helm
skip_packaging: true
config: .github/cr.yaml
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- name: Upload Helm chart as artifact
uses: actions/upload-artifact@v4
with:
name: helm-chart
path: .cr-release-packages/*.tgz
retention-days: 90
# Create GitHub Release
create-release:
needs: [build-images, release-chart]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.tag }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
echo "version=${VERSION}" >> $GITHUB_OUTPUT
- name: Download Helm chart artifact
uses: actions/download-artifact@v4
with:
name: helm-chart
path: ./artifacts
- name: Generate release notes
id: notes
run: |
cat > release_notes.md << 'EOF'
## UniFi Network Operator ${{ steps.version.outputs.version }}
### Installation
#### Using Helm
```bash
helm repo add unifi-network-operator https://vegardengen.github.io/unifi-network-operator
helm repo update
helm install unifi-network-operator unifi-network-operator/unifi-network-operator \
--namespace unifi-network-operator-system \
--create-namespace \
--set unifi.url="https://your-unifi-controller:8443" \
--set unifi.password="your-password"
```
#### Using Docker
```bash
docker pull ghcr.io/${{ github.repository }}:${{ steps.version.outputs.version }}
```
### What's Changed
See the full changelog for details of changes in this release.
### Container Images
- `ghcr.io/${{ github.repository }}:${{ steps.version.outputs.version }}`
- Available for `linux/amd64` and `linux/arm64`
### Helm Chart
- Chart version: Automatically generated
- App version: ${{ steps.version.outputs.version }}
- Repository: https://vegardengen.github.io/unifi-network-operator
EOF
cat release_notes.md
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ steps.version.outputs.version }}
name: Release ${{ steps.version.outputs.version }}
body_path: release_notes.md
draft: false
prerelease: ${{ contains(steps.version.outputs.version, 'alpha') || contains(steps.version.outputs.version, 'beta') || contains(steps.version.outputs.version, 'rc') }}
files: |
./artifacts/*.tgz
token: ${{ secrets.GITHUB_TOKEN }}