name: release on: push: tags: - "v*" workflow_dispatch: inputs: tag: description: "Tag to (re)release (e.g. v0.1.0)" required: true type: string permissions: contents: write jobs: goreleaser: runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v6 with: fetch-depth: 0 - name: Setup Go uses: actions/setup-go@v6 with: go-version-file: go.mod cache: true - name: Stash GoReleaser config run: cp .goreleaser.yaml /tmp/.goreleaser.yaml - name: Validate release tag if: ${{ github.event_name == 'workflow_dispatch' }} env: RELEASE_TAG: ${{ inputs.tag }} run: | if ! echo "$RELEASE_TAG" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then echo "::error::Invalid tag format: $RELEASE_TAG" exit 1 fi - name: Checkout release tag if: ${{ github.event_name == 'workflow_dispatch' }} env: RELEASE_TAG: ${{ inputs.tag }} run: git checkout "$RELEASE_TAG" - name: GoReleaser uses: goreleaser/goreleaser-action@v7 with: distribution: goreleaser version: latest args: release --clean --config /tmp/.goreleaser.yaml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}