Unverified Commit cd7b95ee authored by Philip Taron's avatar Philip Taron Committed by GitHub
Browse files

Merge pull request #333236 from nbraud/testers/runCommand

testers.runCommand: init
parents 4af6be8f 18dd486b
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -339,6 +339,41 @@ once to get a derivation hash, and again to produce the final fixed output deriv

:::

## `runCommand` {#tester-runCommand}

`runCommand :: { name, script, stdenv ? stdenvNoCC, hash ? "...", ... } -> Derivation`

This is a wrapper around `pkgs.runCommandWith`, which
- produces a fixed-output derivation, enabling the command(s) to access the network ;
- salts the derivation's name based on its inputs, ensuring the command is re-run whenever the inputs changes.

It accepts the following attributes:
- the derivation's `name` ;
- the `script` to be executed ;
- `stdenv`, the environment to use, defaulting to `stdenvNoCC` ;
- the derivation's output `hash`, defaulting to the empty file's.
  The derivation's `outputHashMode` is set by default to recursive, so the `script` can output a directory as well.

All other attributes are passed through to [`mkDerivation`](#sec-using-stdenv),
including `nativeBuildInputs` to specify dependencies available to the `script`.

:::{.example #ex-tester-runCommand-nix}

# Run a command with network access

```nix
testers.runCommand {
  name = "access-the-internet";
  command = ''
    curl -o /dev/null https://example.com
    touch $out
  '';
  nativeBuildInputs = with pkgs; [ cacert curl ];
}
```

:::

## `runNixOSTest` {#tester-runNixOSTest}

A helper function that behaves exactly like the NixOS `runTest`, except it also assigns this Nixpkgs package set as the `pkgs` of the test and makes the `nixpkgs.*` options read-only.
+40 −1
Original line number Diff line number Diff line
{ pkgs, pkgsLinux, buildPackages, diffoscopeMinimal, lib, callPackage, runCommand, stdenv, substituteAll, testers }:
{
  lib,
  buildPackages,
  callPackage,
  pkgs,
  pkgsLinux,

  diffoscopeMinimal,
  runCommand,
  runCommandWith,
  stdenv,
  stdenvNoCC,
  substituteAll,
  testers,
}:
# Documentation is in doc/build-helpers/testers.chapter.md
{
  # See https://nixos.org/manual/nixpkgs/unstable/#tester-lycheeLinkCheck
@@ -87,6 +101,31 @@
        else salted;
    in checked;

  # See https://nixos.org/manual/nixpkgs/unstable/#tester-runCommand
  runCommand = testers.invalidateFetcherByDrvHash (
    {
      hash ? pkgs.emptyFile.outputHash,
      name,
      script,
      stdenv ? stdenvNoCC,
      ...
    }@args:

    runCommandWith {
      inherit name stdenv;

      derivationArgs = {
        outputHash = hash;
        outputHashMode = "recursive";
      } // lib.removeAttrs args [
        "hash"
        "name"
        "script"
        "stdenv"
      ];
    } script
  );

  # See https://nixos.org/manual/nixpkgs/unstable/#tester-runNixOSTest
  # or doc/build-helpers/testers.chapter.md
  runNixOSTest =
+23 −0
Original line number Diff line number Diff line
@@ -18,6 +18,29 @@ lib.recurseIntoAttrs {

  shellcheck = pkgs.callPackage ../shellcheck/tests.nix { };

  runCommand = lib.recurseIntoAttrs {
    bork = pkgs.python3Packages.bork.tests.pytest-network;

    dns-resolution = testers.runCommand {
      name = "runCommand-dns-resolution-test";
      nativeBuildInputs = [ pkgs.ldns ];
      script = ''
        drill example.com
        touch $out
      '';
    };

    nonDefault-hash = testers.runCommand {
      name = "runCommand-nonDefaultHash-test";
      script = ''
        mkdir $out
        touch $out/empty
        echo aaaaaaaaaaicjnrkeflncmrlk > $out/keymash
      '';
      hash = "sha256-eMy+6bkG+KS75u7Zt4PM3APhtdVd60NxmBRN5GKJrHs=";
    };
  };

  runNixOSTest-example = pkgs-with-overlay.testers.runNixOSTest ({ lib, ... }: {
    name = "runNixOSTest-test";
    nodes.machine = { pkgs, ... }: {
+1 −2
Original line number Diff line number Diff line
@@ -887,9 +887,8 @@ rec {
  /* An immutable file in the store with a length of 0 bytes. */
  emptyFile = runCommand "empty-file"
    {
      outputHashAlgo = "sha256";
      outputHash = "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=";
      outputHashMode = "recursive";
      outputHash = "0ip26j2h11n1kgkz36rl4akv694yz65hr72q4kv4b3lxcbi65b3p";
      preferLocalBuild = true;
    } "touch $out";

+3 −0
Original line number Diff line number Diff line
{
  lib,
  buildPythonPackage,
  callPackage,
  fetchFromGitHub,
  pytestCheckHook,
  pythonOlder,
@@ -61,6 +62,8 @@ buildPythonPackage rec {
    "test_repo"
  ];

  passthru.tests = callPackage ./tests.nix { };

  meta = with lib; {
    description = "Python build and release management tool";
    mainProgram = "bork";
Loading