From bc36c7ddd03702ed10d2c1f4ff556a72f6d86d63 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Fri, 29 May 2015 12:16:04 -0400 Subject: [PATCH 1/7] hydra-module: Don't assume hydra is running on localhost. In the long run we should add retry logic to hydra-init... --- hydra-module.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hydra-module.nix b/hydra-module.nix index 00f3e439..1a9c5b2e 100644 --- a/hydra-module.nix +++ b/hydra-module.nix @@ -186,8 +186,6 @@ in systemd.services."hydra-init" = { wantedBy = [ "multi-user.target" ]; - requires = [ "postgresql.service" ]; - after = [ "postgresql.service" ]; environment = env; preStart = '' mkdir -m 0700 -p ${baseDir}/data @@ -206,7 +204,10 @@ in serviceConfig.User = "hydra"; serviceConfig.Type = "oneshot"; serviceConfig.RemainAfterExit = true; - }; + } // (optionalAttrs (cfg.dbi == "dbi:Pg:dbname=hydra;user=hydra;") { + requires = [ "postgresql.service" ]; + after = [ "postgresql.service" ]; + }); systemd.services."hydra-server" = { wantedBy = [ "multi-user.target" ]; From 36cbdd1bd8ceb3f97017c994e7b362423346f418 Mon Sep 17 00:00:00 2001 From: aszlig Date: Wed, 22 Jul 2015 11:51:49 +0200 Subject: [PATCH 2/7] common.tt: Properly generate URL for /api/scmdiff. If Hydra isn't hosted on https://example.com/ but something like https://example.com/hydra/, the URL for /api/scmdiff would have ended up on /api/scmdiff rather than /hydra/api/scmdiff. This is because we didn't use the URI resolver from the controller, hence we're using it now to build up the whole URL including the query string. Signed-off-by: aszlig --- src/root/common.tt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/root/common.tt b/src/root/common.tt index 75a66b63..44902431 100644 --- a/src/root/common.tt +++ b/src/root/common.tt @@ -271,7 +271,13 @@ BLOCK renderDiffUri; url = res.0; branch = res.1; IF bi1.type == "hg" || bi1.type == "git" %] - [% contents %] + [% contents %] [% ELSE; contents; END; From 07634e88622b0d66d18c8cbdcbb1bae416494493 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Fri, 31 Jul 2015 09:47:44 -0400 Subject: [PATCH 3/7] buildInputToString: Pass along the input's type and urr --- src/lib/Hydra/Helper/AddBuilds.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 52b0b030..0d58e83b 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -271,6 +271,8 @@ sub buildInputToString { ")"; } else { $result = "{ outPath = builtins.storePath " . $input->{storePath} . "" . + "; type = \"" . $input->{type} . "\"" . + (defined $input->{uri} ? "; uri = \"" . $input->{uri} . "\"" : "") . (defined $input->{revNumber} ? "; rev = " . $input->{revNumber} . "" : "") . (defined $input->{revision} ? "; rev = \"" . $input->{revision} . "\"" : "") . (defined $input->{revCount} ? "; revCount = " . $input->{revCount} . "" : "") . From d450d089298ed041daf579d8fe4ab33da742a23c Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Tue, 4 Aug 2015 06:50:04 -0400 Subject: [PATCH 4/7] buildInputToString: Use inputType attribute instead of type attribute --- src/lib/Hydra/Helper/AddBuilds.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 0d58e83b..6137e2ca 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -271,7 +271,7 @@ sub buildInputToString { ")"; } else { $result = "{ outPath = builtins.storePath " . $input->{storePath} . "" . - "; type = \"" . $input->{type} . "\"" . + "; inputType = \"" . $input->{type} . "\"" . (defined $input->{uri} ? "; uri = \"" . $input->{uri} . "\"" : "") . (defined $input->{revNumber} ? "; rev = " . $input->{revNumber} . "" : "") . (defined $input->{revision} ? "; rev = \"" . $input->{revision} . "\"" : "") . From 4d967dd17a1fd14b4f54f8e65f455463c7543a4c Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Tue, 4 Aug 2015 07:54:24 -0400 Subject: [PATCH 5/7] hydra-eval-jobs: Pass all inputs as 'inputs' arg. If there is no input named 'inputs', hydra-eval-jobs now passes in a set of lists, where each attribute corresponds to an input defined in the jobset specification and each list element is a different input alt, as an argument named 'inputs'. Among other things, this allows for generic hydra expressions to be shared amongst projects with similar structures but different sets of specific inputs. --- src/hydra-eval-jobs/hydra-eval-jobs.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hydra-eval-jobs/hydra-eval-jobs.cc b/src/hydra-eval-jobs/hydra-eval-jobs.cc index 0eacecd0..4877520a 100644 --- a/src/hydra-eval-jobs/hydra-eval-jobs.cc +++ b/src/hydra-eval-jobs/hydra-eval-jobs.cc @@ -253,16 +253,28 @@ int main(int argc, char * * argv) EvalState state(searchPath); AutoArgs autoArgs; + Value * inputsSet = state.allocValue(); + state.mkAttrs(*inputsSet, autoArgs_.size()); for (auto & i : autoArgs_) { + Symbol inputName = state.symbols.create(i.first); + Value * inputAttr = state.allocAttr(*inputsSet, inputName); + state.mkList(*inputAttr, i.second.size()); + int altIndex = 0; for (auto & j : i.second) { Value * v = state.allocValue(); if (j[0] == 'E') state.eval(state.parseExprFromString(string(j, 1), absPath(".")), *v); else mkString(*v, string(j, 1)); - autoArgs[state.symbols.create(i.first)].push_back(v); + autoArgs[inputName].push_back(v); + inputAttr->list.elems[altIndex++] = v; } } + Symbol sInputs = state.symbols.create("inputs"); + if (autoArgs.find(sInputs) == autoArgs.end()) { + inputsSet->attrs->sort(); + autoArgs[sInputs].push_back(inputsSet); + } store = openStore(); From a5b986cf33630ac26ffd6ab7b8b432272960a6f5 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Tue, 4 Aug 2015 08:10:47 -0400 Subject: [PATCH 6/7] Only pass the first value of each input in the inputs argument Multiple alts are on their way out --- src/hydra-eval-jobs/hydra-eval-jobs.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hydra-eval-jobs/hydra-eval-jobs.cc b/src/hydra-eval-jobs/hydra-eval-jobs.cc index 4877520a..a6428d82 100644 --- a/src/hydra-eval-jobs/hydra-eval-jobs.cc +++ b/src/hydra-eval-jobs/hydra-eval-jobs.cc @@ -257,9 +257,7 @@ int main(int argc, char * * argv) state.mkAttrs(*inputsSet, autoArgs_.size()); for (auto & i : autoArgs_) { Symbol inputName = state.symbols.create(i.first); - Value * inputAttr = state.allocAttr(*inputsSet, inputName); - state.mkList(*inputAttr, i.second.size()); - int altIndex = 0; + bool first = true; for (auto & j : i.second) { Value * v = state.allocValue(); if (j[0] == 'E') @@ -267,7 +265,10 @@ int main(int argc, char * * argv) else mkString(*v, string(j, 1)); autoArgs[inputName].push_back(v); - inputAttr->list.elems[altIndex++] = v; + if (first) { + inputsSet->attrs->push_back(Attr(inputName, *v)); + first = false; + } } } Symbol sInputs = state.symbols.create("inputs"); From 7b7f189b3ee32b6f1e81d12bdc5049d75223b1fc Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Tue, 4 Aug 2015 08:12:24 -0400 Subject: [PATCH 7/7] Whoops, misread signature --- src/hydra-eval-jobs/hydra-eval-jobs.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hydra-eval-jobs/hydra-eval-jobs.cc b/src/hydra-eval-jobs/hydra-eval-jobs.cc index a6428d82..1f2c15c9 100644 --- a/src/hydra-eval-jobs/hydra-eval-jobs.cc +++ b/src/hydra-eval-jobs/hydra-eval-jobs.cc @@ -266,7 +266,7 @@ int main(int argc, char * * argv) mkString(*v, string(j, 1)); autoArgs[inputName].push_back(v); if (first) { - inputsSet->attrs->push_back(Attr(inputName, *v)); + inputsSet->attrs->push_back(Attr(inputName, v)); first = false; } }