cge-docker-unstable-changed #18
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
# ---------------------------------------------------------------------------- | |
# GitHub Actions workflow to build this application. | |
# Using latest Castle Game Engine ( https://castle-engine.io/ ) snapshot. | |
# For multiple platforms (Linux, Windows, macOS). | |
# | |
# ( Not Android -- rayhunter is a command-line tool, no automatic way | |
# to make it usable as standalone Android app. ) | |
# | |
# This uses GitHub-hosted runners, that is: you don't need to set up any server | |
# infrastructure, GitHub provides it all for free for open-source projects. | |
# | |
# See docs: | |
# - https://castle-engine.io/github_actions | |
# - https://docs.github.com/en/actions | |
# ---------------------------------------------------------------------------- | |
name: Build | |
on: | |
pull_request: | |
# Run on push to any branch, not on tags. | |
# Checking tags is not useful for us (we check the commit when it happened | |
# at branch) and we would waste 2x time to update on every "snapshpt" tag change. | |
push: | |
branches: | |
- '**' | |
repository_dispatch: | |
types: [cge-docker-unstable-changed] | |
jobs: | |
# Build for platforms supported by | |
# CGE Docker image https://hub.docker.com/r/kambi/castle-engine-cloud-builds-tools/ . | |
# | |
# Since setting up Docker image takes majority of time (5-6 mins) | |
# compared to actually getting and compiling CGE (1 min) | |
# and building application (~1 min for each platform), | |
# we build all platforms possible within one job. | |
build-using-docker: | |
name: Build Using Docker | |
runs-on: ubuntu-latest | |
container: kambi/castle-engine-cloud-builds-tools:cge-none | |
steps: | |
- uses: actions/checkout@v4 | |
# Set env CASTLE_ENGINE_PATH following | |
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#environment-files | |
# https://brandur.org/fragments/github-actions-env-vars-in-env-vars | |
- name: Castle Game Engine - Env CASTLE_ENGINE_PATH | |
run: echo "CASTLE_ENGINE_PATH=$GITHUB_WORKSPACE/castle-engine" >> $GITHUB_ENV | |
- name: Castle Game Engine - Env PATH (non-Windows) | |
run: echo "PATH=$PATH:$CASTLE_ENGINE_PATH/tools/build-tool/" >> $GITHUB_ENV | |
- name: Castle Game Engine - Clone snapshot | |
run: git clone --depth 1 --single-branch --branch snapshot https://github.com/castle-engine/castle-engine/ | |
- name: Castle Game Engine - Build | |
run: cd $CASTLE_ENGINE_PATH/tools/build-tool/ && ./castle-engine_compile.sh | |
- name: Package Windows | |
run: castle-engine package --os=win64 --cpu=x86_64 --verbose | |
- name: Archive Artifacts | |
# See https://github.com/actions/upload-artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows-build | |
# Note: Keep paths that start with asterisk in double qoutes, to avoid misinterpreting as YAML reference. | |
# See https://stackoverflow.com/questions/19109912/yaml-do-i-need-quotes-for-strings-in-yaml | |
# https://yamlchecker.com/ | |
path: "*-win64-x86_64.zip" | |
if-no-files-found: error | |
- name: Package Linux | |
run: castle-engine package --os=linux --cpu=x86_64 --verbose | |
- name: Archive Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-build | |
path: "*-linux-x86_64.tar.gz" | |
if-no-files-found: error | |
# Build for platforms supported from macOS. | |
# This means to build for macOS and (maybe in the future) iOS. | |
build-macos: | |
name: Build Using macOS | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install FPC+Lazarus | |
uses: gcarreno/[email protected] | |
with: | |
lazarus-version: stable | |
- name: Castle Game Engine - Env CASTLE_ENGINE_PATH | |
run: echo "CASTLE_ENGINE_PATH=$GITHUB_WORKSPACE/castle-engine" >> $GITHUB_ENV | |
- name: Castle Game Engine - Env PATH (non-Windows) | |
run: echo "PATH=$PATH:$CASTLE_ENGINE_PATH/tools/build-tool/" >> $GITHUB_ENV | |
- name: Castle Game Engine - Clone snapshot | |
run: git clone --depth 1 --single-branch --branch snapshot https://github.com/castle-engine/castle-engine/ | |
- name: Castle Game Engine - Build | |
run: cd $CASTLE_ENGINE_PATH/tools/build-tool/ && ./castle-engine_compile.sh | |
- name: Package macOS | |
# --package-format=zip, because this is command-line app, do not make "app bundle" that CGE by default does on macOS | |
run: castle-engine package --os=darwin --cpu=x86_64 --verbose --package-format=zip | |
- name: Archive Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: macos-build | |
path: "*-darwin-x86_64.zip" | |
if-no-files-found: error | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
# Only upload release if all builds, on all runners, succeeded. | |
needs: [build-using-docker, build-macos] | |
steps: | |
- name: Download packaged releases | |
uses: actions/download-artifact@v4 | |
with: | |
merge-multiple: true | |
- name: List downloaded files | |
run: ls -R | |
- name: GH CLI status | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: gh auth status | |
# Releases files in the "snapshot" release. | |
- name: Release Artifacts | |
if: ${{ github.ref == 'refs/heads/master' }} | |
run: gh release --repo ${{ github.repository }} upload snapshot --clobber *.zip *.tar.gz | |
env: | |
GH_TOKEN: ${{ github.token }} | |
update-release-tag: | |
name: Update Release Tag (make snapshot tag point to the build commit on master branch) | |
runs-on: ubuntu-latest | |
needs: [release] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Update Release Tag | |
if: ${{ github.ref == 'refs/heads/master' }} | |
run: | | |
# --force allows to overwrite previous tag | |
git tag --force snapshot | |
# --force allows to push with overwritten tag | |
git push --force origin snapshot |