From d36d2e631e4baceed0a8c0c00859ebb2ab8cb82f Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 13 Nov 2026 21:28:11 +0100 Subject: populate: drop the shell implementation Populate is the program in Rust only. pkgs.populate checks its arguments, and returns a script running the program with them as JSON. The arguments it took for the shell implementation, dash, jq, and implementation, stay accepted and unused, so overrides setting them keep working. Copying flakes to remote targets using sudo gets refused during evaluation, as before, by checks.nix, and by the program for specs from elsewhere. The jq test goes with the jq programs; the program's unit tests cover their equivalents. --- tests/default.nix | 26 ++------- tests/jq.sh | 149 ---------------------------------------------------- tests/scenarios.nix | 18 +++---- 3 files changed, 10 insertions(+), 183 deletions(-) delete mode 100755 tests/jq.sh (limited to 'tests') diff --git a/tests/default.nix b/tests/default.nix index 189e573..97b64e0 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -7,10 +7,8 @@ # -A exhaustive, or one with, e.g., nix-build tests -A exhaustive.flake. # The smoke test runs a few scenarios covering each source type and each kind # of target in a single VM test, for checking changes quickly; build it with -# nix-build tests -A smoke. jq runs populate's jq programs for flakes without -# VMs. implementation selects populate's implementation, e.g. nix-build -# tests --argstr implementation rust -A smoke. -{ pkgs ? import ../pkgs {}, implementation ? "shell" }: +# nix-build tests -A smoke. +{ pkgs ? import ../pkgs {} }: let # HEAD of /fixtures/gitsrc, which fixtures.sh creates deterministically, @@ -26,11 +24,11 @@ let # The scenarios, with populate using rsync. scenariosWith = rsync: let - populate = pkgs.populate.override { inherit implementation rsync; }; + populate = pkgs.populate.override { inherit rsync; }; in import ./scenarios.nix { inherit (pkgs) lib; krops = import ../lib; - inherit implementation populate; + inherit populate; inherit (pkgs.krops.override { inherit populate; }) writeDeploy; url = "http://deployer:8000"; gitUrl = "git://deployer/gitsrc.git"; @@ -40,7 +38,6 @@ let rsyncVersion = rsync.version; }; scenarios = scenariosWith pkgs.rsync; - flakeJq = import ../pkgs/populate/flake-jq.nix; # VM tests of those of the groups of scenarios that are, or aren't, # exhaustive, named after the groups with prefix in front. testsOf = exhaustive: prefix: pkgs.lib.mapAttrs @@ -109,18 +106,3 @@ in }; }) rsyncs - // { - # Lock files in the shapes different versions of Nix write. - jq = pkgs.runCommand "krops-jq" { - nativeBuildInputs = [ pkgs.jq pkgs.nix ]; - } '' - sh ${./jq.sh} ${pkgs.linkFarm "krops-flake-jq" (map - (name: { name = "${name}.jq"; path = pkgs.writeText "${name}.jq" flakeJq.${name}; }) - [ "selected" "selfIsRemote" "selfLocked" ] - ++ [{ - name = "metadataSubdir.nix"; - path = pkgs.writeText "metadataSubdir.nix" flakeJq.metadataSubdir; - }])} - touch $out - ''; - } diff --git a/tests/jq.sh b/tests/jq.sh deleted file mode 100755 index 3794ce2..0000000 --- a/tests/jq.sh +++ /dev/null @@ -1,149 +0,0 @@ -#! /bin/sh -# Runs populate's jq programs for flakes over lock files in the shapes -# different versions of Nix write, without VMs. -# -# usage: jq.sh DIR -# -# DIR contains the programs as selected.jq, selfIsRemote.jq, and -# selfLocked.jq, and the Nix function for the target as metadataSubdir.nix. -set -efu - -programs=$1 -failed=0 - -# usage: expect WHAT ACTUAL EXPECTED -expect() { - if test "$2" != "$3"; then - printf 'FAIL: %s\n expected: %s\n got: %s\n' "$1" "$3" "$2" >&2 - failed=1 - fi -} - -# usage: expect_error WHAT ACTUAL MESSAGE -expect_error() { - case $2 in - *"$3"*) ;; - *) - printf 'FAIL: %s\n expected an error: %s\n got: %s\n' "$1" "$3" "$2" >&2 - failed=1 - ;; - esac -} - -# usage: selection METADATA INPUT -selection() { - printf '%s\n' "$1" | - timeout 10 jq -c --argjson input "$2" --from-file "$programs"/selected.jq 2>&1 || - : -} - -# A flake with an input dep, which has an input inner following the flake's -# input inner, and an input sub, a flake in a subdirectory, written as -# attribute dir or as query parameter dir of the URL. -metadata() { - cat <&1 || : -} -export HOME=${TMPDIR:-/tmp} -export NIX_STATE_DIR=$HOME/nix-state -expect "subdirectory as attribute, on the target" "$(metadata_subdir '{ - "locked": { "type": "tarball", "url": "http://x/mono.tar.gz", "dir": "sub" }, - "original": { "type": "tarball", "url": "http://x/mono.tar.gz", "dir": "sub" } -}')" '"sub"' -expect "subdirectory in the URL, on the target" "$(metadata_subdir '{ - "locked": { "type": "tarball", "url": "http://x/mono.tar.gz?dir=sub&narHash=sha256-mono" }, - "original": { "type": "tarball", "url": "http://x/mono.tar.gz?dir=sub" } -}')" '"sub"' -expect "subdirectory in the original reference only, on the target" "$(metadata_subdir '{ - "locked": { "type": "tarball", "url": "http://x/mono.tar.gz" }, - "original": { "type": "tarball", "url": "http://x/mono.tar.gz?rev=1&dir=sub" } -}')" '"sub"' -expect "no subdirectory, on the target" "$(metadata_subdir '{ - "locked": { "type": "path", "path": "/src/top" } -}')" '""' - -exit "$failed" diff --git a/tests/scenarios.nix b/tests/scenarios.nix index cda72bd..14a2c91 100644 --- a/tests/scenarios.nix +++ b/tests/scenarios.nix @@ -28,8 +28,6 @@ gitFirst, # Version of rsync on the deploying machine. rsyncVersion, - # The implementation of populate, "shell" or "rust". - implementation, }: let @@ -230,16 +228,12 @@ let then options // { fetchOnTarget = true; } else options)); - # A phase copying flakes to a target using sudo, which isn't supported: - # the shell implementation refuses during evaluation, the Rust one when it - # runs, because only then it decides whether the target is local. - refuseCopyingWithSudo = - if implementation == "shell" then { - expect = "eval-error"; - control = withFetchOnTarget; - } else { - expect.fail = "copying flakes to targets with sudo is not supported"; - }; + # A phase copying flakes to a target using sudo, which isn't supported, + # and gets refused during evaluation. + refuseCopyingWithSudo = { + expect = "eval-error"; + control = withFetchOnTarget; + }; in -- cgit v1.3.1