ci: Renovate annotations update

This commit is contained in:
Bᴇʀɴᴅ Sᴄʜᴏʀɢᴇʀs 2022-04-30 22:01:36 +02:00
parent aaedd037d2
commit c0e176fcb9
No known key found for this signature in database
GPG Key ID: BC5E2BD907F9A8EC
2 changed files with 84 additions and 68 deletions

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
import os
import sys import sys
import typer import typer
@ -8,7 +9,9 @@ from loguru import logger
from pathlib import Path from pathlib import Path
from ruamel.yaml import YAML from ruamel.yaml import YAML
from ruamel.yaml.comments import CommentedMap
from ruamel.yaml.scalarstring import LiteralScalarString from ruamel.yaml.scalarstring import LiteralScalarString
from typing import List
app = typer.Typer(add_completion=False) app = typer.Typer(add_completion=False)
@ -33,24 +36,16 @@ def _setup_logging(debug):
@app.command() @app.command()
def main( def main(
chart_folder: Path = typer.Argument( chart_folders: List[Path] = typer.Argument(
..., help="Folder containing the chart to process"), ..., help="Folders containing the chart to process"),
check_branch: str = typer.Option( check_branch: str = typer.Option(
None, help="The branch to compare against."), None, help="The branch to compare against."),
chart_base_folder: Path = typer.Option(
"charts", help="The base folder where the charts reside."),
debug: bool = False, debug: bool = False,
): ):
_setup_logging(debug) _setup_logging(debug)
if not chart_folder.is_dir():
logger.error(f"Could not find folder {str(chart_folder)}")
raise typer.Exit()
chart_metadata_file = chart_folder.joinpath('Chart.yaml')
if not chart_metadata_file.is_file():
logger.error(f"Could not find file {str(chart_metadata_file)}")
raise typer.Exit()
git_repository = Repo(search_parent_directories=True) git_repository = Repo(search_parent_directories=True)
if check_branch: if check_branch:
@ -59,11 +54,6 @@ def main(
(ref for ref in git_repository.remotes.origin.refs if ref.name == check_branch), (ref for ref in git_repository.remotes.origin.refs if ref.name == check_branch),
None None
) )
if not branch:
logger.error(f"Could not find branch {check_branch}")
raise typer.Exit()
else: else:
logger.info(f"Trying to determine default branch...") logger.info(f"Trying to determine default branch...")
branch = next( branch = next(
@ -71,61 +61,93 @@ def main(
None None
) )
if not branch:
logger.error(
f"Could not find branch {check_branch} to compare against.")
raise typer.Exit(1)
logger.info(f"Comparing against branch {branch}") logger.info(f"Comparing against branch {branch}")
logger.info(f"Updating changelog annotation for chart {chart_folder}") for chart_folder in chart_folders:
chart_folder = chart_base_folder.joinpath(chart_folder)
if not chart_folder.is_dir():
logger.error(f"Could not find folder {str(chart_folder)}")
raise typer.Exit(1)
yaml = YAML(typ=['rt', 'string']) chart_metadata_file = chart_folder.joinpath('Chart.yaml')
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.explicit_start = True
yaml.preserve_quotes = True
old_chart_metadata = yaml.load( if not chart_metadata_file.is_file():
git_repository.git.show(f"{branch}:{chart_metadata_file}") logger.error(f"Could not find file {str(chart_metadata_file)}")
) raise typer.Exit(1)
new_chart_metadata = yaml.load(chart_metadata_file.read_text())
try: logger.info(f"Updating changelog annotation for chart {chart_folder}")
old_chart_dependencies = old_chart_metadata["dependencies"]
except KeyError:
old_chart_dependencies = []
try: yaml = YAML(typ=['rt', 'string'])
new_chart_dependencies = new_chart_metadata["dependencies"] yaml.indent(mapping=2, sequence=4, offset=2)
except KeyError: yaml.explicit_start = True
new_chart_dependencies = [] yaml.preserve_quotes = True
yaml.width = 4096
annotations = [] old_chart_metadata = yaml.load(
for dependency in new_chart_dependencies: git_repository.git.show(f"{branch}:{chart_metadata_file}")
old_dep = None
if "alias" in dependency.keys():
old_dep = next(
(old_dep for old_dep in old_chart_dependencies if "alias" in old_dep.keys() and old_dep["alias"] == dependency["alias"]),
None
)
else:
old_dep = next(
(old_dep for old_dep in old_chart_dependencies if old_dep["name"] == dependency["name"]),
None
) )
new_chart_metadata = yaml.load(chart_metadata_file.read_text())
if old_dep and dependency["version"] != old_dep["version"]: try:
if "alias" in dependency.keys(): old_chart_dependencies = old_chart_metadata["dependencies"]
annotations.append({ except KeyError:
"kind": "changed", old_chart_dependencies = []
"description": f"Upgraded {dependency['name']} chart dependency to version {dependency['version']} for alias '{dependency['alias']}'"
})
else:
annotations.append({
"kind": "changed",
"description": f"Upgraded {dependency['name']} chart dependency to version {dependency['version']}"
})
annotations = YAML(typ=['rt', 'string']).dump_to_string(annotations) try:
new_chart_dependencies = new_chart_metadata["dependencies"]
except KeyError:
new_chart_dependencies = []
annotations = []
for dependency in new_chart_dependencies:
old_dep = None
if "alias" in dependency.keys():
old_dep = next(
(old_dep for old_dep in old_chart_dependencies if "alias" in old_dep.keys(
) and old_dep["alias"] == dependency["alias"]),
None
)
else:
old_dep = next(
(old_dep for old_dep in old_chart_dependencies if old_dep["name"] == dependency["name"]),
None
)
add_annotation = False
if old_dep:
if dependency["version"] != old_dep["version"]:
add_annotation = True
else:
add_annotation = True
if add_annotation:
if "alias" in dependency.keys():
annotations.append({
"kind": "changed",
"description": f"Upgraded `{dependency['name']}` chart dependency to version {dependency['version']} for alias '{dependency['alias']}'"
})
else:
annotations.append({
"kind": "changed",
"description": f"Upgraded `{dependency['name']}` chart dependency to version {dependency['version']}"
})
if annotations:
annotations = YAML(typ=['rt', 'string']
).dump_to_string(annotations)
if not "annotations" in new_chart_metadata:
new_chart_metadata["annotations"] = CommentedMap()
new_chart_metadata["annotations"]["artifacthub.io/changes"] = LiteralScalarString(
annotations)
yaml.dump(new_chart_metadata, chart_metadata_file)
if annotations:
new_chart_metadata["annotations"]["artifacthub.io/changes"] = LiteralScalarString(annotations)
yaml.dump(new_chart_metadata, chart_metadata_file)
if __name__ == "__main__": if __name__ == "__main__":
app() app()

View File

@ -57,13 +57,7 @@ jobs:
CHECK_BRANCH: "origin/${{ github.event.repository.default_branch }}" CHECK_BRANCH: "origin/${{ github.event.repository.default_branch }}"
run: | run: |
pip install -r ./.github/scripts/requirements.txt pip install -r ./.github/scripts/requirements.txt
CHARTS=(${{ inputs.modifiedCharts }}) ./.github/scripts/renovate-releasenotes.py --check-branch "$CHECK_BRANCH" ${{ inputs.modifiedCharts }}
for i in "${CHARTS[@]}"
do
IFS='/' read -r -a chart_parts <<< "$i"
./.github/scripts/renovate-releasenotes.py --check-branch "$CHECK_BRANCH" "charts/${chart_parts[0]}/${chart_parts[1]}"
echo ""
done
- name: Create commit - name: Create commit
id: create-commit id: create-commit