From 5afb30d7dd322da46a72846e07addaa84b57d68b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 11:58:39 +0800 Subject: [PATCH 01/11] Revert "Revert "Extend self-hosted runner support to all platforms" (#12827)" This reverts commit f2eab542a451f5f96429d72f246988fdbdf0fa69, reversing changes made to 7565b279adf3de4111ee1bbffeead58a86dc9673. --- .github/workflows/build_all.yml | 17 +++-- .github/workflows/build_check_cache.yml | 20 ++--- .github/workflows/build_deps.yml | 28 +++---- .github/workflows/build_orca.yml | 97 +++++++++++-------------- 4 files changed, 79 insertions(+), 83 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 41fe9d2302..51b54dd9ab 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -55,7 +55,7 @@ jobs: if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} uses: ./.github/workflows/build_check_cache.yml with: - os: ubuntu-24.04 + os: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }} build-deps-only: ${{ inputs.build-deps-only || false }} secrets: inherit build_windows: @@ -63,7 +63,7 @@ jobs: if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} uses: ./.github/workflows/build_check_cache.yml with: - os: windows-latest + os: ${{ vars.SELF_HOSTED && 'orca-win-server' || 'windows-latest' }} build-deps-only: ${{ inputs.build-deps-only || false }} force-build: ${{ github.event_name == 'schedule' }} secrets: inherit @@ -95,7 +95,7 @@ jobs: secrets: inherit unit_tests: name: Unit Tests - runs-on: ubuntu-24.04 + runs-on: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }} needs: build_linux if: ${{ !cancelled() && success() }} steps: @@ -107,6 +107,7 @@ jobs: scripts tests - name: Apt-Install Dependencies + if: ${{ !vars.SELF_HOSTED }} uses: ./.github/actions/apt-install-deps - name: Restore Test Artifact uses: actions/download-artifact@v7 @@ -148,17 +149,19 @@ jobs: variant: - arch: x86_64 runner: ubuntu-24.04 + self-hosted-runner: orca-lnx-server - arch: aarch64 runner: ubuntu-24.04-arm - # Don't run scheduled builds on forks: - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} - runs-on: ${{ matrix.variant.runner }} + # Don't run scheduled builds on forks; skip aarch64 on self-hosted (no ARM runner) + if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') && (!vars.SELF_HOSTED || matrix.variant.self-hosted-runner) }} + runs-on: ${{ vars.SELF_HOSTED && matrix.variant.self-hosted-runner || matrix.variant.runner }} env: date: ver: ver_pure: steps: - name: "Remove unneeded stuff to free disk space" + if: ${{ !vars.SELF_HOSTED }} run: rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/* - uses: actions/checkout@v6 @@ -215,7 +218,7 @@ jobs: name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' - name: Deploy Flatpak to nightly release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml index cbed96824b..7be2cbef2f 100644 --- a/.github/workflows/build_check_cache.yml +++ b/.github/workflows/build_check_cache.yml @@ -30,16 +30,16 @@ jobs: with: lfs: 'true' - - name: set outputs - id: set_outputs - env: - # Keep macOS cache keys and paths architecture-specific. - cache-os: ${{ contains(inputs.os, 'macos') && format('macos-{0}', inputs.arch) || inputs.os }} - dep-folder-name: ${{ contains(inputs.os, 'macos') && format('/{0}', inputs.arch) || '/OrcaSlicer_dep' }} - output-cmd: ${{ inputs.os == 'windows-latest' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}} - run: | - echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }} - echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }} + - name: set outputs + id: set_outputs + env: + # Keep macOS cache keys and paths architecture-specific. + cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && 'windows' || 'linux') }} + dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || '/OrcaSlicer_dep' }} + output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}} + run: | + echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }} + echo cache-path=${{ github.workspace }}/deps/build${{ env.dep-folder-name }} >> ${{ env.output-cmd }} - name: load cache id: cache_deps diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index 0e21091be4..b378193a35 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -49,32 +49,34 @@ jobs: cmakeVersion: "~3.28.0" # use most recent 3.28.x version - name: setup dev on Windows - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: microsoft/setup-msbuild@v2 - name: Get the date on Ubuntu and macOS - if: inputs.os != 'windows-latest' + if: runner.os != 'Windows' run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV shell: bash - name: Get the date on Windows - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' run: echo "date=$(Get-Date -Format 'yyyyMMdd')" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 shell: pwsh # Build Dependencies - name: Build on Windows - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' working-directory: ${{ github.workspace }} run: | - choco install strawberryperl + if (-not "${{ vars.SELF_HOSTED }}") { + choco install strawberryperl + } .\build_release_vs.bat deps .\build_release_vs.bat pack - cd ${{ github.workspace }}/deps/build + shell: pwsh - name: Build on Mac ${{ inputs.arch }} - if: contains(inputs.os, 'macos') + if: runner.os == 'macOS' working-directory: ${{ github.workspace }} run: | if [ -z "${{ vars.SELF_HOSTED }}" ]; then @@ -86,11 +88,11 @@ jobs: - name: Apt-Install Dependencies - if: inputs.os == 'ubuntu-24.04' + if: runner.os == 'Linux' && !vars.SELF_HOSTED uses: ./.github/actions/apt-install-deps - name: Build on Ubuntu - if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' + if: runner.os == 'Linux' working-directory: ${{ github.workspace }} run: | mkdir -p ${{ github.workspace }}/deps/build/destdir @@ -101,23 +103,23 @@ jobs: # Upload Artifacts # - name: Upload Mac ${{ inputs.arch }} artifacts - # if: contains(inputs.os, 'macos') + # if: runner.os == 'macOS' # uses: actions/upload-artifact@v6 # with: # name: OrcaSlicer_dep_mac_${{ env.date }} # path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz - name: Upload Windows artifacts - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: actions/upload-artifact@v6 with: name: OrcaSlicer_dep_win64_${{ env.date }} path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip - name: Upload Ubuntu artifacts - if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }} + if: runner.os == 'Linux' && !env.ACT env: - ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }} + ubuntu-ver: '2404' uses: actions/upload-artifact@v6 with: name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }} diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 3cc89d30a7..bc43fc0b86 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -26,6 +26,8 @@ jobs: date: ver: ver_pure: + ubuntu-ver: '2404' + ubuntu-ver-str: '_Ubuntu2404' ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} steps: @@ -35,7 +37,7 @@ jobs: lfs: 'true' - name: load cached deps - if: ${{ !(contains(inputs.os, 'macos') && inputs.macos-combine-only) }} + if: ${{ !(runner.os == 'macOS' && inputs.macos-combine-only) }} uses: actions/cache@v5 with: path: ${{ inputs.cache-path }} @@ -47,7 +49,7 @@ jobs: cmakeVersion: "~3.28.0" # use most recent 3.28.x version - name: Get the version and date on Ubuntu and macOS - if: inputs.os != 'windows-latest' + if: runner.os != 'Windows' run: | ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then @@ -64,7 +66,7 @@ jobs: shell: bash - name: Get the version and date on Windows - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' run: | $date = Get-Date -Format 'yyyyMMdd' $ref = "${{ github.ref }}" @@ -91,7 +93,7 @@ jobs: # Mac - name: Install tools mac - if: contains(inputs.os, 'macos') && !inputs.macos-combine-only + if: runner.os == 'macOS' && !inputs.macos-combine-only run: | if [ -z "${{ vars.SELF_HOSTED }}" ]; then brew install libtool @@ -100,7 +102,7 @@ jobs: mkdir -p ${{ github.workspace }}/deps/build/${{ inputs.arch }} - name: Free disk space - if: contains(inputs.os, 'macos') && !inputs.macos-combine-only && !vars.SELF_HOSTED + if: runner.os == 'macOS' && !inputs.macos-combine-only && !vars.SELF_HOSTED run: | df -hI /dev/disk3s1s1 sudo find /Applications -maxdepth 1 -type d -name "Xcode_*.app" ! -name "Xcode_15.4.app" -exec rm -rf {} + @@ -108,40 +110,40 @@ jobs: df -hI /dev/disk3s1s1 - name: Build slicer mac - if: contains(inputs.os, 'macos') && !inputs.macos-combine-only + if: runner.os == 'macOS' && !inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 - name: Pack macOS app bundle ${{ inputs.arch }} - if: contains(inputs.os, 'macos') && !inputs.macos-combine-only + if: runner.os == 'macOS' && !inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | tar -czvf OrcaSlicer_Mac_bundle_${{ inputs.arch }}_${{ github.sha }}.tar.gz -C build/${{ inputs.arch }} OrcaSlicer - name: Upload macOS app bundle ${{ inputs.arch }} - if: contains(inputs.os, 'macos') && !inputs.macos-combine-only + if: runner.os == 'macOS' && !inputs.macos-combine-only uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Mac_bundle_${{ inputs.arch }}_${{ github.sha }} path: ${{ github.workspace }}/OrcaSlicer_Mac_bundle_${{ inputs.arch }}_${{ github.sha }}.tar.gz - name: Download macOS arm64 app bundle - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only uses: actions/download-artifact@v7 with: name: OrcaSlicer_Mac_bundle_arm64_${{ github.sha }} path: ${{ github.workspace }}/mac_bundles/arm64 - name: Download macOS x86_64 app bundle - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only uses: actions/download-artifact@v7 with: name: OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }} path: ${{ github.workspace }}/mac_bundles/x86_64 - name: Extract macOS app bundles - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | mkdir -p build/arm64 build/x86_64 @@ -151,13 +153,13 @@ jobs: tar -xzvf "$x86_bundle" -C "${{ github.workspace }}/build/x86_64" - name: Build universal mac app bundle - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | ./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a universal -t 10.15 - name: Delete intermediate per-arch artifacts - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only uses: geekyeggo/delete-artifact@v5 with: name: | @@ -166,7 +168,7 @@ jobs: # Thanks to RaySajuuk, it's working now - name: Sign app and notary - if: github.repository == 'OrcaSlicer/OrcaSlicer' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) && contains(inputs.os, 'macos') && inputs.macos-combine-only + if: github.repository == 'OrcaSlicer/OrcaSlicer' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) && runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} env: BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} @@ -220,7 +222,7 @@ jobs: fi - name: Create DMG without notary - if: github.ref != 'refs/heads/main' && contains(inputs.os, 'macos') && inputs.macos-combine-only + if: github.ref != 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg @@ -239,14 +241,14 @@ jobs: fi - name: Upload artifacts mac - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Mac_universal_${{ env.ver }} path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg - name: Upload OrcaSlicer_profile_validator DMG mac - if: contains(inputs.os, 'macos') && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }} @@ -254,7 +256,7 @@ jobs: if-no-files-found: ignore - name: Deploy Mac release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && contains(inputs.os, 'macos') && inputs.macos-combine-only + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -265,7 +267,7 @@ jobs: max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Deploy Mac OrcaSlicer_profile_validator DMG release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && contains(inputs.os, 'macos') && inputs.macos-combine-only + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -277,17 +279,17 @@ jobs: # Windows - name: setup MSVC - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: microsoft/setup-msbuild@v2 - name: Install nsis - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' && !vars.SELF_HOSTED run: | dir "C:/Program Files (x86)/Windows Kits/10/Include" choco install nsis - name: Build slicer Win - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' working-directory: ${{ github.workspace }} env: WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' @@ -295,53 +297,53 @@ jobs: run: .\build_release_vs.bat slicer - name: Create installer Win - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' working-directory: ${{ github.workspace }}/build run: | cpack -G NSIS - name: Pack app - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' working-directory: ${{ github.workspace }}/build shell: cmd run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_Windows_${{ env.ver }}_portable.zip ${{ github.workspace }}/build/OrcaSlicer' - name: Pack PDB - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' working-directory: ${{ github.workspace }}/build/src/Release shell: cmd run: '"C:/Program Files/7-Zip/7z.exe" a -m0=lzma2 -mx9 Debug_PDB_${{ env.ver }}_for_developers_only.7z *.pdb' - name: Upload artifacts Win zip - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Windows_${{ env.ver }}_portable path: ${{ github.workspace }}/build/OrcaSlicer - name: Upload artifacts Win installer - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Windows_${{ env.ver }} path: ${{ github.workspace }}/build/OrcaSlicer*.exe - name: Upload artifacts Win PDB - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: actions/upload-artifact@v6 with: name: PDB path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z - name: Upload OrcaSlicer_profile_validator Win - if: inputs.os == 'windows-latest' + if: runner.os == 'Windows' uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Windows_${{ env.ver }} path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe - name: Deploy Windows release portable - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -352,7 +354,7 @@ jobs: max_releases: 1 - name: Deploy Windows release installer - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -363,7 +365,7 @@ jobs: max_releases: 1 - name: Deploy Windows OrcaSlicer_profile_validator release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && inputs.os == 'windows-latest' + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -375,16 +377,14 @@ jobs: # Ubuntu - name: Apt-Install Dependencies - if: inputs.os == 'ubuntu-24.04' + if: runner.os == 'Linux' && !vars.SELF_HOSTED uses: ./.github/actions/apt-install-deps # Tests must built at the same time as the slicer; # if you untangle them feel free to separate them here too - name: Build slicer and tests - if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' + if: runner.os == 'Linux' shell: bash - env: - ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} run: | ./build_linux.sh -istr mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage @@ -394,7 +394,7 @@ jobs: # Use tar because upload-artifacts won't always preserve directory structure # and doesn't preserve file permissions - name: Upload Test Artifact - if: inputs.os == 'ubuntu-24.04' + if: runner.os == 'Linux' uses: actions/upload-artifact@v6 with: name: ${{ github.sha }}-tests @@ -404,7 +404,7 @@ jobs: if-no-files-found: error - name: Build orca_custom_preset_tests - if: github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-24.04' + if: github.ref == 'refs/heads/main' && runner.os == 'Linux' working-directory: ${{ github.workspace }}/build/src/Release shell: bash run: | @@ -413,28 +413,21 @@ jobs: zip -r orca_custom_preset_tests.zip user/ - name: Upload artifacts Ubuntu - if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }} - env: - ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }} - ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} + if: ${{ ! env.ACT && runner.os == 'Linux' }} uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage' - name: Upload OrcaSlicer_profile_validator Ubuntu - if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }} - env: - ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }} + if: ${{ ! env.ACT && runner.os == 'Linux' }} uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} path: './build/src/Release/OrcaSlicer_profile_validator' - name: Deploy Ubuntu release - if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} - env: - ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -444,7 +437,7 @@ jobs: asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - name: Deploy Ubuntu release - if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-24.04' }} + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: rickstaa/action-create-tag@v1 with: tag: "nightly-builds" @@ -453,9 +446,7 @@ jobs: message: "nightly-builds" - name: Deploy Ubuntu OrcaSlicer_profile_validator release - if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && (inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04') }} - env: - ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }} + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -466,7 +457,7 @@ jobs: max_releases: 1 - name: Deploy orca_custom_preset_tests - if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && inputs.os == 'ubuntu-24.04' }} + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} From 2fe3d80a81c39156146cca87818ad131b75ba241 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 12:04:22 +0800 Subject: [PATCH 02/11] fix errors --- .github/workflows/build_all.yml | 27 ++++++++++++++++++++------- .github/workflows/build_orca.yml | 4 ++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 51b54dd9ab..62454b34e2 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -152,20 +152,29 @@ jobs: self-hosted-runner: orca-lnx-server - arch: aarch64 runner: ubuntu-24.04-arm - # Don't run scheduled builds on forks; skip aarch64 on self-hosted (no ARM runner) - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') && (!vars.SELF_HOSTED || matrix.variant.self-hosted-runner) }} - runs-on: ${{ vars.SELF_HOSTED && matrix.variant.self-hosted-runner || matrix.variant.runner }} + # Don't run scheduled builds on forks + if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} + # When SELF_HOSTED is set, use self-hosted runner if available, otherwise fall back to + # cheapest GitHub runner (variant will be skipped via step conditions anyway) + runs-on: ${{ vars.SELF_HOSTED && (matrix.variant.self-hosted-runner || 'ubuntu-24.04') || matrix.variant.runner }} env: date: ver: ver_pure: steps: + - name: Check if variant should run + id: should-run + run: echo "skip=true" >> $GITHUB_OUTPUT + shell: bash + if: ${{ vars.SELF_HOSTED && !matrix.variant.self-hosted-runner }} - name: "Remove unneeded stuff to free disk space" - if: ${{ !vars.SELF_HOSTED }} + if: ${{ steps.should-run.outputs.skip != 'true' && !vars.SELF_HOSTED }} run: rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/* - uses: actions/checkout@v6 + if: ${{ steps.should-run.outputs.skip != 'true' }} - name: Get the version and date + if: ${{ steps.should-run.outputs.skip != 'true' }} run: | ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then @@ -182,30 +191,33 @@ jobs: shell: bash # Manage flatpak-builder cache externally so PRs restore but never upload - name: Restore flatpak-builder cache - if: github.event_name == 'pull_request' + if: ${{ steps.should-run.outputs.skip != 'true' && github.event_name == 'pull_request' }} uses: actions/cache/restore@v4 with: path: .flatpak-builder key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.event.pull_request.base.sha }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Save/restore flatpak-builder cache - if: github.event_name != 'pull_request' + if: ${{ steps.should-run.outputs.skip != 'true' && github.event_name != 'pull_request' }} uses: actions/cache@v4 with: path: .flatpak-builder key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.sha }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Disable debug info for faster CI builds + if: ${{ steps.should-run.outputs.skip != 'true' }} run: | sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - name: Inject git commit hash into Flatpak manifest + if: ${{ steps.should-run.outputs.skip != 'true' }} run: | sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master + if: ${{ steps.should-run.outputs.skip != 'true' }} with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak manifest-path: scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -213,12 +225,13 @@ jobs: arch: ${{ matrix.variant.arch }} upload-artifact: false - name: Upload artifacts Flatpak + if: ${{ steps.should-run.outputs.skip != 'true' }} uses: actions/upload-artifact@v6 with: name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' - name: Deploy Flatpak to nightly release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED + if: ${{ steps.should-run.outputs.skip != 'true' && github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED }} uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index bc43fc0b86..9501d5bc94 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -297,7 +297,7 @@ jobs: run: .\build_release_vs.bat slicer - name: Create installer Win - if: runner.os == 'Windows' + if: runner.os == 'Windows' && !vars.SELF_HOSTED working-directory: ${{ github.workspace }}/build run: | cpack -G NSIS @@ -322,7 +322,7 @@ jobs: path: ${{ github.workspace }}/build/OrcaSlicer - name: Upload artifacts Win installer - if: runner.os == 'Windows' + if: runner.os == 'Windows' && !vars.SELF_HOSTED uses: actions/upload-artifact@v6 with: name: OrcaSlicer_Windows_${{ env.ver }} From 8c5063881ac220bbc7d6f5f4f422d73fffd46529 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 18:27:47 +0800 Subject: [PATCH 03/11] skip flatpak arm64 for self hosted runners --- .github/workflows/build_all.yml | 54 ++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 1fa34e6b37..d8b76a26c1 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -134,8 +134,28 @@ jobs: uses: EnricoMi/publish-unit-test-result-action@v2 with: files: "ctest_results.xml" + flatpak_matrix: + name: "Flatpak matrix" + # Don't run scheduled builds on forks + if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} + runs-on: ubuntu-24.04 + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Build matrix + id: set-matrix + run: | + if [ -n "$SELF_HOSTED" ]; then + # Self-hosted: only x86_64 (no ARM self-hosted runner available) + echo 'matrix={"variant":[{"arch":"x86_64","runner":"orca-lnx-server"}]}' >> $GITHUB_OUTPUT + else + echo 'matrix={"variant":[{"arch":"x86_64","runner":"ubuntu-24.04"},{"arch":"aarch64","runner":"ubuntu-24.04-arm"}]}' >> $GITHUB_OUTPUT + fi + env: + SELF_HOSTED: ${{ vars.SELF_HOSTED }} flatpak: name: "Flatpak" + needs: [flatpak_matrix] container: image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-49 options: --privileged @@ -147,36 +167,20 @@ jobs: - /opt/hostedtoolcache:/opt/hostedtoolcache1 strategy: fail-fast: false - matrix: - variant: - - arch: x86_64 - runner: ubuntu-24.04 - self-hosted-runner: orca-lnx-server - - arch: aarch64 - runner: ubuntu-24.04-arm - # Don't run scheduled builds on forks - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} - # When SELF_HOSTED is set, use self-hosted runner if available, otherwise fall back to - # cheapest GitHub runner (variant will be skipped via step conditions anyway) - runs-on: ${{ vars.SELF_HOSTED && (matrix.variant.self-hosted-runner || 'ubuntu-24.04') || matrix.variant.runner }} + matrix: ${{ fromJson(needs.flatpak_matrix.outputs.matrix) }} + if: ${{ !cancelled() && needs.flatpak_matrix.result == 'success' }} + runs-on: ${{ matrix.variant.runner }} env: date: ver: ver_pure: steps: - - name: Check if variant should run - id: should-run - run: echo "skip=true" >> $GITHUB_OUTPUT - shell: bash - if: ${{ vars.SELF_HOSTED && !matrix.variant.self-hosted-runner }} - name: "Remove unneeded stuff to free disk space" - if: ${{ steps.should-run.outputs.skip != 'true' && !vars.SELF_HOSTED }} + if: ${{ !vars.SELF_HOSTED }} run: rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/* - uses: actions/checkout@v6 - if: ${{ steps.should-run.outputs.skip != 'true' }} - name: Get the version and date - if: ${{ steps.should-run.outputs.skip != 'true' }} run: | ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then @@ -193,33 +197,30 @@ jobs: shell: bash # Manage flatpak-builder cache externally so PRs restore but never upload - name: Restore flatpak-builder cache - if: ${{ steps.should-run.outputs.skip != 'true' && github.event_name == 'pull_request' }} + if: github.event_name == 'pull_request' uses: actions/cache/restore@v4 with: path: .flatpak-builder key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.event.pull_request.base.sha }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Save/restore flatpak-builder cache - if: ${{ steps.should-run.outputs.skip != 'true' && github.event_name != 'pull_request' }} + if: github.event_name != 'pull_request' uses: actions/cache@v4 with: path: .flatpak-builder key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.sha }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Disable debug info for faster CI builds - if: ${{ steps.should-run.outputs.skip != 'true' }} run: | sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - name: Inject git commit hash into Flatpak manifest - if: ${{ steps.should-run.outputs.skip != 'true' }} run: | sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master - if: ${{ steps.should-run.outputs.skip != 'true' }} with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak manifest-path: scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -227,13 +228,12 @@ jobs: arch: ${{ matrix.variant.arch }} upload-artifact: false - name: Upload artifacts Flatpak - if: ${{ steps.should-run.outputs.skip != 'true' }} uses: actions/upload-artifact@v6 with: name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' - name: Deploy Flatpak to nightly release - if: ${{ steps.should-run.outputs.skip != 'true' && github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED }} + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} From 8dabfa882970f19fd9e3b2fbb4ae12f74f099acf Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 18:34:45 +0800 Subject: [PATCH 04/11] tweak --- .github/workflows/build_all.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index d8b76a26c1..6007294ee0 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -242,4 +242,10 @@ jobs: asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted + - name: Fix ownership of root-owned files on self-hosted runners + if: ${{ always() && vars.SELF_HOSTED }} + run: | + runner_uid=$(stat -c '%u' .) + chown -R "$runner_uid:$runner_uid" .flatpak-builder + shell: bash From 6828111a82cf9d8c2a9d1cd8d898b180f47a316a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 18:44:07 +0800 Subject: [PATCH 05/11] clean --- .github/workflows/build_all.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 6007294ee0..9097590280 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -242,9 +242,12 @@ jobs: asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - - name: Fix ownership of root-owned files on self-hosted runners + - name: Clean up and fix ownership on self-hosted runners if: ${{ always() && vars.SELF_HOSTED }} run: | + # Remove disposable dirs (re-downloaded/regenerated on next run) + rm -rf .flatpak-builder/build .flatpak-builder/downloads .flatpak-builder/rofiles + # Fix ownership of cache dirs so the runner user can access them runner_uid=$(stat -c '%u' .) chown -R "$runner_uid:$runner_uid" .flatpak-builder shell: bash From 5c20da796c1b1bb1ee73ce457c51ac8cb9b18bb2 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 18:52:28 +0800 Subject: [PATCH 06/11] skip flatpak --- .github/workflows/build_all.yml | 42 +++++++-------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 9097590280..00df244bc4 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -134,28 +134,8 @@ jobs: uses: EnricoMi/publish-unit-test-result-action@v2 with: files: "ctest_results.xml" - flatpak_matrix: - name: "Flatpak matrix" - # Don't run scheduled builds on forks - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} - runs-on: ubuntu-24.04 - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} - steps: - - name: Build matrix - id: set-matrix - run: | - if [ -n "$SELF_HOSTED" ]; then - # Self-hosted: only x86_64 (no ARM self-hosted runner available) - echo 'matrix={"variant":[{"arch":"x86_64","runner":"orca-lnx-server"}]}' >> $GITHUB_OUTPUT - else - echo 'matrix={"variant":[{"arch":"x86_64","runner":"ubuntu-24.04"},{"arch":"aarch64","runner":"ubuntu-24.04-arm"}]}' >> $GITHUB_OUTPUT - fi - env: - SELF_HOSTED: ${{ vars.SELF_HOSTED }} flatpak: name: "Flatpak" - needs: [flatpak_matrix] container: image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-49 options: --privileged @@ -167,8 +147,14 @@ jobs: - /opt/hostedtoolcache:/opt/hostedtoolcache1 strategy: fail-fast: false - matrix: ${{ fromJson(needs.flatpak_matrix.outputs.matrix) }} - if: ${{ !cancelled() && needs.flatpak_matrix.result == 'success' }} + matrix: + variant: + - arch: x86_64 + runner: ubuntu-24.04 + - arch: aarch64 + runner: ubuntu-24.04-arm + # Don't run scheduled builds on forks; skip entirely on self-hosted runners + if: ${{ !cancelled() && !vars.SELF_HOSTED && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} runs-on: ${{ matrix.variant.runner }} env: date: @@ -176,7 +162,6 @@ jobs: ver_pure: steps: - name: "Remove unneeded stuff to free disk space" - if: ${{ !vars.SELF_HOSTED }} run: rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/* - uses: actions/checkout@v6 @@ -233,7 +218,7 @@ jobs: name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak' - name: Deploy Flatpak to nightly release - if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && !vars.SELF_HOSTED + if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' uses: WebFreak001/deploy-nightly@v3.2.0 with: upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} @@ -242,13 +227,4 @@ jobs: asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted - - name: Clean up and fix ownership on self-hosted runners - if: ${{ always() && vars.SELF_HOSTED }} - run: | - # Remove disposable dirs (re-downloaded/regenerated on next run) - rm -rf .flatpak-builder/build .flatpak-builder/downloads .flatpak-builder/rofiles - # Fix ownership of cache dirs so the runner user can access them - runner_uid=$(stat -c '%u' .) - chown -R "$runner_uid:$runner_uid" .flatpak-builder - shell: bash From 594e4a297d23b1d36fd06762f8f1382e47f72e4b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 21:42:57 +0800 Subject: [PATCH 07/11] use clang and lld --- .github/workflows/build_all.yml | 5 +++++ .github/workflows/build_deps.yml | 30 +++++++++++++++--------------- .github/workflows/build_orca.yml | 14 +++++++------- scripts/linux.d/debian | 2 ++ 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 00df244bc4..66ee9af643 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -134,6 +134,11 @@ jobs: uses: EnricoMi/publish-unit-test-result-action@v2 with: files: "ctest_results.xml" + - name: Delete Test Artifact + if: success() + uses: geekyeggo/delete-artifact@v5 + with: + name: ${{ github.sha }}-tests flatpak: name: "Flatpak" container: diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index 17127878e3..e025ad6ad8 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -98,7 +98,7 @@ jobs: working-directory: ${{ github.workspace }} run: | mkdir -p ${{ github.workspace }}/deps/build/destdir - ./build_linux.sh -dr + ./build_linux.sh -drlL cd deps/build tar -czvf OrcaSlicer_dep_ubuntu_$(date +"%Y%m%d").tar.gz destdir @@ -111,21 +111,21 @@ jobs: # name: OrcaSlicer_dep_mac_${{ env.date }} # path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz - - name: Upload Windows artifacts - if: runner.os == 'Windows' - uses: actions/upload-artifact@v6 - with: - name: OrcaSlicer_dep_win64_${{ env.date }} - path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip + # - name: Upload Windows artifacts + # if: runner.os == 'Windows' + # uses: actions/upload-artifact@v6 + # with: + # name: OrcaSlicer_dep_win64_${{ env.date }} + # path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip - - name: Upload Ubuntu artifacts - if: runner.os == 'Linux' && !env.ACT - env: - ubuntu-ver: '2404' - uses: actions/upload-artifact@v6 - with: - name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }} - path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz + # - name: Upload Ubuntu artifacts + # if: runner.os == 'Linux' && !env.ACT + # env: + # ubuntu-ver: '2404' + # uses: actions/upload-artifact@v6 + # with: + # name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }} + # path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz build_orca: name: Build OrcaSlicer diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 1e35bccedf..99957f4043 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -250,7 +250,7 @@ jobs: path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg - name: Upload OrcaSlicer_profile_validator DMG mac - if: runner.os == 'macOS' && inputs.macos-combine-only + if: runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }} @@ -311,7 +311,7 @@ jobs: run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_Windows_${{ env.ver }}_portable.zip ${{ github.workspace }}/build/OrcaSlicer' - name: Pack PDB - if: runner.os == 'Windows' + if: runner.os == 'Windows' && !vars.SELF_HOSTED working-directory: ${{ github.workspace }}/build/src/Release shell: cmd run: '"C:/Program Files/7-Zip/7z.exe" a -m0=lzma2 -mx9 Debug_PDB_${{ env.ver }}_for_developers_only.7z *.pdb' @@ -331,14 +331,14 @@ jobs: path: ${{ github.workspace }}/build/OrcaSlicer*.exe - name: Upload artifacts Win PDB - if: runner.os == 'Windows' + if: runner.os == 'Windows' && !vars.SELF_HOSTED uses: actions/upload-artifact@v6 with: name: PDB path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z - name: Upload OrcaSlicer_profile_validator Win - if: runner.os == 'Windows' + if: runner.os == 'Windows' && !vars.SELF_HOSTED uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Windows_${{ env.ver }} @@ -388,7 +388,7 @@ jobs: if: runner.os == 'Linux' shell: bash run: | - ./build_linux.sh -istr + ./build_linux.sh -istrlL mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage chmod +x ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage tar -cvpf build_tests.tar build/tests @@ -406,7 +406,7 @@ jobs: if-no-files-found: error - name: Build orca_custom_preset_tests - if: github.ref == 'refs/heads/main' && runner.os == 'Linux' + if: github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED working-directory: ${{ github.workspace }}/build/src/Release shell: bash run: | @@ -422,7 +422,7 @@ jobs: path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage' - name: Upload OrcaSlicer_profile_validator Ubuntu - if: ${{ ! env.ACT && runner.os == 'Linux' }} + if: ${{ ! env.ACT && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: actions/upload-artifact@v6 with: name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} diff --git a/scripts/linux.d/debian b/scripts/linux.d/debian index 53e4ee5fa5..b3169718c8 100644 --- a/scripts/linux.d/debian +++ b/scripts/linux.d/debian @@ -21,6 +21,8 @@ REQUIRED_DEV_PACKAGES=( libssl-dev libtool libudev-dev + clang + lld ninja-build texinfo wget From 7dcba3f5374fb811b3d7a22b2da5c1020b813388 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 22:09:02 +0800 Subject: [PATCH 08/11] use different cache key for linux clang --- .github/workflows/build_check_cache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml index 7be2cbef2f..1e94e3e544 100644 --- a/.github/workflows/build_check_cache.yml +++ b/.github/workflows/build_check_cache.yml @@ -34,7 +34,7 @@ jobs: id: set_outputs env: # Keep macOS cache keys and paths architecture-specific. - cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && 'windows' || 'linux') }} + cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && 'windows' || 'linux-clang') }} dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || '/OrcaSlicer_dep' }} output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}} run: | From acbe5c708e88017800b3451c12fd41d7a8bdcef4 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 23:14:47 +0800 Subject: [PATCH 09/11] respect clang flag for all deps --- deps/GMP/GMP.cmake | 2 +- deps/MPFR/MPFR.cmake | 2 +- deps/OpenSSL/OpenSSL.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deps/GMP/GMP.cmake b/deps/GMP/GMP.cmake index 623f01a171..b3ba181753 100644 --- a/deps/GMP/GMP.cmake +++ b/deps/GMP/GMP.cmake @@ -65,7 +65,7 @@ else () DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP PATCH_COMMAND git apply ${GMP_DIRECTORY_FLAG} --verbose ${CMAKE_CURRENT_LIST_DIR}/0001-GMP_GCC15.patch BUILD_IN_SOURCE ON - CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}" ${_gmp_build_tgt} + CONFIGURE_COMMAND env "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}" ${_gmp_build_tgt} BUILD_COMMAND make -j INSTALL_COMMAND make install ) diff --git a/deps/MPFR/MPFR.cmake b/deps/MPFR/MPFR.cmake index 67758a8596..755a769955 100644 --- a/deps/MPFR/MPFR.cmake +++ b/deps/MPFR/MPFR.cmake @@ -31,7 +31,7 @@ else () DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/MPFR BUILD_IN_SOURCE ON CONFIGURE_COMMAND autoreconf -f -i && - env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR} --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR} ${_gmp_build_tgt} + env "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}" "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR} --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR} ${_gmp_build_tgt} BUILD_COMMAND make -j INSTALL_COMMAND make install DEPENDS dep_GMP diff --git a/deps/OpenSSL/OpenSSL.cmake b/deps/OpenSSL/OpenSSL.cmake index 79465747e8..5f463c14a9 100644 --- a/deps/OpenSSL/OpenSSL.cmake +++ b/deps/OpenSSL/OpenSSL.cmake @@ -21,7 +21,7 @@ else() if(APPLE) set(_conf_cmd export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} && ./Configure -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}) else() - set(_conf_cmd "./config") + set(_conf_cmd env "CC=${CMAKE_C_COMPILER}" "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" "./config") endif() set(_cross_comp_prefix_line "") set(_make_cmd make -j${NPROC}) From a9c5748d309321fb070f0603f15e73c458c6bd9d Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 23:17:03 +0800 Subject: [PATCH 10/11] print build time --- build_flatpak.sh | 4 +++ build_linux.sh | 4 +++ build_release_macos.sh | 4 +++ build_release_vs.bat | 18 ++++++++++++-- scripts/build_flatpak_with_docker.sh | 37 +++++++++++++++++----------- 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/build_flatpak.sh b/build_flatpak.sh index 225cf25e66..94b79b1465 100755 --- a/build_flatpak.sh +++ b/build_flatpak.sh @@ -5,6 +5,7 @@ # Based on the GitHub Actions workflow in .github/workflows/build_all.yml set -e +SECONDS=0 # Colors for output RED='\033[0;31m' @@ -371,3 +372,6 @@ if [[ "$FORCE_CLEAN" != true ]]; then echo -e "• To force a clean build: $0 -f" echo -e "• To clean cache manually: rm -rf $CACHE_DIR" fi + +elapsed=$SECONDS +printf "\nBuild completed in %dh %dm %ds\n" $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)) diff --git a/build_linux.sh b/build_linux.sh index 9a9a9160ba..b1e1806c27 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -e # Exit immediately if a command exits with a non-zero status. +SECONDS=0 SCRIPT_NAME=$(basename "$0") SCRIPT_PATH=$(dirname "$(readlink -f "${0}")") @@ -266,4 +267,7 @@ if [[ -n "${BUILD_IMAGE}" || -n "${BUILD_ORCA}" ]] ; then popd > /dev/null # build fi +elapsed=$SECONDS +printf "\nBuild completed in %dh %dm %ds\n" $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)) + popd > /dev/null # ${SCRIPT_PATH} diff --git a/build_release_macos.sh b/build_release_macos.sh index 4fca109877..8d417695ad 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -2,6 +2,7 @@ set -e set -o pipefail +SECONDS=0 while getopts ":dpa:snt:xbc:i:1Tuh" opt; do case "${opt}" in @@ -342,3 +343,6 @@ fi if [ "1." == "$PACK_DEPS". ]; then pack_deps fi + +elapsed=$SECONDS +printf "\nBuild completed in %dh %dm %ds\n" $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)) diff --git a/build_release_vs.bat b/build_release_vs.bat index fc3445bb5d..3f1a2e0af4 100644 --- a/build_release_vs.bat +++ b/build_release_vs.bat @@ -1,6 +1,7 @@ @REM OrcaSlicer build script for Windows with VS auto-detect @echo off set WP=%CD% +set _START_TIME=%TIME% @REM Check for Ninja Multi-Config option (-x) set USE_NINJA=0 @@ -73,7 +74,7 @@ if "%1"=="pack" ( echo packing deps: OrcaSlicer_dep_win64_!build_date!_vs!VS_VERSION!.zip %WP%/tools/7z.exe a OrcaSlicer_dep_win64_!build_date!_vs!VS_VERSION!.zip OrcaSlicer_dep - exit /b 0 + goto :done ) set debug=OFF @@ -120,7 +121,7 @@ if "%USE_NINJA%"=="1" ( ) @echo off -if "%1"=="deps" exit /b 0 +if "%1"=="deps" goto :done :slicer echo "building Orca Slicer..." @@ -142,3 +143,16 @@ cd .. call scripts/run_gettext.bat cd %build_dir% cmake --build . --target install --config %build_type% + +:done +@echo off +for /f "tokens=1-3 delims=:.," %%a in ("%_START_TIME: =0%") do set /a "_start_s=%%a*3600+%%b*60+%%c" +for /f "tokens=1-3 delims=:.," %%a in ("%TIME: =0%") do set /a "_end_s=%%a*3600+%%b*60+%%c" +set /a "_elapsed=_end_s - _start_s" +if %_elapsed% lss 0 set /a "_elapsed+=86400" +set /a "_hours=_elapsed / 3600" +set /a "_remainder=_elapsed - _hours * 3600" +set /a "_mins=_remainder / 60" +set /a "_secs=_remainder - _mins * 60" +echo. +echo Build completed in %_hours%h %_mins%m %_secs%s diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh index 8e490f8f8b..d3eeaab6df 100755 --- a/scripts/build_flatpak_with_docker.sh +++ b/scripts/build_flatpak_with_docker.sh @@ -4,7 +4,7 @@ # as the CI (build_all.yml). # # Usage: -# ./scripts/build_flatpak_with_docker.sh [--arch ] [--no-debug-info] +# ./scripts/build_flatpak_with_docker.sh [--arch ] [--no-debug-info] [--pull] # # Requirements: # - Docker (or Podman with docker compatibility) @@ -12,6 +12,7 @@ # The resulting .flatpak bundle is placed in the project root. set -euo pipefail +SECONDS=0 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" @@ -19,9 +20,8 @@ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" # ---------- defaults ---------- ARCH="$(uname -m)" NO_DEBUG_INFO=false -NO_PULL=false +FORCE_PULL=false FORCE_CLEAN=true -PRIVILEGED=false CONTAINER_IMAGE="ghcr.io/flathub-infra/flatpak-github-actions:gnome-49" normalize_arch() { @@ -45,16 +45,18 @@ while [[ $# -gt 0 ]]; do ARCH="$2"; shift 2 ;; --no-debug-info) NO_DEBUG_INFO=true; shift ;; + --pull) + FORCE_PULL=true; shift ;; --no-pull) - NO_PULL=true; shift ;; + FORCE_PULL=false; shift ;; # kept for backward compat (now default) --keep-build) FORCE_CLEAN=false; shift ;; - --privileged) - PRIVILEGED=true; shift ;; --image) CONTAINER_IMAGE="$2"; shift 2 ;; -h|--help) - echo "Usage: $0 [--arch ] [--no-debug-info] [--no-pull] [--keep-build] [--privileged] [--image ]" + echo "Usage: $0 [--arch ] [--no-debug-info] [--pull] [--keep-build] [--image ]" + echo " --pull Force pull the container image (default: use cached, auto-pull if missing)" + echo " --no-pull Do not force pull (default, kept for backward compat)" exit 0 ;; *) echo "Unknown option: $1" >&2; exit 1 ;; @@ -91,7 +93,7 @@ echo " Arch: ${ARCH}" echo " Image: ${CONTAINER_IMAGE}" echo " Bundle: ${BUNDLE_NAME}" echo " Debug info: $([ "$NO_DEBUG_INFO" = true ] && echo "disabled" || echo "enabled")" -echo " Privileged: $([ "$PRIVILEGED" = true ] && echo "enabled" || echo "disabled")" +echo " Pull mode: $([ "$FORCE_PULL" = true ] && echo "force" || echo "auto (cached if available)")" echo " ccache: enabled" echo "" @@ -123,9 +125,14 @@ sed "/name: OrcaSlicer/{ # ---------- run build in Docker ---------- DOCKER="${DOCKER:-docker}" -if [ "$NO_PULL" = false ]; then - echo "=== Pulling container image ===" +if [ "$FORCE_PULL" = true ]; then + echo "=== Pulling container image (--pull requested) ===" "$DOCKER" pull "$CONTAINER_IMAGE" +elif ! "$DOCKER" image inspect "$CONTAINER_IMAGE" &>/dev/null; then + echo "=== Pulling container image (not found locally) ===" + "$DOCKER" pull "$CONTAINER_IMAGE" +else + echo "=== Using cached container image (use --pull to update) ===" fi FORCE_CLEAN_FLAG="" @@ -133,10 +140,7 @@ if [ "$FORCE_CLEAN" = true ]; then FORCE_CLEAN_FLAG="--force-clean" fi -DOCKER_RUN_ARGS=(run --rm) -if [ "$PRIVILEGED" = true ]; then - DOCKER_RUN_ARGS+=(--privileged) -fi +DOCKER_RUN_ARGS=(run --rm -i --privileged) # Pass build parameters as env vars so the inner script doesn't need # variable expansion from the outer shell (avoids quoting issues). @@ -215,4 +219,7 @@ echo "=== Flatpak bundle ready ===" echo " ${PROJECT_ROOT}/${BUNDLE_NAME}" echo "" echo "Install with:" -echo " flatpak install --user ${BUNDLE_NAME}" \ No newline at end of file +echo " flatpak install --user ${BUNDLE_NAME}" + +elapsed=$SECONDS +printf "\nBuild completed in %dh %dm %ds\n" $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)) \ No newline at end of file From cbdfc770ab68808ccb5482189cac913ac5339bd4 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 19 Mar 2026 23:55:33 +0800 Subject: [PATCH 11/11] simplify mac download --- .github/workflows/build_orca.yml | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 99957f4043..cb28b23311 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -130,27 +130,20 @@ jobs: name: OrcaSlicer_Mac_bundle_${{ inputs.arch }}_${{ github.sha }} path: ${{ github.workspace }}/OrcaSlicer_Mac_bundle_${{ inputs.arch }}_${{ github.sha }}.tar.gz - - name: Download macOS arm64 app bundle + - name: Download macOS app bundles if: runner.os == 'macOS' && inputs.macos-combine-only uses: actions/download-artifact@v7 with: - name: OrcaSlicer_Mac_bundle_arm64_${{ github.sha }} - path: ${{ github.workspace }}/mac_bundles/arm64 - - - name: Download macOS x86_64 app bundle - if: runner.os == 'macOS' && inputs.macos-combine-only - uses: actions/download-artifact@v7 - with: - name: OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }} - path: ${{ github.workspace }}/mac_bundles/x86_64 + pattern: OrcaSlicer_Mac_bundle_*_${{ github.sha }} + path: ${{ github.workspace }}/mac_bundles - name: Extract macOS app bundles if: runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | mkdir -p build/arm64 build/x86_64 - arm_bundle=$(find "${{ github.workspace }}/mac_bundles/arm64" -name '*.tar.gz' -print -quit) - x86_bundle=$(find "${{ github.workspace }}/mac_bundles/x86_64" -name '*.tar.gz' -print -quit) + arm_bundle=$(find "${{ github.workspace }}/mac_bundles/OrcaSlicer_Mac_bundle_arm64_${{ github.sha }}" -name '*.tar.gz' -print -quit) + x86_bundle=$(find "${{ github.workspace }}/mac_bundles/OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }}" -name '*.tar.gz' -print -quit) tar -xzvf "$arm_bundle" -C "${{ github.workspace }}/build/arm64" tar -xzvf "$x86_bundle" -C "${{ github.workspace }}/build/x86_64"