name: generate-builds on: push: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: generate-soh-otr: runs-on: ubuntu-22.04 steps: - name: Git Checkout uses: actions/checkout@v4 with: submodules: true - name: Configure ccache uses: hendrikmuhs/ccache-action@v1.2 with: save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-otr-ccache-${{ github.ref }} ${{ runner.os }}-otr-ccache - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool - name: Restore Cached deps folder uses: actions/cache/restore@v4 with: key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-deps-${{ github.ref }}- ${{ runner.os }}-deps- path: deps - name: Create deps folder run: mkdir -p deps - name: Install latest SDL run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/SDL2-2.30.3" ]; then wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz tar -xzf SDL2-2.30.3.tar.gz -C deps fi cd deps/SDL2-2.30.3 ./configure --enable-hidapi-libusb make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Install latest tinyxml2 run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz tar -xzf 10.0.0.tar.gz -C deps fi cd deps/tinyxml2-10.0.0 mkdir -p build cd build cmake .. make sudo make install - name: Generate soh.o2r run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release cmake --build build-cmake --config Release --target GenerateSohOtr -j3 - name: Upload soh.o2r uses: actions/upload-artifact@v4 with: name: soh.o2r path: soh.o2r retention-days: 3 build-macos: needs: generate-soh-otr runs-on: macos-14 steps: - name: Git Checkout uses: actions/checkout@v4 with: submodules: true - name: Configure ccache uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: true save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-14-ccache-${{ github.ref }} ${{ runner.os }}-14-ccache # Needed to apply sudo for macports cache restore - name: Install gtar wrapper run: | sudo mv /opt/homebrew/bin/gtar /opt/homebrew/bin/gtar.orig sudo cp .github/workflows/gtar /opt/homebrew/bin/gtar sudo chmod +x /opt/homebrew/bin/gtar - name: Restore Cached MacPorts id: restore-cache-macports uses: actions/cache/restore@v4 with: key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}- ${{ runner.os }}-14-macports- path: /opt/local/ # Updated PATH applies to the next step and onwards - name: Install MacPorts (if necessary) run: | if command -v /opt/local/bin/port 2>&1 >/dev/null; then echo "MacPorts already installed" else echo "Installing MacPorts" wget https://github.com/macports/macports-base/releases/download/v2.11.5/MacPorts-2.11.5-14-Sonoma.pkg sudo installer -pkg ./MacPorts-2.11.5-14-Sonoma.pkg -target / fi echo "/opt/local/bin:/opt/local/sbin" >> "$GITHUB_PATH" - name: Install dependencies run: | brew uninstall --ignore-dependencies libpng sudo port install $(cat .github/workflows/macports-deps.txt) brew install ninja - name: Download soh.o2r uses: actions/download-artifact@v4 with: name: soh.o2r path: build-cmake/soh - name: Build SoH run: | export PATH="/usr/lib/ccache:/opt/homebrew/opt/ccache/libexec:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DBUILD_REMOTE_CONTROL=1 cmake --build build-cmake --config Release --parallel 10 (cd build-cmake && cpack) mv _packages/*.dmg SoH.dmg mv README.md readme.txt - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-mac path: | SoH.dmg readme.txt - name: Save Cache MacPorts if: ${{ github.ref_name == github.event.repository.default_branch }} uses: actions/cache/save@v4 with: key: ${{ steps.restore-cache-macports.outputs.cache-primary-key }} path: /opt/local/ build-linux: needs: generate-soh-otr runs-on: ubuntu-22.04 steps: - name: Git Checkout uses: actions/checkout@v4 with: submodules: true - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) - name: Configure ccache uses: hendrikmuhs/ccache-action@v1.2 with: save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-ccache-${{ github.ref }} ${{ runner.os }}-ccache - name: Restore Cached deps folder id: restore-cache-deps uses: actions/cache/restore@v4 with: key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-deps-${{ github.ref }}- ${{ runner.os }}-deps- path: deps - name: Create deps folder run: mkdir -p deps - name: Install latest SDL run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/SDL2-2.30.3" ]; then wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz tar -xzf SDL2-2.30.3.tar.gz -C deps fi cd deps/SDL2-2.30.3 ./configure --enable-hidapi-libusb make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Install latest SDL_net run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/SDL2_net-2.2.0" ]; then wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz tar -xzf SDL2_net-2.2.0.tar.gz -C deps fi cd deps/SDL2_net-2.2.0 ./configure make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Install latest tinyxml2 run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz tar -xzf 10.0.0.tar.gz -C deps fi cd deps/tinyxml2-10.0.0 mkdir -p build cd build cmake .. make sudo make install - name: Install libzip without crypto run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/libzip-1.10.1" ]; then wget https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz tar -xzf libzip-1.10.1.tar.gz -C deps fi cd deps/libzip-1.10.1 mkdir -p build cd build cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF make sudo make install sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/ # this is available in 24.04 but not in 22.04, manually install it - name: Install valijson run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "deps/valijson-1.0.6" ]; then wget https://github.com/tristanpenman/valijson/archive/refs/tags/v1.0.6.tar.gz tar -xzf v1.0.6.tar.gz -C deps fi cd deps/valijson-1.0.6 mkdir -p build cd build cmake .. sudo cmake --install . # websocketpp has a known issue when using older versions of gcc and cpp 20 # https://github.com/zaphoyd/websocketpp/issues/991 # we can patch it here to work with the old version until we update the runner # to a version of ubuntu that has newer versions of gcc - name: Patch websocketpp run: | sudo sed -i 's/endpoint(/endpoint(/g' /usr/include/websocketpp/endpoint.hpp sudo sed -i 's/basic(/basic(/g' /usr/include/websocketpp/logger/basic.hpp sudo sed -i 's/server(/server(/g' /usr/include/websocketpp/roles/server_endpoint.hpp - name: Download soh.o2r uses: actions/download-artifact@v4 with: name: soh.o2r path: build-cmake/soh - name: Build SoH run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_REMOTE_CONTROL=1 cmake --build build-cmake --config Release -j3 (cd build-cmake && cpack -G External) mv README.md readme.txt mv build-cmake/*.appimage soh.appimage env: CC: gcc-12 CXX: g++-12 - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-linux path: | soh.appimage readme.txt - name: Save Cache deps folder if: ${{ github.ref_name == github.event.repository.default_branch }} uses: actions/cache/save@v4 with: key: ${{ steps.restore-cache-deps.outputs.cache-primary-key }} path: deps build-windows: needs: generate-soh-otr runs-on: windows-latest steps: - name: Install dependencies run: | choco install ninja -y Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue - name: Git Checkout uses: actions/checkout@v4 with: submodules: true - name: Configure sccache uses: hendrikmuhs/ccache-action@v1.2 with: variant: sccache max-size: "2G" evict-old-files: job save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-ccache-${{ github.ref }} ${{ runner.os }}-ccache - name: Restore Cached VCPKG folder id: restore-cache-vcpkg uses: actions/cache/restore@v4 with: key: ${{ runner.os }}-vcpkg-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-vcpkg-${{ github.ref }}- ${{ runner.os }}-vcpkg- path: vcpkg - name: Configure Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 - name: Download soh.o2r uses: actions/download-artifact@v4 with: name: soh.o2r path: build-windows/soh - name: Build SoH env: VCPKG_ROOT: ${{github.workspace}}/vcpkg run: | set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_REMOTE_CONTROL=1 cmake --build build-windows --config Release --parallel 10 (cd build-windows && cpack) cd .. mv _packages/*.zip _packages/soh-windows.zip - name: Unzip package run: Expand-Archive -Path _packages/soh-windows.zip -DestinationPath soh-windows - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-windows path: soh-windows - name: Save Cache VCPKG folder if: ${{ github.ref_name == github.event.repository.default_branch }} uses: actions/cache/save@v4 with: key: ${{ steps.restore-cache-vcpkg.outputs.cache-primary-key }} path: vcpkg