name: Release on: push: tags: - 'v*.*.*' permissions: contents: write packages: write jobs: build-frontend: name: Build Frontend runs-on: ubuntu-latest steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '24.11.1' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install Dependencies working-directory: frontend run: npm ci - name: Build working-directory: frontend run: npm run build - name: Archive Frontend working-directory: frontend run: tar -czf ../frontend-dist.tar.gz dist/ - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: frontend-dist path: frontend-dist.tar.gz build-backend: name: Build Backend runs-on: ubuntu-latest strategy: matrix: goos: [linux] goarch: [amd64, arm64] steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: '1.25.4' - name: Build working-directory: backend env: GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} CGO_ENABLED: 1 run: | # Install dependencies for CGO (sqlite) if [ "${{ matrix.goarch }}" = "arm64" ]; then sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu export CC=aarch64-linux-gnu-gcc fi go build -ldflags "-s -w -X github.com/Wikid82/CaddyProxyManagerPlus/backend/internal/version.Version=${{ github.ref_name }}" -o ../cpmp-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/api - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: backend-${{ matrix.goos }}-${{ matrix.goarch }} path: cpmp-${{ matrix.goos }}-${{ matrix.goarch }} build-caddy: name: Build Caddy runs-on: ubuntu-latest strategy: matrix: goos: [linux] goarch: [amd64, arm64] steps: - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: '1.25.4' - name: Install xcaddy run: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest - name: Build Caddy env: GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} run: | xcaddy build v2.9.1 \ --replace github.com/quic-go/quic-go=github.com/quic-go/quic-go@v0.49.1 \ --replace golang.org/x/crypto=golang.org/x/crypto@v0.35.0 \ --output caddy-${{ matrix.goos }}-${{ matrix.goarch }} - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: caddy-${{ matrix.goos }}-${{ matrix.goarch }} path: caddy-${{ matrix.goos }}-${{ matrix.goarch }} create-release: name: Create Release needs: [build-frontend, build-backend, build-caddy] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: path: artifacts - name: Display structure of downloaded files run: ls -R artifacts - name: Create GitHub Release uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2 with: files: | artifacts/frontend-dist/frontend-dist.tar.gz artifacts/backend-linux-amd64/cpmp-linux-amd64 artifacts/backend-linux-arm64/cpmp-linux-arm64 artifacts/caddy-linux-amd64/caddy-linux-amd64 artifacts/caddy-linux-arm64/caddy-linux-arm64 generate_release_notes: true prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }} token: ${{ secrets.CPMP_TOKEN }} build-and-publish: needs: create-release uses: ./.github/workflows/docker-publish.yml # Reusable workflow present; path validated secrets: inherit