1+ name : Release
2+ defaults :
3+ run :
4+ shell : bash
5+
6+ permissions :
7+ contents : write
8+ pull-requests : write
9+
10+ on :
11+ workflow_run :
12+ workflows : [CI]
13+ types : [completed]
14+ branches : [main]
15+
16+ jobs :
17+ check_commit :
18+ name : Check Commit
19+ runs-on : ubuntu-latest
20+ outputs :
21+ IS_RELEASE : ${{ steps.check_msg.outputs.IS_RELEASE }}
22+ LATEST_COMMIT_MSG : ${{ steps.check_msg.outputs.LATEST_COMMIT_MSG }}
23+ steps :
24+ - name : Check out Git repository
25+ uses : actions/checkout@v4
26+
27+ - name : Check latest commit message
28+ id : check_msg
29+ run : |
30+ LATEST_COMMIT_MSG=$(git log -1 --pretty=%B | cat)
31+
32+ if [[ ${LATEST_COMMIT_MSG} == *"[release]"* ]]; then
33+ echo "release message found - continuing with the release"
34+ IS_RELEASE="true"
35+ else
36+ echo "release message found - skipping..."
37+ IS_RELEASE="false"
38+ fi
39+
40+ echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
41+ echo "LATEST_COMMIT_MSG=\"${LATEST_COMMIT_MSG}\"" >> $GITHUB_OUTPUT
42+
43+ release :
44+ name : Release
45+ needs : [check_commit]
46+ runs-on : ubuntu-latest
47+ if : ${{ needs.check_commit.outputs.IS_RELEASE == 'true' }}
48+ env :
49+ IS_RELEASE : ${{ needs.check_commit.outputs.IS_RELEASE }}
50+ LATEST_COMMIT_MSG : ${{ needs.check_commit.outputs.LATEST_COMMIT_MSG }}
51+ steps :
52+ - name : Check out Git repository
53+ uses : actions/checkout@v4
54+ with :
55+ fetch-depth : 0
56+
57+ - name : Download artifact
58+ id : download-artifact
59+ uses : dawidd6/action-download-artifact@v6
60+ with :
61+ github_token : ${{secrets.GITHUB_TOKEN}}
62+ workflow : ci.yml
63+ workflow_conclusion : success
64+ name : wasm-file
65+
66+ - name : Bump version
67+ run : |
68+ set -e
69+
70+ echo "Extract the latest tag version"
71+ LATEST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
72+
73+ BUMP_TYPE="patch" # Initialize the default version bump type to patch
74+ if [[ "${LATEST_COMMIT_MSG}" == *"[major]"* ]]; then
75+ BUMP_TYPE="major"
76+ elif [[ "${LATEST_COMMIT_MSG}" == *"[minor]"* ]]; then
77+ BUMP_TYPE="minor"
78+ fi
79+
80+ case ${BUMP_TYPE} in
81+ "major")
82+ NEW_TAG=$(echo "${LATEST_TAG}" | awk -F. '{OFS="."; $1="v" substr($1,2)+1; $2="0"; $3="0"; print}')
83+ ;;
84+ "minor")
85+ NEW_TAG=$(echo "${LATEST_TAG}" | awk -F. '{OFS="."; $2=$2+1; $3="0"; print}')
86+ ;;
87+ "patch")
88+ NEW_TAG=$(echo "${LATEST_TAG}" | awk -F. '{OFS="."; $3=$3+1; print}')
89+ ;;
90+ esac
91+
92+ echo "LATEST_TAG=${LATEST_TAG}" >> $GITHUB_ENV
93+ echo "NEW_TAG=${NEW_TAG}" >> $GITHUB_ENV
94+
95+ - name : Push tag
96+ run : |
97+ NEW_TAG=${{ env.NEW_TAG }}
98+
99+ git tag ${NEW_TAG}
100+ git push origin ${NEW_TAG}
101+
102+ - name : Calculate sha256
103+ run : |
104+ SHA256_HASH=$(sha256sum plugin.wasm | awk '{ print $1 }')
105+ echo "SHA256_HASH=${SHA256_HASH}" >> $GITHUB_ENV
106+ echo "The calculated sha256 is $SHA256_HASH"
107+
108+ - name : Create release draft
109+ env :
110+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
111+ run : |
112+ set -e
113+
114+ LATEST_TAG=${{ env.LATEST_TAG }}
115+ NEW_TAG=${{ env.NEW_TAG }}
116+ SHA256_HASH=${{ env.SHA256_HASH }}
117+
118+ CHANGE_LOG=$(git --no-pager log ${LATEST_TAG}..HEAD --pretty=format:'%h - %an, %ar : %s')
119+
120+ # Define the release notes template
121+ RELEASE_NOTES=$(cat <<EOF
122+ ## Release version ${NEW_TAG}
123+ Release sha256 is \`${SHA256_HASH}\`
124+
125+ ## Configuration example
126+ \`\`\`yaml
127+ version: '2'
128+ plugins:
129+ - name: csharp
130+ wasm:
131+ url: https://github.com/DaredevilOSS/sqlc-gen-csharp/releases/download/${NEW_TAG}/sqlc-gen-csharp.wasm
132+ sha256: ${SHA256_HASH}
133+ \`\`\`
134+ ## Changelog
135+ ${CHANGE_LOG}
136+
137+ ## Contributors
138+ * @SockworkOrange
139+ EOF
140+ )
141+
142+ # change file name to convention
143+ mv plugin.wasm sqlc-gen-csharp.wasm
144+
145+ # Create a draft release
146+ gh release create ${NEW_TAG} sqlc-gen-csharp.wasm \
147+ --draft \
148+ --title "${NEW_TAG}" \
149+ --notes "${RELEASE_NOTES}"
0 commit comments