feat(github-actions): enhance script to handle initial release tagging #15
This file contains 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: Auto Tagging And Release After Tests | |
on: | |
push: | |
branches: | |
- main | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
fetch-depth: 0 # Fetch all history | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.22.5 | |
- name: Run tests | |
run: | | |
go test -race -v ./... | |
tagging: | |
needs: [ test ] | |
if: success() | |
runs-on: ubuntu-latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
fetch-depth: 0 # Fetch all history | |
- name: Get latest release | |
id: get_latest_release | |
run: | | |
LATEST_RELEASE=$(curl -s -H "Authorization: token ${{ env.GITHUB_TOKEN }}" https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name') | |
echo "LATEST_RELEASE=$LATEST_RELEASE" >> $GITHUB_OUTPUT | |
- name: Determine next version | |
id: determine_next_version | |
run: | | |
chmod +x ./scripts/git/commit_tag.sh | |
LATEST_TAG=$(./scripts/git/commit_tag.sh) | |
echo "LATEST_TAG=$LATEST_TAG" | |
if [[ -z "$LATEST_TAG" ]]; then | |
NEXT_TAG="v0.0.1" | |
else | |
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_OUTPUT | |
# Remove 'v' prefix using bash parameter expansion | |
LATEST_TAG=${LATEST_TAG#v} | |
IFS='.' read -r -a VERSION_ARRAY <<< "$LATEST_TAG" | |
MAJOR=${VERSION_ARRAY[0]} | |
MINOR=${VERSION_ARRAY[1]} | |
PATCH=${VERSION_ARRAY[2]} | |
(( PATCH++ )) | |
NEXT_TAG=v$MAJOR.$MINOR.$PATCH | |
echo "NEXT_TAG=$NEXT_TAG" | |
echo "NEXT_TAG=$NEXT_TAG" >> $GITHUB_OUTPUT | |
fi | |
- name: Generate changelog | |
id: generate_changelog | |
run: | | |
LATEST_RELEASE=${{ steps.get_latest_release.outputs.LATEST_RELEASE }} | |
if [[ -n "$LATEST_RELEASE" ]]; then | |
# If there's no previous release, get only the current commit's log | |
CHANGELOG=$(git show --pretty=format:"* %s (%an, %ar)") | |
else | |
# Get all submission information since the last release | |
CHANGELOG=$(git log "$LATEST_RELEASE"..HEAD --pretty=format:"* %s (%an, %ar)") | |
fi | |
echo "CHANGELOG=$CHANGELOG" >> $GITHUB_OUTPUT | |
- name: Create release | |
if: ${{ steps.determine_next_version.outputs.NEXT_TAG }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: ${{ steps.determine_next_version.outputs.NEXT_TAG }} | |
body: | | |
# Changelog | |
${{ steps.generate_changelog.outputs.CHANGELOG }} | |
draft: false | |
prerelease: false |