mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2026-01-29 09:28:15 +03:00
- Update actions/checkout to v4 - Add build caching for macOS and Linux jobs - Implement concurrency control to cancel redundant runs - Restrict GITHUB_TOKEN permissions for security These changes improve CI performance, stability, and security.
216 lines
6.5 KiB
YAML
216 lines
6.5 KiB
YAML
name: CI
|
|
|
|
# Only trigger workflow when code changes, or this file is changed.
|
|
# Android has a different workflow and different rules.
|
|
on:
|
|
push:
|
|
paths:
|
|
- "desktop_version/CMakeLists.txt"
|
|
- "desktop_version/src/**.cpp"
|
|
- "desktop_version/src/**.c"
|
|
- "desktop_version/src/**.h"
|
|
- "third_party/**"
|
|
- ".github/workflows/ci.yml"
|
|
pull_request:
|
|
paths:
|
|
- "desktop_version/CMakeLists.txt"
|
|
- "desktop_version/src/**.cpp"
|
|
- "desktop_version/src/**.c"
|
|
- "desktop_version/src/**.h"
|
|
- "third_party/**"
|
|
- ".github/workflows/ci.yml"
|
|
|
|
permissions:
|
|
contents: read
|
|
statuses: write
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
SRC_DIR_PATH: desktop_version
|
|
|
|
jobs:
|
|
build-mac:
|
|
name: Build (macos-latest)
|
|
|
|
runs-on: macos-latest
|
|
|
|
env:
|
|
CXXFLAGS: -I/usr/local/include/SDL2
|
|
LDFLAGS: -L/usr/local/lib
|
|
HOMEBREW_NO_ENV_HINTS: 1 # Suppress brew update hints
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Cache Homebrew packages
|
|
id: cache-brew
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: |
|
|
/usr/local/Cellar/ninja
|
|
/usr/local/Cellar/sdl2
|
|
/usr/local/opt/sdl2 # Symlink often used
|
|
key: ${{ runner.os }}-brew-${{ hashFiles('/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ninja.rb', '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sdl2.rb') }} # Using hash of formula files if available, or a fixed key for simplicity if not easily determined
|
|
|
|
- name: Install dependencies
|
|
if: steps.cache-brew.outputs.cache-hit != 'true'
|
|
run: brew install ninja sdl2
|
|
|
|
- name: Cache CMake build folder
|
|
id: cache-cmake-build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ${{ env.SRC_DIR_PATH }}/build
|
|
key: ${{ runner.os }}-${{ env.container_image_tag }}-cmake-build-${{ hashFiles(format('{0}/CMakeLists.txt', env.SRC_DIR_PATH)) }}
|
|
# Using a more specific key including a reference to the container if possible
|
|
# We need to define container_image_tag in the env or find a way to get it
|
|
|
|
- name: CMake configure (default version)
|
|
run: |
|
|
mkdir -p ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
|
|
# If cache was hit and build dir exists, this cmake might just verify.
|
|
# If build dir is empty, it will configure.
|
|
cmake -G Ninja ..
|
|
- name: Build (default version)
|
|
run: ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
- name: CMake configure (official)
|
|
run: |
|
|
cd ${SRC_DIR_PATH}/build
|
|
cmake -DOFFICIAL_BUILD=ON ..
|
|
- name: Build (official)
|
|
run: |
|
|
ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
- name: CMake configure (M&P)
|
|
run: |
|
|
cd ${SRC_DIR_PATH}/build
|
|
cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
|
|
- name: Build (M&P)
|
|
run: ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
build-lin:
|
|
name: Build (Steam Linux Runtime Sniper)
|
|
|
|
runs-on: ubuntu-latest
|
|
container: registry.gitlab.steamos.cloud/steamrt/sniper/sdk:beta
|
|
env:
|
|
CONTAINER_IMAGE_TAG: beta
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Cache CMake build folder
|
|
id: cache-cmake-build
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ${{ env.SRC_DIR_PATH }}/build
|
|
key: ${{ runner.os }}-${{ env.CONTAINER_IMAGE_TAG }}-cmake-build-${{ hashFiles(format('{0}/CMakeLists.txt', env.SRC_DIR_PATH)) }}
|
|
# Using a more specific key including a reference to the container
|
|
|
|
- name: CMake configure (default version)
|
|
run: |
|
|
mkdir -p ${SRC_DIR_PATH}/build && cd ${SRC_DIR_PATH}/build
|
|
# If cache was hit and build dir exists, this cmake might just verify.
|
|
# If build dir is empty, it will configure.
|
|
cmake -G Ninja ..
|
|
- name: Build (default version)
|
|
run: ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
- name: CMake configure (official)
|
|
run: |
|
|
cd ${SRC_DIR_PATH}/build
|
|
cmake -G Ninja -DOFFICIAL_BUILD=ON ..
|
|
- name: Build (official)
|
|
run: ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
- name: CMake configure (M&P)
|
|
run: |
|
|
cd ${SRC_DIR_PATH}/build
|
|
cmake -G Ninja -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
|
|
- name: Build (M&P)
|
|
run: ninja -C ${SRC_DIR_PATH}/build
|
|
|
|
build-win:
|
|
name: Build (windows-latest)
|
|
|
|
runs-on: windows-latest
|
|
|
|
env:
|
|
SDL_VERSION: 2.26.0
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Cache SDL
|
|
id: cache-windows-sdl
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-sdl
|
|
with:
|
|
path: C:\SDL2-*
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.SDL_VERSION }}
|
|
|
|
- if: ${{ steps.cache-windows-sdl.outputs.cache-hit != 'true' }}
|
|
name: Download SDL if not cached
|
|
run: |
|
|
Invoke-WebRequest "https://github.com/libsdl-org/SDL/releases/download/release-$env:SDL_VERSION/SDL2-devel-$env:SDL_VERSION-VC.zip" -OutFile C:\SDL.zip
|
|
Expand-Archive C:\SDL.zip -DestinationPath C:\
|
|
|
|
- name: Cache build folder for this CMakeLists.txt
|
|
id: cache-windows-build-folder
|
|
uses: actions/cache@v3
|
|
env:
|
|
cache-name: cache-windows-build-folder-VS2022
|
|
with:
|
|
path: |
|
|
desktop_version/build
|
|
desktop_version/CMakeLists.txt
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('desktop_version/CMakeLists.txt') }}-SDL${{ env.SDL_VERSION }}
|
|
|
|
- if: ${{ steps.cache-windows-build-folder.outputs.cache-hit != 'true' }}
|
|
name: CMake initial configure/generate
|
|
run: |
|
|
mkdir $env:SRC_DIR_PATH/build
|
|
cd $env:SRC_DIR_PATH/build
|
|
$env:LDFLAGS = "/LIBPATH:C:\SDL2-$env:SDL_VERSION\lib\x86 "
|
|
cmake -G "Visual Studio 17 2022" -A Win32 `
|
|
-DSDL2_INCLUDE_DIRS="C:\SDL2-$env:SDL_VERSION\include" `
|
|
-DSDL2_LIBRARIES="SDL2;SDL2main" ..
|
|
|
|
- name: CMake configure (default version)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake ..
|
|
- name: Build (default version)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake --build .
|
|
|
|
- name: CMake configure (official)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake -DOFFICIAL_BUILD=ON ..
|
|
- name: Build (official)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake --build .
|
|
|
|
- name: CMake configure (M&P)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake -DOFFICIAL_BUILD=OFF -DMAKEANDPLAY=ON ..
|
|
- name: Build (M&P)
|
|
run: |
|
|
cd $env:SRC_DIR_PATH/build
|
|
cmake --build .
|