name: Release on: push: tags: - 'v*' permissions: contents: write jobs: check-changes: runs-on: ubuntu-latest outputs: should_release: ${{ steps.check.outputs.should_release }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Check for release-worthy changes id: check run: | # Get previous tag PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -z "$PREV_TAG" ]; then echo "should_release=true" >> $GITHUB_OUTPUT exit 0 fi # Check if any non-doc files changed CHANGES=$(git diff --name-only $PREV_TAG HEAD | grep -v -E '(\.md$|^docs/|^\.github/workflows/|^LICENSE$)' || true) if [ -n "$CHANGES" ]; then echo "should_release=true" >> $GITHUB_OUTPUT else echo "should_release=false" >> $GITHUB_OUTPUT echo "Only docs/CI changes detected, skipping release" fi lint: needs: check-changes if: needs.check-changes.outputs.should_release == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version: stable - uses: actions/setup-node@v6 with: node-version: '24' - name: Install WebKitGTK 6.0 dependencies run: | sudo apt-get update sudo apt-get install -y libwebkitgtk-6.0-dev libgtk-4-dev - name: Build frontend assets run: make build-frontend - name: Run golangci-lint uses: golangci/golangci-lint-action@v7 with: version: v2.6.2 test: needs: check-changes if: needs.check-changes.outputs.should_release == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version: stable - uses: actions/setup-node@v6 with: node-version: '24' - name: Install WebKitGTK 6.0 dependencies run: | sudo apt-get update sudo apt-get install -y libwebkitgtk-6.0-dev libgtk-4-dev - name: Build frontend assets run: make build-frontend - name: Run tests run: CGO_ENABLED=1 go test -tags=webkit_cgo -v ./... release: needs: [check-changes, lint, test] if: needs.check-changes.outputs.should_release == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: actions/setup-go@v6 with: go-version: stable - name: Install WebKitGTK 6.0 dependencies run: | sudo apt-get update sudo apt-get install -y libwebkitgtk-6.0-dev libgtk-4-dev - uses: actions/setup-node@v6 with: node-version: '24' - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser version: "~> v2" args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}