diff --git a/.github/workflows/go-release.yaml b/.github/workflows/go-release.yaml new file mode 100644 index 0000000..74d18ee --- /dev/null +++ b/.github/workflows/go-release.yaml @@ -0,0 +1,100 @@ +name: Go Release + +on: + workflow_call: + inputs: + go-version: + description: "Go version to use" + required: false + type: string + default: ">=1.21" + semver-config: + description: "Path to semver config file" + required: false + type: string + default: "semver.yaml" + secrets: + homebrew-tap-token: + description: "Token for Homebrew tap repository" + required: false + +jobs: + test: + name: Test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ inputs.go-version }} + + - name: Run tests + run: go test -race -v ./... + + version: + name: Calculate Version + needs: test + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version_formatted.outputs.version }} + version_tag: ${{ steps.version_formatted.outputs.version_tag }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Calculate version + id: semver + uses: lukaszraczylo/semver-generator@v1 + with: + config_file: ${{ inputs.semver-config }} + repository_local: true + + - name: Format version + id: version_formatted + run: | + VERSION="${{ steps.semver.outputs.semantic_version }}" + echo "version=${VERSION}" >> $GITHUB_OUTPUT + echo "version_tag=v${VERSION}" >> $GITHUB_OUTPUT + + - name: Print version + run: | + echo "Version: ${{ steps.version_formatted.outputs.version }}" + echo "Version tag: ${{ steps.version_formatted.outputs.version_tag }}" + + release: + name: Release + needs: version + if: needs.version.outputs.version_tag != '' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ inputs.go-version }} + + - name: Create and push tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a ${{ needs.version.outputs.version_tag }} -m "Release ${{ needs.version.outputs.version_tag }}" + git push origin ${{ needs.version.outputs.version_tag }} + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + distribution: goreleaser + version: "~> v2" + args: release --clean + env: + GITHUB_TOKEN: ${{ github.token }} + HOMEBREW_TAP_TOKEN: ${{ secrets.homebrew-tap-token }}