# This package provides `tectonic.passthru.tests`. # It requires internet access to fetch tectonic's resource bundle on demand. { lib , fetchFromGitHub , writeText , runCommand , tectonic , curl , cacert , emptyFile }: let /* Currently, the test files are only fully available from the `dev` branch of `biber`. When https://github.com/plk/biber/pull/467 is eventually released, we can obtain the test files from `texlive.pkgs.biber.texsource`. For now, i.e. biber<=2.19, we fetch the test files directly from GitHub. */ biber-dev-source = fetchFromGitHub { owner = "plk"; repo = "biber"; # curl https://api.github.com/repos/plk/biber/pulls/467 | jq .merge_commit_sha rev = "d43e352586f5c9f98f0331978ca9d0b908986e09"; hash = "sha256-Z5BdMteBouiDQasF6GZXkS//YzrZkcX1eLvKIQIBkBs="; }; testfiles = "${biber-dev-source}/testfiles"; noNetNotice = writeText "tectonic-offline-notice" '' # To fetch tectonic's web bundle, the tests require internet access, # which is not available in the current environment. ''; # `cacert` is required for tls connections nativeBuildInputs = [ curl cacert tectonic ]; checkInternet = '' if curl --head "bing.com"; then set -e # continue to the tests defined below, fail on error else cat "${noNetNotice}" cp "${emptyFile}" "$out" exit # bail out gracefully when there is no internet, do not panic fi ''; networkRequiringTestPkg = name: script: runCommand /* Introduce dependence on `tectonic` in the test package name. Note that adding `tectonic` to `nativeBuildInputs` is not enough to trigger rebuilds for a fixed-output derivation. One must update its name or output hash to induce a rebuild. This behavior is exactly the same as a standard nixpkgs "fetcher" such as `fetchurl`. */ "test-${lib.removePrefix "${builtins.storeDir}/" tectonic.outPath}-${name}" { /* Make a fixed-output derivation, return an `emptyFile` with fixed hash. These derivations are allowed to access the internet from within a sandbox, which allows us to test the automatic download of resource files in tectonic, as a side effect. The `tectonic.outPath` is included in `name` to induce rebuild of this fixed-output derivation whenever the `tectonic` derivation is updated. */ inherit (emptyFile) outputHashAlgo outputHashMode outputHash ; allowSubstitutes = false; inherit nativeBuildInputs; } '' ${checkInternet} ${script} cp "${emptyFile}" "$out" ''; in lib.mapAttrs networkRequiringTestPkg { biber-compatibility = '' # import the test files cp "${testfiles}"/* . # tectonic caches in the $HOME directory, so set it to $PWD export HOME=$PWD tectonic -X compile ./test.tex ''; workspace = '' tectonic -X new cat Tectonic.toml | grep "${tectonic.bundleUrl}" ''; /** test that the `nextonic -> tectonic` symlink is working as intended */ nextonic = '' nextonic new 2>&1 \ | grep '"version 2" Tectonic command-line interface activated' ''; }