name: Release on: push: tags: - "v*" jobs: release: name: Build & Release runs-on: ubuntu-latest permissions: contents: write strategy: matrix: include: - goos: linux goarch: amd64 suffix: "" - goos: linux goarch: arm64 suffix: "" - goos: darwin goarch: amd64 suffix: "" - goos: darwin goarch: arm64 suffix: "" - goos: windows goarch: amd64 suffix: ".exe" steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "1.25" - uses: actions/setup-node@v4 with: node-version: "20" cache: npm cache-dependency-path: web/package-lock.json - name: Build web frontend run: | cd web && npm install --legacy-peer-deps && npm run build - name: Copy web assets run: | rm -rf internal/web/dist cp -r web/build internal/web/dist - name: Build binary env: CGO_ENABLED: "0" GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} run: | go build -ldflags "-s -w" -o synapbus-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }} ./cmd/synapbus/ - uses: actions/upload-artifact@v4 with: name: synapbus-${{ matrix.goos }}-${{ matrix.goarch }} path: synapbus-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }} publish: name: Publish Release needs: release runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/download-artifact@v4 with: path: artifacts merge-multiple: true - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: generate_release_notes: true files: artifacts/* docker: name: Docker needs: release runs-on: ubuntu-latest permissions: packages: write steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" cache: npm cache-dependency-path: web/package-lock.json - name: Build web frontend run: | cd web && npm install --legacy-peer-deps && npm run build - name: Copy web assets run: | rm -rf internal/web/dist cp -r web/build internal/web/dist - uses: docker/setup-qemu-action@v3 - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract version tag id: meta uses: docker/metadata-action@v5 with: images: ghcr.io/smart-mcp-proxy/synapbus tags: | type=semver,pattern={{version}} type=raw,value=latest - uses: docker/build-push-action@v6 with: context: . push: true platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max