Skip to content

Move all language strings into OpenOMF ${LANG}.LNG #1361

Move all language strings into OpenOMF ${LANG}.LNG

Move all language strings into OpenOMF ${LANG}.LNG #1361

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-assets.zip'
jobs:
# Check code formatting correctness
# -----------------------------------------------------------------------------------------------
formatting-check:
name: Formatting Check
runs-on: ubuntu-24.04
env:
clang-format-version: '16'
steps:
- uses: actions/checkout@v4
- name: Install clang-format and fd-find
uses: Eeems-Org/apt-cache-action@v1.3
with:
packages: clang-format-${{ env.clang-format-version }} fd-find
- name: Run clang-format style check
run: |
fdfind . -e .c -e .h -X clang-format-${{ env.clang-format-version }} --dry-run --Werror
# 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: "Off" }
- { name: "clang 18", cc: clang-18, tidy: "On" }
steps:
- uses: actions/checkout@v4
- name: Install Ubuntu Dependencies
uses: Eeems-Org/apt-cache-action@v1.3
with:
packages: cmake cmake-data libargtable2-dev libcunit1-dev
libsdl2-mixer-dev libconfuse-dev libenet-dev libsdl2-dev libxmp-dev libpng-dev
libepoxy-dev clang-tidy-18 ${{ 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_SANITIZERS=On \
-DUSE_TOOLS=On \
-DBUILD_LANGUAGES=Off \
..
make -j $(getconf _NPROCESSORS_ONLN)
- name: Run tests
run: |
cd build-test
make test ARGS="-V"
# Build windows package, release artifact (MSVC)
# -----------------------------------------------------------------------------------------------
build_msvc:
needs: [unittest, formatting-check]
name: Build windows-amd64 (MSVC)
runs-on: windows-latest
env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
steps:
- name: Export Github Actions cache environment variables
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- uses: actions/checkout@v4
- name: Check out VCPKG
# must be checked out *after* openomf.git
uses: actions/checkout@v4
with:
repository: 'microsoft/vcpkg'
path: 'vcpkg'
- name: Restore omf2097-assets.zip
id: cache-assets
uses: actions/cache/restore@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Download omf 2097 assets
if: steps.cache-assets.outputs.cache-hit != 'true'
run: Invoke-WebRequest -URI "${{ env.OPENOMF_ASSETS_URL }}" -OutFile omf2097-assets.zip
- name: Cache omf2097-assets.zip
if: steps.cache-assets.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Extract omf 2097 assets
run: |
Expand-Archive omf2097-assets.zip -PassThru
mkdir install/openomf/resources
Move-Item -Path omf2097-assets/OMF2097/ENGLISH.DAT,omf2097-assets/OMF2097/GERMAN.DAT -Destination resources -Force -PassThru
Move-Item -Path omf2097-assets/OMF2097/* -Destination install/openomf/resources/ -Force -PassThru
- name: Install openomf
run: cmake --install build-msvc --prefix install
- uses: lukka/get-cmake@latest
- uses: ilammy/msvc-dev-cmd@v1
- name: Install VCPKG Dependencies, Configure CMake
run: >
cmake -S . -B build-msvc
-G "Ninja"
--toolchain vcpkg/scripts/buildsystems/vcpkg.cmake
-DCMAKE_BUILD_TYPE="Release"
-DVCPKG_BUILD_TYPE="release"
-DVCPKG_TARGET_TRIPLET="x64-windows-static"
- name: Build openomf
run: cmake --build build-msvc --target openomf
- name: Get short SHA
shell: bash
id: slug
run: echo "sha8=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_OUTPUT
- name: Generate ZIP package
run: |
cd install
Compress-Archive -Path openomf -DestinationPath openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_msvc_amd64.zip -PassThru
- name: Upload ZIP artifact
uses: actions/upload-artifact@v4
with:
name: openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_msvc_amd64
path: install/openomf_${{ env.OPENOMF_VERSION }}-${{ steps.slug.outputs.sha8 }}_windows_msvc_amd64.zip
if-no-files-found: error
# Build ubuntu package, release artifact
# -----------------------------------------------------------------------------------------------
build_ubuntu:
needs: [unittest, formatting-check]
name: Build ubuntu-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Ubuntu Dependencies
uses: Eeems-Org/apt-cache-action@v1.3
with:
packages: cmake libargtable2-dev libcunit1-dev libsdl2-mixer-dev
libconfuse-dev libenet-dev libsdl2-dev libxmp-dev libpng-dev libepoxy-dev
libminiupnpc-dev libnatpmp-dev
- name: Restore omf2097-assets.zip
id: cache-assets
uses: actions/cache/restore@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Download omf 2097 assets
if: steps.cache-assets.outputs.cache-hit != 'true'
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Cache omf2097-assets.zip
if: steps.cache-assets.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Extract omf 2097 assets
run: |
mkdir -p build-release/release/usr/share/games/openomf
unzip -j omf2097-assets.zip -d build-release/release/usr/share/games/openomf
mv build-release/release/usr/share/games/openomf/{ENGLISH.DAT,GERMAN.DAT} resources/
- name: Generate Release
run: |
mkdir -p 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: 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@v3
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, libepoxy0, libminiupnpc17, libnatpmp1'
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
# -----------------------------------------------------------------------------------------------
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 libepoxy miniupnpc libnatpmp
- name: Restore omf2097-assets.zip
id: cache-assets
uses: actions/cache/restore@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Download omf 2097 assets
if: steps.cache-assets.outputs.cache-hit != 'true'
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Cache omf2097-assets.zip
if: steps.cache-assets.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Extract omf 2097 assets
run: |
mkdir -p build-release/release/usr/share/games/openomf
unzip -j omf2097-assets.zip -d build-release/release/usr/share/games/openomf
mv build-release/release/usr/share/games/openomf/{ENGLISH.DAT,GERMAN.DAT} resources/
- name: Generate Release
run: |
mkdir -p 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: 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 (mingw-w64)
# -----------------------------------------------------------------------------------------------
build_windows:
needs: [unittest, formatting-check]
name: Build windows-amd64 (mingw-w64)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install apt Dependencies
uses: Eeems-Org/apt-cache-action@v1.3
with:
packages: mingw-w64 unzip wine64 wine
- name: Install Dependencies
run: |
wget -q https://github.com/omf2097/openomf-win-build/archive/refs/heads/main.zip
unzip -q main.zip && rm main.zip
- name: Restore omf2097-assets.zip
id: cache-assets
uses: actions/cache/restore@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Download omf 2097 assets
if: steps.cache-assets.outputs.cache-hit != 'true'
run: wget -q "${{ env.OPENOMF_ASSETS_URL }}"
- name: Cache omf2097-assets.zip
if: steps.cache-assets.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: omf2097-assets.zip
key: omf2097-assets.zip
- name: Extract omf 2097 assets
run: |
mkdir -p build-release/release/usr/share/games/openomf
unzip -j omf2097-assets.zip -d build-release/release/usr/share/games/openomf
mv build-release/release/usr/share/games/openomf/{ENGLISH.DAT,GERMAN.DAT} resources/
- name: Generate Windows Release
run: |
mkdir -p build-release && cd build-release
export WINEPATH="${GITHUB_WORKSPACE}/openomf-win-build-main/bin/"
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/" \
-DOMF_COMMAND_WRAPPER="wine" \
"${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_${{ 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, build_msvc]
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 }}