blob: 44494eb0683a941a2062f1a76fcc3082b00d98b6 [file] [log] [blame]
name: Release Build (Nightly)
on:
schedule:
- cron: "47 9 * * *" # 1:47 AM Pacific Time (9:47 UTC)
workflow_dispatch: # Allow manual triggering
permissions:
contents: write
jobs:
nightly:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: "webui/package-lock.json"
- uses: actions/setup-go@v5
with:
go-version-file: "${{ inputs.working-directory || '.'}}/go.mod"
cache: true
- name: Check for changes since last tag
id: check_changes
run: |
git fetch --tags --force
# find latest nightly tag that looks like nightly/v0.0.N
latest_nightly=$(git tag -l "nightly/v0.0.*" --sort=-v:refname | head -n1)
if [ -z "$latest_nightly" ]; then
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "tag=v0.0.1" >> $GITHUB_OUTPUT
echo "nightly_tag=nightly/v0.0.1" >> $GITHUB_OUTPUT
else
echo "Latest nightly tag is $latest_nightly"
# Check if there are any new commits since the last nightly tag
changes=$(git log $latest_nightly..HEAD --oneline)
if [ -z "$changes" ]; then
echo "No new changes since last nightly tag, skipping nightly build"
echo "has_changes=false" >> $GITHUB_OUTPUT
else
echo "Changes found since last nightly tag:"
echo "$changes"
echo "has_changes=true" >> $GITHUB_OUTPUT
# Extract N from nightly/v0.0.N and increment
version_part="${latest_nightly#nightly/v0.0.}"
new_n=$((version_part + 1))
new_tag="v0.0.${new_n}"
new_nightly_tag="nightly/v0.0.${new_n}"
echo "tag=$new_tag" >> $GITHUB_OUTPUT
echo "nightly_tag=$new_nightly_tag" >> $GITHUB_OUTPUT
fi
fi
- name: Create and push nightly git tag
if: steps.check_changes.outputs.has_changes == 'true'
env:
TAG: ${{ steps.check_changes.outputs.tag }}
NIGHTLY_TAG: ${{ steps.check_changes.outputs.nightly_tag }}
run: |
git config user.name "Sketch Nightly Bot"
git config user.email "hello@sketch.dev"
git tag -a "$TAG" -m "Nightly build $TAG"
git tag -a "$NIGHTLY_TAG" -m "Nightly build tracking tag for $TAG"
git push origin "$TAG"
git push origin "$NIGHTLY_TAG"
- name: Run GoReleaser (Nightly)
if: steps.check_changes.outputs.has_changes == 'true'
uses: goreleaser/goreleaser-action@v4
with:
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Mark release as prerelease
if: steps.check_changes.outputs.has_changes == 'true'
uses: actions/github-script@v6
with:
script: |
const tag = process.env.TAG;
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
const release = await github.rest.repos.getReleaseByTag({ owner, repo, tag });
await github.rest.repos.updateRelease({
owner,
repo,
release_id: release.data.id,
prerelease: true
});
env:
TAG: ${{ steps.check_changes.outputs.tag }}