7171
7272 runs-on : macos-13
7373
74+ outputs :
75+ app-version : ${{ steps.set-outputs.outputs.app-version }}
76+ app-name : ${{ steps.set-outputs.outputs.app-name }}
77+
7478 env :
7579 release-type : ${{ github.event.inputs.release-type || inputs.release-type }}
76- create-dmg : ${{ github.event.inputs.create-dmg || inputs.create-dmg }}
7780 asana-task-url : ${{ github.event.inputs.asana-task-url || inputs.asana-task-url }}
7881
7982 steps :
@@ -142,20 +145,11 @@ jobs:
142145 continue-on-error : true
143146 run : brew install xcbeautify
144147
145- - name : Install create-dmg
146- if : ${{ env.create-dmg == true || env.asana-task-url }}
147- run : |
148- brew install create-dmg
149- echo "create_dmg_arg=-d" >> $GITHUB_ENV
150-
151- - name : Set Asana task URL
152- if : env.asana-task-url
153- run : echo "asana_task_url_arg=-a ${{ env.asana-task-url }}" >> $GITHUB_ENV
154-
155148 - name : Select Xcode
156149 run : sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer
157150
158151 - name : Archive and notarize the app
152+ id : archive
159153 env :
160154 APPLE_API_KEY_BASE64 : ${{ secrets.APPLE_API_KEY_BASE64 }}
161155 APPLE_API_KEY_ID : ${{ secrets.APPLE_API_KEY_ID }}
@@ -166,46 +160,134 @@ jobs:
166160 export APPLE_API_KEY_PATH="$RUNNER_TEMP/apple_api_key.pem"
167161 echo -n "$APPLE_API_KEY_BASE64" | base64 --decode -o $APPLE_API_KEY_PATH
168162
169- ./scripts/archive.sh ${{ env.release-type }} \
170- ${{ env.create_dmg_arg }} \
171- ${{ env.asana_task_url_arg }}
163+ ./scripts/archive.sh ${{ env.release-type }}
164+
165+ - name : Set app name and version
166+ id : set-outputs
167+ run : |
168+ echo "app-version=${{ env.app-version }}" >> $GITHUB_OUTPUT
169+ echo "app-name=${{ env.app-name }}" >> $GITHUB_OUTPUT
172170
173171 - name : Upload app artifact
174172 uses : actions/upload-artifact@v3
175173 with :
176- name : DuckDuckGo-${{ env.release-type }}-${{ env.app_version }}.app
177- path : ${{ github.workspace }}/release/DuckDuckGo-${{ env.app_version }}.zip
174+ name : DuckDuckGo-${{ env.release-type }}-${{ env.app-version }}.app
175+ path : ${{ github.workspace }}/release/DuckDuckGo-${{ env.app-version }}.zip
178176
179177 - name : Upload dSYMs artifact
180178 uses : actions/upload-artifact@v3
181179 with :
182- name : DuckDuckGo-${{ env.release-type }}-dSYM-${{ env.app_version }}
183- path : ${{ github.workspace }}/release/DuckDuckGo-${{ env.app_version }}-dSYM.zip
180+ name : DuckDuckGo-${{ env.release-type }}-dSYM-${{ env.app-version }}
181+ path : ${{ github.workspace }}/release/DuckDuckGo-${{ env.app-version }}-dSYM.zip
182+
183+ - name : Upload dSYMs to Asana
184+ if : env.asana-task-url
185+ uses : ./.github/actions/asana-upload
186+ with :
187+ access-token : ${{ secrets.ASANA_ACCESS_TOKEN }}
188+ file-name : ${{ github.workspace }}/release/DuckDuckGo-${{ env.app-version }}-dSYM.zip
189+ task-url : ${{ env.asana-task-url }}
190+
191+ create-dmg :
192+
193+ name : Create DMG
194+ needs : export-notarized-app
195+ if : ${{ github.event.inputs.create-dmg == 'true' || inputs.create-dmg == 'true' }}
196+
197+ # use macos-12 for creating DMGs as macos-13 beta runners can't run AppleScript: https://app.asana.com/0/0/1204523592790998/f
198+ runs-on : macos-12
199+
200+ env :
201+ app-version : ${{ needs.export-notarized-app.outputs.app-version }}
202+ app-name : ${{ needs.export-notarized-app.outputs.app-name }}
203+ asana-task-url : ${{ github.event.inputs.asana-task-url || inputs.asana-task-url }}
204+ release-type : ${{ github.event.inputs.release-type || inputs.release-type }}
205+
206+ steps :
207+
208+ - name : Fetch app bundle
209+ uses : actions/download-artifact@v3
210+ with :
211+ name : DuckDuckGo-${{ env.release-type }}-${{ env.app-version }}.app
212+ path : ${{ github.workspace }}/dmg
213+
214+ - name : Extract app bundle
215+ run : |
216+ ditto -xk DuckDuckGo-${{ env.app-version }}.zip .
217+ rm -f DuckDuckGo-${{ env.app-version }}.zip
218+ working-directory : ${{ github.workspace }}/dmg
219+
220+ - name : Install create-dmg
221+ run : brew install create-dmg
222+
223+ - name : Create DMG
224+ env :
225+ GH_TOKEN : ${{ github.token }}
226+ run : |
227+ curl -fLSs $(gh api https://api.github.com/repos/${{ github.repository }}/contents/scripts/assets/dmg-background.png?ref=${{ github.ref }} --jq .download_url) \
228+ --output dmg-background.png
229+ create-dmg --volname "${{ env.app-name }}" \
230+ --icon "${{ env.app-name }}.app" 140 160 \
231+ --background "dmg-background.png" \
232+ --window-size 600 400 \
233+ --icon-size 120 \
234+ --app-drop-link 430 160 "duckduckgo-${{ env.app-version }}.dmg" \
235+ "dmg"
184236
185237 - name : Upload DMG artifact
186- if : env.create-dmg || env.asana-task-url
187238 uses : actions/upload-artifact@v3
188239 with :
189- name : DuckDuckGo-${{ env.release-type }}-${{ env.app_version }}.dmg
190- path : ${{ github.workspace }}/release/ duckduckgo*-${{ env.app_version }}.dmg
240+ name : DuckDuckGo-${{ env.release-type }}-${{ env.app-version }}.dmg
241+ path : ${{ github.workspace }}/duckduckgo*-${{ env.app-version }}.dmg
191242
192- - name : Send Mattermost message
243+ - name : Fetch Upload to Asana action
244+ if : env.asana-task-url
193245 env :
194- WORKFLOW_URL : https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
195- ASANA_TASK_URL : ${{ env.asana-task-url }}
196- RELEASE_TYPE : ${{ env.release-type }}
246+ GH_TOKEN : ${{ github.token }}
197247 run : |
198- export MM_USER_HANDLE=$(base64 -d <<< ${{ secrets.MM_HANDLES_BASE64 }} | jq ".${{ github.actor }}" | tr -d '"')
248+ mkdir -p "${{ github.workspace }}/.github/actions/asana-upload"
249+ curl -fLSs $(gh api https://api.github.com/repos/${{ github.repository }}/contents/.github/actions/asana-upload/action.yml?ref=${{ github.ref }} --jq .download_url) \
250+ --output "${{ github.workspace }}/.github/actions/asana-upload/action.yml"
199251
200- if [[ -z "${MM_USER_HANDLE}" ]]; then
201- echo "Mattermost user handle not known for ${{ github.actor }}, skipping sending message"
202- else
252+ - name : Upload DMG to Asana
253+ if : env.asana-task-url
254+ uses : ./.github/actions/asana-upload
255+ with :
256+ access-token : ${{ secrets.ASANA_ACCESS_TOKEN }}
257+ file-name : ${{ github.workspace }}/duckduckgo-${{ env.app-version }}.dmg
258+ task-url : ${{ env.asana-task-url }}
203259
204- if [[ -n "${ASANA_TASK_URL}" ]]; then
205- export ASANA_LINK=" | [:asana: Asana task](${ASANA_TASK_URL})"
206- fi
260+ mattermost :
207261
208- curl -s -H 'Content-type: application/json' \
209- -d "$(envsubst < ./scripts/assets/release-mm-template.json)" \
210- ${{ secrets.MM_WEBHOOK_URL }}
211- fi
262+ name : Send Mattermost message
263+
264+ needs : [export-notarized-app, create-dmg]
265+ if : ${{ always() && (needs.export-notarized-app.result == 'success') && (needs.create-dmg.result == 'success' || needs.create-dmg.result == 'skipped') }}
266+
267+ runs-on : ubuntu-latest
268+
269+ steps :
270+ - name : Send Mattermost message
271+ env :
272+ ASANA_TASK_URL : ${{ github.event.inputs.asana-task-url || inputs.asana-task-url }}
273+ GH_TOKEN : ${{ github.token }}
274+ RELEASE_TYPE : ${{ github.event.inputs.release-type || inputs.release-type }}
275+ WORKFLOW_URL : https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
276+ run : |
277+ curl -fLSs $(gh api https://api.github.com/repos/${{ github.repository }}/contents/scripts/assets/release-mm-template.json?ref=${{ github.ref }} --jq .download_url) \
278+ --output message-template.json
279+
280+ export MM_USER_HANDLE=$(base64 -d <<< ${{ secrets.MM_HANDLES_BASE64 }} | jq ".${{ github.actor }}" | tr -d '"')
281+
282+ if [[ -z "${MM_USER_HANDLE}" ]]; then
283+ echo "Mattermost user handle not known for ${{ github.actor }}, skipping sending message"
284+ else
285+
286+ if [[ -n "${ASANA_TASK_URL}" ]]; then
287+ export ASANA_LINK=" | [:asana: Asana task](${ASANA_TASK_URL})"
288+ fi
289+
290+ curl -s -H 'Content-type: application/json' \
291+ -d "$(envsubst < message-template.json)" \
292+ ${{ secrets.MM_WEBHOOK_URL }}
293+ fi
0 commit comments