35 Commits

Author SHA1 Message Date
Michael Brown
027d0fe246 [ci] Include Secure Boot ISO and USB images in release artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 22:19:52 +00:00
Michael Brown
3680a4ae52 [build] Add support for including a UEFI shim in filesystem images
Add support for loading iPXE via a UEFI shim in ISO and USB images.
Since the iPXE shim's default loader filename is currently "ipxe.efi"
for all CPU architectures, at most one architecture within an image
may use a shim.  (This limitation should be removed in the next signed
release of the iPXE shim.)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-03-02 16:49:47 +00:00
Michael Brown
7948ffe329 [ci] Remove now-redundant "netboot" job
Use the ipxeboot.tar.gz artifact created by util/gensrvimg in the
"combine" job, and delete the dedicated "netboot" job that currently
creates the same artifact.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-24 15:53:25 +00:00
Michael Brown
9250a9091b [build] Create util/gensrvimg for building network boot server images
In the spirit of util/genfsimg, create a script util/gensrvimg that
can be used to install compiled iPXE binaries to a directory tree
suitable for copying to a TFTP or HTTP server.

The script detects the CPU architecture for each input file and
installs it into the appropriate subdirectory.  Top-level symlinks are
created for each filename, with earlier files taking precedence.

Signed binaries are detected and automatically placed into a Secure
Boot specific subdirectory, thereby allowing the reduced-feature
Secure Boot binaries to coexist with full-feature binaries in a single
installation directory tree.  An iPXE shim may be specified and will
be automatically installed alongside the signed binaries, with the
relevant symlink created for each signed binary.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-24 15:44:15 +00:00
Michael Brown
0854850d02 [ci] Add a job to automatically create releases
Add a job that will automatically create a (draft) release for any
suitable tag, using the build artifacts and release notes already
constructed by earlier jobs.  Minimise the logic within the release
job itself, since by definition it cannot be tested on every commit.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-21 00:29:50 +00:00
Michael Brown
179366d729 [ci] Remove redundant duplicate creation of version.txt
The version.txt file is now created by the "version" job (which also
generates the release name, release title, and release notes).  Remove
the now-redundant generation of version.txt in the BIOS build job.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-20 17:37:00 +00:00
Michael Brown
9e0057a864 [build] Allow for generation of all release information
Allow for automatic generation of the release name, release title, and
release notes (derived from the relevant section of the changelog).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-20 15:23:05 +00:00
Michael Brown
8fb90cb403 [build] Allow for construction of a text file containing the version
Add a rule to construct bin/version.txt containing the version number,
to allow a GitHub Actions workflow to verify that a tagged release
embeds a version number that matches the tag.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-19 13:00:19 +00:00
Michael Brown
2184bfdb03 [ci] Create a network bootable files archive as a build artifact
Create an archive designed to be extracted to a web server (or TFTP
server) directory, containing the network bootable files such as
undionly.kpxe, ipxe.efi, etc.

Incorporate the iPXE shim binaries, complete with the required
symlinks such as snponly-shim.efi -> shimx64.efi.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 22:06:33 +00:00
Michael Brown
d98278a177 [ci] Include latest iPXE shim in build artifacts
Prepare for the possibility of creating ISO and USB disk images that
support UEFI Secure Boot by downloading the Microsoft-signed binaries
from the latest release of the iPXE shim.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 18:54:37 +00:00
Michael Brown
80639a6ca8 [ci] Use ipxe-builder-utils container for combined BIOS/UEFI images
We currently use the ipxe-signer container for the step that combines
the BIOS and UEFI build artifacts to produce the multi-architecture
ISO and USB images.

Switch to using the generic architecture-independent utility toolchain
container, thereby allowing the ipxe-signer container to minimise its
attack surface by removing tools that are not required for the signing
operation.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-18 00:27:59 +00:00
Michael Brown
93fc2123c3 [ci] Include CA certificate file alongside signed binaries
Include the relevant CA certificate in the UEFI Secure Boot build
artifacts.  This allows for easy identification of test-signed builds
without having to extract the certificate from the signed binary.

