From f36e2a9b8adc656c5ec35f01454e59225221aa66 Mon Sep 17 00:00:00 2001 From: Ricardo Lopes Date: Sat, 29 Jul 2023 12:32:46 +0100 Subject: [PATCH 1/3] add dynamic base-revision --- src/commands/set-parameters.yml | 3 ++- src/jobs/filter.yml | 3 ++- src/scripts/create-parameters.py | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/commands/set-parameters.yml b/src/commands/set-parameters.yml index 9481431..726d118 100644 --- a/src/commands/set-parameters.yml +++ b/src/commands/set-parameters.yml @@ -8,7 +8,8 @@ parameters: default: "main" description: > The revision to compare the current one against for the purpose - of determining changed files. + of determining changed files. Supports passing environment variables, + eg. $CIRCLE_BRANCH, or shell script evaluating to a string, eg. $(echo "dev"). mapping: type: string default: "" diff --git a/src/jobs/filter.yml b/src/jobs/filter.yml index 7d478e9..5bd9813 100644 --- a/src/jobs/filter.yml +++ b/src/jobs/filter.yml @@ -22,7 +22,8 @@ parameters: default: "main" description: > The revision to compare the current one against for the purpose - of determining changed files. + of determining changed files. Supports passing environment variables, + eg. $CIRCLE_BRANCH, or shell script evaluating to a string, eg. $(echo "dev"). mapping: type: string default: "" diff --git a/src/scripts/create-parameters.py b/src/scripts/create-parameters.py index 7f404a1..b0379ab 100644 --- a/src/scripts/create-parameters.py +++ b/src/scripts/create-parameters.py @@ -23,6 +23,15 @@ def merge_base(base, head): capture_output=True ).stdout.decode('utf-8').strip() +def eval_base(base): + if base.startswith('$'): + return subprocess.run( + ['sh', '-c', f"echo {base}"], + capture_output=True + ).stdout.decode('utf-8').strip() + + return base + def parent_commit(): return subprocess.run( ['git', 'rev-parse', 'HEAD~1'], @@ -112,6 +121,7 @@ def is_mapping_line(line: str) -> bool: return not (is_comment_line or is_empty_line) def create_parameters(output_path, config_path, head, base, mapping): + base = eval_base(base) # Evaluate base revision if it is an environment variable or script checkout(base) # Checkout base revision to make sure it is available for comparison checkout(head) # return to head commit base = merge_base(base, head) From 50629c29e69880719773dec21546fd2a520b37a5 Mon Sep 17 00:00:00 2001 From: Ricardo Lopes Date: Tue, 1 Aug 2023 17:17:23 +0100 Subject: [PATCH 2/3] add fallback value if base evals null --- src/scripts/create-parameters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scripts/create-parameters.py b/src/scripts/create-parameters.py index b0379ab..9d3a09e 100644 --- a/src/scripts/create-parameters.py +++ b/src/scripts/create-parameters.py @@ -25,11 +25,11 @@ def merge_base(base, head): def eval_base(base): if base.startswith('$'): - return subprocess.run( + value = subprocess.run( ['sh', '-c', f"echo {base}"], capture_output=True ).stdout.decode('utf-8').strip() - + return 'main' if value == '' else value return base def parent_commit(): From 247d3832111ac96942db793a69855250cd1efbab Mon Sep 17 00:00:00 2001 From: Ricardo Lopes Date: Tue, 1 Aug 2023 17:18:27 +0100 Subject: [PATCH 3/3] adds before set-params script config --- src/jobs/filter.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/jobs/filter.yml b/src/jobs/filter.yml index 5bd9813..5ada1e7 100644 --- a/src/jobs/filter.yml +++ b/src/jobs/filter.yml @@ -60,6 +60,10 @@ parameters: description: > Pick a specific cimg/python image variant: https://hub.docker.com/r/cimg/python/tags + before_set_params_script: + default: "" + description: Script to run before set-parameters step. Used to load custom environment variables. + type: string steps: - checkout @@ -70,6 +74,14 @@ steps: steps: - attach_workspace: at: << parameters.workspace_path >> + - when: + condition: + not: + equal: ["", << parameters.before_set_params_script >>] + steps: + - run: + name: Before set-parameters script + command: << parameters.before_set_params_script >> - set-parameters: base-revision: << parameters.base-revision >> mapping: << parameters.mapping >>