Skip to content
Snippets Groups Projects
Commit 280b6278 authored by Zubin's avatar Zubin Committed by Marge Bot
Browse files

rel-eng: ghcup metadata generation: generated yaml anchors with meaningful names

(cherry picked from commit d83f5bd730a8aef37d8a38b3560590d9798f8e45)
parent eff16c22
No related branches found
No related tags found
No related merge requests found
...@@ -67,6 +67,7 @@ class Artifact(NamedTuple): ...@@ -67,6 +67,7 @@ class Artifact(NamedTuple):
download_name: str download_name: str
output_name: str output_name: str
subdir: str subdir: str
anchor_name: str
# Platform spec provides a specification which is agnostic to Job # Platform spec provides a specification which is agnostic to Job
# PlatformSpecs are converted into Artifacts by looking in the jobs-metadata.json file. # PlatformSpecs are converted into Artifacts by looking in the jobs-metadata.json file.
...@@ -77,11 +78,13 @@ class PlatformSpec(NamedTuple): ...@@ -77,11 +78,13 @@ class PlatformSpec(NamedTuple):
source_artifact = Artifact('source-tarball' source_artifact = Artifact('source-tarball'
, 'ghc-{version}-src.tar.xz' , 'ghc-{version}-src.tar.xz'
, 'ghc-{version}-src.tar.xz' , 'ghc-{version}-src.tar.xz'
, 'ghc-{version}' ) , 'ghc-{version}'
, 'ghc{version}-src')
test_artifact = Artifact('source-tarball' test_artifact = Artifact('source-tarball'
, 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz'
, 'ghc-{version}-testsuite.tar.xz' , 'ghc-{version}-testsuite.tar.xz'
, 'ghc-{version}/testsuite' ) , 'ghc-{version}/testsuite'
, 'ghc{version}-testsuite')
def debian(n, arch='x86_64'): def debian(n, arch='x86_64'):
return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n)) return linux_platform(arch, "{arch}-linux-deb{n}".format(arch=arch, n=n))
...@@ -132,6 +135,8 @@ def download_and_hash(url): ...@@ -132,6 +135,8 @@ def download_and_hash(url):
hash_cache[url] = digest hash_cache[url] = digest
return digest return digest
uri_to_anchor_cache=dict()
# Make the metadata for one platform. # Make the metadata for one platform.
def mk_one_metadata(release_mode, version, job_map, artifact): def mk_one_metadata(release_mode, version, job_map, artifact):
job_id = job_map[artifact.job_name].id job_id = job_map[artifact.job_name].id
...@@ -169,6 +174,9 @@ def mk_one_metadata(release_mode, version, job_map, artifact): ...@@ -169,6 +174,9 @@ def mk_one_metadata(release_mode, version, job_map, artifact):
res["dlOutput"] = output res["dlOutput"] = output
eprint(res) eprint(res)
# add the uri to the anchor name cache so we can lookup an anchor for this uri
uri_to_anchor_cache[final_url] = artifact.anchor_name
return res return res
# Turns a platform into an Artifact respecting pipeline_type # Turns a platform into an Artifact respecting pipeline_type
...@@ -179,7 +187,8 @@ def mk_from_platform(pipeline_type, platform): ...@@ -179,7 +187,8 @@ def mk_from_platform(pipeline_type, platform):
return Artifact(info['name'] return Artifact(info['name']
, f"{info['jobInfo']['bindistName']}.tar.xz" , f"{info['jobInfo']['bindistName']}.tar.xz"
, "ghc-{version}-{pn}.tar.xz".format(version="{version}", pn=platform.name) , "ghc-{version}-{pn}.tar.xz".format(version="{version}", pn=platform.name)
, platform.subdir) , platform.subdir
, f"ghc{{version}}-{platform.name}")
# Generate the new metadata for a specific GHC mode etc # Generate the new metadata for a specific GHC mode etc
...@@ -297,6 +306,19 @@ def setNightlyTags(ghcup_metadata): ...@@ -297,6 +306,19 @@ def setNightlyTags(ghcup_metadata):
ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].append("Nightly") ghcup_metadata['ghcupDownloads']['GHC'][version]["viTags"].append("Nightly")
def mk_dumper(version):
class CustomAliasDumper(yaml.Dumper):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def generate_anchor(self, node):
if isinstance(node, yaml.MappingNode):
node_dict = { k.value : v.value for (k,v) in node.value }
if 'dlUri' in node_dict:
return uri_to_anchor_cache[node_dict['dlUri']].format(version=version.replace('.',''))
return super().generate_anchor(node)
return CustomAliasDumper
def main() -> None: def main() -> None:
...@@ -332,7 +354,7 @@ def main() -> None: ...@@ -332,7 +354,7 @@ def main() -> None:
new_yaml = mk_new_yaml(args.release_mode, args.version, args.date, pipeline_type, job_map) new_yaml = mk_new_yaml(args.release_mode, args.version, args.date, pipeline_type, job_map)
if args.fragment: if args.fragment:
print(yaml.dump({ args.version : new_yaml })) print(yaml.dump({ args.version : new_yaml }, Dumper=mk_dumper(args.version)))
else: else:
with open(args.metadata, 'r') as file: with open(args.metadata, 'r') as file:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment