name: Release on: push: tags: - 'v*' permissions: contents: write jobs: release: name: Build & Release runs-on: ubuntu-latest strategy: matrix: goos: [linux] goarch: [amd64, arm64] steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.21' cache-dependency-path: server/go.sum - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '18' cache: 'npm' cache-dependency-path: web/package-lock.json - name: Build frontend working-directory: web run: | npm ci npm run build - name: Build backend working-directory: server env: GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} CGO_ENABLED: 1 run: | go build -ldflags "-s -w -X main.version=${{ github.ref_name }}" -o ../backupx-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/backupx - name: Package release run: | mkdir -p release cp backupx-${{ matrix.goos }}-${{ matrix.goarch }} release/ cp -r web/dist release/web cp server/config.example.yaml release/ cp deploy/install.sh release/ 2>/dev/null || true cd release && tar czf ../backupx-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz . - name: Upload Release Asset uses: softprops/action-gh-release@v2 with: files: backupx-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz generate_release_notes: true