Files
2024-02-15 17:01:50 +00:00

48 lines
1.3 KiB
Python

from __future__ import annotations
import argparse
import glob
import os.path
import re
import subprocess
import sys
from collections.abc import Sequence
def main(argv: Sequence[str] | None = None) -> int:
parser = argparse.ArgumentParser()
parser.add_argument("action")
parser.add_argument("version")
parser.add_argument("--base-dir", default=".")
args = parser.parse_args(argv)
reg = re.compile(f"(?<=uses: {re.escape(args.action)}@).*$", re.M)
filenames = [
filename
for yml_glob in (".github/workflows/*.yml", ".github/actions/*/*.yml")
for filename in glob.glob(os.path.join(args.base_dir, yml_glob))
]
changed = []
for filename in filenames:
with open(filename) as f:
original_contents = f.read()
contents = reg.sub(args.version, original_contents)
if contents != original_contents:
print(f"{filename} upgrading {args.action}...")
changed.append(filename)
with open(filename, "w") as f:
f.write(contents)
if changed:
print("freezing...")
return subprocess.call((sys.executable, "-m", "tools.pin_github_action", *changed))
else:
return 0
if __name__ == "__main__":
raise SystemExit(main())