Skip to content

Commit

Permalink
fix(nixery): allow references to packages starting with numbers
Browse files Browse the repository at this point in the history
These packages are invalid in Nix, and worked around in nixpkgs with
underscores, but the underscores are invalid in the Docker registry
protocol.

We work around this by detecting this case and adding the underscore
to yield the correct package reference. There is no case where this
workaround can break something, as there can be no valid package
matching the regular expression.

This relates to #158

Change-Id: I7990cdb534a8e86c2ceee2c589a2636af70a4a03
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8531
Tested-by: BuildkiteCI
Autosubmit: tazjin <[email protected]>
Reviewed-by: flokli <[email protected]>
  • Loading branch information
tazjin committed Apr 29, 2023
1 parent d94d907 commit a85d613
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions prepare-image/prepare-image.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
{
# Description of the package set to be used (will be loaded by load-pkgs.nix)
srcType ? "nixpkgs"
, srcArgs ? "nixos-20.09"
, srcArgs ? "nixos-unstable"
, system ? "x86_64-linux"
, importArgs ? { }
, # Path to load-pkgs.nix
Expand Down Expand Up @@ -89,6 +89,19 @@ let
in
attrByPath path fetchLower s;

# Workaround for a workaround in nixpkgs: Unquoted language
# identifiers can not start with numbers in Nix, but some package
# names start with numbers (such as `1password`).
#
# In nixpkgs convention, these identifiers are prefixed with
# underscores (e.g. `_1password`), however this is not accepted by
# the Docker registry protocol.
#
# To make this work, we detect these kinds of packages and add the
# missing underscore.
needsUnderscore = pkg: (builtins.match "^[0-9].*" pkg) != null;
normalisedPackages = map (p: if needsUnderscore p then "_${p}" else p) (fromJSON packages);

# allContents contains all packages successfully retrieved by name
# from the package set, as well as any errors encountered while
# attempting to fetch a package.
Expand All @@ -104,7 +117,7 @@ let
then attrs // { errors = attrs.errors ++ [ res ]; }
else attrs // { contents = attrs.contents ++ [ res ]; };
init = { contents = [ ]; errors = [ ]; };
fetched = (map (deepFetch pkgs) (fromJSON packages));
fetched = (map (deepFetch pkgs) normalisedPackages);
in
foldl' splitter init fetched;

Expand Down

0 comments on commit a85d613

Please sign in to comment.