Commit Graph

3821 Commits

Author SHA1 Message Date
87d46ad5d6 hydra-queue-runner: --build-one: correctly handle a cached build
Previously, the build ID would never flow through channels which
exited.

This patch tracks the buildOne state as part of State and exits avoids
waiting forever for new work.

The code around buildOnly is a bit rough, making this a bit weird to
implement but since it is only used for testing the value of improving
it on its own is a bit questionable.
2021-03-16 16:13:38 -04:00
cab187a19d Merge pull request #891 from grahamc/bug-889
Fixup #717 "Add the project name to declarative inputs"
2021-03-16 09:58:53 -04:00
3c86083d21 Fixup #717 "Add the project name to declarative inputs"
```
Mar 10 16:22:35 hydra-b hydra-evaluator[41419]: DBIx::Class::Storage::DBI::_dbh_execute(): DBI Exception: DBD::Pg::st execute failed: ERROR:  null value in column "type" violates not-null constraint
Mar 10 16:22:35 hydra-b hydra-evaluator[41419]: DETAIL:  Failing row contains (62358, projectName, 0, null, null, null, hackworthltd, null, , null). [for Statement "INSERT INTO jobsetevalinputs ( altnr, dependency, eval, name, path, revision, sha256hash, type, uri, value) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )" with ParamValues: 1='0', 2=undef, 3='62358', 4='projectName', 5='', 6=undef, 7=undef, 8=undef, 9=undef, 10='hackworthltd'] at /nix/store/cmqblv437mp57yz5lwvkzcqca4ldf3r5-hydra-0.1.20210308.ebf1cd2/bin/.hydra-eval-jobset-wrapped line 793
Mar 10 16:22:35 hydra-b hydra-evaluator[25828]: evaluation of jobset ‘hackworthltd:.jobsets (jobset#1)’ failed with exit code 1
```

Use the abstraction for creating inputs for simulating the project
name input.

Co-authored-by: Graham Christensen <graham@grahamc.com>
2021-03-16 09:52:36 -04:00
930f05c38e Bump Nix version 2021-03-10 12:53:03 -05:00
b9fb66401b Merge pull request #880 from grahamc/runcommand-finished-bool
RunCommand: emit the `finished` field as a boolean
2021-03-09 09:58:43 -05:00
2179b4b4b0 RunCommand: emit the finished field as a boolean 2021-03-08 12:11:20 -05:00
ebf1cd22ef Merge pull request #717 from helsinki-systems/projectname
Add the project name to declarative inputs
2021-03-08 11:42:38 -05:00
9e018d5443 Add the project name to declarative inputs
This allows for more generic declarative configurations which can be
shared between projects.
2021-03-08 17:36:52 +01:00
a2717b3d7e Merge pull request #886 from grahamc/269
statsd: add a chance to set hostname and port in hydra.conf
2021-03-08 11:23:43 -05:00
a551fba346 statsd: add a chance to set hostname and port in hydra.conf
Co-authored-by: Graham Christensen <graham@grahamc.com>
2021-03-08 10:03:16 -05:00
1f4183e05f Merge pull request #885 from mcsaucy/patch-1
Make nix-build args copy-pastable via `set -x`
2021-03-07 08:14:49 -05:00
e0d3a1c1a5 Make nix-build args copy-pastable via set -x
A reproduce script includes a logline that may resemble:

> using these flags: --arg nixpkgs { outPath = /tmp/build-137689173/nixpkgs/source; rev = "fdc872fa200a32456f12cc849d33b1fdbd6a933c"; shortRev = "fdc872f"; revCount = 273100; } -I nixpkgs=/tmp/build-137689173/nixpkgs/source --arg officialRelease false --option extra-binary-caches https://hydra.nixos.org/ --option system x86_64-linux /tmp/build-137689173/nixpkgs/source/pkgs/top-level/release.nix -A 

These are passed along to nix-build and that's fine and dandy, but you can't just copy-paste this as is, as the `{}` introduces a syntax error and the value accompanying `-A` is `''`.

A very naive approach is to just `printf "%q"` the individual args, which makes them safe to copy-paste. Unfortunately, this looks awful due to the liberal usage of slashes:

