name: Build & Publish Binaries on: push: branches: - feature-* - main tags: - 'v*' jobs: lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: "1.25.5" - name: Run golangci-lint uses: golangci/golangci-lint-action@v7 with: args: --timeout=5m test: name: Test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.25.5' - name: Run tests run: go test -cover ./... build: name: Build runs-on: ubuntu-latest needs: [lint, test] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.25.5' - name: Build binaries (Linux & Windows) run: make build-all - name: List built binaries run: ls -lh ./bin/ - name: Collect tag name if: startsWith(github.ref, 'refs/tags/') id: vars run: echo "tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT" - name: Create release if: startsWith(github.ref, 'refs/tags/') id: create_release uses: actions/create-release@v1 with: tag_name: ${{ steps.vars.outputs.tag }} release_name: Release ${{ steps.vars.outputs.tag }} draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.CI_PIPELINE }} - name: Upload release binaries if: startsWith(github.ref, 'refs/tags/') env: TOKEN: ${{ secrets.CI_PIPELINE }} URL: ${{ steps.create_release.outputs.upload_url }} run: | set -eo pipefail for FILE in ./bin/*; do NAME=$(basename "$FILE") echo "šŸ”¼ Uploading $NAME ..." curl -sS -X POST -H "Authorization: token $TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @"$FILE" \ "$URL?name=$NAME" \ -w "\n→ HTTP %{http_code} for $NAME\n" done