
* send output to $GITHUB_STEP_SUMMARY * update CHANGES.md * update CHANGES.md with PR number * implement PR feedback * fix pre-commit issues (prettier/trailing whitespace)
78 lines
2.4 KiB
Python
78 lines
2.4 KiB
Python
import os
|
|
import shlex
|
|
import sys
|
|
from pathlib import Path
|
|
from subprocess import PIPE, STDOUT, run
|
|
|
|
ACTION_PATH = Path(os.environ["GITHUB_ACTION_PATH"])
|
|
ENV_PATH = ACTION_PATH / ".black-env"
|
|
ENV_BIN = ENV_PATH / ("Scripts" if sys.platform == "win32" else "bin")
|
|
OPTIONS = os.getenv("INPUT_OPTIONS", default="")
|
|
SRC = os.getenv("INPUT_SRC", default="")
|
|
JUPYTER = os.getenv("INPUT_JUPYTER") == "true"
|
|
BLACK_ARGS = os.getenv("INPUT_BLACK_ARGS", default="")
|
|
VERSION = os.getenv("INPUT_VERSION", default="")
|
|
|
|
run([sys.executable, "-m", "venv", str(ENV_PATH)], check=True)
|
|
|
|
version_specifier = VERSION
|
|
if VERSION and VERSION[0] in "0123456789":
|
|
version_specifier = f"=={VERSION}"
|
|
if JUPYTER:
|
|
extra_deps = "[colorama,jupyter]"
|
|
else:
|
|
extra_deps = "[colorama]"
|
|
if version_specifier:
|
|
req = f"black{extra_deps}{version_specifier}"
|
|
else:
|
|
describe_name = ""
|
|
with open(ACTION_PATH / ".git_archival.txt", encoding="utf-8") as fp:
|
|
for line in fp:
|
|
if line.startswith("describe-name: "):
|
|
describe_name = line[len("describe-name: ") :].rstrip()
|
|
break
|
|
if not describe_name:
|
|
print("::error::Failed to detect action version.", file=sys.stderr, flush=True)
|
|
sys.exit(1)
|
|
# expected format is one of:
|
|
# - 23.1.0
|
|
# - 23.1.0-51-g448bba7
|
|
if describe_name.count("-") < 2:
|
|
# the action's commit matches a tag exactly, install exact version from PyPI
|
|
req = f"black{extra_deps}=={describe_name}"
|
|
else:
|
|
# the action's commit does not match any tag, install from the local git repo
|
|
req = f".{extra_deps}"
|
|
print(f"Installing {req}...", flush=True)
|
|
pip_proc = run(
|
|
[str(ENV_BIN / "python"), "-m", "pip", "install", req],
|
|
stdout=PIPE,
|
|
stderr=STDOUT,
|
|
encoding="utf-8",
|
|
cwd=ACTION_PATH,
|
|
)
|
|
if pip_proc.returncode:
|
|
print(pip_proc.stdout)
|
|
print("::error::Failed to install Black.", file=sys.stderr, flush=True)
|
|
sys.exit(pip_proc.returncode)
|
|
|
|
|
|
base_cmd = [str(ENV_BIN / "black")]
|
|
if BLACK_ARGS:
|
|
# TODO: remove after a while since this is deprecated in favour of SRC + OPTIONS.
|
|
proc = run(
|
|
[*base_cmd, *shlex.split(BLACK_ARGS)],
|
|
stdout=PIPE,
|
|
stderr=STDOUT,
|
|
encoding="utf-8",
|
|
)
|
|
else:
|
|
proc = run(
|
|
[*base_cmd, *shlex.split(OPTIONS), *shlex.split(SRC)],
|
|
stdout=PIPE,
|
|
stderr=STDOUT,
|
|
encoding="utf-8",
|
|
)
|
|
print(proc.stdout)
|
|
sys.exit(proc.returncode)
|