Skip to content

Nightly Release

Nightly Release #706

# This GitHub action triggers a fresh set of Levant 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- 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: |
(ls -xm1 out/) > tmp.txt
sed 's:.*:out/&/*:' < tmp.txt > tmp2.txt
echo "BUILD_OUTPUT_LIST=$(tr '\n' ',' < tmp2.txt | 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.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
uses: ncipollo/release-action@6c75be85e571768fa31b40abf38de58ba0397db5 # v1.13.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-latest
steps:
- name: Notify Slack on failed Backport PRs
uses: hashicorp/actions-slack-status@v1
with:
failure-message: |-
:x::moon::nomad-sob: Levant Nightly Release *FAILED* on
status: failure
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
permissions:
contents: write