name: Debian-based ISO and SquashFS on: workflow_call: workflow_dispatch: inputs: environment: type: choice description: Environment options: - NONE - dev - unstable - dev-unstable runner: type: choice description: Runner options: - standard - fast platform: type: choice description: Platform options: - ALL - x86_64 - x86_64-nonfree - x86_64-nvidia - aarch64 - aarch64-nonfree - aarch64-nvidia # - raspberrypi - riscv64 - riscv64-nonfree deploy: type: choice description: Deploy options: - NONE - alpha - beta push: branches: - master - next/* pull_request: branches: - master - next/* concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true env: NODEJS_VERSION: "24.11.0" ENVIRONMENT: '${{ fromJson(format(''["{0}", ""]'', github.event.inputs.environment || ''dev''))[github.event.inputs.environment == ''NONE''] }}' jobs: compile: name: Compile Base Binaries if: github.event.pull_request.draft != true strategy: fail-fast: true matrix: arch: >- ${{ fromJson('{ "x86_64": ["x86_64"], "x86_64-nonfree": ["x86_64"], "x86_64-nvidia": ["x86_64"], "aarch64": ["aarch64"], "aarch64-nonfree": ["aarch64"], "aarch64-nvidia": ["aarch64"], "raspberrypi": ["aarch64"], "riscv64": ["riscv64"], "riscv64-nonfree": ["riscv64"], "ALL": ["x86_64", "aarch64", "riscv64"] }')[github.event.inputs.platform || 'ALL'] }} runs-on: >- ${{ fromJson( format( '["{0}", "{1}"]', fromJson('{ "x86_64": "ubuntu-latest", "aarch64": "ubuntu-24.04-arm", "riscv64": "ubuntu-latest" }')[matrix.arch], fromJson('{ "x86_64": "buildjet-32vcpu-ubuntu-2204", "aarch64": "buildjet-32vcpu-ubuntu-2204-arm", "riscv64": "buildjet-32vcpu-ubuntu-2204" }')[matrix.arch] ) )[github.event.inputs.runner == 'fast'] }} steps: - name: Mount tmpfs if: ${{ github.event.inputs.runner == 'fast' }} run: sudo mount -t tmpfs tmpfs . - uses: actions/checkout@v6 with: submodules: recursive - uses: ./.github/actions/setup-build with: nodejs-version: ${{ env.NODEJS_VERSION }} setup-python: "true" - name: Make run: make ARCH=${{ matrix.arch }} compiled-${{ matrix.arch }}.tar env: SCCACHE_GHA_ENABLED: on SCCACHE_GHA_VERSION: 0 - uses: actions/upload-artifact@v7 with: name: compiled-${{ matrix.arch }}.tar path: compiled-${{ matrix.arch }}.tar image: name: Build Image needs: [compile] strategy: fail-fast: false matrix: platform: >- ${{ fromJson( format( '[ ["{0}"], ["x86_64", "x86_64-nonfree", "x86_64-nvidia", "aarch64", "aarch64-nonfree", "aarch64-nvidia", "raspberrypi", "riscv64", "riscv64-nonfree"] ]', github.event.inputs.platform || 'ALL' ) )[(github.event.inputs.platform || 'ALL') == 'ALL'] }} runs-on: >- ${{ fromJson( format( '["{0}", "{1}"]', fromJson('{ "x86_64": "ubuntu-latest", "x86_64-nonfree": "ubuntu-latest", "x86_64-nvidia": "ubuntu-latest", "aarch64": "ubuntu-24.04-arm", "aarch64-nonfree": "ubuntu-24.04-arm", "aarch64-nvidia": "ubuntu-24.04-arm", "raspberrypi": "ubuntu-24.04-arm", "riscv64": "ubuntu-24.04-arm", "riscv64-nonfree": "ubuntu-24.04-arm", }')[matrix.platform], fromJson('{ "x86_64": "buildjet-8vcpu-ubuntu-2204", "x86_64-nonfree": "buildjet-8vcpu-ubuntu-2204", "x86_64-nvidia": "buildjet-8vcpu-ubuntu-2204", "aarch64": "buildjet-8vcpu-ubuntu-2204-arm", "aarch64-nonfree": "buildjet-8vcpu-ubuntu-2204-arm", "aarch64-nvidia": "buildjet-8vcpu-ubuntu-2204-arm", "raspberrypi": "buildjet-8vcpu-ubuntu-2204-arm", "riscv64": "buildjet-8vcpu-ubuntu-2204", "riscv64-nonfree": "buildjet-8vcpu-ubuntu-2204", }')[matrix.platform] ) )[github.event.inputs.runner == 'fast'] }} env: ARCH: >- ${{ fromJson('{ "x86_64": "x86_64", "x86_64-nonfree": "x86_64", "x86_64-nvidia": "x86_64", "aarch64": "aarch64", "aarch64-nonfree": "aarch64", "aarch64-nvidia": "aarch64", "raspberrypi": "aarch64", "riscv64": "riscv64", "riscv64-nonfree": "riscv64", }')[matrix.platform] }} steps: - name: Free space run: | sudo apt-get remove --purge -y azure-cli || true sudo apt-get remove --purge -y firefox || true sudo apt-get remove --purge -y ghc-* || true sudo apt-get remove --purge -y google-cloud-sdk || true sudo apt-get remove --purge -y google-chrome-stable || true sudo apt-get remove --purge -y powershell || true sudo apt-get remove --purge -y php* || true sudo apt-get remove --purge -y ruby* || true sudo apt-get remove --purge -y mono-* || true sudo apt-get autoremove -y sudo apt-get clean sudo rm -rf /usr/lib/jvm # All JDKs sudo rm -rf /usr/local/.ghcup # Haskell toolchain sudo rm -rf /usr/local/lib/android # Android SDK/NDK, emulator sudo rm -rf /usr/share/dotnet # .NET SDKs sudo rm -rf /usr/share/swift # Swift toolchain (if present) sudo rm -rf "$AGENT_TOOLSDIRECTORY" # Pre-cached tool cache (Go, Node, etc.) if: ${{ github.event.inputs.runner != 'fast' }} # BuildJet runners lack /opt/hostedtoolcache, which setup-qemu expects - name: Ensure hostedtoolcache exists run: sudo mkdir -p /opt/hostedtoolcache && sudo chown $USER:$USER /opt/hostedtoolcache - name: Set up docker QEMU uses: docker/setup-qemu-action@v4 - uses: actions/checkout@v6 with: submodules: recursive - name: Download compiled artifacts uses: actions/download-artifact@v8 with: name: compiled-${{ env.ARCH }}.tar - name: Extract compiled artifacts run: tar -xvf compiled-${{ env.ARCH }}.tar - name: Prevent rebuild of compiled artifacts run: | mkdir -p web/node_modules mkdir -p web/dist/raw mkdir -p core/bindings mkdir -p sdk/base/lib/osBindings mkdir -p container-runtime/node_modules mkdir -p container-runtime/dist mkdir -p container-runtime/dist/node_modules mkdir -p sdk/dist mkdir -p sdk/baseDist mkdir -p patch-db/client/node_modules mkdir -p patch-db/client/dist mkdir -p web/.angular mkdir -p web/dist/raw/ui mkdir -p web/dist/raw/setup-wizard mkdir -p web/dist/static/ui mkdir -p web/dist/static/setup-wizard PLATFORM=${{ matrix.platform }} make -t compiled-${{ env.ARCH }}.tar - run: git status - name: Run iso build run: PLATFORM=${{ matrix.platform }} make iso if: ${{ matrix.platform != 'raspberrypi' }} - name: Run img build run: PLATFORM=${{ matrix.platform }} make img if: ${{ matrix.platform == 'raspberrypi' }} - uses: actions/upload-artifact@v7 with: name: ${{ matrix.platform }}.squashfs path: results/*.squashfs - uses: actions/upload-artifact@v7 with: name: ${{ matrix.platform }}.iso path: results/*.iso if: ${{ matrix.platform != 'raspberrypi' }} - uses: actions/upload-artifact@v7 with: name: ${{ matrix.platform }}.img path: results/*.img if: ${{ matrix.platform == 'raspberrypi' }}