```
$ printf "%q" '{ outPath = /tmp/build-137689173/nixpkgs/source; rev = "fdc872fa200a32456f12cc849d33b1fdbd6a933c"; shortRev = "fdc872f"; revCount = 273100; }'
\{\ outPath\ =\ /tmp/build-137689173/nixpkgs/source\;\ rev\ =\ \"fdc872fa200a32456f12cc849d33b1fdbd6a933c\"\;\ shortRev\ =\ \"fdc872f\"\;\ revCount\ =\ 273100\;\ \}
```

Alternatively, if we just use `set -x` before we execute nix-build, we'll get the whole invocation in a friendly, copy-pastable format that nicely displays `{}`-enclosed content and preserves the empty arg following `-A`:

```
running nix-build...
using this invocation: 
+ nix-build --arg nixpkgs '{ outPath = /tmp/build-138165173/nixpkgs/source; rev = "e0e4484f2c028d2269f5ebad0660a51bbe46caa4"; shortRev = "e0e4484"; revCount = 274008; }' -I nixpkgs=/tmp/build-138165173/nixpkgs/source --arg officialRelease false --option extra-binary-caches https://hydra.nixos.org/ --option system x86_64-linux /tmp/build-138165173/nixpkgs/source/pkgs/top-level/release.nix -A ''
```
2021-03-06 23:25:26 -05:00
de2f30f035 Merge pull request #883 from cole-h/bare-yath-test
Trivially run tests with `yath test`
2021-03-05 14:04:16 -05:00
2befb2c1e1 doc: document how to run tests
Both `make check` and `make && yath test` are now documented ways to
run the test suite.
2021-03-05 09:49:06 -08:00
025be052b7 tests: move to t, allow yath test from root
By moving the tests subdirectory to t, we gain the ability to run `yath
test` with no arguments from inside `nix develop` in the root of the
the repo.

(`nix develop` is necessary in order to set the proper env vars for
`yath` to find our test libraries.)
2021-03-05 09:49:06 -08:00
a8ec1b1afa Merge pull request #884 from cole-h/perl-cleanup
tests: replace the flat list of contexts with a hash
2021-03-05 12:45:21 -05:00
014778344c tests: remove unnecessary Cwd imports 2021-03-04 23:48:48 -08:00
9a3af13c51 tests: add jobsdir and testdir to ctx hash
This allows us to calculate those directories only once, and just pass
them around as necessary.
2021-03-04 23:19:48 -08:00
f08d0be1bd tests: replace the flat list of contexts with a hash
This way we can return more values without breaking callers.
2021-03-04 23:11:54 -08:00
26cfe624d5 Merge pull request #882 from cole-h/split-inputtype-test
tests/input-types: split out scminputs into individual tests
2021-03-04 17:13:22 -05:00
387fe8005a tests/input-types: split out scminputs into individual tests
This makes the test faster (by removing it and replacing it with a
`TestScmInput` module that exports the `testScmInput` subroutine). Now,
all the input tests can be run in parallel.

Some of the `tests/jobs/*-update.sh` scripts were "broken" (e.g. tests
failed for various reasons on my machine), so I fixed those up as well.

