diff options
-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 |