Update CI and Add MacOS ARM #350
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
name: CI | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
pull_request: | |
repository_dispatch: | |
types: [run_build] | |
jobs: | |
# Check code formatting correctness | |
# ----------------------------------------------------------------------------------------------- | |
formatting-check: | |
name: Formatting Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Run clang-format style check | |
uses: jidicula/clang-format-action@v4.5.0 | |
with: | |
clang-format-version: '13' | |
# Run unittests on modern-ish versions of gcc and clang. | |
# ----------------------------------------------------------------------------------------------- | |
unittest: | |
name: Run unit-tests on ${{ matrix.config.name }} | |
runs-on: ubuntu-24.04 | |
env: | |
CC: ${{ matrix.config.cc }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { name: "gcc 14", cc: gcc-14, tidy: "On" } | |
- { name: "clang 16", cc: clang-16, tidy: "Off" } | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Ubuntu Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install cmake cmake-data libargtable2-dev libcunit1-dev \ | |
libsdl2-mixer-dev libconfuse-dev libenet-dev libsdl2-dev libxmp-dev libpng-dev \ | |
clang-tidy ${{ matrix.config.cc }} | |
- name: Build tests | |
run: | | |
mkdir build-test && cd build-test | |
cmake -DCMAKE_BUILD_TYPE=Debug \ | |
-DUSE_TIDY=${{ matrix.config.tidy }} \ | |
-DUSE_TESTS=On \ | |
-DUSE_TOOLS=On .. | |
make -j $(getconf _NPROCESSORS_ONLN) | |
- name: Run tests | |
run: | | |
cd build-test | |
make test ARGS="-V" | |
# Build ubuntu package, release artifact and update "latest" release if necessary. | |
# ----------------------------------------------------------------------------------------------- | |
build_ubuntu: | |
needs: [unittest, formatting-check] | |
name: Build ubuntu-latest | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Ubuntu Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install cmake libargtable2-dev libcunit1-dev libsdl2-mixer-dev \ | |
libconfuse-dev libenet-dev libsdl2-dev libxmp-dev libpng-dev | |
- name: Generate Release | |
run: | | |
mkdir build-release && cd build-release | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=release .. | |
make -j $(getconf _NPROCESSORS_ONLN) | |
make -j $(getconf _NPROCESSORS_ONLN) install | |
- name: Get short SHA | |
id: slug | |
run: echo "sha8=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_OUTPUT | |
- name: Generate TGZ package | |
run: tar cvfz ${GITHUB_WORKSPACE}/openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_linux_amd64.tar.gz -C build-release/release/ . | |
- name: Upload TGZ artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_linux_amd64 | |
path: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_linux_amd64.tar.gz | |
- name: Generate DEB package | |
uses: jiro4989/build-deb-action@v2 | |
with: | |
package: openomf | |
package_root: build-release/release | |
maintainer: ${{ github.repository_owner }} | |
version: 0.6.6-${{ steps.slug.outputs.sha8 }} | |
arch: 'amd64' | |
depends: 'libargtable2, libsdl2-mixer, libconfuse, libenet, libsdl2, libxmp, libpng' | |
desc: 'One Must Fall 2097 Remake' | |
- name: Upload DEB artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_deb_amd64 | |
path: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_amd64.deb | |
# Build macos package, release artifact and update "latest" release if necessary. | |
# ----------------------------------------------------------------------------------------------- | |
build_macos: | |
needs: [unittest, formatting-check] | |
name: Build macos-12 | |
runs-on: macos-12 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Mac Dependencies | |
run: | | |
brew update | |
brew install cmake argtable cunit sdl2_mixer confuse enet sdl2 libxmp libpng | |
- name: Generate Release | |
run: | | |
mkdir build-release && cd build-release | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=release .. | |
make -j $(getconf _NPROCESSORS_ONLN) | |
make -j $(getconf _NPROCESSORS_ONLN) install | |
- name: Get short SHA | |
id: slug | |
run: echo "sha8=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_OUTPUT | |
- name: Generate ZIP package | |
run: | | |
cd build-release/release | |
zip -r ${GITHUB_WORKSPACE}/openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos12.zip . | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos12 | |
path: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos12.zip | |
build_macos-arm: | |
needs: [unittest, formatting-check] | |
name: Build macos-14 | |
runs-on: macos-14 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Mac Dependencies | |
run: | | |
brew update | |
brew install cmake argtable cunit sdl2_mixer confuse enet sdl2 libxmp libpng | |
- name: Generate Release | |
run: | | |
mkdir build-release && cd build-release | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=release .. | |
make -j $(getconf _NPROCESSORS_ONLN) | |
make -j $(getconf _NPROCESSORS_ONLN) install | |
- name: Get short SHA | |
id: slug | |
run: echo "sha8=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_OUTPUT | |
- name: Generate ZIP package | |
run: | | |
cd build-release/release | |
zip -r ${GITHUB_WORKSPACE}/openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos14_arm.zip . | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos14_arm | |
path: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_macos14_arm.zip | |
# Build windows package, release artifact and update "latest" release if necessary. | |
# ----------------------------------------------------------------------------------------------- | |
build_windows: | |
needs: [unittest, formatting-check] | |
name: Build windows-amd64 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install mingw-w64 unzip | |
wget -q https://github.com/omf2097/openomf-win-build/archive/refs/heads/main.zip | |
unzip -q main.zip && rm main.zip | |
- name: Generate Windows Release | |
run: | | |
mkdir build-release && cd build-release | |
cmake -DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_INSTALL_PREFIX=release \ | |
-DCMAKE_TOOLCHAIN_FILE="${GITHUB_WORKSPACE}/cmake-scripts/mingw-w64-toolchain.cmake" \ | |
-DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/openomf-win-build-main/" \ | |
-DCMAKE_INCLUDE_PATH="${GITHUB_WORKSPACE}/openomf-win-build-main/include/" \ | |
-DCMAKE_LIBRARY_PATH="${GITHUB_WORKSPACE}/openomf-win-build-main/lib/" \ | |
-DCMAKE_FIND_ROOT_PATH="${GITHUB_WORKSPACE}/openomf-win-build-main/" \ | |
"${GITHUB_WORKSPACE}" | |
make -j $(getconf _NPROCESSORS_ONLN) | |
make -j $(getconf _NPROCESSORS_ONLN) install | |
cp ${GITHUB_WORKSPACE}/openomf-win-build-main/bin/*.dll release/openomf/ | |
- name: Get short SHA | |
id: slug | |
run: echo "sha8=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_OUTPUT | |
- name: Generate ZIP package | |
run: | | |
cd build-release/release | |
zip -r ${GITHUB_WORKSPACE}/openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_windows_amd64.zip openomf | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_windows_amd64 | |
path: openomf_0.6.6-${{ steps.slug.outputs.sha8 }}_windows_amd64.zip | |
# Create a "latest" release | |
# ----------------------------------------------------------------------------------------------- | |
make_release: | |
needs: [build_windows, build_macos, build_macos-arm, build_ubuntu] | |
if: github.ref == 'refs/heads/master' | |
name: Make "latest" release | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: '0' | |
- uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- name: Advance tag | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
try { | |
await github.rest.git.deleteRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "tags/latest" | |
}) | |
} catch (e) { | |
console.log("The 'latest' tag doesn't exist yet", e) | |
} | |
try { | |
await github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: "refs/tags/latest", | |
sha: context.sha | |
}) | |
} catch (e) { | |
console.log("Unable to create 'latest' tag", e) | |
} | |
- name: Extract ubuntu releases | |
run: | | |
mkdir upload | |
shopt -s globstar | |
for file in artifacts/**; do | |
if [ -f "$file" ]; then | |
cp "$file" "${GITHUB_WORKSPACE}/upload/" | |
fi | |
done | |
- uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "upload/*" | |
body: "Latest release from master. Note that this is autogenerated release, and should only be used for testing purposes." | |
name: Latest | |
tag: latest | |
allowUpdates: true | |
prerelease: true | |
removeArtifacts: true | |
token: ${{ secrets.GITHUB_TOKEN }} |