60 lines
1.9 KiB
Docker
60 lines
1.9 KiB
Docker
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
ARG BASE_VERSION
|
|
FROM asterinas/osdk:${BASE_VERSION} AS build-base
|
|
|
|
SHELL ["/bin/bash", "-c"]
|
|
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Install Nix package manager and other Nix tools
|
|
#
|
|
# The nixpkgs and nixos channels are pinned to a particular commit (NixOS 25.05, 2025-07-01) for reproducibility.
|
|
# FIXME: Installing Nix as root is not supported in single-user mode.
|
|
RUN sh <(curl -L https://nixos.org/nix/install) --daemon --yes \
|
|
&& . /etc/profile.d/nix.sh \
|
|
&& nix-channel --add https://github.com/NixOS/nixpkgs/archive/c0bebd16e69e631ac6e52d6eb439daba28ac50cd.tar.gz nixpkgs \
|
|
&& nix-channel --add https://github.com/NixOS/nixpkgs/archive/c0bebd16e69e631ac6e52d6eb439daba28ac50cd.tar.gz nixos \
|
|
&& nix-channel --update \
|
|
&& nix-env -iA nixpkgs.nixfmt \
|
|
&& nix-env -iA nixpkgs.nixos-install-tools \
|
|
&& nix-env -iA cachix -f https://cachix.org/api/v1/install \
|
|
&& rm /nix/var/nix/gcroots/auto/* \
|
|
&& nix-collect-garbage -d
|
|
|
|
#= Build Nix packages ======================================================
|
|
|
|
COPY test /root/test
|
|
WORKDIR /root/test
|
|
ENV PATH="/nix/var/nix/profiles/default/bin:${PATH}"
|
|
|
|
# Build riscv64 packages
|
|
RUN make riscv64_pkgs VERBOSE=0 \
|
|
&& make nix_gc
|
|
|
|
# Build x86_64 packages
|
|
RUN make x86_64_pkgs VERBOSE=0 \
|
|
&& make nix_gc
|
|
|
|
# Build general packages and install host required packages
|
|
RUN make general_pkgs VERBOSE=0 \
|
|
&& make install_host_pkgs \
|
|
&& make nix_gc
|
|
|
|
# Build initramfs packages to accelerate CI workflows
|
|
#
|
|
# It could also cache `stdenvNoCC`, a fundamental and predefined build environment.
|
|
# Therefore, `make nix_gc` MUST NOT be run after this.
|
|
RUN make initramfs_pkgs VERBOSE=0
|
|
|
|
# Clean source files
|
|
RUN rm -rf /root/test
|
|
|
|
# Let Github runners reuse Nixpkgs tarball installed in the Dockerfile.
|
|
RUN mkdir -p /github/home/.cache \
|
|
&& ln -s /root/.cache/nix /github/home/.cache/nix
|
|
|
|
VOLUME [ "/root/asterinas" ]
|
|
|
|
WORKDIR /root/asterinas
|