-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
316 additions
and
230 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,296 +1,255 @@ | ||
# Cross-platform and multi-configuration build of Methane Asteroids | ||
# Cross-platform and multi-configuration build of the Methane Asteroids | ||
|
||
name: 'CI Build' | ||
name: '🏗️ CI Build' | ||
|
||
on: | ||
workflow_dispatch: | ||
push: | ||
branches: [ main, develop ] | ||
paths: | ||
- '.github/**/*.yml' | ||
- 'Apps/**' | ||
- 'Modules/**' | ||
- 'Externals/**' | ||
- 'CMake/**' | ||
- 'CMakeLists.txt' | ||
- 'CMakePresets.json' | ||
- '.github/**/*.yml' | ||
- 'Apps/**' | ||
- 'Modules/**' | ||
- 'Externals/**' | ||
- 'CMake/**' | ||
- 'Build/*/CI/**' | ||
- 'CMakeLists.txt' | ||
- 'CMakePresets.json' | ||
pull_request: | ||
branches: [ main ] | ||
paths: | ||
- '.github/**/*.yml' | ||
- 'Apps/**' | ||
- 'Modules/**' | ||
- 'Externals/**' | ||
- 'CMake/**' | ||
- 'CMakeLists.txt' | ||
- 'CMakePresets.json' | ||
- '.github/**/*.yml' | ||
- 'Apps/**' | ||
- 'Modules/**' | ||
- 'Externals/**' | ||
- 'CMake/**' | ||
- 'Build/*/CI/**' | ||
- 'CMakeLists.txt' | ||
- 'CMakePresets.json' | ||
schedule: | ||
- cron: '20 23 * * 3' # Scheduled workflow will not run in GitHub forks by default | ||
|
||
env: | ||
product_ver_major: 0 | ||
product_ver_minor: 8 | ||
product_ver_patch: 0 | ||
product_ver_build: ${{ github.run_number }} | ||
tracy_release_version: "0.11.2.1" | ||
vulkan_sdk_version: "1.3.290.0" | ||
METHANE_VERSION_MAJOR: 0 | ||
METHANE_VERSION_MINOR: 8 | ||
METHANE_VERSION_PATCH: 0 | ||
METHANE_VERSION_BUILD: ${{ github.run_number }} | ||
TRACY_RELEASE_VERSION: "0.11.2.1" | ||
VULKAN_SDK_VERSION: "1.3.290.0" | ||
ORIGIN_REPOSITORY: 'MethanePowered/MethaneAsteroids' | ||
|
||
jobs: | ||
build-asteroids: | ||
name: Build ${{ matrix.name }} | ||
|
||
build: | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win64_DX_Release" | ||
config_preset: "VS2022-Win64-DX-Default" | ||
build_preset: "VS2022-Win64-DX-Release" | ||
named_logo: Windows | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win64_VK_Release" | ||
config_preset: "VS2022-Win64-VK-Default" | ||
build_preset: "VS2022-Win64-VK-Release" | ||
named_logo: Windows | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win64_DX_Profile" | ||
config_preset: "VS2022-Win64-DX-Profile" | ||
build_preset: "VS2022-Win64-DX-Profile" | ||
named_logo: Windows | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win64_VK_Profile" | ||
config_preset: "VS2022-Win64-VK-Profile" | ||
build_preset: "VS2022-Win64-VK-Profile" | ||
named_logo: Windows | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win32_DX_Release" | ||
config_preset: "VS2022-Win32-DX-Default" | ||
build_preset: "VS2022-Win32-DX-Release" | ||
named_logo: Windows | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win32_VK_Release" | ||
config_preset: "VS2022-Win32-VK-Default" | ||
build_preset: "VS2022-Win32-VK-Release" | ||
named_logo: Windows | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win32_DX_Profile" | ||
config_preset: "VS2022-Win32-DX-Profile" | ||
build_preset: "VS2022-Win32-DX-Profile" | ||
named_logo: Windows | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: windows-latest | ||
os_name: Windows | ||
name: "Win32_VK_Profile" | ||
config_preset: "VS2022-Win32-VK-Profile" | ||
build_preset: "VS2022-Win32-VK-Profile" | ||
named_logo: Windows | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: ubuntu-latest | ||
os_name: Ubuntu | ||
name: "Ubuntu_VK_Release" | ||
config_preset: "Make-Lin-VK-Release" | ||
build_preset: "Make-Lin-VK-Release" | ||
named_logo: Linux | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: ubuntu-latest | ||
os_name: Ubuntu | ||
name: "Ubuntu_VK_Profile" | ||
config_preset: "Make-Lin-VK-Profile" | ||
build_preset: "Make-Lin-VK-Profile" | ||
named_logo: Linux | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_Arm64_VK_Release" | ||
config_preset: "Xcode-Mac-Arm64-VK-Default" | ||
build_preset: "Xcode-Mac-Arm64-VK-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: true | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_x86-64_VK_Release" | ||
config_preset: "Xcode-Mac-x86-64-VK-Default" | ||
build_preset: "Xcode-Mac-x86-64-VK-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: true | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_Arm64_MTL_Release" | ||
config_preset: "Xcode-Mac-Arm64-MTL-Default" | ||
build_preset: "Xcode-Mac-Arm64-MTL-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_Arm64_MTL_Profile" | ||
config_preset: "Xcode-Mac-Arm64-MTL-Profile" | ||
build_preset: "Xcode-Mac-Arm64-MTL-Profile" | ||
named_logo: Apple | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_x86-64_MTL_Release" | ||
config_preset: "Xcode-Mac-x86-64-MTL-Default" | ||
build_preset: "Xcode-Mac-x86-64-MTL-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "MacOS_x86-64_MTL_Profile" | ||
config_preset: "Xcode-Mac-x86-64-MTL-Profile" | ||
build_preset: "Xcode-Mac-x86-64-MTL-Profile" | ||
named_logo: Apple | ||
add_tracy_app: true | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "iOS_Sim_MTL_Release" | ||
config_preset: "Xcode-iOS-Sim-MTL-Default" | ||
build_preset: "Xcode-iOS-Sim-MTL-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
- os: macos-latest | ||
os_name: MacOS | ||
name: "tvOS_Sim_MTL_Release" | ||
config_preset: "Xcode-tvOS-Sim-MTL-Default" | ||
build_preset: "Xcode-tvOS-Sim-MTL-Release" | ||
named_logo: Apple | ||
add_tracy_app: false | ||
install_vulkan_sdk: false | ||
|
||
name: ${{ matrix.name }} | ||
runs-on: ${{ matrix.os }} | ||
|
||
env: | ||
INSTALL_DIR: Build/Output/${{ matrix.config_preset }}/Install | ||
BUILD_LOG_FILE: Build/Output/${{ matrix.config_preset }}/Install/Build.log | ||
|
||
steps: | ||
|
||
- name: Install Linux prerequisites | ||
if: ${{ matrix.os == 'ubuntu-latest' }} | ||
run: sudo apt install xcb libx11-dev libx11-xcb-dev libxcb-sync-dev libxcb-randr0-dev p7zip | ||
|
||
- name: Install Vulkan SDK ${{ env.vulkan_sdk_version }} | ||
if: ${{ matrix.install_vulkan_sdk }} | ||
run: | | ||
runner_os=$(uname -s) | ||
case $runner_os in | ||
macOS|Darwin) sdk_os=mac ; sdk_os_subdir=macOS ;; | ||
Linux) sdk_os=linux ; sdk_os_subdir=linux ;; | ||
Windows|MINGW*) sdk_os=windows ; sdk_os_subdir=windows ;; | ||
*) echo "Unknown runner_os: $runner_os" ; exit 7 ; ;; | ||
esac | ||
sdk_ver="${{ env.vulkan_sdk_version }}" | ||
sdk_dir="${{ runner.tool_cache }}/VulkanSDK" | ||
sdk_ver_dir="$sdk_dir/$sdk_ver/$sdk_os_subdir" | ||
if [ -d "$sdk_ver_dir" ]; then | ||
echo "Vulkan SDK version directory already exists: $sdk_ver_dir" | ||
else | ||
test -d $sdk_dir || mkdir -pv $sdk_dir | ||
vulkan_sdk_url=https://github.com/MethanePowered/VulkanHeaders/releases/download/sdk-$sdk_ver/vulkan_sdk_$sdk_os.7z | ||
echo "Downloading Vulkan SDK archive $vulkan_sdk_url ..." | ||
curl -sSLo vulkan_sdk.7z $vulkan_sdk_url | ||
echo "Unpacking Vulkan SDK archive to $sdk_dir ..." | ||
7z x vulkan_sdk.7z -o$sdk_dir | ||
if [ ! -d $sdk_ver_dir ]; then | ||
echo "Vulkan SDK subdirectory not found: $sdk_ver_dir" | ||
exit 7 | ||
fi | ||
fi | ||
echo "Setting VULKAN_SDK* environment variables..." | ||
echo "VULKAN_SDK=$sdk_ver_dir" >> $GITHUB_ENV | ||
echo "VULKAN_SDK_VERSION=$sdk_ver" >> $GITHUB_ENV | ||
echo "VULKAN_SDK_PLATFORM=$sdk_os" >> $GITHUB_ENV | ||
echo "PATH=$PATH:$sdk_ver_dir/bin" >> $GITHUB_ENV | ||
echo "DYLD_LIBRARY_PATH=$sdk_ver_dir/lib:${DYLD_LIBRARY_PATH:-}" >> $GITHUB_ENV | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Initialize Externals Cache | ||
id: cache-externals | ||
uses: actions/cache@v4 | ||
env: | ||
cache-name: cache-externals | ||
with: | ||
path: Build/Output/ExternalsCache | ||
key: ExternalsCache-${{ matrix.config_preset }}-${{ hashFiles('Externals/*.cmake') }} | ||
|
||
- name: CMake Configure Preset ${{ matrix.config_preset }} | ||
shell: bash | ||
run: | | ||
set -o pipefail | ||
mkdir -p "$INSTALL_DIR" | ||
cmake --preset ${{ matrix.config_preset }} -DASTEROIDS_VERSION_MAJOR=${{ env.product_ver_major }} -DASTEROIDS_VERSION_MINOR=${{ env.product_ver_minor }} -DASTEROIDS_VERSION_PATCH=${{ env.product_ver_patch }} -DASTEROIDS_VERSION_BUILD=${{ env.product_ver_build }} 2>&1 | tee $BUILD_LOG_FILE | ||
- name: CMake Build Preset ${{ matrix.build_preset }} | ||
shell: bash | ||
run: | | ||
set -o pipefail | ||
cmake --build --preset ${{ matrix.build_preset }} --target install --parallel 4 2>&1 | tee -a $BUILD_LOG_FILE | ||
- name: Add README and BUILD files | ||
shell: bash | ||
run: | | ||
cp README.md $INSTALL_DIR/README.md | ||
echo Methane Asteroids v.${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }} https://github.com/${{ github.repository }} > $INSTALL_DIR/Build-Info.txt | ||
echo - Git repository: ${{ github.repositoryUrl }}, branch: ${{ github.ref_name }}, commit SHA: ${{ github.sha }} >> $INSTALL_DIR/Build-Info.txt | ||
echo - GitHub Actions build url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} >> $INSTALL_DIR/Build-Info.txt | ||
echo - Built with CMake configure preset ${{ matrix.config_preset }} and build preset ${{ matrix.build_preset }} >> $INSTALL_DIR/Build-Info.txt | ||
echo - Built on agent ${{ runner.name }}, ${{ runner.os }}, ${{ runner.arch }}: >> $INSTALL_DIR/Build-Info.txt | ||
echo - Builder agent ${{ matrix.os }} system information: >> $INSTALL_DIR/Build-Info.txt | ||
- name: Add Windows System Information to BUILD file | ||
if: ${{ matrix.os_name == 'Windows' }} | ||
run: systeminfo >> ${{ env.INSTALL_DIR }}\Build-Info.txt | ||
|
||
- name: Add Unix System Information to BUILD file | ||
if: ${{ matrix.os_name != 'Windows' }} | ||
run: uname -a >>$INSTALL_DIR/Build-Info.txt | ||
|
||
- name: Download Tracy release | ||
if: ${{ matrix.add_tracy_app }} | ||
shell: bash | ||
run: | | ||
curl -sSLo Tracy.7z https://github.com/MethanePowered/Tracy/releases/download/v${{ env.tracy_release_version }}/Tracy-${{ matrix.os_name }}-v${{ env.tracy_release_version }}.7z | ||
7z x Tracy.7z -o$INSTALL_DIR/Apps | ||
- name: Archive Build Artifacts | ||
shell: bash | ||
working-directory: ${{ env.INSTALL_DIR }} | ||
run: 7z a -t7z -mx=9 MethaneAsteroids_${{ matrix.name }}.7z -r- ./*.* Apps/* | ||
|
||
- name: Upload Archived Build Artifacts | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: MethaneAsteroids_${{ matrix.name }}_${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }} | ||
path: ${{ env.INSTALL_DIR }}/MethaneAsteroids_${{ matrix.name }}.7z | ||
- name: Checkout repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Install Linux prerequisites | ||
if: ${{ runner.os == 'Linux' }} | ||
run: ./Build/Unix/CI/InstallLinuxPrerequisites.sh | ||
|
||
- name: Install Vulkan SDK ${{ env.VULKAN_SDK_VERSION }} | ||
if: ${{ matrix.install_vulkan_sdk }} | ||
run: ./Build/Unix/CI/InstallVulkanSdk.sh "${{ env.VULKAN_SDK_VERSION }}" "${{ runner.tool_cache }}/VulkanSDK" | ||
|
||
- name: Initialize Externals Cache | ||
uses: actions/cache@v4 | ||
with: | ||
path: Build/Output/ExternalsCache | ||
key: ExternalsCache-${{ matrix.config_preset }}-${{ hashFiles('Externals/*.cmake') }} | ||
|
||
- name: CMake Configure Preset ${{ matrix.config_preset }} | ||
shell: bash | ||
run: ./Build/Unix/CI/CMakeConfigurePreset.sh "${{ matrix.config_preset }}" | ||
|
||
- name: CMake Build Preset ${{ matrix.build_preset }} | ||
shell: bash | ||
run: ./Build/Unix/CI/CMakeBuildPreset.sh "${{ matrix.build_preset }}" | ||
|
||
- name: Add README and Build-Info files | ||
if: ${{ success() || failure() }} | ||
shell: bash | ||
env: | ||
REPO_URL: ${{ github.repositoryUrl }} | ||
BRANCH_NAME: ${{ github.ref_name }} | ||
COMMIT_SHA: ${{ github.sha }} | ||
RUN_ID: ${{ github.run_id }} | ||
CONFIG_PRESET: ${{ matrix.config_preset }} | ||
BUILD_PRESET: ${{ matrix.build_preset }} | ||
RUNNER_INFO: "${{ runner.name }}, ${{ runner.os }}, ${{ runner.arch }}" | ||
run: | | ||
cp README.md $INSTALL_DIR/README.md | ||
./Build/Unix/CI/WriteBuildInfo.sh "$INSTALL_DIR/Build-Info.txt" | ||
- name: Download Tracy release | ||
if: ${{ matrix.add_tracy_app && (success() || failure()) }} | ||
shell: bash | ||
run: ./Build/Unix/CI/DownloadTracyRelease.sh "${{ env.TRACY_RELEASE_VERSION }}" "$INSTALL_DIR/Apps" | ||
|
||
- name: Archive Build Artifacts | ||
if: ${{ success() || failure() }} | ||
shell: bash | ||
working-directory: ${{ env.INSTALL_DIR }} | ||
run: 7z a -t7z -mx=9 MethaneAsteroids_${{ matrix.name }}.7z * | ||
|
||
- name: Upload Archived Build Artifacts | ||
if: ${{ success() || failure() }} | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: MethaneAsteroids_${{ matrix.name }}_${{ env.METHANE_VERSION_MAJOR }}.${{ env.METHANE_VERSION_MINOR }}.${{ env.METHANE_VERSION_PATCH }}.${{ env.METHANE_VERSION_BUILD }} | ||
path: ${{ env.INSTALL_DIR }}/MethaneAsteroids_${{ matrix.name }}.7z |
Oops, something went wrong.