Nightly Release #17
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 Packer 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 at midnight | |
- cron: "0 0 * * *" | |
workflow_dispatch: | |
permissions: | |
contents: write | |
jobs: | |
# Build a fresh set of artifacts | |
build-artifacts: | |
uses: hashicorp/packer/.github/workflows/build.yml@main | |
github-release: | |
needs: build-artifacts | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
- name: Download built artifacts | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
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@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
try { | |
await github.rest.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.rest.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 | |
continue-on-error: true | |
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.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: Store GitHub Release ID | |
if: steps.create_prerelease.outcome == 'success' | |
run: | | |
echo "prerelease_id=${{ steps.create_prerelease.outputs.id }}" >> $GITHUB_ENV | |
- name: Sleep before retry | |
id: sleep_before_retry | |
if: steps.create_prerelease.outcome == 'failure' | |
run : sleep 30m | |
shell: bash | |
- name: Retry failed nightly GitHub prerelease | |
id: create_prerelease_retry | |
if: steps.create_prerelease.outcome == 'failure' | |
uses: ncipollo/release-action@2c591bcc8ecdcd2db72b97d6147f871fcd833ba5 # v1.14.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: Store Updated GitHub Release ID | |
if: steps.create_prerelease_retry.outcome == 'success' | |
run: | | |
echo "prerelease_id=${{ steps.create_prerelease_retry.outputs.id }}" >> $GITHUB_ENV | |
- name: Publish nightly GitHub prerelease | |
uses: eregon/publish-release@01df127f5e9a3c26935118e22e738d95b59d10ce # v1.0.6 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
release_id: ${{ env.prerelease_id }} | |
# Send a slack notification if either job defined above fails | |
slack-notify: | |
permissions: | |
contents: none | |
needs: | |
- build-artifacts | |
- github-release | |
if: always() && (needs.build-artifacts.result == 'failure' || needs.github-release.result == 'failure') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Send slack notification on failure | |
uses: slackapi/slack-github-action@37ebaef184d7626c5f204ab8d3baff4262dd30f0 # v1.27.0 | |
with: | |
payload: | | |
{ | |
"text": ":alert: Packer Nightly Release *FAILED* :alert:", | |
"attachments": [ | |
{ | |
"color": "#C41E3A", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "Branch: `${{ github.ref_name }}`\nRef: ${{ github.sha }}\nWorkflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
} | |
} | |
] | |
} | |
] | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK |