Files
OrcaSlicer-bambulab/.github/workflows/build_windows_bridge.yml
Louis Rossmann c661ddc2eb Initial release
2026-05-11 07:39:33 -05:00

238 lines
8.3 KiB
YAML

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_${{ 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_${{ 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