From 84b8aef20aba949952625766a8627798c68a1518 Mon Sep 17 00:00:00 2001 From: Archez Date: Sun, 26 May 2024 11:17:00 -0400 Subject: [PATCH] GH action runner updates (#462) --- .github/workflows/macports-deps.txt | 1 + .github/workflows/main.yml | 447 +++++++++++++++++++++------- mm/2s2h/BenPort.cpp | 3 +- mm/linux/2s2h.sh.in | 18 +- 4 files changed, 346 insertions(+), 123 deletions(-) create mode 100644 .github/workflows/macports-deps.txt diff --git a/.github/workflows/macports-deps.txt b/.github/workflows/macports-deps.txt new file mode 100644 index 000000000..9a3c7b9c0 --- /dev/null +++ b/.github/workflows/macports-deps.txt @@ -0,0 +1 @@ +libsdl2 +universal libsdl2_net +universal libpng +universal glew +universal libzip +universal nlohmann-json +universal tinyxml2 +universal diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 685bbcf7f..395551144 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,111 +6,51 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - build-linux: - strategy: - fail-fast: true - runs-on: [self-hosted, Linux] - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - name: Install dependencies - run: | - sudo apt update - sudo apt install -y $(cat .github/workflows/apt-deps.txt) file - - name: Install latest SDL - run: | - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "SDL2-2.26.1" ]; then - wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz - tar -xzf SDL2-2.26.1.tar.gz - fi - cd SDL2-2.26.1 - ./configure - make -j - sudo make install - sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - - name: Build 2Ship - 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 Generate2ShipOtr -j - cmake --build build-cmake --config Release -j - - (cd build-cmake && cpack -G External) - mv README.md readme.txt - mv build-cmake/*.appimage 2ship.appimage - env: - CC: gcc - CXX: g++ - # - name: Upload build - # uses: actions/upload-artifact@v4 - # with: - # name: 2ship-linux - # path: | - # 2ship.appimage - # readme.txt - # build-windows: - # needs: generate-soh-otr-and-headers - # runs-on: windows-latest + # build-linux-self-hosted: + # strategy: + # fail-fast: true + # runs-on: [self-hosted, Linux] # steps: - # - name: Install dependencies - # run: | - # choco install ninja - # - uses: actions/checkout@v3 + # - uses: actions/checkout@v4 # with: # submodules: true - # - name: ccache - # uses: hendrikmuhs/ccache-action@v1.2.11 - # with: - # key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} - # restore-keys: | - # ${{ runner.os }}-ccache-${{ github.ref }} - # ${{ runner.os }}-ccache- - # - name: Cache build folder - # uses: actions/cache@v4 - # with: - # key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} - # restore-keys: | - # ${{ runner.os }}-build-${{ github.ref }} - # ${{ runner.os }}-build- - # path: | - # build-windows - # vcpkg - # - name: Configure Developer Command Prompt - # uses: ilammy/msvc-dev-cmd@v1 - # - name: Download 2ship.otr - # uses: actions/download-artifact@v4 - # with: - # name: 2ship.otr - # - name: Download Headers - # uses: actions/download-artifact@v4 - # with: - # name: headers - # path: mm/assets - # - name: Build 2Ship - # env: - # VCPKG_ROOT: ${{github.workspace}}/vcpkg + # - name: Install dependencies # 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=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache - # cmake --build build-windows --config Release --parallel 10 + # sudo apt update + # sudo apt install -y $(cat .github/workflows/apt-deps.txt) file + # - name: Install latest SDL + # run: | + # export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + # if [ ! -d "SDL2-2.26.1" ]; then + # wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz + # tar -xzf SDL2-2.26.1.tar.gz + # fi + # cd SDL2-2.26.1 + # ./configure + # make -j + # sudo make install + # sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ + # - name: Build 2Ship + # 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 Generate2ShipOtr -j + # cmake --build build-cmake --config Release -j + + # (cd build-cmake && cpack -G External) + # mv README.md readme.txt + # mv build-cmake/*.appimage 2ship.appimage + # env: + # CC: gcc + # CXX: g++ + # # - name: Upload build + # # uses: actions/upload-artifact@v4 + # # with: + # # name: 2ship-linux + # # path: | + # # 2ship.appimage + # # readme.txt - # mkdir 2ship-windows - # mv ./x64/Release/mm.exe ./2ship-windows/2ship.exe - # mkdir 2ship-windows/debug - # mkdir 2ship-windows/mods - # New-Item 2ship-windows/mods/custom_otr_files_go_here.txt -type file - # # mv ./x64/Release/2ship.pdb ./2ship-windows/debug/2ship.pdb - # mv ./README.md ./2ship-windows/readme.txt - # mv ./build-windows/gamecontrollerdb.txt ./2ship-windows/gamecontrollerdb.txt - # mv ./x64/Release/assets ./2ship-windows - # mv ./2ship.otr ./2ship-windows/2ship.otr - # - name: Upload build - # uses: actions/upload-artifact@v4 - # with: - # name: 2ship-windows - # path: 2ship-windows build-windows-self-hosted: runs-on: [self-hosted, Windows] steps: @@ -119,26 +59,15 @@ jobs: choco install ninja -y choco install gzip -y Add-Content $env:GITHUB_PATH $env:ChocolateyInstall - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - # - name: Cache build folder - # uses: actions/cache@v4 - # with: - # save-always: true - # key: ${{ runner.os }}-self-build-${{ github.ref }}-${{ github.sha }} - # restore-keys: | - # ${{ runner.os }}-self-build-${{ github.ref }} - # ${{ runner.os }}-self-build- - # path: | - # build-windows - # vcpkg - name: Configure Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 - name: Copy Rom run: Copy-Item -Path C:\baserom_mm.z64 -Destination ${{github.workspace}}/OTRExporter/baserom.z64 - name: Build 2Ship - env: + env: VCPKG_ROOT: ${{github.workspace}}/vcpkg run: | set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" @@ -168,3 +97,295 @@ jobs: r2-bucket: ${{ secrets.R2_BUCKET }} source-dir: _packages destination-dir: ./ + + # generate-2ship-otr: + # runs-on: ubuntu-22.04 + # steps: + # - uses: actions/checkout@v4 + # with: + # submodules: true + # - name: ccache + # uses: hendrikmuhs/ccache-action@v1.2.11 + # with: + # 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) + # - name: Cache build folders + # uses: actions/cache@v4 + # with: + # key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-otr-build-${{ github.ref }} + # ${{ runner.os }}-otr-build + # path: | + # build-cmake + # SDL2-2.28.5 + # tinyxml2-10.0.0 + # - name: Install latest SDL + # run: | + # export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + # if [ ! -d "SDL2-2.28.5" ]; then + # wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz + # tar -xzf SDL2-2.28.5.tar.gz + # fi + # cd SDL2-2.28.5 + # ./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 "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 + # fi + # cd tinyxml2-10.0.0 + # mkdir -p build + # cd build + # cmake .. + # make + # sudo make install + # - name: Generate 2ship.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 Generate2ShipOtr -j3 + # - uses: actions/upload-artifact@v4 + # with: + # name: 2ship.zip + # path: 2ship.zip + # retention-days: 1 + + # build-macos: + # needs: generate-2ship-otr + # runs-on: macos-14 + # steps: + # - uses: actions/checkout@v4 + # with: + # submodules: true + # - name: ccache + # uses: hendrikmuhs/ccache-action@v1.2.13 + # with: + # create-symlink: true + # key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-14-ccache-${{ github.ref }} + # ${{ runner.os }}-14-ccache + # - name: Cache MacPorts + # id: cache-macports + # uses: actions/cache@v4 + # with: + # path: /opt/local/ + # key: ${{ runner.os }}-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }} + # restore-keys: | + # ${{ runner.os }}-macports + # - name: Install MacPorts (if necessary) + # run: | + # if [ -d /opt/local/ ]; then + # echo "MacPorts already installed" + # else + # wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg + # sudo installer -pkg ./MacPorts-2.9.3-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 2ship.o2r + # uses: actions/download-artifact@v4 + # with: + # name: 2ship.zip + # path: build-cmake/mm + # - name: Build 2Ship + # 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 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" + # cmake --build build-cmake --config Release --parallel 10 + # (cd build-cmake && cpack) + + # mv _packages/*.dmg 2Ship.dmg + # mv README.md readme.txt + # # - name: Upload build + # # if: ${{ startsWith(github.ref, 'refs/heads/develop') }} + # # uses: actions/upload-artifact@v4 + # # with: + # # name: 2ship-mac + # # path: | + # # 2Ship.dmg + # # readme.txt + + build-linux: + # needs: generate-2ship-otr + runs-on: ubuntu-22.04 + steps: + - 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: ccache + uses: hendrikmuhs/ccache-action@v1.2.11 + with: + key: linux-ccache-${{ github.ref }}-${{ github.sha }} + restore-keys: | + linux-ccache-${{ github.ref }} + linux-ccache + - name: Cache build folders + uses: actions/cache@v4 + with: + key: linux-build-${{ github.ref }}-${{ github.sha }} + restore-keys: | + linux-build-${{ github.ref }} + linux-build + path: | + SDL2-2.28.5 + SDL2_net-2.2.0 + tinyxml2-10.0.0 + - name: Install latest SDL + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + if [ ! -d "SDL2-2.28.5" ]; then + wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz + tar -xzf SDL2-2.28.5.tar.gz + fi + cd SDL2-2.28.5 + ./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 "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 + fi + cd tinyxml2-10.0.0 + mkdir -p build + cd build + cmake .. + make + sudo make install + - name: Install latest SDL_net + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + if [ ! -d "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 + fi + cd 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: Download 2ship.o2r + # uses: actions/download-artifact@v4 + # with: + # name: 2ship.zip + # path: build-cmake/mm + - 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 --target Generate2ShipOtr -j3 + cmake --build build-cmake --config Release -j3 + (cd build-cmake && cpack -G External) + + mv README.md readme.txt + mv build-cmake/*.appimage 2ship.appimage + env: + CC: gcc-12 + CXX: g++-12 + # Temporarily replaced with an upload to R2 until we go public + # - name: Upload build + # uses: actions/upload-artifact@v4 + # with: + # name: 2ship-linux + # path: | + # 2ship.appimage + # readme.txt + # Remove Zip step when uploading directly to GH artifactory + - name: Zip build + run: | + mkdir -p _release + zip -qq _release/2ship-linux.zip 2ship.appimage readme.txt + - name: Upload build + if: ${{ startsWith(github.ref, 'refs/heads/develop') }} + uses: ryand56/r2-upload-action@latest + with: + r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} + r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} + r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} + r2-bucket: ${{ secrets.R2_BUCKET }} + source-dir: _release + destination-dir: ./ + + # build-windows: + # needs: generate-2ship-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 + # - uses: actions/checkout@v4 + # with: + # submodules: true + # - name: ccache + # uses: hendrikmuhs/ccache-action@v1.2.11 + # with: + # variant: sccache + # max-size: "1G" + # key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-ccache-${{ github.ref }} + # ${{ runner.os }}-ccache + # - name: Cache build folder + # uses: actions/cache@v4 + # with: + # save-always: true + # key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} + # restore-keys: | + # ${{ runner.os }}-build-${{ github.ref }} + # ${{ runner.os }}-build + # path: | + # build-windows + # vcpkg + # - name: Configure Developer Command Prompt + # uses: ilammy/msvc-dev-cmd@v1 + # - name: Download 2ship.o2r + # uses: actions/download-artifact@v4 + # with: + # name: 2ship.zip + # path: build-windows/mm + # - name: Build 2Ship + # 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 + # cmake --build build-windows --config Release --parallel 10 + + # (cd build-windows && cpack) + # cd .. + # mv _packages/*.zip _packages/2ship-windows.zip + # - name: Unzip package + # run: Expand-Archive -Path _packages/2ship-windows.zip -DestinationPath 2ship-windows + # # - name: Upload build + # # if: ${{ startsWith(github.ref, 'refs/heads/develop') }} + # # uses: actions/upload-artifact@v4 + # # with: + # # name: 2ship-windows + # # path: 2ship-windows diff --git a/mm/2s2h/BenPort.cpp b/mm/2s2h/BenPort.cpp index 2bff9ff38..02878f00b 100644 --- a/mm/2s2h/BenPort.cpp +++ b/mm/2s2h/BenPort.cpp @@ -451,7 +451,8 @@ void Ben_ProcessDroppedFiles(std::string filePath) { extern "C" void InitOTR() { #if not defined(__SWITCH__) && not defined(__WIIU__) - if (!std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("mm.zip", appShortName))) { + if (!std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("mm.zip", appShortName)) && + !std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("mm.otr", appShortName))) { std::string installPath = Ship::Context::GetAppBundlePath(); if (!std::filesystem::exists(installPath + "/assets/extractor")) { Extractor::ShowErrorBox( diff --git a/mm/linux/2s2h.sh.in b/mm/linux/2s2h.sh.in index 6843de16b..fe3eff7f5 100644 --- a/mm/linux/2s2h.sh.in +++ b/mm/linux/2s2h.sh.in @@ -18,7 +18,7 @@ if [[ ! -e "$SHIP_HOME"/mods ]]; then touch "$SHIP_HOME"/mods/custom_mod_files_go_here.txt fi -while [[ (! -e "$SHIP_HOME"/mm.otr) ]]; do +while [[ (! -e "$SHIP_HOME"/mm.zip) ]]; do for romfile in "$SHIP_HOME"/*.*64 do if [[ -e "$romfile" ]] || [[ -L "$romfile" ]]; then @@ -60,21 +60,21 @@ while [[ (! -e "$SHIP_HOME"/mm.otr) ]]; do case "$ROMHASH" in 7f5630dbc4d5d61d6276213210c4d5cdd83a47d6) # uncompressed - if [[ ! -e "$SHIP_HOME"/mm.otr ]]; then + if [[ ! -e "$SHIP_HOME"/mm.zip ]]; then ROM=N64_US else continue fi ;; d6133ace5afaa0882cf214cf88daba39e266c078) # compressed - if [[ ! -e "$SHIP_HOME"/mm.otr ]]; then + if [[ ! -e "$SHIP_HOME"/mm.zip ]]; then ROM=N64_US else continue fi ;; 9743aa026e9269b339eb0e3044cd5830a440c1fd) # compressed - if [[ ! -e "$SHIP_HOME"/mm.otr ]]; then + if [[ ! -e "$SHIP_HOME"/mm.zip ]]; then ROM=GC_US else continue @@ -84,18 +84,18 @@ while [[ (! -e "$SHIP_HOME"/mm.otr) ]]; do echo -e "\n$romfile - $ROMHASH rom hash does not match\n" continue;; esac - if [[ ! -e "$SHIP_HOME"/mm.otr ]]; then + if [[ ! -e "$SHIP_HOME"/mm.zip ]]; then if [ -n "$ZENITY" ]; then (echo "# 25%"; echo "25"; sleep 2; echo "# 50%"; echo "50"; sleep 3; echo "# 75%"; echo "75"; sleep 2; echo "# 100%"; echo "100"; sleep 3) | zenity --progress --title="OTR Generating..." --timeout=10 --percentage=0 --icon-name=2s2h --window-icon=2s2h.png --height=80 --width=400 & else echo "Processing..." fi - assets/extractor/ZAPD.out ed -eh -i assets/extractor/xmls/"${ROM}" -b tmp/rom.z64 -fl assets/extractor/filelists -o placeholder -osf placeholder -gsf 1 -rconf assets/extractor/Config_"${ROM}".xml -se OTR --otrfile mm.otr --portVer "@CMAKE_PROJECT_VERSION@" > /dev/null 2>&1 - cp "$ASSETDIR"/mm.otr "$SHIP_HOME" + assets/extractor/ZAPD.out ed -eh -i assets/extractor/xmls/"${ROM}" -b tmp/rom.z64 -fl assets/extractor/filelists -o placeholder -osf placeholder -gsf 1 -rconf assets/extractor/Config_"${ROM}".xml -se OTR --otrfile mm.zip --portVer "@CMAKE_PROJECT_VERSION@" > /dev/null 2>&1 + cp "$ASSETDIR"/mm.zip "$SHIP_HOME" fi else - if [[ (! -e "$SHIP_HOME"/mm.otr) ]]; then + if [[ (! -e "$SHIP_HOME"/mm.zip) ]]; then if [ -n "$ZENITY" ]; then zenity --error --timeout=5 --text="Place ROM in $SHIP_HOME" --title="Missing ROM file" --width=500 --width=200 else @@ -105,7 +105,7 @@ while [[ (! -e "$SHIP_HOME"/mm.otr) ]]; do fi fi done - if [[ (! -e "$SHIP_HOME"/mm.otr) ]]; then + if [[ (! -e "$SHIP_HOME"/mm.zip) ]]; then if [ -n "$ZENITY" ]; then zenity --error --timeout=10 --text="No valid ROMs were provided, No OTR was generated." --title="Incorrect ROM file" --width=500 --width=200 else