Engine update (#42) #382
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 | |
| on: | |
| push: | |
| branches: | |
| - master | |
| pull_request: | |
| branches: | |
| - master | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: build-${{ github.event_name }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name != 'push' || github.ref != 'refs/heads/master' }} | |
| jobs: | |
| check-formatting: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: DoozyX/clang-format-lint-action@v0.20 | |
| with: | |
| source: ./Scripts ./SourceExt | |
| exclude: ./SourceExt/SHA | |
| extensions: 'fos,h,cpp' | |
| clangFormatVersion: 20 | |
| unit-tests: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/prepare-workspace.sh packages linux | |
| - run: Engine/BuildTools/validate.sh unit-tests | |
| compile-scripts: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/prepare-workspace.sh packages linux toolset | |
| - run: Engine/BuildTools/toolset.sh CompileAngelScript | |
| bake-resources: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/prepare-workspace.sh packages linux toolset | |
| - run: Engine/BuildTools/toolset.sh BakeResources | |
| - run: cd Workspace/output && tar -cf Baking.tar Baking | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: Baking | |
| path: Workspace/output/Baking.tar | |
| if-no-files-found: error | |
| retention-days: 1 | |
| windows-build: | |
| runs-on: windows-2025-vs2026 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| app: | |
| - win32 client Release | |
| - win64 client Release | |
| - win64 server Release | |
| - win64 editor Release | |
| - win64 mapper Release | |
| - win64 baker Release | |
| - win64 client Profiling_Total | |
| - win64 server Profiling_Total | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/build.cmd ${{matrix.app}} | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: Binaries-${{matrix.app}} | |
| path: | | |
| Workspace/output/*Binaries/Client* | |
| Workspace/output/*Binaries/Server* | |
| Workspace/output/*Binaries/Editor* | |
| Workspace/output/*Binaries/Mapper* | |
| Workspace/output/*Binaries/Baker* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| linux-build: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| app: | |
| - linux client Release | |
| - android-arm32 client Release | |
| - android-arm64 client Release | |
| - web client Release | |
| - linux server Release | |
| - linux editor Release | |
| - linux mapper Release | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/prepare-workspace.sh packages ${{matrix.app}} | |
| - run: Engine/BuildTools/build.sh ${{matrix.app}} | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: Binaries-${{matrix.app}} | |
| path: | | |
| Workspace/output/*Binaries/Client* | |
| Workspace/output/*Binaries/Server* | |
| Workspace/output/*Binaries/Editor* | |
| Workspace/output/*Binaries/Mapper* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| macos-build: | |
| runs-on: macos-26-intel | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| app: | |
| - mac client Release | |
| - ios client Release | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - run: Engine/BuildTools/build.sh ${{matrix.app}} | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: Binaries-${{matrix.app}} | |
| path: | | |
| Workspace/output/*Binaries/Client* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| package: | |
| runs-on: ubuntu-24.04 | |
| needs: [check-formatting, unit-tests, compile-scripts, bake-resources, windows-build, linux-build, macos-build] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| pattern: Binaries-* | |
| merge-multiple: true | |
| path: Workspace/output | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| name: Baking | |
| path: Workspace/output | |
| - run: cd Workspace/output && tar -xf Baking.tar | |
| - run: cd Workspace/output && tree -d | |
| - run: Engine/BuildTools/prepare-workspace.sh packages linux toolset | |
| - run: Engine/BuildTools/toolset.sh MakePackage-Dev | |
| - run: Engine/BuildTools/toolset.sh MakePackage-Test | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: TLA-Dev | |
| path: Workspace/output/TLA-Dev | |
| if-no-files-found: error | |
| retention-days: 1 | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: TLA-Test | |
| path: Workspace/output/TLA-Test | |
| if-no-files-found: error | |
| retention-days: 1 | |
| - run: mv Workspace/output/TLA-Dev/TLA-Dev.zip TLA-Dev.zip | |
| - run: (cd Workspace/output/TLA-Test/TLA-Server-LocalTest && zip -0 -q -r - .) > TLA-Server.zip | |
| - run: (cd Workspace/output/TLA-Test/TLA-Client-LocalTest && zip -0 -q -r - .) > TLA-Client.zip | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: TLA-Release | |
| path: | | |
| TLA-Dev.zip | |
| TLA-Server.zip | |
| TLA-Client.zip | |
| if-no-files-found: error | |
| retention-days: 7 | |
| release: | |
| runs-on: ubuntu-24.04 | |
| needs: package | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| name: TLA-Release | |
| path: . | |
| - name: Prepare release metadata | |
| id: release_version | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| publish="${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}" | |
| version="$(tr -d '[:space:]' < VERSION)" | |
| if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | |
| echo "::error file=VERSION::Unexpected VERSION format: $version" | |
| exit 1 | |
| fi | |
| tag="v$version" | |
| if git rev-parse --quiet --verify "refs/tags/$tag" >/dev/null; then | |
| if [[ "$publish" == "true" ]]; then | |
| echo "::error file=VERSION::Release tag $tag already exists. Bump VERSION before publishing a new release." | |
| exit 1 | |
| fi | |
| echo "::warning file=VERSION::Release tag $tag already exists. A master publish would fail until VERSION is bumped." | |
| fi | |
| previous_tag="$(git tag --list 'v[0-9]*.[0-9]*.[0-9]*' --sort=-v:refname | grep -F -x -v "$tag" | head -n 1 || true)" | |
| echo "Release mode: $([[ "$publish" == "true" ]] && echo publish || echo dry-run)" | |
| echo "Version: $version" | |
| echo "Tag: $tag" | |
| echo "Previous tag: ${previous_tag:-<none>}" | |
| for file in TLA-Dev.zip TLA-Server.zip TLA-Client.zip; do | |
| if [[ ! -s "$file" ]]; then | |
| echo "::error file=$file::Missing or empty release asset" | |
| exit 1 | |
| fi | |
| ls -lh "$file" | |
| sha256sum "$file" | |
| done | |
| { | |
| echo "### Release $([[ "$publish" == "true" ]] && echo publish || echo dry-run)" | |
| echo | |
| echo "| Field | Value |" | |
| echo "| ----- | ----- |" | |
| echo "| Event | \`${{ github.event_name }}\` |" | |
| echo "| Ref | \`${{ github.ref }}\` |" | |
| echo "| Version | \`$version\` |" | |
| echo "| Tag | \`$tag\` |" | |
| echo "| Previous tag | \`${previous_tag:-none}\` |" | |
| echo "| Assets | \`TLA-Dev.zip\`, \`TLA-Server.zip\`, \`TLA-Client.zip\` |" | |
| if [[ "$publish" != "true" ]]; then | |
| echo | |
| echo "Dry-run only: no GitHub release or tag will be created in this run." | |
| fi | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| { | |
| echo "version=$version" | |
| echo "tag=$tag" | |
| echo "previous_tag=$previous_tag" | |
| echo "publish=$publish" | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Dry-run release | |
| if: steps.release_version.outputs.publish != 'true' | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| echo "Dry-run only: validated release metadata and assets." | |
| echo "A push to master would create release '${{ steps.release_version.outputs.tag }}' from commit '${{ github.sha }}'." | |
| echo "Release assets:" | |
| ls -lh TLA-Dev.zip TLA-Server.zip TLA-Client.zip | |
| - uses: softprops/action-gh-release@v2 | |
| if: steps.release_version.outputs.publish == 'true' | |
| with: | |
| tag_name: ${{ steps.release_version.outputs.tag }} | |
| name: "FOnline: The Life After ${{ steps.release_version.outputs.version }}" | |
| target_commitish: ${{ github.sha }} | |
| generate_release_notes: true | |
| previous_tag: ${{ steps.release_version.outputs.previous_tag }} | |
| make_latest: true | |
| fail_on_unmatched_files: true | |
| overwrite_files: false | |
| files: | | |
| TLA-Dev.zip | |
| TLA-Server.zip | |
| TLA-Client.zip |