Skip to content

Asset bundling

Asset bundling #389

Workflow file for this run

name: CI
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
repository_dispatch:
types: [run_build]
env:
OPENOMF_VERSION: '0.6.6'
OPENOMF_ASSETS_URL: 'https://www.omf2097.com/pub/files/omf/omf2097.zip'
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/usr ..
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: Restore omf2097.zip
id: cache-assets
uses: actions/cache/restore@v4
with:
path: omf2097.zip
key: omf2097.zip
- name: Download omf 2097 assets
if: steps.cache-assets.outputs.cache-hit != 'true'
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Cache omf2097.zip
id: cache-assets

Check failure on line 109 in .github/workflows/compilation.yml

View workflow run for this annotation

GitHub Actions / CI

Invalid workflow file

The workflow is not valid. .github/workflows/compilation.yml (Line: 109, Col: 11): The identifier 'cache-assets' may not be used more than once within the same scope.
uses: actions/cache/save@v4
with:
path: omf2097.zip
key: omf2097.zip
- name: Extract omf 2097 assets
run: unzip -j omf2097.zip -d build-release/release/usr/share/games/openomf
- name: Generate TGZ package
run: tar cvfz ${GITHUB_WORKSPACE}/openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_linux_amd64.tar.gz -C build-release/release/ .
- name: Upload TGZ artifact
uses: actions/upload-artifact@v4
with:
name: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_linux_amd64
path: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_linux_amd64.tar.gz
if-no-files-found: error
- name: Generate DEB package
uses: jiro4989/build-deb-action@v2
with:
package: openomf
package_root: build-release/release
maintainer: ${{ github.repository_owner }}
version: ${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}
arch: 'amd64'
depends: 'libargtable2-0, libsdl2-mixer-2.0-0, libconfuse2, libenet7, libsdl2-2.0-0, libxmp4, libpng16-16'
desc: 'One Must Fall 2097 Remake'
- name: Install the DEB package
run: sudo apt install ./openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_amd64.deb
- name: Upload DEB artifact
uses: actions/upload-artifact@v4
with:
name: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_deb_amd64
path: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_amd64.deb
if-no-files-found: error
# Build macos package, release artifact and update "latest" release if necessary.
# -----------------------------------------------------------------------------------------------
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/usr ..
make -j $(getconf _NPROCESSORS_ONLN)
make -j $(getconf _NPROCESSORS_ONLN) install
- name: Download omf 2097 assets
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Extract omf 2097 assets
run: unzip -j omf2097.zip -d build-release/release/usr/share/games/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_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_macos14_arm.zip .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_macos14_arm
path: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_macos14_arm.zip
if-no-files-found: error
# 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: Download omf 2097 assets
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Extract omf 2097 assets
run: unzip -j omf2097.zip -d build-release/release/openomf/resources
- name: Generate ZIP package
run: |
cd build-release/release
zip -r ${GITHUB_WORKSPACE}/openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_amd64.zip openomf
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_amd64
path: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_amd64.zip
if-no-files-found: error
# Create a "latest" release
# -----------------------------------------------------------------------------------------------
make_release:
needs: [build_windows, 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 }}