name: Build Binaries on: workflow_dispatch: push: branches: - '**' # every branch - '!no-build-**' # unless marked as no-build jobs: build: strategy: fail-fast: false matrix: config: - name: "Windows" os_identifier: "win" os: windows-2019 prefixes: '' extra_flags: '-T host=x86 -A win32 -DGEODE_DEBUG=On' out_paths: './bin/nightly/Geode.pdb ./bin/nightly/Geode.dll ./bin/nightly/GeodeUpdater.exe ./bin/nightly/Geode.lib ./bin/nightly/XInput9_1_0.dll' cli_cmd: '' - name: "macOS" os_identifier: "mac" os: macos-latest prefixes: 'PATH="/usr/local/opt/ccache/libexec:$PATH"' extra_flags: "-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug -DGEODE_DEBUG=On -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13" out_paths: './bin/nightly/Geode.dylib ./bin/nightly/GeodeBootstrapper.dylib ./loader/include/link/libfmod.dylib' cli_cmd: 'chmod +x $GITHUB_WORKSPACE/cli/geode' name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} steps: - uses: actions/checkout@v2 with: submodules: recursive - uses: ilammy/msvc-dev-cmd@v1 with: arch: x86 if: matrix.config.os_identifier == 'win' - name: Configure ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ${{ matrix.config.os }} - name: Download CLI uses: robinraju/release-downloader@v1.5 with: repository: geode-sdk/cli latest: true fileName: "*-${{ matrix.config.os_identifier }}.zip" tarBall: false zipBall: false out-file-path: "cli" - name: Unzip CLI run: | 7z x "${{ github.workspace }}/cli/*-${{ matrix.config.os_identifier }}.zip" -o"${{ github.workspace }}/cli" - name: Add CLI to Path run: | ${{ matrix.config.cli_cmd }} echo "${{ github.workspace }}/cli" >> $GITHUB_PATH - name: Configure CMake run: > ${{ matrix.config.prefixes }} cmake -B ${{ github.workspace }}/build ${{ matrix.config.extra_flags }} -DCLI_PATH="${{ github.workspace }}/cli" -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache - name: Build run: | cd build cmake --build . --config RelWithDebInfo --parallel - name: Move to output folder shell: bash working-directory: ${{ github.workspace }} run: | mkdir ./out mv ${{ matrix.config.out_paths }} ./out - name: Get version uses: juliangruber/read-file-action@v1.1.6 with: path: ${{ github.workspace }}/VERSION id: version - name: Trim whitespace from version shell: bash run: echo "VERSION_TRIM=$(echo '${{ steps.version.outputs.content }}' | xargs)" >> $GITHUB_ENV - name: Delete resource cache file run: | rm ./bin/nightly/resources/.geode_cache - name: Upload resources uses: actions/upload-artifact@v2 with: name: resources path: ./bin/nightly/resources if: matrix.config.os_identifier == 'win' - name: Upload Artifacts uses: actions/upload-artifact@v2 with: name: geode-v${{ env.VERSION_TRIM }}-${{ matrix.config.os_identifier }} path: ./out - name: Package MacOS run: | cp -R ./bin/nightly/resources ./out/resources ./installer/mac/package.sh ./out ./out/geode-installer-v${{ env.VERSION_TRIM }}-mac.pkg if: matrix.config.os_identifier == 'mac' - name: Publish MacOS Installer uses: actions/upload-artifact@v2 with: name: geode-installer-v${{ env.VERSION_TRIM }}-mac path: ./out/geode-installer-v${{ env.VERSION_TRIM }}-mac.pkg if: matrix.config.os_identifier == 'mac' - name: Package Windows run: | cp -R ./bin/nightly/resources ./out/resources iwr -useb https://aka.ms/vs/17/release/vc_redist.x86.exe -outfile './installer/windows/VC_redist.x86.exe' makensis -WX -V3 ./installer/windows/installer.nsi mv ./installer/windows/GeodeInstaller.exe ./installer/windows/geode-installer-v${{ env.VERSION_TRIM }}-win.exe if: matrix.config.os_identifier == 'win' - name: Publish Windows Installer uses: actions/upload-artifact@v2 with: name: geode-installer-v${{ env.VERSION_TRIM }}-win path: ./installer/windows/geode-installer-v${{ env.VERSION_TRIM }}-win.exe if: matrix.config.os_identifier == 'win' publish: runs-on: ubuntu-latest needs: build if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v2 - name: Get version uses: juliangruber/read-file-action@v1.1.6 with: path: ${{ github.workspace }}/VERSION id: version - name: Trim whitespace from version shell: bash run: echo "VERSION_TRIM=$(echo '${{ steps.version.outputs.content }}' | xargs)" >> $GITHUB_ENV - name: Download artifacts uses: actions/download-artifact@v3 with: path: ${{ github.workspace }} - name: Move installers run: | mv geode-installer-v${{ env.VERSION_TRIM }}-mac.pkg geode-installer-nightly-mac.pkg mv geode-installer-v${{ env.VERSION_TRIM }}-win.exe geode-installer-nightly-win.exe - name: Zip MacOS artifacts uses: vimtor/action-zip@v1 with: files: geode-v${{ env.VERSION_TRIM }}-mac/Geode.dylib geode-v${{ env.VERSION_TRIM }}-mac/GeodeBootstrapper.dylib dest: geode-nightly-mac.zip - name: Zip Windows artifacts uses: vimtor/action-zip@v1 with: files: geode-v${{ env.VERSION_TRIM }}-win/XInput9_1_0.dll geode-v${{ env.VERSION_TRIM }}-win/Geode.dll geode-v${{ env.VERSION_TRIM }}-win/GeodeUpdater.exe geode-v${{ env.VERSION_TRIM }}-win/Geode.lib dest: geode-nightly-win.zip - name: Update Nightly Release uses: andelf/nightly-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: nightly name: 'Dev Release' draft: false prerelease: true body: | Dev release of Geode. Will not install the resources automatically, so you should use the installers to install them. files: | ./geode-nightly-mac.zip ./geode-nightly-win.zip ./geode-installer-nightly-mac.pkg ./geode-installer-nightly-win.exe