mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
48 lines
1.3 KiB
Python
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())
|