Nightly Release #709
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This GitHub action triggers a fresh set of Damon builds and publishes them to | |
# GitHub Releases under the `nightly` tag. | |
# Note that artifacts available via GitHub Releases are not codesigned or | |
# notarized. | |
# Failures are reported to slack. | |
name: Nightly Release | |
on: | |
schedule: | |
# Runs against the default branch every day overnight | |
- cron: "18 3 * * *" | |
workflow_dispatch: | |
jobs: | |
# Build a fresh set of artifacts | |
build-artifacts: | |
uses: ./.github/workflows/build.yml | |
github-release: | |
needs: build-artifacts | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 | |
- name: Download built artifacts | |
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 | |
with: | |
path: out/ | |
# Set BUILD_OUTPUT_LIST to out\<project>-<version>.<fileext>\*,out\... | |
# This is needed to attach the build artifacts to the GitHub Release | |
- name: Set BUILD_OUTPUT_LIST | |
run: | | |
echo "$(ls -xm1 out/)" > tmp.txt | |
cat tmp.txt | sed 's:.*:out/&/*:' > tmp2.txt | |
echo "BUILD_OUTPUT_LIST=$(cat tmp2.txt | tr '\n' ',' | perl -ple 'chop')" >> $GITHUB_ENV | |
rm -rf tmp.txt && rm -rf tmp2.txt | |
- name: Advance nightly tag | |
uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
try { | |
await github.git.deleteRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "tags/nightly" | |
}) | |
} catch (e) { | |
console.log("Warning: The nightly tag doesn't exist yet, so there's nothing to do. Trace: " + e) | |
} | |
await github.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "refs/tags/nightly", | |
sha: context.sha | |
}) | |
# This will create a new GitHub Release called `nightly` | |
# If a release with this name already exists, it will overwrite the existing data | |
- name: Create a nightly GitHub prerelease | |
id: create_prerelease | |
uses: ncipollo/release-action@a2e71bdd4e7dab70ca26a852f29600c98b33153e # v1.12.0 | |
with: | |
name: nightly | |
artifacts: "${{ env.BUILD_OUTPUT_LIST }}" | |
tag: nightly | |
bodyFile: ".github/workflows/nightly-release-readme.md" | |
prerelease: true | |
allowUpdates: true | |
removeArtifacts: true | |
draft: false | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish nightly GitHub prerelease | |
uses: eregon/publish-release@46913fa2b3f7edc7345ae3c17f6d1b093a54916d # v1.0.5 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
release_id: ${{ steps.create_prerelease.outputs.id }} | |
# Send a slack notification if either job defined above fails | |
slack-notify: | |
needs: | |
- build-artifacts | |
- github-release | |
if: always() && (needs.build-artifacts.result == 'failure' || needs.github-release.result == 'failure') | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Send slack notification on failure | |
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0 | |
with: | |
payload: | | |
{ | |
"text": ":x::moon::nomad-sob: Damon Nightly Release *FAILED*", | |
"attachments": [ | |
{ | |
"color": "#C41E3A", | |
"blocks": [ | |
{ | |
"type": "section", | |
"fields": [ | |
{ | |
"type": "mrkdwn", | |
"text": "*Branch:*\n`${{ github.ref_name }}`" | |
}, | |
{ | |
"type": "mrkdwn", | |
"text": "*Ref:*\n${{ github.sha }}" | |
} | |
] | |
}, | |
{ | |
"type": "section", | |
"fields": [ | |
{ | |
"type": "mrkdwn", | |
"text": "*Workflow:*\n${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
} | |
] | |
} | |
] | |
} | |
] | |
} | |
env: | |
# the slack webhook url links to #feed-nomad-releases | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK |