mirror of
https://github.com/ipxe/ipxe
synced 2026-02-04 23:19:30 +03:00
Use util/genfsimg to combine the 64-bit BIOS and all UEFI builds into a single multi-architecture image in both ISO and USB formats. Include an editable autoexec.ipxe script (that matches the default iPXE behaviour) in the USB image, so that users can just mount and edit this file. Signed-off-by: Michael Brown <mcb30@ipxe.org>
214 lines
5.2 KiB
YAML
214 lines
5.2 KiB
YAML
name: Build
|
|
|
|
on: push
|
|
|
|
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
|
|
|
|
- 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
|
|
|
|
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
|
|
|
|
- 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
|
|
|
|
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
|
|
|
|
- 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
|
|
|
|
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-combined
|
|
if-no-files-found: error
|
|
path: |
|
|
ipxe.iso
|
|
ipxe.usb
|