Skip to content

Merge pull request #50 from devitools/fix/optimistic-user-messages #33

Merge pull request #50 from devitools/fix/optimistic-user-messages

Merge pull request #50 from devitools/fix/optimistic-user-messages #33

Workflow file for this run

name: Auto Tag
on:
push:
branches: [main]
jobs:
auto-tag:
runs-on: ubuntu-latest
if: "!startsWith(github.event.head_commit.message, 'chore(release)') && !startsWith(github.event.head_commit.message, 'chore(homebrew)')"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.PAT }}
- name: Check if apps changed
id: check_changes
run: |
LATEST_TAG=$(git tag --sort=-v:refname | grep '^v' | head -1)
# Check if any app-related files changed since last tag
if [ -z "$LATEST_TAG" ]; then
CHANGED_FILES=$(git ls-tree -r --name-only HEAD)
else
CHANGED_FILES=$(git diff --name-only "${LATEST_TAG}..HEAD")
fi
if echo "$CHANGED_FILES" | grep -qE '^(apps/|shared/|scripts/set-version\.sh|\.github/workflows/(release|release-tauri|auto-tag)\.yml)'; then
echo "apps_changed=true" >> "$GITHUB_OUTPUT"
else
echo "apps_changed=false" >> "$GITHUB_OUTPUT"
echo "Only documentation/website changes detected, skipping release"
fi
- name: Calculate next version
id: version
if: steps.check_changes.outputs.apps_changed == 'true'
run: |
LATEST_TAG=$(git tag --sort=-v:refname | grep '^v' | head -1)
[ -z "$LATEST_TAG" ] && LATEST_TAG="v0.0.0"
echo "latest=$LATEST_TAG"
VERSION="${LATEST_TAG#v}"
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
COMMITS=$(git log "${LATEST_TAG}..HEAD" --pretty=format:"%s" 2>/dev/null)
if [ -z "$COMMITS" ]; then
echo "No commits since $LATEST_TAG"
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
BUMP="none"
while IFS= read -r msg; do
if echo "$msg" | grep -qiE "^[a-z]+(\(.+\))?!:|BREAKING CHANGE"; then
BUMP="major"
break
elif echo "$msg" | grep -qE "^feat(\(.+\))?:"; then
[ "$BUMP" != "major" ] && BUMP="minor"
elif echo "$msg" | grep -qE "^(fix|perf|refactor|build)(\(.+\))?:"; then
[ "$BUMP" = "none" ] && BUMP="patch"
fi
done <<< "$COMMITS"
if [ "$BUMP" = "none" ]; then
echo "No releasable commits found"
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
case "$BUMP" in
major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;;
minor) MINOR=$((MINOR + 1)); PATCH=0 ;;
patch) PATCH=$((PATCH + 1)) ;;
esac
NEXT="${MAJOR}.${MINOR}.${PATCH}"
{
echo "next=$NEXT"
echo "tag=v$NEXT"
echo "skip=false"
} >> "$GITHUB_OUTPUT"
echo "Bump: $BUMP ($LATEST_TAG -> v$NEXT)"
- name: Create and push tag
if: steps.check_changes.outputs.apps_changed == 'true' && steps.version.outputs.skip != 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "${{ steps.version.outputs.tag }}" -m "${{ steps.version.outputs.tag }}"
git push origin "${{ steps.version.outputs.tag }}"