Merge pull request #53 from devitools/chore/viberfy-verification #36
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: 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 }}" |