name: Build on: push: pull_request: env: MAKEFLAGS: "-j4 GITVERSION=${{ github.sha }}" jobs: bios: name: BIOS / ${{ matrix.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: arch: - i386 - x86_64 container: image: ghcr.io/ipxe/ipxe-builder-${{ matrix.arch }} env: bindir: >- ${{ matrix.arch == 'i386' && 'bin' || 'bin-x86_64-pcbios' }} steps: - name: Check out code uses: actions/checkout@v6 - name: Build working-directory: src run: | make ${{ env.bindir }}/10ec8139.rom \ ${{ env.bindir }}/8086100e.mrom \ ${{ env.bindir }}/ipxe.dsk \ ${{ env.bindir }}/ipxe.iso \ ${{ env.bindir }}/ipxe.lkrn \ ${{ env.bindir }}/ipxe.pxe \ ${{ env.bindir }}/ipxe.usb \ ${{ env.bindir }}/undionly.kpxe \ ${{ env.bindir }}/errors - name: Hardware list working-directory: src run: | ./util/niclist.pl \ --format dokuwiki \ --sort bus-,vendor_id,device_id,device_name \ --output ${{ env.bindir }}/niclist.txt - name: Upload uses: actions/upload-artifact@v6 with: name: ${{ env.bindir }} if-no-files-found: error path: | src/${{ env.bindir }}/ipxe.lkrn src/${{ env.bindir }}/ipxe.pxe src/${{ env.bindir }}/undionly.kpxe src/${{ env.bindir }}/errors src/${{ env.bindir }}/niclist.txt sbi: name: SBI / ${{ matrix.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: arch: - riscv32 - riscv64 container: image: ghcr.io/ipxe/ipxe-builder-${{ matrix.arch }} env: bindir: bin-${{ matrix.arch }} steps: - name: Check out code uses: actions/checkout@v6 - name: Build working-directory: src run: | make ${{ env.bindir }}/ipxe.pf32 \ ${{ env.bindir }}/ipxe.lkrn \ ${{ env.bindir }}/ipxe.sbi \ ${{ env.bindir }}/errors - name: Upload uses: actions/upload-artifact@v6 with: name: ${{ env.bindir }} if-no-files-found: error path: | src/${{ env.bindir }}/ipxe.lkrn src/${{ env.bindir }}/ipxe.sbi src/${{ env.bindir }}/errors uefi: name: UEFI / ${{ matrix.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: arch: - arm32 - arm64 - i386 - loong64 - riscv32 - riscv64 - x86_64 container: image: ghcr.io/ipxe/ipxe-builder-${{ matrix.arch }} env: bindir: bin-${{ matrix.arch }}-efi steps: - name: Check out code uses: actions/checkout@v6 - name: Build working-directory: src run: | make ${{ env.bindir }}/ipxe.efi \ ${{ env.bindir }}/ipxe.iso \ ${{ env.bindir }}/ipxe.usb \ ${{ env.bindir }}/snponly.efi \ ${{ env.bindir }}/errors - name: Upload uses: actions/upload-artifact@v6 with: name: ${{ env.bindir }} if-no-files-found: error path: | src/${{ env.bindir }}/ipxe.efi src/${{ env.bindir }}/snponly.efi src/${{ env.bindir }}/errors tests: name: Tests / ${{ matrix.arch }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - arch: arm32 exec: qemu-arm-static - arch: arm64 exec: qemu-aarch64-static - arch: i386 exec: valgrind - arch: loong64 exec: qemu-loongarch64-static - arch: riscv32 exec: qemu-riscv32-static - arch: riscv64 exec: qemu-riscv64-static - arch: x86_64 exec: valgrind container: image: ghcr.io/ipxe/ipxe-builder-${{ matrix.arch }} env: bindir: bin-${{ matrix.arch }}-linux steps: - name: Check out code uses: actions/checkout@v6 - name: Build working-directory: src run: | make ${{ env.bindir }}/tests.linux - name: Test working-directory: src run: | ${{ matrix.exec }} ${{ env.bindir }}/tests.linux combine: name: BIOS + UEFI runs-on: ubuntu-latest needs: - bios - uefi container: image: ghcr.io/ipxe/ipxe-signer env: binaries: >- bin-x86_64-pcbios/ipxe.lkrn bin-arm32-efi/ipxe.efi bin-arm64-efi/ipxe.efi bin-i386-efi/ipxe.efi bin-loong64-efi/ipxe.efi bin-riscv32-efi/ipxe.efi bin-riscv64-efi/ipxe.efi bin-x86_64-efi/ipxe.efi steps: - name: Check out code uses: actions/checkout@v6 - name: Download uses: actions/download-artifact@v7 with: pattern: "{bin-x86_64-pcbios,bin-*-efi}" - name: Combine run: | # Provide an editable placeholder autoexec.ipxe for the USB image cat > autoexec.ipxe <<'EOF' #!ipxe echo prompt --key 0x02 --timeout 2000 \ Press Ctrl-B for the iPXE command line... \ && shell || autoboot EOF ./src/util/genfsimg -o ipxe.iso ${{ env.binaries }} ./src/util/genfsimg -o ipxe.usb -s autoexec.ipxe ${{ env.binaries }} - name: Upload uses: actions/upload-artifact@v6 with: name: bin-combi if-no-files-found: error path: | ipxe.iso ipxe.usb publish: name: Publish runs-on: ubuntu-latest needs: - bios - sbi - uefi - tests - combine if: >- github.event_name == 'push' && github.ref == 'refs/heads/master' && vars.PAGES_REPO_NAME env: workflow_url: >- ${{ github.server_url }}/${{ vars.PAGES_REPO_OWNER }}/${{ '' }}${{ vars.PAGES_REPO_NAME }}/actions/workflows/build.yml environment: name: publish url: ${{ env.workflow_url }} steps: - name: Get token id: token uses: actions/create-github-app-token@v2 with: app-id: ${{ vars.WORKFLOW_DISPATCHER_ID }} private-key: ${{ secrets.WORKFLOW_DISPATCHER_KEY }} owner: ${{ vars.PAGES_REPO_OWNER }} repositories: ${{ vars.PAGES_REPO_NAME }} - name: Dispatch env: GH_REPO: ${{ vars.PAGES_REPO_OWNER }}/${{ vars.PAGES_REPO_NAME }} GH_TOKEN: ${{ steps.token.outputs.token }} run: | gh workflow run build.yml -f run_id=${{ github.run_id }} echo "Results at ${{ env.workflow_url }}"