Build and Release #78
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: Build and Release | |
on: | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
outputs: | |
proceed: ${{ steps.check.outputs.proceed }} | |
permissions: | |
contents: read | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Check for changes since last nightly tag | |
id: check | |
run: | | |
PROCEED="true" | |
if [[ "${{ github.event_name }}" == "schedule" ]]; then | |
echo "Schedule trigger: Checking changes..." | |
LATEST_NIGHTLY_TAG=$(git tag --sort=-creatordate --list '*-nightly.*' | head -n 1) | |
if [[ -n "$LATEST_NIGHTLY_TAG" ]]; then | |
echo "Latest nightly tag found: $LATEST_NIGHTLY_TAG" | |
LATEST_NIGHTLY_COMMIT=$(git rev-list -n 1 "$LATEST_NIGHTLY_TAG" 2>/dev/null) | |
CURRENT_HEAD_COMMIT=$(git rev-parse HEAD) | |
echo "Commit for tag $LATEST_NIGHTLY_TAG: $LATEST_NIGHTLY_COMMIT" | |
echo "Current HEAD commit: $CURRENT_HEAD_COMMIT" | |
if [[ "$LATEST_NIGHTLY_COMMIT" == "$CURRENT_HEAD_COMMIT" ]]; then | |
echo "No code changes detected since the last nightly release ($LATEST_NIGHTLY_TAG)." | |
PROCEED="false" | |
else | |
echo "Code changes detected since $LATEST_NIGHTLY_TAG. Proceeding with build." | |
fi | |
else | |
echo "No previous nightly tag found. Proceeding with build." | |
fi | |
else | |
echo "Manual trigger ('${{ github.event_name }}'). Proceeding with build." | |
fi | |
echo "proceed=$PROCEED" >> $GITHUB_OUTPUT | |
build: | |
strategy: | |
matrix: | |
include: | |
- os: ubuntu-latest | |
artifact_name: lute-linux-x86_64 | |
options: --c-compiler clang --cxx-compiler clang++ | |
- os: ubuntu-24.04-arm | |
artifact_name: lute-linux-aarch64 | |
options: --c-compiler clang --cxx-compiler clang++ | |
- os: macos-latest | |
artifact_name: lute-macos-aarch64 | |
- os: windows-latest | |
artifact_name: lute-windows-x86_64 | |
fail-fast: false | |
needs: check | |
if: ${{ needs.check.outputs.proceed == 'true' }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup and Build Lute | |
id: build_lute | |
uses: ./.github/actions/setup-and-build | |
with: | |
target: Lute.CLI | |
config: release | |
options: ${{ matrix.options }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ${{ steps.build_lute.outputs.exe_path }} | |
name: ${{ matrix.artifact_name }} | |
release: | |
needs: build | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
sparse-checkout: get_version.cmake | |
- name: Download Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- run: | | |
mkdir release | |
for dir in ./artifacts/*; do | |
base_name=$(basename "$dir") | |
zip -rj release/"${base_name}.zip" "$dir"/* | |
done | |
- name: Get project version | |
id: get_version | |
run: | | |
VERSION=$(cmake -P get_version.cmake 2>&1) | |
echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
- name: Create Nightly Tag | |
id: tag_step | |
if: github.event_name == 'schedule' | |
run: | | |
DATE=$(date +%Y%m%d) | |
TAG="-nightly.$DATE" | |
echo "tag=$TAG" >> $GITHUB_OUTPUT | |
- name: Create Release Tag | |
id: tag_release | |
run: | | |
VERSION=${{ steps.get_version.outputs.version }} | |
NIGHTLY_TAG=${{ steps.tag_step.outputs.tag }} | |
RELEASE_TAG="$VERSION$NIGHTLY_TAG" | |
echo "tag=$RELEASE_TAG" >> $GITHUB_OUTPUT | |
- name: Create Release | |
uses: luau-lang/action-gh-release@v2 | |
with: | |
tag_name: ${{ steps.tag_release.outputs.tag }} | |
name: ${{ steps.tag_release.outputs.tag }} | |
draft: false | |
prerelease: ${{ github.event_name == 'schedule' }} | |
files: release/*.zip |