| #!/usr/bin/env python3 |
| |
| import glob |
| import json |
| import requests |
| import sys |
| |
| MATRIX = [] |
| |
| RELEASES = sorted([r.split("/")[-1] for r in glob.glob("images/openstack/releases/*")]) |
| PROJECTS = sorted([r.split("/")[-1] for r in glob.glob("images/openstack/projects/*")]) |
| |
| DATA = {} |
| |
| if sys.argv[1] == "promote": |
| for release in RELEASES: |
| for project in PROJECTS: |
| ref = ( |
| open(f"images/openstack/projects/{project}/{release}/ref", "r") |
| .read() |
| .strip() |
| ) |
| |
| r = requests.get( |
| f"https://quay.io/api/v1/repository/vexxhost/{project}/tag/?specificTag={release}" |
| ) |
| tags = r.json().get("tags") |
| if len(tags) == 0: |
| MATRIX += [ |
| { |
| "release": release, |
| "project": project, |
| } |
| ] |
| sha1_manifest_digest = tags[0].get("manifest_digest") |
| |
| r = requests.get( |
| f"https://quay.io/api/v1/repository/vexxhost/{project}/tag/?specificTag={ref}" |
| ) |
| tags = r.json().get("tags") |
| release_manifest_digest = tags[0].get("manifest_digest") |
| |
| if release_manifest_digest != sha1_manifest_digest: |
| MATRIX += [ |
| { |
| "release": release, |
| "project": project, |
| } |
| ] |
| elif sys.argv[1] == "build": |
| for release in RELEASES: |
| for project in PROJECTS: |
| ref = ( |
| open(f"images/openstack/projects/{project}/{release}/ref", "r") |
| .read() |
| .strip() |
| ) |
| |
| r = requests.get( |
| f"https://quay.io/api/v1/repository/vexxhost/{project}/tag/?specificTag={ref}" |
| ) |
| |
| if r.json().get("tags") == []: |
| MATRIX += [ |
| { |
| "release": release, |
| "project": project, |
| } |
| ] |
| |
| |
| if len(MATRIX) != 0: |
| DATA = { |
| "fail-fast": False, |
| "matrix": { |
| "include": MATRIX, |
| }, |
| } |
| json.dump(DATA, sys.stdout, separators=(",", ":")) |