Co-authored-by: gustavderdrache <gustavderdrache@gmail.com>
2021-03-04 13:58:48 -08:00
572a0c0abd Merge pull request #881 from cole-h/hydra-dbi
module: append `application_name` to HYDRA_DBI
2021-03-04 10:07:01 -05:00
fe70160008 module: append application_name to HYDRA_DBI
This will make it easier to track specifically where queries are being
made from (assuming a `log_line_prefix` that includes `%a` in the
postgres configuration).
2021-03-03 16:02:52 -08:00
68ac64dbd9 Merge pull request #832 from wizeman/fix-hash-mismatch
Fix persistent hash mismatch errors when importing
2021-03-02 16:04:23 -05:00
3cd312fc4c Merge pull request #879 from grahamc/runcommand-meta
RunCommand: pass homepage, description, license, system, and nixname
2021-02-25 09:59:19 +01:00
a756614fa1 RunCommand: pass homepage, description, license, system, and nixname 2021-02-24 16:13:09 -05:00
6fb9a2bbf5 Merge pull request #878 from grahamc/test-runcommand
Test RunCommand's behavior
2021-02-24 21:42:14 +01:00
3fda37f65a RunCommand: Test 2021-02-24 13:43:25 -05:00
b2520267a9 Test setup: support arbitrary hydra config 2021-02-24 11:44:16 -05:00
8d3633594b Merge pull request #876 from grahamc/per-test-db
Create an ephemeral PostgreSQL database and Nix store per test, split up tests.
2021-02-24 07:59:18 -05:00
cccdc70162 input-types.t: don't litter ./tests/ 2021-02-24 07:01:32 -05:00
611d7b71f2 input-types: use is() for test comparisons 2021-02-24 07:01:32 -05:00
371826f931 Tests: build-products: use is for good errors on failures 2021-02-24 07:01:32 -05:00
0df9c68422 Relocate the final evalutation tests to a build-products specific test. 2021-02-24 07:01:31 -05:00
2776ae6c78 Move tests for SCM inputs in to its own .t 2021-02-24 07:01:31 -05:00
c8df544046 evaluate-dependent-jobsets: clean up test to be more clear 2021-02-24 07:01:31 -05:00
0b693ad8e8 Use is in evaluate-dependent-jobsets 2021-02-24 07:01:31 -05:00
9590bababc Split out dependent tests in to its own .t 2021-02-24 07:01:25 -05:00
e4cda87b5a db.hh: use hasPrefix for prefix comparisons
Co-authored-by: Eelco Dolstra <edolstra@gmail.com>
2021-02-24 07:00:26 -05:00
62b2880dfc Give each test its own Nix directories
Otherwise we risk tripping over confusing statuses where a build is
"done" and "Cached", but we were expecting to run it.
2021-02-23 21:43:54 -05:00
fe1f2f0806 Create an ephemeral PostgreSQL database per test 2021-02-23 21:12:06 -05:00
b15d8edab1 tests: delete set-up.pl / tear-down.pl
We'll set these up on a per-test basis.
2021-02-23 21:12:06 -05:00
9ddc6e355f flake: add TestPostgreSQL for per-test DBs 2021-02-23 21:12:02 -05:00
bfcc50f978 Merge pull request #877 from immae/mdbook
Convert documentation to markdown / mdbook
2021-02-23 20:16:33 -05:00
bd64b2481d Remove old files 2021-02-24 01:07:11 +01:00
9d916877fb Add markdown files for documentation
projects.xml and declarative-projects.xml were merged with xmllint, and
then I ran that to convert files
for i in *.xml; do pandoc -s -f docbook -t markdown $i -o ${i/xml/md}; done
2021-02-24 01:07:00 +01:00
e16388e34a Merge pull request #872 from grahamc/yath
Use `yath` for testing Hydra
2021-02-23 17:33:26 -05:00
3ebcaef127 README: update with instructions on running tests 2021-02-23 17:26:56 -05:00
e072c1d741 Merge pull request #874 from regnat/remove-sendDerivation
Remove the `sendDerivation` logic from the builder
2021-02-23 13:07:03 +01:00
f602ed0d86 Remove the sendDerivation logic from the builder
The queue runner used to special-case `localhost` as a remote builder:
Rather than using the normal remote-build (using the
`cmdBuildDerivation` command), it was using the (generally less
efficient, except when running against localhost) `cmdBuildPaths`
command because the latter didn't require a privileged Nix user (so made
testing easier − allowing to run hydra in a container in particular).

However:
1. this means that the build loop can follow two discint code paths depending
   on the setup, the irony being that the most commonly used one in production
   (the “non-localhost” case) isn't the one used in the testsuite (because all
   the tests run against a local store);
2. It turns out that the “localhost” version is buggy in relatively obvious
   ways − in particular a failure in a fixed-output derivation or a hash
   mismatch isn't reported properly;
3. If the “run in a container” use-case is indeed that important, it can be
   (partially) restored using a chroot store (which wouldn't behave excactly
   the same way of course, but would be more than good-enough for testing)
2021-02-23 09:50:15 +01:00