mirror of
https://github.com/Mic92/nix-update.git
synced 2024-09-17 13:27:27 +03:00
add changelog feature and add integration test for it
This commit is contained in:
parent
4dbc76a572
commit
570a6ac64b
@ -5,7 +5,7 @@ import tempfile
|
||||
from typing import NoReturn, Optional
|
||||
|
||||
from .version.version import VersionPreference
|
||||
from .eval import Package
|
||||
from .eval import Package, eval_attr
|
||||
from .options import Options
|
||||
from .update import update
|
||||
from .utils import run
|
||||
@ -16,8 +16,8 @@ def die(msg: str) -> NoReturn:
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_args() -> Options:
|
||||
parser = argparse.ArgumentParser()
|
||||
def parse_args(args: list[str]) -> Options:
|
||||
parser = argparse.ArgumentParser(prog=args[0])
|
||||
help = "File to import rather than default.nix. Examples, ./release.nix"
|
||||
parser.add_argument("-f", "--file", default="./.", help=help)
|
||||
parser.add_argument("--build", action="store_true", help="build the package")
|
||||
@ -60,22 +60,22 @@ def parse_args() -> Options:
|
||||
default=None,
|
||||
)
|
||||
parser.add_argument("attribute", help="Attribute name within the file evaluated")
|
||||
args = parser.parse_args()
|
||||
a = parser.parse_args(args)
|
||||
return Options(
|
||||
import_path=args.file,
|
||||
build=args.build,
|
||||
commit=args.commit,
|
||||
write_commit_message=args.write_commit_message,
|
||||
run=args.run,
|
||||
shell=args.shell,
|
||||
version=args.version,
|
||||
version_preference=VersionPreference.from_str(args.version),
|
||||
attribute=args.attribute,
|
||||
test=args.test,
|
||||
version_regex=args.version_regex,
|
||||
review=args.review,
|
||||
format=args.format,
|
||||
override_filename=args.override_filename,
|
||||
import_path=a.file,
|
||||
build=a.build,
|
||||
commit=a.commit,
|
||||
write_commit_message=a.write_commit_message,
|
||||
run=a.run,
|
||||
shell=a.shell,
|
||||
version=a.version,
|
||||
version_preference=VersionPreference.from_str(a.version),
|
||||
attribute=a.attribute,
|
||||
test=a.test,
|
||||
version_regex=a.version_regex,
|
||||
review=a.review,
|
||||
format=a.format,
|
||||
override_filename=a.override_filename,
|
||||
)
|
||||
|
||||
|
||||
@ -102,15 +102,16 @@ def format_commit_message(package: Package) -> str:
|
||||
and new_version.startswith("v")
|
||||
):
|
||||
new_version = new_version[1:]
|
||||
return f"{package.attribute}: {package.old_version} -> {new_version}"
|
||||
msg = f"{package.attribute}: {package.old_version} -> {new_version}"
|
||||
if package.changelog:
|
||||
msg += f"\n\nChangelog: {package.changelog}"
|
||||
return msg
|
||||
|
||||
|
||||
def git_commit(git_dir: str, package: Package) -> None:
|
||||
msg = format_commit_message(package)
|
||||
new_version = package.new_version
|
||||
|
||||
run(["git", "-C", git_dir, "add", package.filename], stdout=None)
|
||||
|
||||
if new_version and package.old_version != new_version:
|
||||
run(
|
||||
["git", "-C", git_dir, "commit", "--verbose", "--message", msg], stdout=None
|
||||
@ -214,8 +215,8 @@ def nixpkgs_fmt(package: Package, git_dir: Optional[str]) -> None:
|
||||
run(["git", "-C", git_dir, "add", package.filename], stdout=None)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
options = parse_args()
|
||||
def main(args: list[str] = sys.argv) -> None:
|
||||
options = parse_args(args)
|
||||
if not os.path.exists(options.import_path):
|
||||
die(f"path {options.import_path} does not exists")
|
||||
|
||||
@ -254,6 +255,9 @@ def main() -> None:
|
||||
|
||||
if options.commit:
|
||||
assert git_dir is not None
|
||||
if package.changelog:
|
||||
# If we have a changelog we will re-eval the package in case it has changed
|
||||
package.changelog = eval_attr(options).changelog
|
||||
git_commit(git_dir, package)
|
||||
|
||||
if options.write_commit_message is not None:
|
||||
|
@ -24,6 +24,7 @@ class Package:
|
||||
line: int
|
||||
urls: Optional[List[str]]
|
||||
url: Optional[str]
|
||||
changelog: Optional[str]
|
||||
rev: str
|
||||
hash: Optional[str]
|
||||
vendor_hash: Optional[str]
|
||||
@ -73,6 +74,7 @@ def eval_expression(import_path: str, attr: str) -> str:
|
||||
cargo_deps = pkg.cargoHash or pkg.cargoSha256 or null;
|
||||
npm_deps = pkg.npmDepsHash or null;
|
||||
tests = builtins.attrNames (pkg.passthru.tests or {{}});
|
||||
changelog = pkg.meta.changelog or null;
|
||||
}})"""
|
||||
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
import pytest
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Type, Iterator
|
||||
import shutil
|
||||
@ -20,11 +22,23 @@ class Helpers:
|
||||
|
||||
@staticmethod
|
||||
@contextmanager
|
||||
def testpkgs() -> Iterator[Path]:
|
||||
def testpkgs(init_git: bool = False) -> Iterator[Path]:
|
||||
with tempfile.TemporaryDirectory() as tmpdirname:
|
||||
shutil.copytree(
|
||||
Helpers.root().joinpath("testpkgs"), tmpdirname, dirs_exist_ok=True
|
||||
)
|
||||
if init_git:
|
||||
os.environ["GIT_AUTHOR_NAME"] = "nix-update"
|
||||
os.environ["GIT_AUTHOR_EMAIL"] = "nix-update@example.com"
|
||||
os.environ["GIT_COMMITTER_NAME"] = "nix-update"
|
||||
os.environ["GIT_COMMITTER_EMAIL"] = "nix-update@example.com"
|
||||
|
||||
subprocess.run(["git", "-C", tmpdirname, "init"], check=True)
|
||||
subprocess.run(["git", "-C", tmpdirname, "add", "--all"], check=True)
|
||||
subprocess.run(
|
||||
["git", "-C", tmpdirname, "commit", "-m", "first commit"],
|
||||
check=True,
|
||||
)
|
||||
yield Path(tmpdirname)
|
||||
|
||||
|
||||
|
@ -1,15 +1,13 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from nix_update.options import Options
|
||||
from nix_update.update import update
|
||||
from nix_update import main
|
||||
import subprocess
|
||||
import conftest
|
||||
|
||||
|
||||
def test_update(helpers: conftest.Helpers) -> None:
|
||||
with helpers.testpkgs() as path:
|
||||
opts = Options(attribute="pypi", import_path=str(path))
|
||||
update(opts)
|
||||
def test_main(helpers: conftest.Helpers) -> None:
|
||||
with helpers.testpkgs(init_git=True) as path:
|
||||
main(["--file", str(path), "--commit", "pypi"])
|
||||
version = subprocess.run(
|
||||
[
|
||||
"nix",
|
||||
@ -21,7 +19,21 @@ def test_update(helpers: conftest.Helpers) -> None:
|
||||
path,
|
||||
"pypi.version",
|
||||
],
|
||||
check=True,
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
).stdout.strip()
|
||||
assert version >= "3.0.1"
|
||||
commit = subprocess.run(
|
||||
["git", "-C", path, "log", "-1"],
|
||||
text=True,
|
||||
stdout=subprocess.PIPE,
|
||||
check=True,
|
||||
).stdout.strip()
|
||||
print(commit)
|
||||
assert version in commit
|
||||
assert "pypi" in commit
|
||||
assert (
|
||||
f"https://github.com/Mic92/python-mpd2/blob/{version}/doc/changes.rst"
|
||||
in commit
|
||||
)
|
||||
assert version.stdout.strip() >= "3.0.1"
|
||||
|
@ -16,4 +16,6 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
pytestFlagsArray = [ "mpd/tests.py" ];
|
||||
|
||||
meta.changelog = "https://github.com/Mic92/python-mpd2/blob/${version}/doc/changes.rst";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user