ansible-collection-hetzner-.../scripts/vendor.py

113 lines
3.3 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""
Fetch and bundles the hcloud package inside the collection.
Fetch the desired version `HCLOUD_VERSION` from https://github.com/hetznercloud/hcloud-python
`HCLOUD_SOURCE_URL` using git, apply some code modifications to comply with ansible,
move the modified files at the vendor location `HCLOUD_VENDOR_PATH`.
"""
import logging
import re
from argparse import ArgumentParser
from pathlib import Path
from shutil import move, rmtree
from subprocess import check_call
from tempfile import TemporaryDirectory
from textwrap import dedent
logger = logging.getLogger("vendor")
HCLOUD_SOURCE_URL = "https://github.com/hetznercloud/hcloud-python"
deps: update dependency hcloud to v1.32.0 (#389) [![Mend Renovate logo banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [hcloud](https://togithub.com/hetznercloud/hcloud-python) ([changelog](https://togithub.com/hetznercloud/hcloud-python/blob/main/CHANGELOG.md)) | `1.31.0` -> `1.32.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/hcloud/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/hcloud/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/hcloud/1.31.0/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/hcloud/1.31.0/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>hetznercloud/hcloud-python (hcloud)</summary> ### [`v1.32.0`](https://togithub.com/hetznercloud/hcloud-python/blob/HEAD/CHANGELOG.md#1320-2023-11-17) [Compare Source](https://togithub.com/hetznercloud/hcloud-python/compare/v1.31.0...v1.32.0) ##### Features - allow returning root_password in servers rebuild ([#&#8203;276](https://togithub.com/hetznercloud/hcloud-python/issues/276)) ([38e098a](https://togithub.com/hetznercloud/hcloud-python/commit/38e098a41154e6561578cd723608fcd7577c3d01)) ##### Dependencies - update dependency mypy to >=1.7,<1.8 ([#&#8203;325](https://togithub.com/hetznercloud/hcloud-python/issues/325)) ([7b59a2d](https://togithub.com/hetznercloud/hcloud-python/commit/7b59a2decc9bb5152dc9de435bfe12ce1f34ac1c)) - update pre-commit hook pre-commit/mirrors-prettier to v3.1.0 ([#&#8203;326](https://togithub.com/hetznercloud/hcloud-python/issues/326)) ([213b661](https://togithub.com/hetznercloud/hcloud-python/commit/213b661d897cdd327f478b52aeb79844826694d8)) - update pre-commit hook psf/black-pre-commit-mirror to v23.10.1 ([#&#8203;322](https://togithub.com/hetznercloud/hcloud-python/issues/322)) ([999afe3](https://togithub.com/hetznercloud/hcloud-python/commit/999afe37e02a113639930aff6879f50918ac0e89)) - update pre-commit hook psf/black-pre-commit-mirror to v23.11.0 ([#&#8203;324](https://togithub.com/hetznercloud/hcloud-python/issues/324)) ([7b2a24e](https://togithub.com/hetznercloud/hcloud-python/commit/7b2a24ecf69c0bead7f9113053fda37a0cc31d1b)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/ansible-collections/hetzner.hcloud). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy41OS44IiwidXBkYXRlZEluVmVyIjoiMzcuNTkuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: jo <ljonas@riseup.net>
2023-11-20 08:25:57 +00:00
HCLOUD_VERSION = "v1.32.0"
HCLOUD_VENDOR_PATH = "plugins/module_utils/vendor/hcloud"
def apply_code_modifications(source_path: Path):
# The ansible galaxy-importer consider __version___.py to be an invalid filename in module_utils/
# Move the __version__.py file to _version.py
move(source_path / "__version__.py", source_path / "_version.py")
for file in source_path.rglob("*.py"):
content = file.read_text()
content_orig = content
# Move the __version__.py file to _version.py
content = re.sub(
r"from .__version__ import VERSION",
r"from ._version import VERSION",
content,
)
# Wrap requests imports
content = re.sub(
r"import requests",
dedent(
r"""
try:
import requests
except ImportError:
requests = None
"""
).strip(),
content,
)
# Wrap dateutil imports
content = re.sub(
r"from dateutil.parser import isoparse",
dedent(
r"""
try:
from dateutil.parser import isoparse
except ImportError:
isoparse = None
"""
).strip(),
content,
)
# Remove requests.Response typings
content = re.sub(
r": requests\.Response",
r"",
content,
)
if content != content_orig:
logger.info("Applied code modifications on %s", file)
file.write_text(content)
def main(check: bool = False) -> int:
with TemporaryDirectory() as tmp_dir:
tmp_dir_path = Path(tmp_dir)
logger.info("Created temporary directory %s", tmp_dir_path)
check_call(["git", "clone", "--depth=1", "--branch", HCLOUD_VERSION, HCLOUD_SOURCE_URL, tmp_dir_path])
logger.info("Cloned the source files in %s", tmp_dir_path)
apply_code_modifications(tmp_dir_path / "hcloud")
logger.info("Applied code modifications on the source files")
rmtree(HCLOUD_VENDOR_PATH)
move(tmp_dir_path / "hcloud", HCLOUD_VENDOR_PATH)
logger.info("Bundled the modified sources files in the collection")
if check:
check_call(["git", "diff", "--exit-code", "--", HCLOUD_VENDOR_PATH])
return 0
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format="%(levelname)-8s: %(message)s")
parser = ArgumentParser()
parser.add_argument("--check", action="store_true", default=False)
args = parser.parse_args()
raise SystemExit(main(check=args.check))