diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-08-06 11:02:26 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2024-08-06 12:46:08 +0200 |
commit | 4acf0aa7031836abbb53f9a7816b6a55bab6fcd6 (patch) | |
tree | a40aaf7af5cacbdc9a4ec8002bddee135c492803 | |
parent | 51da1899e8b46e8f445c46a57dc57fff7076fd23 (diff) | |
download | justbuild-4acf0aa7031836abbb53f9a7816b6a55bab6fcd6.tar.gz |
analyse: extend provides map when switching to action input
When switching from a target to the artifacts that are the inputs
of a particular action, the provides map is also switched to provide
additional (besides the inputs) information about the action, in
particular the command. Extend this provides map with the remaining
information, in particular the working directory.
-rw-r--r-- | src/buildtool/main/analyse.cpp | 13 | ||||
-rw-r--r-- | test/end-to-end/actions/TARGETS | 7 | ||||
-rw-r--r-- | test/end-to-end/actions/request-action-input.sh | 65 |
3 files changed, 85 insertions, 0 deletions
diff --git a/src/buildtool/main/analyse.cpp b/src/buildtool/main/analyse.cpp index f1d37af9..5783114c 100644 --- a/src/buildtool/main/analyse.cpp +++ b/src/buildtool/main/analyse.cpp @@ -75,6 +75,19 @@ namespace Target = BuildMaps::Target; if (action->GraphAction().MayFail()) { provides["may_fail"] = *(action->GraphAction().MayFail()); } + if (action->GraphAction().NoCache()) { + provides["no_cache"] = true; + } + if (action->GraphAction().TimeoutScale() != 1.0) { + provides["timeout scaling"] = action->GraphAction().TimeoutScale(); + } + if (not action->GraphAction().Cwd().empty()) { + provides["cwd"] = action->GraphAction().Cwd(); + } + if (not action->GraphAction().ExecutionProperties().empty()) { + provides["execution properties"] = + action->GraphAction().ExecutionProperties(); + } auto provides_exp = Expression::FromJson(provides); return std::make_shared<AnalysedTarget const>( diff --git a/test/end-to-end/actions/TARGETS b/test/end-to-end/actions/TARGETS index ef844223..a8dbd279 100644 --- a/test/end-to-end/actions/TARGETS +++ b/test/end-to-end/actions/TARGETS @@ -84,6 +84,12 @@ , "test": ["cwd.sh"] , "deps": [["", "tool-under-test"]] } +, "request-action-input": + { "type": ["@", "rules", "shell/test", "script"] + , "name": ["request-action-input"] + , "test": ["request-action-input.sh"] + , "deps": [["", "tool-under-test"]] + } , "TESTS": { "type": "install" , "tainted": ["test"] @@ -99,6 +105,7 @@ , "incomplete-retry" , "error-reporting" , "cwd" + , "request-action-input" ] , { "type": "if" , "cond": {"type": "var", "name": "DROP_IO_HEAVY_TESTS"} diff --git a/test/end-to-end/actions/request-action-input.sh b/test/end-to-end/actions/request-action-input.sh new file mode 100644 index 00000000..d4fcac8e --- /dev/null +++ b/test/end-to-end/actions/request-action-input.sh @@ -0,0 +1,65 @@ +#!/bin/sh +# Copyright 2024 Huawei Cloud Computing Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +readonly ROOT="$(pwd)" +readonly LBR="${TMPDIR}/local-build-root" +readonly OUT="${TMPDIR}/out" +mkdir -p "${OUT}" +readonly JUST="${ROOT}/bin/tool-under-test" + +mkdir work +cd work +touch ROOT + +cat > RULES <<'EOF' +{ "complex action": + { "expression": + { "type": "RESULT" + , "artifacts": + { "type": "ACTION" + , "cmd": ["sh", "-c", "mkdir -p foo && echo bar > foo/out.txt"] + , "cwd": "deep/inside" + , "outs": ["deep/inside/foo/out.txt"] + , "execution properties": + {"type": "'", "$1": {"image": "something-fancy", "runner": "special"}} + , "timeout scaling": 2 + } + } + } +} +EOF + +cat > TARGETS <<'EOF' +{"": {"type": "complex action"}} +EOF + +# Sanity check: build succeeds and gives the correct ouput +"${JUST}" install --local-build-root "${LBR}" -o "${OUT}" \ + -L '["env", "PATH='"${PATH}"'"]' 2>&1 +grep bar "${OUT}/deep/inside/foo/out.txt" + +# Analyse first action and dump provides map +"${JUST}" analyse --local-build-root "${LBR}" \ + --request-action-input 0 \ + --dump-provides "${OUT}/provides.json" 2>&1 + +[ $(jq '."timeout scaling" | . == 2' "${OUT}/provides.json") = true ] +[ $(jq -r '.cwd' "${OUT}/provides.json") = "deep/inside" ] +[ $(jq -r '."execution properties".image' "${OUT}/provides.json") = something-fancy ] +[ $(jq -r '."execution properties".runner' "${OUT}/provides.json") = special ] + +echo OK |