1+ name : 🚀 Release Package
2+ on :
3+ workflow_call :
4+ inputs :
5+ blockPullRequestRelease :
6+ required : false
7+ type : boolean
8+ default : true
9+ blockReleaseCommit :
10+ required : false
11+ type : boolean
12+ dryRun :
13+ required : false
14+ type : boolean
15+ secrets :
16+ githubToken :
17+ required : true
18+
19+ jobs :
20+ semantic-release :
21+ runs-on : ubuntu-latest
22+ outputs :
23+ new_release_published : ${{ steps.release.outputs.new_release_published }}
24+ new_release_version : ${{ steps.release.outputs.new_release_version }}
25+ steps :
26+ - name : 📂 Checkout
27+ uses : actions/checkout@v4
28+ with :
29+ fetch-depth : 0
30+ persist-credentials : false
31+ # Removes the git plugin from semantic release so it doesn't generate a new commit
32+ - name : ✂️ Disable semantic release commit
33+ if : ${{ inputs.blockReleaseCommit == true }}
34+ run : |
35+ cat .releaserc.json | jq 'del(.plugins[] | select(type == "array" and .[0] == "@semantic-release/git"))' .releaserc.json > .releaserc.json.tmp && mv .releaserc.json.tmp .releaserc.json
36+ - name : 🚀 Semantic Release
37+ id : release
38+ uses : cycjimmy/semantic-release-action@v4
39+ with :
40+ dry_run : ${{ inputs.dryRun }}
41+ ci : ${{ inputs.blockPullRequestRelease }}
42+ env :
43+ GH_TOKEN : ${{ secrets.githubToken }}
44+ - name : 📄 Summary
45+ run : |
46+ if [ '${{ steps.release.outputs.new_release_published }}' == 'true' ] && [ '${{ inputs.dryRun }}' == 'false' ]; then
47+ echo "ℹ️ Released version \`${{ steps.release.outputs.new_release_version }}\`" | tee -a $GITHUB_STEP_SUMMARY
48+ else
49+ echo "ℹ️ No version released" | tee -a $GITHUB_STEP_SUMMARY
50+ fi
51+
52+ package-upm :
53+ runs-on : ubuntu-latest
54+ needs : ' semantic-release'
55+ if : ${{ needs.semantic-release.outputs.new_release_published == 'true' && inputs.dryRun == false }}
56+ env :
57+ releaseVersion : ${{ needs.semantic-release.outputs.new_release_version }}
58+ steps :
59+ - name : 📂 Checkout
60+ uses : actions/checkout@v4
61+ with :
62+ fetch-depth : 0
63+ - name : 📤 Extract Path
64+ id : extract-path
65+ run : |
66+ PACKAGE_PATH=$(jq -r '.plugins[] | select(type == "array" and .[0] == "@semantic-release/npm") | .[1].pkgRoot' .releaserc.json)
67+ echo "PACKAGE_PATH=$PACKAGE_PATH" >> $GITHUB_ENV
68+ - name : ✏️ Update package.json
69+ run : |
70+ jq '.version = "${{ env.releaseVersion }}"' $PACKAGE_PATH/package.json > package.json.tmp && mv package.json.tmp $PACKAGE_PATH/package.json
71+ - name : 📦 Package UPM Branch
72+ id : package_upm
73+ run : |
74+ git config --global user.name 'semantic-release-bot'
75+ git config --global user.email 'semantic-release-bot@martynus.net'
76+ git commit -am "update package.json"
77+ git branch -d upm &> /dev/null || echo upm branch not found
78+ git subtree split -P "$PACKAGE_PATH" -b upm
79+ git checkout upm
80+ if [[ -d "Samples" ]]; then
81+ git mv Samples Samples~
82+ rm -f Samples.meta
83+ git commit -am "fix: Samples => Samples~"
84+ fi
85+ git push -f -u origin upm
86+ - name : 🏷️ Create UPM Tag
87+ run : |
88+ git tag $TAG upm
89+ git push origin --tags
90+ env :
91+ TAG : upm/${{ env.releaseVersion }}
0 commit comments