1+ name : release_publish
2+
3+ on :
4+ push :
5+ tags :
6+ - ' v[0-9]+.[0-9]+.[0-9]+' # tag-pattern for regular releases
7+ - ' v[0-9]+.[0-9]+.[0-9]+-*' # tag-pattern for pre-releases
8+ workflow_dispatch : # Allow manual triggering of the workflow
9+
10+ concurrency :
11+ group : ${{ github.workflow }}-${{ github.ref }}
12+ cancel-in-progress : true
13+
14+ jobs :
15+ release :
16+ permissions :
17+ contents : write # Required to creating release
18+ id-token : write # Required for authentication using OIDC
19+ runs-on : ubuntu-latest
20+ steps :
21+ - name : 📚 Checkout branch
22+ uses : actions/checkout@v4
23+ with :
24+ fetch-depth : 0
25+ token : ${{ secrets.BOT_GITHUB_API_TOKEN }}
26+
27+ # Set up the Dart SDK and provision the OIDC token used for publishing.
28+ - name : 🎯 Setup Dart
29+ uses : dart-lang/setup-dart@v1
30+
31+ - name : 🐦 Install Flutter
32+ uses : subosito/flutter-action@v2
33+
34+ - name : 📦 Install Tools
35+ run : flutter pub global activate melos
36+
37+ - name : 🔧 Bootstrap Workspace
38+ run : melos bootstrap --verbose
39+
40+ - name : 🌵 Dry Run
41+ run : melos run lint:pub
42+
43+ - name : 📢 Release to pub.dev
44+ run : melos run release:pub
45+
46+ - name : 🏷️ Extract Version Info
47+ id : extract_version
48+ shell : bash
49+ run : |
50+ set -euo pipefail
51+
52+ tag_name="${{ github.ref_name }}"
53+ echo "📦 Tag: $tag_name"
54+
55+ # Check if this is a pre-release (contains hyphen after version)
56+ is_prerelease=$([[ $tag_name == *-* ]] && echo true || echo false)
57+ echo "ℹ️ Pre-release: $is_prerelease"
58+
59+ echo "tag=$tag_name" >> "$GITHUB_OUTPUT"
60+ echo "prerelease=$is_prerelease" >> "$GITHUB_OUTPUT"
61+
62+ - name : 🚀 Create GitHub Release
63+ uses : softprops/action-gh-release@v2
64+ with :
65+ generate_release_notes : true
66+ tag_name : ${{ steps.extract_version.outputs.tag }}
67+ prerelease : ${{ steps.extract_version.outputs.prerelease }}
68+ token : ${{ secrets.BOT_GITHUB_API_TOKEN }}
0 commit comments