diff --git a/ci/vars_to_logging_cmd.py b/ci/vars_to_logging_cmd.py new file mode 100755 index 00000000..c719a0cb --- /dev/null +++ b/ci/vars_to_logging_cmd.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# Copyright lowRISC contributors. +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +# Read an Azure Pipelines-compatible variables file, and convert it into +# logging commands that Azure Pipelines understands, effectively setting the +# variables at runtime. +# +# This script can be used as a workaround if variables cannot be included in the +# Pipeline definition directly. +# +# See https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands +# for more information on logging commands. + +import sys +import yaml + +def vars_to_logging_cmd(vars_file): + data = {} + print(vars_file) + with open(vars_file, 'r', encoding="utf-8") as fp: + data = yaml.load(fp, Loader=yaml.SafeLoader) + + if not (isinstance(data, dict) and 'variables' in data): + print("YAML file wasn't a dictionary with a 'variables' key. Got: {}" + .format(data)) + + print("Setting variables from {}".format(vars_file)) + for key, value in data['variables'].items(): + # Note: These lines won't show up in the Azure Pipelines output unless + # "System Diagnostics" are enabled (go to the Azure Pipelines web UI, + # click on "Run pipeline" to manually run a pipeline, and check "Enable + # system diagnostics".) + print("##vso[task.setvariable variable={}]{}".format(key, value)) + + return 0 + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: {} VARS_FILE".format(sys.argv[0])) + sys.exit(1) + sys.exit(vars_to_logging_cmd(sys.argv[1]))