From 90b9e54fd3de2aa9f63b9facd8fb5bee5bd080c5 Mon Sep 17 00:00:00 2001 From: vansangpfiev Date: Tue, 9 Jul 2024 13:53:58 +0700 Subject: [PATCH] fix: add release CI --- .github/workflows/build.yml | 438 +++++++++++++++++++++++++++++ .github/workflows/quality-gate.yml | 4 +- 2 files changed, 439 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..2173140 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,438 @@ +name: CI + +on: + push: + tags: ["v[0-9]+.[0-9]+.[0-9]+"] + paths: + [ + ".github/scripts/**", + ".github/workflows/build.yml", + "**/CMakeLists.txt", + "**/Makefile", + "**/*.h", + "**/*.hpp", + "**/*.c", + "**/*.cpp", + "**/*.cu", + "**/*.cc", + "**/*.cxx", + "llama.cpp", + "!docs/**", + "!.gitignore", + "!README.md", + ] + workflow_dispatch: + +env: + WHISPER_MODEL_URL: https://delta.jan.ai/ggml-tiny-q5_1.bin + +jobs: + create-draft-release: + runs-on: ubuntu-latest + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + version: ${{ steps.get_version.outputs.version }} + permissions: + contents: write + steps: + - name: Extract tag name without v prefix + id: get_version + run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV && echo "::set-output name=version::${GITHUB_REF#refs/tags/v}" + env: + GITHUB_REF: ${{ github.ref }} + - name: Create Draft Release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.ref_name }} + token: ${{ secrets.GITHUB_TOKEN }} + name: "${{ env.VERSION }}" + draft: true + prerelease: false + + build-and-test: + runs-on: ${{ matrix.runs-on }} + needs: [create-draft-release] + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + include: + - os: "linux" + name: "amd64-avx2" + runs-on: "ubuntu-20-04" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: true + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-noavx" + runs-on: "ubuntu-20-04" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx" + runs-on: "ubuntu-20-04" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX2=OFF -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx512" + runs-on: "ubuntu-20-04" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX512=ON -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-vulkan" + runs-on: "ubuntu-20-04-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_VULKAN=ON -DGGML_NATIVE=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: true + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx2-cuda-11-7" + runs-on: "ubuntu-20-04-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx-cuda-11-7" + runs-on: "ubuntu-20-04-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX2=OFF -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx512-cuda-11-7" + runs-on: "ubuntu-20-04-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX512=ON -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx2-cuda-12-0" + runs-on: "ubuntu-20-04-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx-cuda-12-0" + runs-on: "ubuntu-20-04-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX2=OFF -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "linux" + name: "amd64-avx512-cuda-12-0" + runs-on: "ubuntu-20-04-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX512=ON -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_BUILD_TYPE='Release' -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "/tmp/sccache.conf" + + - os: "mac" + name: "amd64" + runs-on: "macos-13" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DBUILD_SHARED_LIBS=OFF -DGGML_METAL=OFF -DWHISPER_SDL2=ON" + run-e2e: true + vulkan: false + sccache: false + sccache-conf-path: "" + + - os: "mac" + name: "arm64" + runs-on: "macos-silicon" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DBUILD_SHARED_LIBS=OFF -DGGML_METAL_EMBED_LIBRARY=ON -DWHISPER_SDL2=ON" + run-e2e: true + vulkan: false + sccache: false + sccache-conf-path: "" + + - os: "windows" + name: "amd64-avx2" + runs-on: "windows-2019" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "" + + - os: "windows" + name: "amd64-avx" + runs-on: "windows-2019" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_AVX2=OFF -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl -GNinja" + run-e2e: true + vulkan: false + sccache: false + sccache-conf-path: "" + + - os: "windows" + name: "amd64-avx512" + runs-on: "windows-2019" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_AVX512=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: "" + + - os: "windows" + name: "amd64-vulkan" + runs-on: "windows-2019" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_VULKAN=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl -GNinja" + run-e2e: false + vulkan: true + sccache: false + sccache-conf-path: "" + + - os: "windows" + name: "amd64-avx2-cuda-12-0" + runs-on: "windows-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + - os: "windows" + name: "amd64-avx-cuda-12-0" + runs-on: "windows-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX2=OFF -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + - os: "windows" + name: "amd64-avx512-cuda-12-0" + runs-on: "windows-cuda-12-0" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX512=ON -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + - os: "windows" + name: "amd64-avx2-cuda-11-7" + runs-on: "windows-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + - os: "windows" + name: "amd64-avx-cuda-11-7" + runs-on: "windows-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX2=OFF -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + - os: "windows" + name: "amd64-avx512-cuda-11-7" + runs-on: "windows-cuda-11-7" + cmake-flags: "-DCORTEXAUDIO_VERSION=${{github.event.pull_request.head.sha}} -DGGML_AVX512=ON -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DWHISPER_SDL2=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CUDA_COMPILER_LAUNCHER=sccache -GNinja" + run-e2e: false + vulkan: false + sccache: false + sccache-conf-path: 'C:\sccache.conf' + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Prepare Vulkan SDK + if: ${{ matrix.vulkan }} + uses: humbletim/setup-vulkan-sdk@v1.2.0 + with: + vulkan-query-version: 1.3.275.0 + vulkan-components: Vulkan-Headers, Vulkan-Loader + vulkan-use-cache: true + - name: create sccache.conf + if: ${{ matrix.sccache }} + run: | + echo "[cache.s3]" > ${{ matrix.sccache-conf-path }} + echo 'bucket = "${{ secrets.MINIO_BUCKET_NAME }}"' >> ${{ matrix.sccache-conf-path }} + echo 'endpoint = "${{ secrets.MINIO_ENDPOINT }}"' >> ${{ matrix.sccache-conf-path }} + echo 'key_prefix = "${{ matrix.os }}-${{ matrix.name }}"' >> ${{ matrix.sccache-conf-path }} + echo 'use_ssl = false' >> ${{ matrix.sccache-conf-path }} + echo 'server_side_encryption = false' >> ${{ matrix.sccache-conf-path }} + echo 'no_credentials = false' >> ${{ matrix.sccache-conf-path }} + + - name: Get Cer for code signing + if: runner.os == 'macOS' + run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12 + shell: bash + env: + CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + + - uses: apple-actions/import-codesign-certs@v2 + if: runner.os == 'macOS' + with: + p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} + p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} + + - uses: actions/setup-dotnet@v3 + if: runner.os == 'Windows' + with: + dotnet-version: "8.0.x" + + - name: Install SDL2 on MacOS + if: runner.os == 'macOS' + continue-on-error: true + run: | + brew update + brew install sdl2 + + - name: Install choco on Windows + if: runner.os == 'Windows' + run: | + choco install make sccache ninja -y + choco install wget -y + + - name: Fetch SDL2 on Windows + if: runner.os == 'Windows' + run: | + C:\ProgramData\chocolatey\lib\Wget\tools\wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-2.28.5/SDL2-devel-2.28.5-VC.zip + 7z x sdl2.zip -aoa + echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-2.28.5/cmake" >> $env:GITHUB_ENV + + - name: Install ninja build on Linux + if: runner.os == 'Linux' + run: | + sudo apt install ninja-build -y + + - name: Add msbuild to PATH + if: runner.os == 'Windows' + uses: ilammy/msvc-dev-cmd@v1.13.0 + + - name: start scache server + if: ${{ matrix.sccache }} + run: | + sccache --start-server + env: + SCCACHE_BUCKET: "${{ secrets.MINIO_BUCKET_NAME }}" + SCCACHE_REGION: "${{ secrets.MINIO_REGION }}" + SCCACHE_ENDPOINT: "${{ secrets.MINIO_ENDPOINT }}" + SCCACHE_S3_USE_SSL: "false" + SCCACHE_S3_SERVER_SIDE_ENCRYPTION: "false" + SCCACHE_S3_KEY_PREFIX: "${{ matrix.os }}-${{ matrix.name }}" + SCCACHE_LOG: "debug" + SCCACHE_CONF: '${{ matrix.sccache-conf-path }}' + AWS_ACCESS_KEY_ID: "${{ secrets.MINIO_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MINIO_SECRET_ACCESS_KEY }}" + SCCACHE_IDLE_TIMEOUT: "0" + + - name: Build + run: | + make build-example-server CMAKE_EXTRA_FLAGS="${{ matrix.cmake-flags }}" + + - name: Pre Package + run: | + make pre-package + + - name: Code Signing macOS + if: runner.os == 'macOS' + run: | + make codesign CODE_SIGN=true DEVELOPER_ID="${{ secrets.DEVELOPER_ID }}" + + - name: Code Signing Windows + if: runner.os == 'Windows' + shell: cmd + run: | + set PATH=%PATH%;%USERPROFILE%\.dotnet\tools + make codesign CODE_SIGN=true AZURE_KEY_VAULT_URI="${{ secrets.AZURE_KEY_VAULT_URI }}" AZURE_CLIENT_ID="${{ secrets.AZURE_CLIENT_ID }}" AZURE_TENANT_ID="${{ secrets.AZURE_TENANT_ID }}" AZURE_CLIENT_SECRET="${{ secrets.AZURE_CLIENT_SECRET }}" AZURE_CERT_NAME="${{ secrets.AZURE_CERT_NAME }}" + + - name: Package + run: | + make package + + - name: Run e2e testing + if: ${{ matrix.run-e2e }} + run: | + make run-e2e-test WHISPER_MODEL_URL=${{ env.WHISPER_MODEL_URL }} + + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: cortex.audio-${{ matrix.os }}-${{ matrix.name }} + path: ./cortex.audio + + - uses: actions/upload-release-asset@v1.0.1 + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-draft-release.outputs.upload_url }} + asset_path: ./cortex.audio.tar.gz + asset_name: cortex.audio-${{ needs.create-draft-release.outputs.version }}-${{ matrix.os }}-${{ matrix.name }}.tar.gz + asset_content_type: application/gzip + + - name: Clean + if: always() + continue-on-error: true + run: | + sccache --stop-server + rm ${{ matrix.sccache-conf-path }} + update_release_draft: + needs: [build-and-test] + permissions: + # write permission is required to create a github release + contents: write + # write permission is required for autolabeler + # otherwise, read permission is required at least + pull-requests: write + runs-on: ubuntu-latest + steps: + # (Optional) GitHub Enterprise requires GHE_HOST variable set + #- name: Set GHE_HOST + # run: | + # echo "GHE_HOST=${GITHUB_SERVER_URL##https:\/\/}" >> $GITHUB_ENV + + # Drafts your next Release notes as Pull Requests are merged into "master" + - uses: release-drafter/release-drafter@v5 + # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml + # with: + # config-name: my-config.yml + # disable-autolabeler: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Clean + if: always() + continue-on-error: true + run: | + sccache --stop-server + rm ${{ matrix.sccache-conf-path }} \ No newline at end of file diff --git a/.github/workflows/quality-gate.yml b/.github/workflows/quality-gate.yml index 066a214..0d8b485 100644 --- a/.github/workflows/quality-gate.yml +++ b/.github/workflows/quality-gate.yml @@ -248,8 +248,6 @@ jobs: echo 'use_ssl = false' >> ${{ matrix.sccache-conf-path }} echo 'server_side_encryption = false' >> ${{ matrix.sccache-conf-path }} echo 'no_credentials = false' >> ${{ matrix.sccache-conf-path }} - - - name: Install SDL2 on MacOS if: runner.os == 'macOS' @@ -262,7 +260,7 @@ jobs: if: runner.os == 'Windows' run: | choco install make sccache ninja -y - choco install wget -y --force + choco install wget -y - name: Fetch SDL2 on Windows if: runner.os == 'Windows'