From 1b556d73f80e69f512881eab3331e6e9f70e5bf5 Mon Sep 17 00:00:00 2001 From: Jake Date: Tue, 12 May 2026 19:57:59 +0100 Subject: [PATCH] Fix artifact name conflict between workflows --- build_macos_bridge.yml | 241 +++++++++++++++++++++++++++++++++++++++ build_windows_bridge.yml | 237 ++++++++++++++++++++++++++++++++++++++ my_build_all.yml | 84 ++++++++++++++ 3 files changed, 562 insertions(+) create mode 100644 build_macos_bridge.yml create mode 100644 build_windows_bridge.yml create mode 100644 my_build_all.yml diff --git a/build_macos_bridge.yml b/build_macos_bridge.yml new file mode 100644 index 00000000..835ee981 --- /dev/null +++ b/build_macos_bridge.yml @@ -0,0 +1,241 @@ +name: Build macOS with Linux bridge runtime + +on: + workflow_call: + workflow_dispatch: + +jobs: + prepare_linux_bridge_runtime: + name: Prepare Linux bridge runtime + runs-on: ubuntu-24.04 + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Apt-Install Dependencies + uses: ./.github/actions/apt-install-deps + + - name: Build Linux deps + shell: bash + run: | + set -euo pipefail + for attempt in 1 2 3; do + echo "Build Linux deps attempt $attempt" + if ./build_linux.sh -drlL; then + exit 0 + fi + if [ "$attempt" -lt 3 ]; then + echo "Transient dependency download/build failure, retrying after backoff" + sleep $((attempt * 20)) + fi + done + exit 1 + + - name: Configure linux bridge host build + shell: bash + run: | + cmake -S . -B build -G "Ninja Multi-Config" -DORCA_TOOLS=ON + + - name: Build linux host runtime + shell: bash + run: | + cmake --build build --config Release --target pjarczak_bambu_linux_host + bash tools/pjarczak_bambu_linux_host/package_linux_host_runtime.sh build + tar -czvf linux_host_runtime_${{ github.sha }}.tar.gz -C tools/pjarczak_bambu_linux_host/runtime linux-x86_64 + + - name: Upload linux host runtime artifact + uses: actions/upload-artifact@v7 + with: + name: linux_host_runtime_macos_${{ github.sha }} + path: ./linux_host_runtime_${{ github.sha }}.tar.gz + if-no-files-found: error + + build_macos_arm64: + name: Build macOS arm64 + runs-on: macos-14 + needs: prepare_linux_bridge_runtime + env: + ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Download linux host runtime artifact + uses: actions/download-artifact@v8 + with: + name: linux_host_runtime_macos_${{ github.sha }} + path: ${{ github.workspace }}/linux_host_runtime_artifact + + - name: Extract linux host runtime artifact on macOS arm64 + shell: bash + run: | + mkdir -p "$GITHUB_WORKSPACE/tools/pjarczak_bambu_linux_host/runtime" + tar -xzf "$GITHUB_WORKSPACE/linux_host_runtime_artifact/linux_host_runtime_${{ github.sha }}.tar.gz" -C "$GITHUB_WORKSPACE/tools/pjarczak_bambu_linux_host/runtime" + + - name: Install mac tools + shell: bash + run: | + brew install automake texinfo libtool + brew list + mkdir -p "$GITHUB_WORKSPACE/deps/build/arm64" + + - name: Build macOS arm64 deps + shell: bash + run: | + ./build_release_macos.sh -dx -1 -a arm64 -t 11.3 + + - name: Build macOS arm64 app bundle + shell: bash + run: | + ./build_release_macos.sh -s -n -x -1 -a arm64 -t 11.3 + + - name: Pack macOS arm64 app bundle + shell: bash + run: | + tar -czvf OrcaSlicer_Mac_bundle_arm64_${{ github.sha }}.tar.gz -C build/arm64 OrcaSlicer + + - name: Upload macOS arm64 app bundle + uses: actions/upload-artifact@v7 + with: + name: OrcaSlicer_Mac_bundle_arm64_${{ github.sha }} + path: ${{ github.workspace }}/OrcaSlicer_Mac_bundle_arm64_${{ github.sha }}.tar.gz + if-no-files-found: error + + build_macos_x86_64: + name: Build macOS x86_64 + runs-on: macos-14 + needs: prepare_linux_bridge_runtime + env: + ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Download linux host runtime artifact + uses: actions/download-artifact@v8 + with: + name: linux_host_runtime_macos_${{ github.sha }} + path: ${{ github.workspace }}/linux_host_runtime_artifact + + - name: Extract linux host runtime artifact on macOS x86_64 + shell: bash + run: | + mkdir -p "$GITHUB_WORKSPACE/tools/pjarczak_bambu_linux_host/runtime" + tar -xzf "$GITHUB_WORKSPACE/linux_host_runtime_artifact/linux_host_runtime_${{ github.sha }}.tar.gz" -C "$GITHUB_WORKSPACE/tools/pjarczak_bambu_linux_host/runtime" + + - name: Install mac tools + shell: bash + run: | + brew install automake texinfo libtool + brew list + mkdir -p "$GITHUB_WORKSPACE/deps/build/x86_64" + + - name: Build macOS x86_64 deps + shell: bash + run: | + ./build_release_macos.sh -dx -1 -a x86_64 -t 11.3 + + - name: Build macOS x86_64 app bundle + shell: bash + run: | + ./build_release_macos.sh -s -n -x -1 -a x86_64 -t 11.3 + + - name: Pack macOS x86_64 app bundle + shell: bash + run: | + tar -czvf OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }}.tar.gz -C build/x86_64 OrcaSlicer + + - name: Upload macOS x86_64 app bundle + uses: actions/upload-artifact@v7 + with: + name: OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }} + path: ${{ github.workspace }}/OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }}.tar.gz + if-no-files-found: error + + build_macos_universal: + name: Build macOS universal + runs-on: macos-14 + needs: + - build_macos_arm64 + - build_macos_x86_64 + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Download macOS app bundles + uses: actions/download-artifact@v8 + with: + pattern: OrcaSlicer_Mac_bundle_*_${{ github.sha }} + path: ${{ github.workspace }}/mac_bundles + + - name: Extract macOS app bundles + shell: bash + run: | + mkdir -p build/arm64 build/x86_64 + 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" + + - name: Build universal mac app bundle + shell: bash + run: | + ./build_release_macos.sh -u -x -1 -a universal -t 11.3 + + - name: Create DMG without runtime validation + shell: bash + run: | + mkdir -p "$GITHUB_WORKSPACE/build/universal/OrcaSlicer_dmg" + rm -rf "$GITHUB_WORKSPACE/build/universal/OrcaSlicer_dmg"/* + cp -R "$GITHUB_WORKSPACE/build/universal/OrcaSlicer/OrcaSlicer.app" "$GITHUB_WORKSPACE/build/universal/OrcaSlicer_dmg/" + ln -sfn /Applications "$GITHUB_WORKSPACE/build/universal/OrcaSlicer_dmg/Applications" + ver=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) + hdiutil create -volname "OrcaSlicer" -srcfolder "$GITHUB_WORKSPACE/build/universal/OrcaSlicer_dmg" -ov -format UDZO "OrcaSlicer_Mac_universal_V${ver}.dmg" + + - name: Explain skipped hosted runtime validation + shell: bash + run: | + echo "Hosted macOS runners do not support nested virtualization, so bundled Lima runtime validation is intentionally skipped here." + + - name: Upload macOS universal DMG + uses: actions/upload-artifact@v7 + with: + name: OrcaSlicer_Mac_universal_${{ github.sha }} + path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_V*.dmg + if-no-files-found: error diff --git a/build_windows_bridge.yml b/build_windows_bridge.yml new file mode 100644 index 00000000..8d4bbaf0 --- /dev/null +++ b/build_windows_bridge.yml @@ -0,0 +1,237 @@ +name: Build Windows with Linux bridge runtime + +on: + workflow_call: + workflow_dispatch: + +jobs: + prepare_linux_bridge_runtime: + name: Prepare Linux bridge runtime + runs-on: ubuntu-24.04 + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Apt-Install Dependencies + uses: ./.github/actions/apt-install-deps + + - name: Build Linux deps + shell: bash + run: | + set -euo pipefail + for attempt in 1 2 3; do + echo "Build Linux deps attempt $attempt" + if ./build_linux.sh -drlL; then + exit 0 + fi + if [ "$attempt" -lt 3 ]; then + echo "Transient dependency download/build failure, retrying after backoff" + sleep $((attempt * 20)) + fi + done + exit 1 + + - name: Configure linux bridge host build + shell: bash + run: | + cmake -S . -B build -G "Ninja Multi-Config" -DORCA_TOOLS=ON + + - name: Build linux host runtime and WSL rootfs + shell: bash + run: | + cmake --build build --config Release --target pjarczak_bambu_linux_host + bash tools/pjarczak_bambu_linux_host/package_linux_host_runtime.sh build + bash tools/pjarczak_bambu_runtime/rootfs/build_windows_wsl_rootfs.sh tools/pjarczak_bambu_runtime/rootfs/windows-wsl2-rootfs.tar + tar -czvf linux_host_runtime_${{ github.sha }}.tar.gz -C tools/pjarczak_bambu_linux_host/runtime linux-x86_64 + tar -czvf wsl_rootfs_${{ github.sha }}.tar.gz -C tools/pjarczak_bambu_runtime/rootfs windows-wsl2-rootfs.tar + + - name: Show packaged linux bridge runtime files + shell: bash + run: | + find tools/pjarczak_bambu_linux_host/runtime/linux-x86_64 -maxdepth 1 -type f | sort + + + - name: Upload linux host runtime artifact + uses: actions/upload-artifact@v7 + with: + name: linux_host_runtime_windows_${{ github.sha }} + path: ./linux_host_runtime_${{ github.sha }}.tar.gz + if-no-files-found: error + + - name: Upload WSL rootfs artifact + uses: actions/upload-artifact@v7 + with: + name: wsl_rootfs_${{ github.sha }} + path: ./wsl_rootfs_${{ github.sha }}.tar.gz + if-no-files-found: error + + build_windows: + name: Build Windows + runs-on: windows-latest + needs: prepare_linux_bridge_runtime + env: + ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + lfs: 'false' + + - uses: lukka/get-cmake@latest + with: + cmakeVersion: "~4.3.0" + useLocalCache: true + useCloudCache: true + + - name: Get the version and date on Windows + shell: pwsh + run: | + $date = Get-Date -Format 'yyyyMMdd' + $eventName = "${{ github.event_name }}" + $prNumber = "${{ github.event.number }}" + + if ($eventName -eq 'pull_request') { + $ver = "PR" + $prNumber + } else { + $versionContent = Get-Content version.inc -Raw + if ($versionContent -match 'set\(SoftFever_VERSION "(.*?)"\)') { + $ver = $matches[1] + } + $ver = "V$ver" + } + + echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + echo "date=$date" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + + - name: Download linux host runtime artifact + uses: actions/download-artifact@v8 + with: + name: linux_host_runtime_windows_${{ github.sha }} + path: ${{ github.workspace }}/linux_host_runtime_artifact + + - name: Extract linux host runtime artifact on Windows + working-directory: ${{ github.workspace }} + shell: pwsh + run: | + New-Item -ItemType Directory -Force -Path "$env:GITHUB_WORKSPACE\tools\pjarczak_bambu_linux_host\runtime" | Out-Null + tar -xzf "$env:GITHUB_WORKSPACE\linux_host_runtime_artifact\linux_host_runtime_${{ github.sha }}.tar.gz" -C "$env:GITHUB_WORKSPACE\tools\pjarczak_bambu_linux_host\runtime" + + - name: Download WSL rootfs artifact + uses: actions/download-artifact@v8 + with: + name: wsl_rootfs_${{ github.sha }} + path: ${{ github.workspace }}/wsl_rootfs_artifact + + - name: Extract WSL rootfs artifact on Windows + working-directory: ${{ github.workspace }} + shell: pwsh + run: | + New-Item -ItemType Directory -Force -Path "$env:GITHUB_WORKSPACE\tools\pjarczak_bambu_runtime\rootfs" | Out-Null + tar -xzf "$env:GITHUB_WORKSPACE\wsl_rootfs_artifact\wsl_rootfs_${{ github.sha }}.tar.gz" -C "$env:GITHUB_WORKSPACE\tools\pjarczak_bambu_runtime\rootfs" + + - name: setup MSVC + uses: microsoft/setup-msbuild@v2 + + - name: Install nsis + shell: pwsh + run: | + choco install nsis -y + + - name: Build Windows deps + working-directory: ${{ github.workspace }} + env: + WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' + WindowsSDKVersion: '10.0.26100.0\' + shell: pwsh + run: .\build_release_vs.bat deps + + - name: Build slicer Win + working-directory: ${{ github.workspace }} + env: + WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' + WindowsSDKVersion: '10.0.26100.0\' + shell: pwsh + run: .\build_release_vs.bat slicer + + + - name: Ensure WSL is available for runtime validation + shell: pwsh + run: | + $wsl = Join-Path $env:WINDIR 'System32\wsl.exe' + if (!(Test-Path $wsl)) { throw 'wsl.exe not found' } + + $ready = $false + try { + & $wsl --status + if ($LASTEXITCODE -eq 0) { $ready = $true } + } catch {} + + if (-not $ready) { + & $wsl --install --no-distribution + if ($LASTEXITCODE -ne 0) { throw 'wsl --install --no-distribution failed' } + } + + & $wsl --update + if ($LASTEXITCODE -ne 0) { throw 'wsl --update failed' } + + & $wsl --status + if ($LASTEXITCODE -ne 0) { throw 'WSL is still not ready after install/update' } + + - name: Show packaged Orca runtime files + shell: pwsh + run: | + Get-ChildItem -Force "$env:GITHUB_WORKSPACE\build\OrcaSlicer" | Format-Table Name, Length -AutoSize + + - name: Install bundled WSL2 Orca runtime into live plugins dir + shell: pwsh + run: | + & "$env:GITHUB_WORKSPACE\build\OrcaSlicer\install_runtime.ps1" -ReplaceExisting + + - name: Show live Orca plugin dir after installer + shell: pwsh + run: | + Get-ChildItem -Force "$env:APPDATA\OrcaSlicer\plugins" | Format-Table Name, Length -AutoSize + Write-Host "--- cache dir ---" + if (Test-Path "$env:APPDATA\OrcaSlicer\ota\plugins") { + Get-ChildItem -Force "$env:APPDATA\OrcaSlicer\ota\plugins" | Format-Table Name, Length -AutoSize + } + + - name: Validate live Orca plugin dir bootstrap package + shell: pwsh + run: | + & "$env:APPDATA\OrcaSlicer\plugins\verify_runtime.ps1" -PackageDir "$env:APPDATA\OrcaSlicer\plugins" -PluginCacheDir "$env:APPDATA\OrcaSlicer\ota\plugins" -AllowMissingLinuxPlugin + + - name: Create installer Win + working-directory: ${{ github.workspace }}/build + shell: pwsh + run: | + cpack -G NSIS + + - name: Pack app + 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: Upload artifacts Win portable + uses: actions/upload-artifact@v7 + with: + name: OrcaSlicer_Windows_${{ env.ver }}_portable + path: ${{ github.workspace }}/build/OrcaSlicer_Windows_${{ env.ver }}_portable.zip + if-no-files-found: error + + - name: Upload artifacts Win installer + uses: actions/upload-artifact@v7 + with: + name: OrcaSlicer_Windows_${{ env.ver }}_installer + path: ${{ github.workspace }}/build/OrcaSlicer*.exe + if-no-files-found: error diff --git a/my_build_all.yml b/my_build_all.yml new file mode 100644 index 00000000..99b8930f --- /dev/null +++ b/my_build_all.yml @@ -0,0 +1,84 @@ +name: My Build All + +on: + workflow_dispatch: + push: + tags: + - 'v*' + release: + types: + - published + +permissions: + contents: write + +concurrency: + group: my-build-all-${{ github.event.release.tag_name || github.ref }} + cancel-in-progress: true + +jobs: + build_windows: + uses: ./.github/workflows/build_windows_bridge.yml + secrets: inherit + + build_linux_portable: + uses: ./.github/workflows/build_linux_portable.yml + secrets: inherit + + build_linux_appimage: + uses: ./.github/workflows/build_linux_appimage.yml + secrets: inherit + + build_macos: + uses: ./.github/workflows/build_macos_bridge.yml + secrets: inherit + + publish_release: + name: Publish release assets + needs: + - build_windows + - build_linux_portable + - build_linux_appimage + - build_macos + if: ${{ github.event_name == 'push' || github.event_name == 'release' }} + runs-on: ubuntu-24.04 + permissions: + contents: write + + steps: + - name: Download all artifacts + uses: actions/download-artifact@v8 + with: + path: release-artifacts + + - name: Flatten release files + shell: bash + run: | + set -euo pipefail + mkdir -p release-files + find release-artifacts -type f -print0 | while IFS= read -r -d '' file; do + cp "$file" release-files/"$(basename "$file")" + done + ls -lah release-files + + - name: Resolve tag + shell: bash + env: + EVENT_TAG: ${{ github.event.release.tag_name }} + run: | + set -euo pipefail + tag="${EVENT_TAG:-${GITHUB_REF_NAME:-}}" + if [[ -z "$tag" ]]; then + echo "ERROR: tag could not be resolved" + exit 1 + fi + echo "RELEASE_TAG=$tag" >> "$GITHUB_ENV" + + - name: Create or update GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ env.RELEASE_TAG }} + generate_release_notes: true + overwrite_files: true + files: | + release-files/*