Commit Graph

24 Commits (cross/main)

Author SHA1 Message Date
Dustin 62e61522e5 ci: post: Trigger correct job, do not wait
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
The next job in the pipeline is _rust-cross/main_, not
_cross-rust/main_.

Also, we don't need to wait for follow-up jobs.  Otherwise, we end up
with the whole pipeline blocking the _base_ job, etc.
2025-01-03 15:49:56 -06:00
Dustin ad77a3a035 ci: Trigger cross-rust build on success
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
When the "cross" image finishes building, Jenkins will start building a
new "cross-rust" image on top of it.
2024-12-22 09:16:29 -06:00
Dustin 7946b8c084 Do not cross-compile Rust
This will happen in a separate layer.
2024-12-22 09:15:47 -06:00
Dustin 825e1c17b1 ci: Mount ephemeral volume for container storage
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Without a specific volume mount, the Buildah working container will be
stored in the Jenkins pod container filesystem.  This not only affects
performance, but limits the size of the working container filesystem and
the final image, as the worker nodes do not have very much space for
container filesystems.  Thus, we need to mount an ephemeral Longhorn
volume in the job pod to provide more space to Buildah.

Using a read-only root filesystem helps ensure that no temporary data
get written to container storage.  This of course breaks the work-around
we had in place for overriding the broken default `storage.conf` in the
_buildah_ image, so we mount a _tmpfs_ filesystem at `/home/build` as a
different work-around.
2024-12-21 15:09:07 -06:00
Dustin 79a2645c17 Correctly configure USE/env vars for Rust
Although `LLVM_TARGETS` is USE-forced for _llvm-core/llvm_, it is NOT
forced for _dev-lang/rust_.  The latter needs the target architecture
set in order to build the cross-compiled Rust standard library.
2024-12-21 15:09:07 -06:00
Dustin 48fd2abbda build: Emerge gettext with USE=-nls first
This is necessary to break a dependency cycle between
_sys-devel/gettext_ and _sys-devel/m4[nls]_.
2024-12-21 15:09:07 -06:00
Dustin 359e5f3c3b split-repo: Populate cross branch
In order to create multiple Jenkins build pipelines for this repository,
I'm splitting it up with branches.  There will be a branch for each
image:

* base/main: The base image
* cross/main: The image with a cross-compiler toolchain
* build/main: The final build image

Note _/main_ in each name.  The intent here is to be able to have
different "sub-branches" for each image, so e.g. there might be a
_base/dev_.

In addition to the branches for each image, there will be branches for
the shared library code as well, named like _lib/main_.  The image
branches will checkout this branch using `git worktree`.
2024-12-21 15:09:07 -06:00
Dustin c3418b96e7 portage: Set USE=-nls globally
A recent update to the Gentoo repo as introduced a circular dependency
between _m4_ and _gettext_.  We can avoid it by setting `USE=-nls`.
This is OK because we don't need i18n in the build environment.
2024-12-14 17:37:40 -06:00
Dustin 5d730ee0e6 lib/crossdev: Do not update when installing
This usually results in a broken dependency graph that has to be
resolved by rebuilding the base layer.
2024-12-14 17:37:40 -06:00
Dustin 961cb0078c lib: Disable emerge color
Although Jenkins is supposed to be able to decode ANSI escape sequences
for terminal colors, it doesn't do so in all cases and when it does, it
doesn't seem to produce the right result for output from `emerge`.
2024-12-14 17:37:25 -06:00
Dustin 9377c9423c ci: Fix file ownership before archiving
Several log files in `/var/log` are owned by users other than root.
From outside the user namespace, these files are inaccessible to the
unprivileged user, so we need to change their ownership before we can
archive them.
2024-12-14 14:17:33 -06:00
Dustin c1badb2d1e cross: Fix parsing arguments
Infinite loop much?
2024-12-14 14:17:33 -06:00
Dustin d79bf8526e ci: Archive logs from /var/log too
When `crossdev` fails, we need to read the logs it put in `/var/log`.
2024-12-14 14:17:33 -06:00
Dustin b7fdaa93ac ci: Set resource requests/limits
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Use the whole node to prevent interference from other processes causing
e.g. OOM conditions.
2024-12-14 11:25:20 -06:00
Dustin a67ed592df tools: Install tini
During development, we leave a container running and `exec` into it
to run multiple commands.  To keep the container running, we need a PID
1 process that never terminates, which we achieved previously with
Python.  This technically works, but ultimately leaves a lot of zombie
processes.  If we use a "true" init process for PID 1, it will clean
these up.
2024-12-14 09:45:50 -06:00
Dustin 3f136a4ad1 crossdev: Build a cross toolchain for Rust
To cross-compile Rust packages, we need a standard library compiled for
the target system.
2024-12-14 09:41:35 -06:00
Dustin aaed7211b2 build: Install QEMU
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Although most software can be cross-compiled, there are quite a few edge
cases where executables built for the target system need to be run on
the build host.  Notably, `ldconfig` only considers libraries for the
same machine type as the tool itself, so it's impossible to run it in a
cross-compiled root.  In order to get passed these situations, we can
use QEMU in user mode to emulate the target architecture, allowing ARM
executables to run on AMD64 machines.
2024-12-12 18:02:16 -06:00
Dustin 19068af38c ci: Push: Publish all images
Aimee OS/container-images/pipeline/head This commit looks good Details
The _build/cross-{target}_ image only includes the crossdev toolchain.
What we really need is the _build/build-{target}_ image, which contains
all the tools necessary to build an Aimee OS project.
2024-12-09 08:59:32 -06:00
Dustin 20916b48c6 ci: Persist build logs
Aimee OS/container-images/pipeline/head This commit looks good Details
2024-12-08 10:59:30 -06:00
Dustin f99176abf3 tools: emerge shadow first
_sys-apps/shadow_ needs to be installed explicity, otherwise all
_acct-user/*_ and _acct-group/*_ packages will fail to install.
2024-12-08 10:59:30 -06:00
Dustin c13a44c6bf common: Persist binary packages between runs 2024-12-08 10:59:30 -06:00
Dustin 15fbb180d0 ci: Begin Jenkins build pipeline 2024-12-08 10:59:30 -06:00
Dustin 65988b0c32 Rework images into three layers
* Base
* Crossdev
* Build

The *Base* layer is bootstrapped from a regular Gentoo stage 3
environment.  The *Build* layer is the primary artifact, and is
"squashed" into a single layer when built.
2024-12-08 10:59:28 -06:00
Dustin 86330dc292 Initial commit 2024-12-02 21:03:08 -06:00