first commit #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| # v0.1.0 predates prerelease classification; this behavior applies to later releases. | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: read | |
| jobs: | |
| validate: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| prerelease: ${{ steps.classify.outputs.prerelease }} | |
| steps: | |
| - name: Validate tag | |
| shell: bash | |
| run: | | |
| semver_identifier='(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)' | |
| semver="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(-${semver_identifier}(\\.${semver_identifier})*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$" | |
| if [[ ! "$GITHUB_REF_NAME" =~ $semver ]]; then | |
| echo "Invalid release tag: $GITHUB_REF_NAME" >&2 | |
| exit 1 | |
| fi | |
| - name: Classify release | |
| id: classify | |
| shell: bash | |
| run: | | |
| is_prerelease() { | |
| local version_without_build="${1%%+*}" | |
| [[ "$version_without_build" == *-* ]] | |
| } | |
| if is_prerelease "v0.2.0"; then | |
| echo "Stable version classified as a prerelease" >&2 | |
| exit 1 | |
| fi | |
| if ! is_prerelease "v0.2.0-beta.1"; then | |
| echo "Prerelease version classified as stable" >&2 | |
| exit 1 | |
| fi | |
| prerelease=false | |
| if is_prerelease "$GITHUB_REF_NAME"; then | |
| prerelease=true | |
| fi | |
| echo "prerelease=$prerelease" >> "$GITHUB_OUTPUT" | |
| - name: Check out repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: "1.26" | |
| cache: true | |
| - name: Check formatting | |
| run: test -z "$(gofmt -l -- *.go examples/*/*.go)" | |
| - name: Test | |
| run: go test ./... | |
| - name: Vet | |
| run: go vet ./... | |
| release: | |
| needs: validate | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Create GitHub Release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| IS_PRERELEASE: ${{ needs.validate.outputs.prerelease }} | |
| shell: bash | |
| run: | | |
| args=(--repo "$GITHUB_REPOSITORY" --verify-tag --generate-notes) | |
| if [[ "$IS_PRERELEASE" == "true" ]]; then | |
| args+=(--prerelease) | |
| fi | |
| gh release create "$GITHUB_REF_NAME" "${args[@]}" |