name: CI on: push: branches: [main, master, dev] tags: ["v*"] pull_request: branches: [main, master] env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: test: name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.7' cache: true - name: Run tests run: make test build: name: Build runs-on: ubuntu-latest needs: test strategy: matrix: include: - goos: linux goarch: amd64 - goos: linux goarch: arm64 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.25.7' cache: true - name: Build run: | if [ "${{ matrix.goarch }}" = "amd64" ]; then make build-linux else make build-linux-arm64 fi - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: xboard-node-${{ matrix.goos }}-${{ matrix.goarch }} path: xboard-node-${{ matrix.goos }}-${{ matrix.goarch }} build-docker: name: Build & Push Docker Image runs-on: ubuntu-latest needs: test permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true platforms: linux/amd64,linux/arm64 tags: | ghcr.io/cedar2025/xboard-node:latest ghcr.io/cedar2025/xboard-node:${{ github.sha }} release: name: Release runs-on: ubuntu-latest needs: build if: startsWith(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: merge-multiple: true - name: Release uses: softprops/action-gh-release@v2 with: files: | xboard-node-linux-amd64 xboard-node-linux-arm64 draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}