Skip to content
Snippets Groups Projects

Draft: feat: Add scripts to read and write the cicd vars

Closed Eesaan Atluri requested to merge atlurie/hpc-factory:feat-gl-cicd-vars-updater into main
Files
4
+ 73
0
 
import argparse
 
import json
 
 
import gitlab
 
 
 
# Function to fetch all CI/CD variables from a GitLab project
 
def fetch_variables(project):
 
p_variables = list(project.variables.list(iterator=True))
 
variables = [var.asdict() for var in p_variables]
 
 
return variables
 
 
 
def fetch_sched_variables(sched_pipeline):
 
variables = sched_pipeline.attributes["variables"]
 
return variables
 
 
 
# Main function to load the config and fetch variables
 
def main():
 
# Setup argument parser
 
parser = argparse.ArgumentParser(description="GitLab CI/CD Variable reader")
 
parser.add_argument(
 
"--config_file",
 
type=str,
 
default="gitlab.ini",
 
required=True,
 
help="Path to the configuration file (default: gitlab.ini)",
 
)
 
parser.add_argument(
 
"--var_file",
 
type=str,
 
default="ci-variables.json",
 
help="Path to the CI vars file (default: ci-variables.json)",
 
)
 
parser.add_argument(
 
"--project_id",
 
type=int,
 
default="",
 
required=True,
 
help="Gitlab project ID to read variables from",
 
)
 
parser.add_argument(
 
"--sched_pipeline_id",
 
type=int,
 
help="Gitlab project scheduled pipeline ID",
 
)
 
 
# Parse the arguments
 
args = parser.parse_args()
 
 
gl = gitlab.Gitlab.from_config("uabrc", [args.config_file])
 
project = gl.projects.get(args.project_id)
 
 
# Fetch project or sched pipeline variables
 
if not args.sched_pipeline_id:
 
variables = fetch_variables(project)
 
else:
 
sched_pipeline = project.pipelineschedules.get(args.sched_pipeline_id)
 
variables = fetch_sched_variables(sched_pipeline)
 
 
try:
 
with open(args.var_file, "w") as file:
 
json.dump(variables, file, indent=2)
 
except FileNotFoundError:
 
print(f"Error: Writing File to '{args.var_file}'")
 
exit(1)
 
 
 
# Run the main function
 
if __name__ == "__main__":
 
main()
Loading