@@ -19,13 +19,12 @@ jobs:
1919
2020 steps :
2121 - name : Checkout
22- uses : actions/checkout@v4
22+ uses : actions/checkout@v6
2323
2424 - name : Setup Java
25- id : setup-java
26- uses : actions/setup-java@v4
25+ uses : actions/setup-java@v5
2726 with :
28- distribution : temurin
27+ distribution : ' temurin'
2928 java-version : ' 17'
3029
3130 - name : Cache Gradle
3534 run : |
3635 echo "${{ secrets.KEYSTORE_B64 }}" | base64 -d > app/keystore.jks
3736
38- - name : Build
39- env :
40- GITHUB_ACTOR : ${{ github.actor }}
41- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
42- KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
43- KEYSTORE_ENTRY_ALIAS : ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
44- KEYSTORE_ENTRY_PASSWORD : ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
45- run : ./gradlew assembleRelease
46-
4737 - name : Setup Node.js
48- uses : actions/setup-node@v4
38+ uses : actions/setup-node@v6
4939 with :
5040 node-version : " lts/*"
5141 cache : npm
@@ -61,25 +51,49 @@ jobs:
6151 fingerprint : ${{ vars.GPG_FINGERPRINT }}
6252
6353 - name : Release
54+ uses : cycjimmy/semantic-release-action@v5
6455 id : release
65- run : |
66- echo "NEW_TAG=$(npx multi-semantic-release --tag-format 'v${version}' | tee | grep 'Created tag ' | sed -E 's/.*Created tag ([^ ]+).*/\1/')" >> $GITHUB_OUTPUT
6756 env :
6857 GITHUB_ACTOR : ${{ github.actor }}
6958 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7059 KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
7160 KEYSTORE_ENTRY_ALIAS : ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
7261 KEYSTORE_ENTRY_PASSWORD : ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
7362
63+ - name : Copy release files to legacy path
64+ # TODO: Eventually delete this logic
65+ if : steps.release.outputs.new_release_published == 'true'
66+ run : |
67+ git config user.name "semantic-release-bot"
68+ git config user.email "semantic-release-bot@martynus.net"
69+
70+ # Make sure we're rebasing onto the latest remote branch
71+ git fetch origin
72+
73+ # Hard reset to latest remote branch
74+ git checkout ${GITHUB_REF_NAME}
75+ git reset --hard origin/${GITHUB_REF_NAME}
76+
77+ cp app-release.json app/app-release.json
78+ cp CHANGELOG.md app/CHANGELOG.md
79+
80+ git add app/app-release.json
81+ git add app/CHANGELOG.md
82+
83+ git commit -m "chore: Update legacy release files"
84+
85+ # Push explicitly to the branch that triggered the workflow
86+ git push origin HEAD:${GITHUB_REF_NAME}
87+
7488 - name : Attest
75- if : steps.release.outputs.NEW_TAG != ' '
89+ if : steps.release.outputs.new_release_published == 'true '
7690 uses : actions/attest-build-provenance@v2
7791 with :
78- subject-name : ' Morphe Manager ${{ steps.release.outputs.NEW_TAG }}'
92+ subject-name : ' Morphe Manager ${{ steps.release.outputs.new_release_git_tag }}'
7993 subject-path : app/build/outputs/apk/release/morphe-manager*.apk
8094
8195 - name : Generate website deploy token
82- if : steps.release.outputs.NEW_TAG != ' '
96+ if : steps.release.outputs.new_release_published == 'true '
8397 id : app-token
8498 uses : actions/create-github-app-token@v1
8599 with :
88102 owner : MorpheApp
89103
90104 - name : Trigger website deploy
91- if : steps.release.outputs.NEW_TAG != ' '
105+ if : steps.release.outputs.new_release_published == 'true '
92106 uses : actions/github-script@v7
93107 with :
94108 github-token : ${{ steps.app-token.outputs.token }}
@@ -99,92 +113,22 @@ jobs:
99113 event_type: 'trigger-deploy'
100114 })
101115
102- - name : Purge jsDelivr Cache
103- if : steps.release.outputs.NEW_TAG != ''
104- run : |
105- set -e
106-
107- # ------------------------------
108- # Build the list of paths to purge
109- # ------------------------------
110- PATHS=(
111- "/gh/${GITHUB_REPOSITORY}@${GITHUB_REF_NAME}/app/app-release.json"
112- )
113-
114- # Include dev path if main branch
115- if [ "${GITHUB_REF_NAME}" = "main" ]; then
116- PATHS+=("/gh/${GITHUB_REPOSITORY}@dev/app/app-release.json")
117- fi
118-
119- # Convert PATHS array to JSON array string
120- JSON_PATHS=$(printf '%s\n' "${PATHS[@]}" | jq -R . | jq -s .)
121-
122- echo "Purging jsDelivr cache for paths: ${PATHS[*]}"
123-
124- # ------------------------------
125- # Send initial purge request
126- # ------------------------------
127- RESPONSE=$(curl -s -X POST https://purge.jsdelivr.net/ \
128- -H 'Content-Type: application/json' \
129- -d "{\"path\": $JSON_PATHS}")
130-
131- PURGE_ID=$(echo "$RESPONSE" | jq -r '.id')
132- if [ -z "$PURGE_ID" ] || [ "$PURGE_ID" = "null" ]; then
133- echo "❌ Failed to create purge request: $RESPONSE"
134- exit 1
135- fi
136- echo "Purge ID: $PURGE_ID"
137-
138- # ------------------------------
139- # Poll until finished or failed
140- # ------------------------------
141- while true; do
142- STATUS=$(curl -s "https://purge.jsdelivr.net/status/$PURGE_ID")
143- STATE=$(echo "$STATUS" | jq -r '.status')
144- echo "Current purge status: $STATE"
145-
146- if [ "$STATE" = "finished" ]; then
147- # Check if any paths were throttled
148- THROTTLED_RESET=$(echo "$STATUS" | jq '[.paths[] | select(.throttled==true) | .throttlingReset] | max // 0')
149- if [ "$THROTTLED_RESET" -gt 0 ]; then
150- echo "⚠️ Some paths were throttled. Waiting $THROTTLED_RESET seconds before retry..."
151- sleep $((THROTTLED_RESET + 1))
152- # Resend purge request for throttled paths
153- THROTTLED_PATHS=$(echo "$STATUS" | jq -r '[.paths | to_entries[] | select(.value.throttled==true) | .key] | @json')
154- echo "Retrying purge for paths: $THROTTLED_PATHS"
155- RESPONSE=$(curl -s -X POST https://purge.jsdelivr.net/ \
156- -H 'Content-Type: application/json' \
157- -d "{\"path\": $THROTTLED_PATHS}")
158- PURGE_ID=$(echo "$RESPONSE" | jq -r '.id')
159- continue
160- fi
161- echo "✅ Purge finished successfully for all paths"
162- break
163- elif [ "$STATE" = "failed" ]; then
164- echo "❌ Purge failed: $STATUS"
165- exit 1
166- else
167- # Still pending
168- sleep 2
169- fi
170- done
171-
172116 - name : Wait before sending FCM
173- if : steps.release.outputs.NEW_TAG != ' '
174- run : sleep 300
117+ if : steps.release.outputs.new_release_published == 'true '
118+ run : sleep 480
175119
176120 - name : Setup Python for FCM
177- if : steps.release.outputs.NEW_TAG != ' '
121+ if : steps.release.outputs.new_release_published == 'true '
178122 uses : actions/setup-python@v5
179123 with :
180124 python-version : ' 3.12'
181125
182126 - name : Send FCM push notification
183- if : steps.release.outputs.NEW_TAG != ' '
127+ if : steps.release.outputs.new_release_published == 'true '
184128 env :
185129 FCM_PROJECT_ID : ${{ secrets.FCM_PROJECT_ID }}
186130 FCM_SERVICE_ACCOUNT_JSON : ${{ secrets.FCM_SERVICE_ACCOUNT_JSON }}
187- NEW_TAG : ${{ steps.release.outputs.NEW_TAG }}
131+ NEW_TAG : ${{ steps.release.outputs.new_release_git_tag }}
188132 BRANCH : ${{ github.ref_name }}
189133 run : |
190134 pip install cryptography
0 commit comments