Skip to content

first commit

first commit #1

Workflow file for this run

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[@]}"