Nightly Release #233
This file contains hidden or 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
| name: Nightly Release | |
| on: | |
| schedule: | |
| # Run at 02:00 UTC every day | |
| - cron: '0 2 * * *' | |
| workflow_dispatch: | |
| concurrency: | |
| group: nightly-release | |
| cancel-in-progress: true | |
| jobs: | |
| check-commits: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| skip_nightly: ${{ steps.check.outputs.skip_nightly }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for unreleased commits | |
| id: check | |
| run: | | |
| # Find the latest release tag (any x.y.z release) | |
| LATEST_RELEASE=$(git tag -l 'v*.*.*' --sort=-version:refname | grep -v 'prerelease' | grep -v '^nightly' | head -n1) | |
| if [ -z "$LATEST_RELEASE" ]; then | |
| echo "No existing releases found, creating first nightly" | |
| COMMITS_SINCE_RELEASE=$(git rev-list HEAD --count) | |
| else | |
| echo "Latest release: $LATEST_RELEASE" | |
| COMMITS_SINCE_RELEASE=$(git rev-list ${LATEST_RELEASE}..HEAD --count) | |
| fi | |
| echo "Commits since latest release: $COMMITS_SINCE_RELEASE" | |
| if [ "$COMMITS_SINCE_RELEASE" -eq "0" ]; then | |
| echo "No new commits since latest release, skipping nightly" | |
| echo "skip_nightly=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| CURRENT_COMMIT=$(git rev-parse HEAD) | |
| # Check for existing nightly with same commit | |
| EXISTING_NIGHTLY_COMMIT="" | |
| if git rev-parse --verify nightly >/dev/null 2>&1; then | |
| EXISTING_NIGHTLY_COMMIT=$(git rev-list -n 1 nightly 2>/dev/null || echo "") | |
| fi | |
| if [ "$EXISTING_NIGHTLY_COMMIT" = "$CURRENT_COMMIT" ]; then | |
| echo "Nightly release already exists for current commit" | |
| echo "skip_nightly=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| echo "skip_nightly=false" >> "$GITHUB_OUTPUT" | |
| nightly-release: | |
| needs: check-commits | |
| if: needs.check-commits.outputs.skip_nightly != 'true' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write # Permission for keyless signing | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Prepare nightly release | |
| run: | | |
| gh release delete nightly --yes --cleanup-tag || true | |
| gh release create nightly \ | |
| --title "Nightly ($(date -u +%Y-%m-%d) - $(git rev-parse --short HEAD))" \ | |
| --generate-notes \ | |
| --prerelease | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install cosign | |
| uses: sigstore/cosign-installer@v4.1.1 | |
| - name: Run GoReleaser | |
| uses: goreleaser/goreleaser-action@v7 | |
| with: | |
| version: '~> v2' | |
| args: release --snapshot --clean --skip=publish | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload artifacts | |
| run: gh release upload nightly dist/*.zip dist/*.bundle dist/*checksums.txt --clobber | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |