aboutsummaryrefslogtreecommitdiff
path: root/releng
diff options
context:
space:
mode:
Diffstat (limited to 'releng')
-rw-r--r--releng/cli.py10
-rw-r--r--releng/create_release.xsh15
-rw-r--r--releng/docker_assemble.py8
-rw-r--r--releng/release-jobs.nix54
4 files changed, 55 insertions, 32 deletions
diff --git a/releng/cli.py b/releng/cli.py
index 89391e0a7..f78d4b12d 100644
--- a/releng/cli.py
+++ b/releng/cli.py
@@ -2,16 +2,16 @@ from . import create_release
from . import docker
from .environment import RelengEnvironment
from . import environment
-import functools
import argparse
import sys
def do_build(args):
if args.target == 'all':
- create_release.build_artifacts(no_check_git=args.no_check_git)
+ create_release.build_artifacts(args.profile, no_check_git=args.no_check_git)
elif args.target == 'manual':
- eval_result = create_release.eval_jobs()
+ # n.b. args.profile does nothing here, you will just get the x86_64-linux manual no matter what.
+ eval_result = create_release.eval_jobs(args.profile)
create_release.build_manual(eval_result)
else:
raise ValueError('invalid target, unreachable')
@@ -80,6 +80,10 @@ def main():
build.add_argument('--target',
choices=['manual', 'all'],
help='Whether to build everything or just the manual')
+ build.add_argument('--profile',
+ default='all',
+ choices=('all', 'x86_64-linux-only'),
+ help='Which systems to build targets for.')
build.set_defaults(cmd=do_build)
upload = sps.add_parser(
diff --git a/releng/create_release.xsh b/releng/create_release.xsh
index b51a3ad23..96b13ae4c 100644
--- a/releng/create_release.xsh
+++ b/releng/create_release.xsh
@@ -27,9 +27,6 @@ RELENG_MSG = "Release created with releng/create_release.xsh"
BUILD_CORES = 16
MAX_JOBS = 2
-# TODO
-RELEASE_SYSTEMS = ["x86_64-linux"]
-
def setup_creds(env: RelengEnvironment):
key = keys.get_ephemeral_key(env)
@@ -82,11 +79,9 @@ def realise(paths: list[str]):
nix-store @(args) @(paths)
-def eval_jobs():
- nej_output = $(nix-eval-jobs --workers 4 --gc-roots-dir @(GCROOTS_DIR) --force-recurse --flake '.#release-jobs')
- return [x for x in (json.loads(s) for s in nej_output.strip().split('\n'))
- if x['system'] in RELEASE_SYSTEMS
- ]
+def eval_jobs(build_profile):
+ nej_output = $(nix-eval-jobs --workers 4 --gc-roots-dir @(GCROOTS_DIR) --force-recurse --flake f'.#release-jobs.{build_profile}')
+ return [json.loads(s) for s in nej_output.strip().split('\n')]
def upload_drv_paths_and_outputs(env: RelengEnvironment, paths: list[str]):
@@ -295,14 +290,14 @@ def upload_manual(env: RelengEnvironment):
aws s3 sync @(MANUAL)/ @(env.docs_bucket)/manual/lix/stable/
-def build_artifacts(no_check_git=False):
+def build_artifacts(build_profile, no_check_git=False):
rm -rf release/
if not no_check_git:
verify_are_on_tag()
git_preconditions()
print('[+] Evaluating')
- eval_result = eval_jobs()
+ eval_result = eval_jobs(build_profile)
drv_paths = [x['drvPath'] for x in eval_result]
print('[+] Building')
diff --git a/releng/docker_assemble.py b/releng/docker_assemble.py
index ef1d8c4e6..a03ec2766 100644
--- a/releng/docker_assemble.py
+++ b/releng/docker_assemble.py
@@ -100,14 +100,6 @@ class OCIIndex:
}
-def docker_architecture_from_nix_system(system: str) -> DockerArchitecture:
- MAP = {
- 'x86_64-linux': 'amd64',
- 'aarch64-linux': 'arm64',
- }
- return MAP[system] # type: ignore
-
-
@dataclasses.dataclass
class TaggingOperation:
manifest: OCIIndex
diff --git a/releng/release-jobs.nix b/releng/release-jobs.nix
index 4db0baed3..49508e4ef 100644
--- a/releng/release-jobs.nix
+++ b/releng/release-jobs.nix
@@ -3,8 +3,27 @@ let
inherit (pkgs) lib;
lix = hydraJobs.build.x86_64-linux;
- systems = [ "x86_64-linux" ];
- dockerSystems = [ "x86_64-linux" ];
+ # This is all so clumsy because we can't use arguments to functions in
+ # flakes, and certainly not with n-e-j.
+ profiles = {
+ # Used for testing
+ x86_64-linux-only = {
+ systems = [ "x86_64-linux" ];
+ dockerSystems = [ "x86_64-linux" ];
+ };
+ all = {
+ systems = [
+ "x86_64-linux"
+ "aarch64-linux"
+ "aarch64-darwin"
+ "x86_64-darwin"
+ ];
+ dockerSystems = [
+ "x86_64-linux"
+ "aarch64-linux"
+ ];
+ };
+ };
doTarball =
{
@@ -27,7 +46,8 @@ let
sha256sum --binary $filename | cut -f1 -d' ' > $out/$basename.sha256
'';
- targets =
+ targetsFor =
+ { systems, dockerSystems }:
builtins.map (system: {
target = hydraJobs.binaryTarball.${system};
targetName = "*.tar.xz";
@@ -44,14 +64,26 @@ let
tar -cvzf "$out/lix-${lix.version}-manual.tar.gz" lix-${lix.version}-manual
'';
- tarballs = pkgs.runCommand "lix-release-tarballs" { } ''
- mkdir -p $out
- ${lib.concatMapStringsSep "\n" doTarball targets}
- cp ${manualTar}/*.tar.gz $out
- cp -r ${lix.doc}/share/doc/nix/manual $out
- '';
+ tarballsFor =
+ { systems, dockerSystems }:
+ pkgs.runCommand "lix-release-tarballs" { } ''
+ mkdir -p $out
+ ${lib.concatMapStringsSep "\n" doTarball (targetsFor {
+ inherit systems dockerSystems;
+ })}
+ cp ${manualTar}/*.tar.gz $out
+ cp -r ${lix.doc}/share/doc/nix/manual $out
+ '';
in
-{
+(builtins.mapAttrs (
+ _:
+ { systems, dockerSystems }:
+ {
+ build = lib.filterAttrs (x: _: builtins.elem x systems) hydraJobs.build;
+ tarballs = tarballsFor { inherit systems dockerSystems; };
+ }
+) profiles)
+// {
inherit (hydraJobs) build;
- inherit tarballs;
+ inherit tarballsFor;
}