This also eases the process of adding the ephemeral test-signing
certificate to the UEFI trusted certificate list, if a user wants to
test a non-release build with Secure Boot enabled.  (The corresponding
private key is deliberately not preserved, to minimise the attack
surface that this would otherwise open up on the user's system.)

Include the commit hash and build architecture within the ephemeral
test-signing certificate's subject name, to make it obvious that the
scope is limited to signing only that single build.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-17 16:29:20 +00:00
Michael Brown
a956c5feac [ci] Allow for manually triggered workflow runs
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-17 14:15:45 +00:00
Michael Brown
21b5bd8406 [ci] Add support for building UEFI Secure Boot signed binaries
Add a job that takes the bin-x86_64-efi-sb and bin-arm64-efi-sb build
artifacts and signs them for UEFI Secure Boot.

The hardware token containing the trusted signing key is attached to a
dedicated self-hosted GitHub Actions runner.  Only tagged release
versions (and commits on the "sbsign" testing branch) will be signed
on this dedicated runner.  All other commits will be signed on a
standard GitHub hosted runner using an ephemeral test certificate that
is not trusted for UEFI Secure Boot.

No other work is done as part of the signing job.  The iPXE source
code is not even checked out, minimising any opportunity to grant
untrusted code access to the hardware token.

The hardware token password is held as a deployment environment
secret, with the environment being restricted to allow access only for
tagged release versions (and commits on the "sbsign" testing branch)
to provide an additional layer of security.

The signing certificates and intermediate certificates are obtained
from the iPXE Secure Boot CA repository, with the certificate selected
via deployment environment variables.

To minimise hidden state held on the self-hosted runner, the pcscd
service is run via a service container, with the hardware token passed
in via "--devices /dev/bus/usb".

Select the deployment environment name (and hence runner tag) via a
repository variable SBSIGN_ENVIRONMENT, so that forks do not attempt
to start jobs on a non-existent self-hosted runner.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-15 22:50:12 +00:00
Michael Brown
2161e976cd [build] Include USB drivers in the all-drivers build by default
Including USB drivers has some unavoidable side effects.  With a BIOS
firmware, attaching the host controller drivers will necessarily
disable the SMM-based USB legacy support which emulates a PS/2
keyboard.  With a UEFI firmware, loading the host controller drivers
may disconnect some of the less compliant vendor USB device drivers.

We have historically erred on the side of caution and avoided
including any USB drivers in the all-drivers build.  Time has moved
on, USB NICs have become more common (especially for laptops, which
now rarely include physical Ethernet ports), and the UEFI Secure Boot
model makes it prohibitively difficult for users to compile their own
binaries to add support for non-default drivers.

Switch to including USB drivers by default in the all-drivers build.
Provide a fallback build target that matches the existing driver set
(i.e. excluding any USB drivers) and can be built using e.g.:

   make bin/ipxe-legacy.iso

   make bin-x86_64-efi/ipxe-legacy.efi

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-13 18:36:14 +00:00
Michael Brown
7caee4489d [ci] Include Linux userspace build artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-12 23:24:06 +00:00
Michael Brown
cc4a9df971 [ci] Include Secure Boot build artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-11 23:14:30 +00:00
Michael Brown
362b704f83 [ci] Include supported network device list in build artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-05 16:49:45 +00:00
Michael Brown
12b279b4c7 [ci] Include error identifier list in build artifacts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-05 12:18:33 +00:00
Michael Brown
aa06a76eb8 [ci] Show rolling release publication URL
Construct and show the URL for the workflow runs that are triggered to
publish the rolling release binaries.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-04 16:23:55 +00:00
Michael Brown
59c67e1110 [ci] Run tests on pull requests
The automated tests that are run in the GitHub Actions workflow are
now as comprehensive as those that are run manually.  Run tests on
pull requests as well as pushes, since the results are now
meaningfully informative.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-03 19:04:38 +00:00
Michael Brown
b05a045b41 [ci] Publish rolling release binaries via https://boot.ipxe.org
The boot.ipxe.org website is now hosted on GitHub Pages and built via
a GitHub Actions workflow.  The rolling release binaries are fetched
from the build artifacts created by this repository.

Remove the rolling release tag mechanism, and instead trigger a
workflow run on the boot.ipxe.org repository to publish the updated
binaries.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-02-01 23:05:40 +00:00
Michael Brown
74e0551ac2 [ci] Publish rolling release build artifacts with stable URLs
Publish the binaries built from commits on the master branch under
stable URLs such as:

  https://github.com/ipxe/ipxe/releases/download/rolling/bin/undionly.kpxe

Since filenames such as "ipxe.iso" may exist in each of several build
directories, we implement this as one release tag per build directory.
The GitHub Actions workflow automatically moves the tag to the most
recent commit and overwrites the existing release assets.

One downside of this is that running a local "git log" or similar may
show a large number of uninformative tags of the form "rolling/bin",
"rolling/bin-x86_64-efi", "rolling-arm64-efi", etc, all pointing at
the most recent commit.  This clutter may be hidden using:

  git config --local log.excludeDecoration refs/tags/rolling/*

To avoid the unintentional creation of rolling release tags on forks,
we skip the whole publication job unless the environment variable
ROLLING_PREFIX is defined.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-01-30 00:03:35 +00:00
Michael Brown
e855c4c642 [ci] Produce combined BIOS/UEFI ISO and USB images
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>
2026-01-29 14:51:35 +00:00
Michael Brown
8e10974c8c [ci] Upload a selection of build artifacts from each run
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-01-28 20:44:04 +00:00
Michael Brown
d0ea2b1bb8 [ci] Use prebuilt containers to build and test iPXE
Use the prebuilt containers from https://github.com/ipxe/ipxe-builder
to build BIOS, SBI, UEFI, and Linux userspace versions of iPXE for all
supported CPU architectures, and to run the Linux userspace test suite
(via valgrind or qemu as applicable).

This reduces the time taken for GitHub CI runs by around 80%, while
increasing the build coverage to include RISC-V SBI, RISC-V UEFI, and
LoongArch64 UEFI, and increasing the test coverage to include running
the Linux userspace test suite on all supported CPU architectures.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-01-25 15:52:16 +00:00
Michael Brown
faa42c8503 [build] Do not use "git describe" to construct version number
Using "git describe" to automatically construct the version number has
caused more problems than it has solved.  In particular, it causes
errors when building from a shallow clone of the repository, which is
a common scenario in modern automated build environments.

Define the base version number (currently 1.21.1+) as a set of
hardcoded constants within the Makefile, to be updated whenever a
release is made.

It is extremely useful to have the git commit ID present in the
startup banner.  End users tend to provide screenshots of failures,
and having the commit ID printed at startup makes it trivial to
identify which version of the code is in use.  Identify the git
version (if building from a git tree) by directly reading from
.git/HEAD and associated files.  This allows the git commit ID to
potentially be included even if the build environment does not have
the git tools installed.

Use the default shallow clone in the GitHub Actions workflow, since we
no longer require access to the full commit history.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-01-21 22:44:13 +00:00
Michael Brown
6eab3dbcd2 [ci] Update to ubuntu-24.04 GitHub actions runner
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-01-17 18:47:22 +00:00
Michael Brown
226531ed36 [ci] Update action versions to silence GitHub warnings
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2024-03-07 23:25:35 +00:00
Michael Brown
d27cd8196d [ci] Work around Ubuntu packaging metadata issues
The libc6-dbg:i386 package has spontaneously started failing to
install from the Azure package repositories used by the GitHub Actions
runners, with the somewhat recalcitrant error message:

 libc6:i386: Depends: libgcc-s1:i386 but it is not going to be installed

Work around this unexplained issue by explicitly requesting
installation of the libgcc-s1:i386 package.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2023-05-15 14:56:28 +01:00
Michael Brown
bfa5262f0e [ci] Cache downloaded packages for GitHub actions
Speed up the "Install packages" step for each CI run by caching the
downloaded packages in /var/cache/apt.

Do not include libc6-dbg:i386 within the cache, since apt seems to
complain if asked to download both gcc-aarch64-linux-gnu and
libc6-dbg:i386 at the same time.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2023-02-06 19:59:04 +00:00
Michael Brown
6c0335adf6 [ci] Update to ubuntu-22.04 GitHub actions runner
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2023-02-03 20:08:16 +00:00
Michael Brown
49c13e81bc [ci] Update to actions/checkout@v3 to silence GitHub warnings
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2023-02-03 00:50:16 +00:00
Michael Brown
f309d7a7b7 [linux] Use host glibc system call wrappers
When building as a Linux userspace application, iPXE currently
implements its own system calls to the host kernel rather than relying
on the host's C library.  The output binary is statically linked and
has no external dependencies.

This matches the general philosophy of other platforms on which iPXE
runs, since there are no external libraries available on either BIOS
or UEFI bare metal.  However, it would be useful for the Linux
userspace application to be able to link against host libraries such
as libslirp.

Modify the build process to perform a two-stage link: first picking
out the requested objects in the usual way from blib.a but with
relocations left present, then linking again with a helper object to
create a standard hosted application.  The helper object provides the
standard main() entry point and wrappers for the Linux system calls
required by the iPXE Linux drivers and interface code.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-02-28 23:28:23 +00:00
Michael Brown
eeca29a1e0 [ci] Add GitHub action for build testing
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-02-04 16:41:55 +00:00