diff --git a/.github/actions/asana-add-comment/templates/appcast-failed-hotfix.yml b/.github/actions/asana-add-comment/templates/appcast-failed-hotfix.yml
new file mode 100644
index 0000000000..0b5a558f09
--- /dev/null
+++ b/.github/actions/asana-add-comment/templates/appcast-failed-hotfix.yml
@@ -0,0 +1,9 @@
+data:
+ html_text: |
+
+ [ACTION NEEDED] Publishing ${TAG} hotfix release to Sparkle failed
+ , please proceed with generating appcast2.xml and uploading files to S3 from your local machine, according to instructions.
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
\ No newline at end of file
diff --git a/.github/actions/asana-add-comment/templates/appcast-failed.yml b/.github/actions/asana-add-comment/templates/appcast-failed-internal.yml
similarity index 100%
rename from .github/actions/asana-add-comment/templates/appcast-failed.yml
rename to .github/actions/asana-add-comment/templates/appcast-failed-internal.yml
diff --git a/.github/actions/asana-add-comment/templates/appcast-failed-public.yml b/.github/actions/asana-add-comment/templates/appcast-failed-public.yml
new file mode 100644
index 0000000000..5f3b09e29e
--- /dev/null
+++ b/.github/actions/asana-add-comment/templates/appcast-failed-public.yml
@@ -0,0 +1,9 @@
+data:
+ html_text: |
+
+ [ACTION NEEDED] Publishing ${TAG} release to Sparkle failed
+ , please proceed with generating appcast2.xml and uploading files to S3 from your local machine, according to instructions.
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
\ No newline at end of file
diff --git a/.github/actions/asana-add-comment/templates/public-release-complete.yml b/.github/actions/asana-add-comment/templates/public-release-complete.yml
new file mode 100644
index 0000000000..afd902977a
--- /dev/null
+++ b/.github/actions/asana-add-comment/templates/public-release-complete.yml
@@ -0,0 +1,8 @@
+data:
+ html_text: |
+
+ Build ${TAG} is now available publicly through Sparkle and TestFlight.
+
+
+ π₯ DMG download link
+
diff --git a/.github/actions/asana-add-comment/templates/validate-check-for-updates-public.yml b/.github/actions/asana-add-comment/templates/validate-check-for-updates-public.yml
new file mode 100644
index 0000000000..d27c1cae3c
--- /dev/null
+++ b/.github/actions/asana-add-comment/templates/validate-check-for-updates-public.yml
@@ -0,0 +1,11 @@
+data:
+ html_text: |
+
+ Build ${TAG} is available publicly through Sparkle π
+
+ - π New appcast file has been generated and uploaded to S3, together with binary delta files.
+ - π , please proceed by following instructions in which concludes the release process.
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
diff --git a/.github/actions/asana-create-action-item/templates/appcast-failed-hotfix.yml b/.github/actions/asana-create-action-item/templates/appcast-failed-hotfix.yml
new file mode 100644
index 0000000000..2242993e4c
--- /dev/null
+++ b/.github/actions/asana-create-action-item/templates/appcast-failed-hotfix.yml
@@ -0,0 +1,36 @@
+data:
+ name: Generate appcast2.xml for ${TAG} hotfix release and upload assets to S3
+ assignee: "${ASSIGNEE_ID}"
+ html_notes: |
+
+ Publishing ${TAG} hotfix release failed in CI. Please follow the steps to generate the appcast file and upload files to S3 from your local machine.
+
+
+ - Create a new file called
release-notes.txt
on your disk.
+
+ - Add each release note as a separate line and don't add bullet points (β’) βΒ the script will add them automatically.
+
+ - Run
appcastManager
:
+
+ ./scripts/appcast_manager/appcastManager.swift --release-hotfix-to-public-channel --dmg ~/Downloads/${DMG_NAME} --release-notes release-notes.txt
+
+ - Verify that the new build is in the appcast file with the latest release notes and no internal channel tag. The phased rollout tag should not be present:
+
+ <sparkle:phasedRolloutInterval>43200</sparkle:phasedRolloutInterval>
+
+ - Run
upload_to_s3.sh
script:
+
+ ./scripts/upload_to_s3/upload_to_s3.sh --run --overwrite-duckduckgo-dmg ${VERSION}
+
+
+ When done, please verify that "Check for Updates" works correctly:
+
+ - Launch a debug version of the app with an old version number.
+ - Make sure you're not identified as an internal user in the app.
+ - Go to Main Menu β DuckDuckGo β Check for Updates...
+ - Verify that you're being offered to update to ${TAG}.
+ - Verify that the update works.
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
diff --git a/.github/actions/asana-create-action-item/templates/appcast-failed.yml b/.github/actions/asana-create-action-item/templates/appcast-failed-internal.yml
similarity index 96%
rename from .github/actions/asana-create-action-item/templates/appcast-failed.yml
rename to .github/actions/asana-create-action-item/templates/appcast-failed-internal.yml
index 668083791a..fcd12b1b14 100644
--- a/.github/actions/asana-create-action-item/templates/appcast-failed.yml
+++ b/.github/actions/asana-create-action-item/templates/appcast-failed-internal.yml
@@ -3,7 +3,7 @@ data:
assignee: "${ASSIGNEE_ID}"
html_notes: |
- Publishing internal release ${TAG} failed in CI. Please follow the steps to generate the appcast file and upload files to S3 from your local machine.
+ Publishing ${TAG} internal release failed in CI. Please follow the steps to generate the appcast file and upload files to S3 from your local machine.
- Download the DMG for ${TAG} release.
diff --git a/.github/actions/asana-create-action-item/templates/appcast-failed-public.yml b/.github/actions/asana-create-action-item/templates/appcast-failed-public.yml
new file mode 100644
index 0000000000..0cbe7cb851
--- /dev/null
+++ b/.github/actions/asana-create-action-item/templates/appcast-failed-public.yml
@@ -0,0 +1,36 @@
+data:
+ name: Generate appcast2.xml for ${TAG} public release and upload assets to S3
+ assignee: "${ASSIGNEE_ID}"
+ html_notes: |
+
+ Publishing ${TAG} release failed in CI. Please follow the steps to generate the appcast file and upload files to S3 from your local machine.
+
+
+ - Create a new file called
release-notes.txt
on your disk.
+
+ - Add each release note as a separate line and don't add bullet points (β’) βΒ the script will add them automatically.
+
+ - Run
appcastManager
:
+
+ ./scripts/appcast_manager/appcastManager.swift --release-to-public-channel --version ${VERSION} --release-notes release-notes.txt
+
+ - Verify that the new build is in the appcast file with the latest release notes, the phased rollout tag (below) and no internal channel tag:
+
+ <sparkle:phasedRolloutInterval>43200</sparkle:phasedRolloutInterval>
+
+ - Run
upload_to_s3.sh
script:
+
+ ./scripts/upload_to_s3/upload_to_s3.sh --run --overwrite-duckduckgo-dmg ${VERSION}
+
+
+ When done, please verify that "Check for Updates" works correctly:
+
+ - Launch a debug version of the app with an old version number.
+ - Make sure you're not identified as an internal user in the app.
+ - Go to Main Menu β DuckDuckGo β Check for Updates...
+ - Verify that you're being offered to update to ${TAG}.
+ - Verify that the update works.
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
diff --git a/.github/actions/asana-create-action-item/templates/validate-check-for-updates-public.yml b/.github/actions/asana-create-action-item/templates/validate-check-for-updates-public.yml
new file mode 100644
index 0000000000..e973fadd81
--- /dev/null
+++ b/.github/actions/asana-create-action-item/templates/validate-check-for-updates-public.yml
@@ -0,0 +1,41 @@
+data:
+ name: Validate that 'Check For Updates' upgrades to ${TAG}
+ assignee: "${ASSIGNEE_ID}"
+ html_notes: |
+
+ Build ${TAG} has been released publicly via Sparkle π
+ Please verify that "Check for Updates" works correctly:
+
+ - Launch a debug version of the app with an old version number.
+ - Make sure you're not identified as an internal user in the app.
+ - Go to Main Menu β DuckDuckGo β Check for Updates...
+ - Verify that you're being offered to update to ${TAG}.
+ - Verify that the update works.
+
+ π¨In case "Check for Updates" is broken
+ You can restore previous version of the appcast2.xml:
+
+ - Download the ${OLD_APPCAST_NAME} file attached to this task.
+ - Log in to AWS session:
+
+ aws --profile ddg-macos sso login
+
+ - Overwrite appcast2.xml with the old version:
+
+ aws --profile ddg-macos s3 cp ${OLD_APPCAST_NAME} s3://${RELEASE_BUCKET_NAME}/${RELEASE_BUCKET_PREFIX}/appcast2.xml --acl public-read
+
+
+
+
+ Summary of automated changes
+ Changes to appcast2.xml
+ See the attached ${APPCAST_PATCH_NAME} file.
+ Release notes
+ See the attached ${RELEASE_NOTES_FILE} file for release notes extracted automatically from the release task description.
+ List of files uploaded to S3
+
+ ${FILES_UPLOADED}
+
+
+ π Workflow URL: ${WORKFLOW_URL}.
+
diff --git a/.github/workflows/publish_dmg_release.yml b/.github/workflows/publish_dmg_release.yml
index 8ccbe6905b..c31f3473fe 100644
--- a/.github/workflows/publish_dmg_release.yml
+++ b/.github/workflows/publish_dmg_release.yml
@@ -11,12 +11,20 @@ on:
description: "Tag to publish"
required: true
type: string
+ release-type:
+ description: "Release type"
+ required: true
+ type: choice
+ options:
+ - internal
+ - public
+ - hotfix
jobs:
publish-to-sparkle:
- name: Publish internal release to Sparkle
+ name: Publish a release to Sparkle
runs-on: macos-13-xlarge
timeout-minutes: 10
@@ -37,13 +45,16 @@ jobs:
echo "::error::The provided tag ($tag) has incorrect format (attempted to match ${tag_regex})."
exit 1
fi
- echo "tag-in-filename=${tag//-/.}" >> $GITHUB_OUTPUT
+ echo "release-version=${tag//-/.}" >> $GITHUB_OUTPUT
- name: Check out the code
uses: actions/checkout@v4
with:
submodules: recursive
+ - name: Select Xcode
+ run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer
+
- name: Set up Sparkle tools
env:
SPARKLE_URL: https://github.com/sparkle-project/Sparkle/releases/download/${{ vars.SPARKLE_VERSION }}/Sparkle-${{ vars.SPARKLE_VERSION }}.tar.xz
@@ -53,8 +64,9 @@ jobs:
- name: Fetch DMG
id: fetch-dmg
+ if: ${{ github.event.inputs.release-type != 'public' }}
env:
- DMG_NAME: duckduckgo-${{ steps.verify-tag.outputs.tag-in-filename }}.dmg
+ DMG_NAME: duckduckgo-${{ steps.verify-tag.outputs.release-version }}.dmg
run: |
DMG_URL="${{ vars.DMG_URL_ROOT }}${DMG_NAME}"
curl -fLSs -o "$DMG_NAME" "$DMG_URL"
@@ -78,25 +90,44 @@ jobs:
| ./scripts/extract_release_notes.sh > release_notes.txt
echo "RELEASE_NOTES_FILE=release_notes.txt" >> $GITHUB_ENV
- - name: Select Xcode
- run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer
-
- name: Generate appcast
id: appcast
env:
DMG_PATH: ${{ steps.fetch-dmg.outputs.dmg-path }}
SPARKLE_PRIVATE_KEY: ${{ secrets.SPARKLE_PRIVATE_KEY }}
+ RELEASE_TYPE: ${{ github.event.inputs.release-type }}
+ VERSION: ${{ steps.verify-tag.outputs.release-version }}
run: |
echo -n "$SPARKLE_PRIVATE_KEY" > sparkle_private_key
chmod 600 sparkle_private_key
- ./scripts/appcast_manager/appcastManager.swift \
- --release-to-internal-channel \
- --dmg ${DMG_PATH} \
- --release-notes release_notes.txt \
- --key sparkle_private_key
+ case "$RELEASE_TYPE" in
+ "internal")
+ ./scripts/appcast_manager/appcastManager.swift \
+ --release-to-internal-channel \
+ --dmg ${DMG_PATH} \
+ --release-notes release_notes.txt \
+ --key sparkle_private_key
+ ;;
+ "public")
+ ./scripts/appcast_manager/appcastManager.swift \
+ --release-to-public-channel \
+ --version ${VERSION} \
+ --release-notes release_notes.txt \
+ --key sparkle_private_key
+ ;;
+ "hotfix")
+ ./scripts/appcast_manager/appcastManager.swift \
+ --release-hotfix-to-public-channel \
+ --dmg ${DMG_PATH} \
+ --release-notes release_notes.txt \
+ --key sparkle_private_key
+ ;;
+ *)
+ ;;
+ esac
- appcast_patch_name="appcast2-${{ steps.verify-tag.outputs.tag-in-filename }}.patch"
+ appcast_patch_name="appcast2-${VERSION}.patch"
mv -f ${{ env.SPARKLE_DIR }}/appcast_diff.txt ${{ env.SPARKLE_DIR }}/${appcast_patch_name}
echo "appcast-patch-name=${appcast_patch_name}" >> $GITHUB_OUTPUT
@@ -112,6 +143,8 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID_RELEASE_S3 }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY_RELEASE_S3 }}
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }}
+ RELEASE_TYPE: ${{ github.event.inputs.release-type }}
+ VERSION: ${{ steps.verify-tag.outputs.release-version }}
run: |
# Back up existing appcast2.xml
OLD_APPCAST_NAME=appcast2_old.xml
@@ -119,7 +152,11 @@ jobs:
curl -fLSs "${{ vars.DMG_URL_ROOT }}appcast2.xml" --output "${OLD_APPCAST_NAME}"
# Upload files to S3
- ./scripts/upload_to_s3/upload_to_s3.sh --run --force
+ if [[ "${RELEASE_TYPE}" == "internal" ]]; then
+ ./scripts/upload_to_s3/upload_to_s3.sh --run --force
+ else
+ ./scripts/upload_to_s3/upload_to_s3.sh --run --force --overwrite-duckduckgo-dmg "${VERSION}"
+ fi
if [[ -f "${{ env.SPARKLE_DIR }}/uploaded_files_list.txt" ]]; then
echo "FILES_UPLOADED=$(awk '{ print ""$1"
"; }' < ${{ env.SPARKLE_DIR }}/uploaded_files_list.txt | tr '\n' ' ')" >> $GITHUB_ENV
@@ -139,19 +176,28 @@ jobs:
echo "RELEASE_BUCKET_PREFIX=${{ vars.RELEASE_BUCKET_PREFIX }}" >> $GITHUB_ENV
echo "RELEASE_TASK_ID=${{ steps.task-id.outputs.task-id }}" >> $GITHUB_ENV
echo "TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
+ echo "VERSION=${{ steps.verify-tag.outputs.release-version }}" >> $GITHUB_ENV
echo "WORKFLOW_URL=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV
- name: Set up Asana templates
if: always()
id: asana-templates
+ env:
+ RELEASE_TYPE: ${{ github.event.inputs.release-type }}
run: |
- if [[ ${{ steps.upload.outcome }} == "success" ]]; then
- echo "task-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
- echo "comment-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
- echo "release-task-comment-template=internal-release-complete" >> $GITHUB_OUTPUT
+ if [[ ${{ steps.upload.outcome }} == "success" ]]; then
+ if [[ "${RELEASE_TYPE}" == "internal" ]]; then
+ echo "task-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
+ echo "comment-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
+ echo "release-task-comment-template=internal-release-complete" >> $GITHUB_OUTPUT
+ else
+ echo "task-template=validate-check-for-updates-public" >> $GITHUB_OUTPUT
+ echo "comment-template=validate-check-for-updates-public" >> $GITHUB_OUTPUT
+ echo "release-task-comment-template=public-release-complete" >> $GITHUB_OUTPUT
+ fi
else
- echo "task-template=appcast-failed" >> $GITHUB_OUTPUT
- echo "comment-template=appcast-failed" >> $GITHUB_OUTPUT
+ echo "task-template=appcast-failed-${RELEASE_TYPE}" >> $GITHUB_OUTPUT
+ echo "comment-template=appcast-failed-${RELEASE_TYPE}" >> $GITHUB_OUTPUT
fi
- name: Create Asana task
@@ -207,4 +253,4 @@ jobs:
with:
access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
task-url: ${{ github.event.inputs.asana-task-url }}
- template-name: internal-release-complete
+ template-name: ${{ steps.asana-templates.outputs.release-task-comment-template }}
diff --git a/.github/workflows/sparkle_internal.yml b/.github/workflows/sparkle_internal.yml
deleted file mode 100644
index bfc7293c92..0000000000
--- a/.github/workflows/sparkle_internal.yml
+++ /dev/null
@@ -1,210 +0,0 @@
-name: Publish Internal Release to Sparkle
-
-on:
- workflow_dispatch:
- inputs:
- asana-task-url:
- description: "Asana release task URL"
- required: true
- type: string
- tag:
- description: "Tag to publish"
- required: true
- type: string
-
-jobs:
-
- publish-to-sparkle:
-
- name: Publish internal release to Sparkle
-
- runs-on: macos-13-xlarge
- timeout-minutes: 10
-
- env:
- SPARKLE_DIR: ${{ github.workspace }}/sparkle-updates
-
- steps:
-
- - name: Verify the tag
- id: verify-tag
- env:
- tag: ${{ github.event.inputs.tag }}
- run: |
- tag_regex='^[0-9]+\.[0-9]+\.[0-9]+-[0-9]+$'
-
- if [[ ! "$tag" =~ $tag_regex ]]; then
- echo "::error::The provided tag ($tag) has incorrect format (attempted to match ${tag_regex})."
- exit 1
- fi
- echo "tag-in-filename=${tag//-/.}" >> $GITHUB_OUTPUT
-
- - name: Check out the code
- uses: actions/checkout@v4
- with:
- submodules: recursive
-
- - name: Set up Sparkle tools
- env:
- SPARKLE_URL: https://github.com/sparkle-project/Sparkle/releases/download/${{ vars.SPARKLE_VERSION }}/Sparkle-${{ vars.SPARKLE_VERSION }}.tar.xz
- run: |
- curl -fLSs $SPARKLE_URL | tar xJ bin
- echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
-
- - name: Fetch DMG
- id: fetch-dmg
- env:
- DMG_NAME: duckduckgo-${{ steps.verify-tag.outputs.tag-in-filename }}.dmg
- run: |
- DMG_URL="${{ vars.DMG_URL_ROOT }}${DMG_NAME}"
- curl -fLSs -o "$DMG_NAME" "$DMG_URL"
- echo "dmg-name=$DMG_NAME" >> $GITHUB_OUTPUT
- echo "dmg-path=$DMG_NAME" >> $GITHUB_OUTPUT
-
- - name: Extract Asana Task ID
- id: task-id
- uses: ./.github/actions/asana-extract-task-id
- with:
- task-url: ${{ github.event.inputs.asana-task-url }}
-
- - name: Fetch release notes
- env:
- TASK_ID: ${{ steps.task-id.outputs.task-id }}
- ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }}
- run: |
- curl -fLSs "https://app.asana.com/api/1.0/tasks/${TASK_ID}?opt_fields=notes" \
- -H "Authorization: Bearer ${ASANA_ACCESS_TOKEN}" \
- | jq -r .data.notes \
- | ./scripts/extract_release_notes.sh > release_notes.txt
- echo "RELEASE_NOTES_FILE=release_notes.txt" >> $GITHUB_ENV
-
- - name: Select Xcode
- run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer
-
- - name: Generate appcast
- id: appcast
- env:
- DMG_PATH: ${{ steps.fetch-dmg.outputs.dmg-path }}
- SPARKLE_PRIVATE_KEY: ${{ secrets.SPARKLE_PRIVATE_KEY }}
- run: |
- echo -n "$SPARKLE_PRIVATE_KEY" > sparkle_private_key
- chmod 600 sparkle_private_key
-
- ./scripts/appcast_manager/appcastManager.swift \
- --release-to-internal-channel \
- --dmg ${DMG_PATH} \
- --release-notes release_notes.txt \
- --key sparkle_private_key
-
- appcast_patch_name="appcast2-${{ steps.verify-tag.outputs.tag-in-filename }}.patch"
- mv -f ${{ env.SPARKLE_DIR }}/appcast_diff.txt ${{ env.SPARKLE_DIR }}/${appcast_patch_name}
- echo "appcast-patch-name=${appcast_patch_name}" >> $GITHUB_OUTPUT
-
- - name: Upload appcast diff artifact
- uses: actions/upload-artifact@v4
- with:
- name: ${{ steps.appcast.outputs.appcast-patch-name }}
- path: ${{ env.SPARKLE_DIR }}/${{ steps.appcast.outputs.appcast-patch-name }}
-
- - name: Upload to S3
- id: upload
- env:
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }}
- run: |
- # Back up existing appcast2.xml
- OLD_APPCAST_NAME=appcast2_old.xml
- echo "OLD_APPCAST_NAME=${OLD_APPCAST_NAME}" >> $GITHUB_ENV
- curl -fLSs "${{ vars.DMG_URL_ROOT }}appcast2.xml" --output "${OLD_APPCAST_NAME}"
-
- # Upload files to S3
- ./scripts/upload_to_s3/upload_to_s3.sh --run --force
-
- if [[ -f "${{ env.SPARKLE_DIR }}/uploaded_files_list.txt" ]]; then
- echo "FILES_UPLOADED=$(awk '{ print ""$1"
"; }' < ${{ env.SPARKLE_DIR }}/uploaded_files_list.txt | tr '\n' ' ')" >> $GITHUB_ENV
- else
- echo "FILES_UPLOADED='No files uploaded.'" >> $GITHUB_ENV
- fi
-
- - name: Set common environment variables
- if: always()
- env:
- DMG_NAME: ${{ steps.fetch-dmg.outputs.dmg-name }}
- run: |
- echo "APPCAST_PATCH_NAME=${{ steps.appcast.outputs.appcast-patch-name }}" >> $GITHUB_ENV
- echo "DMG_NAME=${DMG_NAME}" >> $GITHUB_ENV
- echo "DMG_URL=${{ vars.DMG_URL_ROOT }}${DMG_NAME}" >> $GITHUB_ENV
- echo "RELEASE_BUCKET_NAME=${{ vars.RELEASE_BUCKET_NAME }}" >> $GITHUB_ENV
- echo "RELEASE_BUCKET_PREFIX=${{ vars.RELEASE_BUCKET_PREFIX }}" >> $GITHUB_ENV
- echo "RELEASE_TASK_ID=${{ steps.task-id.outputs.task-id }}" >> $GITHUB_ENV
- echo "TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
- echo "WORKFLOW_URL=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV
-
- - name: Set up Asana templates
- if: always()
- id: asana-templates
- run: |
- if [[ ${{ steps.upload.outcome }} == "success" ]]; then
- echo "task-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
- echo "comment-template=validate-check-for-updates-internal" >> $GITHUB_OUTPUT
- echo "release-task-comment-template=internal-release-complete" >> $GITHUB_OUTPUT
- else
- echo "task-template=appcast-failed" >> $GITHUB_OUTPUT
- echo "comment-template=appcast-failed" >> $GITHUB_OUTPUT
- fi
-
- - name: Create Asana task
- id: create-task
- if: always()
- uses: ./.github/actions/asana-create-action-item
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- release-task-url: ${{ github.event.inputs.asana-task-url }}
- template-name: ${{ steps.asana-templates.outputs.task-template }}
-
- - name: Upload patch to the Asana task
- id: upload-patch
- if: success()
- uses: ./.github/actions/asana-upload
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- file-name: ${{ env.SPARKLE_DIR }}/${{ steps.appcast.outputs.appcast-patch-name }}
- task-id: ${{ steps.create-task.outputs.new-task-id }}
-
- - name: Upload old appcast file to the Asana task
- id: upload-old-appcast
- if: success()
- uses: ./.github/actions/asana-upload
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- file-name: ${{ env.OLD_APPCAST_NAME }}
- task-id: ${{ steps.create-task.outputs.new-task-id }}
-
- - name: Upload release notes to the Asana task
- id: upload-release-notes
- if: success()
- uses: ./.github/actions/asana-upload
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- file-name: ${{ env.RELEASE_NOTES_FILE }}
- task-id: ${{ steps.create-task.outputs.new-task-id }}
-
- - name: Report status
- if: always()
- uses: ./.github/actions/asana-log-message
- env:
- ASSIGNEE_ID: ${{ steps.create-task.outputs.assignee-id }}
- TASK_ID: ${{ steps.create-task.outputs.new-task-id }}
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- task-url: ${{ github.event.inputs.asana-task-url }}
- template-name: ${{ steps.asana-templates.outputs.comment-template }}
-
- - name: Add a comment to the release task
- if: success()
- uses: ./.github/actions/asana-add-comment
- with:
- access-token: ${{ secrets.ASANA_ACCESS_TOKEN }}
- task-url: ${{ github.event.inputs.asana-task-url }}
- template-name: internal-release-complete