aab: init at 1.0.0-dev.5

Co-authored-by: June Stepp <git@junestepp.me>

eljamm db98b9a0 ba79c475

+261
+124
pkgs/by-name/aa/aab/allow-manually-setting-modtime.patch
···
··· 1 + diff --git a/aab/builder.py b/aab/builder.py 2 + index 5c3805c..7dfe595 100644 3 + --- a/aab/builder.py 4 + +++ b/aab/builder.py 5 + @@ -77,7 +77,7 @@ class AddonBuilder: 6 + self._config = Config() 7 + self._path_dist_module = PATH_DIST / "src" / self._config["module_name"] 8 + 9 + - def build(self, qt_versions: List[QtVersion], disttype="local", pyenv=None): 10 + + def build(self, qt_versions: List[QtVersion], disttype="local", pyenv=None, modtime=None): 11 + logging.info( 12 + "\n--- Building %s %s for %s ---\n", 13 + self._config["display_name"], 14 + @@ -86,7 +86,7 @@ class AddonBuilder: 15 + ) 16 + 17 + self.create_dist() 18 + - self.build_dist(qt_versions=qt_versions, disttype=disttype, pyenv=pyenv) 19 + + self.build_dist(qt_versions=qt_versions, disttype=disttype, pyenv=pyenv, modtime=modtime) 20 + 21 + return self.package_dist(qt_versions=qt_versions, disttype=disttype) 22 + 23 + @@ -102,7 +102,7 @@ class AddonBuilder: 24 + PATH_DIST.mkdir(parents=True) 25 + Git().archive(self._version, PATH_DIST) 26 + 27 + - def build_dist(self, qt_versions: List[QtVersion], disttype="local", pyenv=None): 28 + + def build_dist(self, qt_versions: List[QtVersion], disttype="local", pyenv=None, modtime=None): 29 + self._copy_licenses() 30 + if self._path_changelog.exists(): 31 + self._copy_changelog() 32 + @@ -111,7 +111,7 @@ class AddonBuilder: 33 + if self._callback_archive: 34 + self._callback_archive() 35 + 36 + - self._write_manifest(disttype) 37 + + self._write_manifest(disttype, modtime=modtime) 38 + 39 + ui_builder = UIBuilder(dist=PATH_DIST, config=self._config) 40 + 41 + @@ -162,12 +162,13 @@ class AddonBuilder: 42 + 43 + return out_path 44 + 45 + - def _write_manifest(self, disttype): 46 + + def _write_manifest(self, disttype, modtime=None): 47 + ManifestUtils.generate_and_write_manifest( 48 + addon_properties=self._config, 49 + version=self._version, 50 + dist_type=disttype, 51 + target_dir=self._path_dist_module, 52 + + modtime=modtime, 53 + ) 54 + 55 + def _copy_licenses(self): 56 + diff --git a/aab/cli.py b/aab/cli.py 57 + index 2ce6425..0956e98 100644 58 + --- a/aab/cli.py 59 + +++ b/aab/cli.py 60 + @@ -89,7 +89,7 @@ def build(args): 61 + total = len(dists) 62 + for dist in dists: 63 + logging.info("\n=== Build task %s/%s ===", cnt, total) 64 + - builder.build(qt_versions=qt_versions, disttype=dist) 65 + + builder.build(qt_versions=qt_versions, disttype=dist, modtime=args.modtime) 66 + cnt += 1 67 + 68 + 69 + @@ -146,7 +146,7 @@ def build_dist(args): 70 + total = len(dists) 71 + for dist in dists: 72 + logging.info("\n=== Build task %s/%s ===", cnt, total) 73 + - builder.build_dist(qt_versions=qt_versions, disttype=dist) 74 + + builder.build_dist(qt_versions=qt_versions, disttype=dist, modtime=args.modtime) 75 + cnt += 1 76 + 77 + 78 + @@ -204,6 +204,12 @@ def construct_parser(): 79 + default="local", 80 + choices=["local", "ankiweb", "all"], 81 + ) 82 + + dist_parent.add_argument( 83 + + "--modtime", 84 + + help="Last modified timestamp", 85 + + type=int, 86 + + required=False, 87 + + ) 88 + 89 + build_parent = argparse.ArgumentParser(add_help=False) 90 + build_parent.add_argument( 91 + diff --git a/aab/manifest.py b/aab/manifest.py 92 + index fc0038d..355e370 100644 93 + --- a/aab/manifest.py 94 + +++ b/aab/manifest.py 95 + @@ -49,10 +49,11 @@ class ManifestUtils: 96 + version: str, 97 + dist_type: DistType, 98 + target_dir: Path, 99 + + modtime=None, 100 + ): 101 + logging.info("Writing manifest...") 102 + manifest = cls.generate_manifest_from_properties( 103 + - addon_properties=addon_properties, version=version, dist_type=dist_type 104 + + addon_properties=addon_properties, version=version, dist_type=dist_type, modtime=modtime 105 + ) 106 + cls.write_manifest(manifest=manifest, target_dir=target_dir) 107 + 108 + @@ -62,6 +63,7 @@ class ManifestUtils: 109 + addon_properties: Config, 110 + version: str, 111 + dist_type: DistType, 112 + + modtime=None, 113 + ) -> Dict[str, Any]: 114 + manifest = { 115 + "name": addon_properties["display_name"], 116 + @@ -71,7 +73,7 @@ class ManifestUtils: 117 + "version": version, 118 + "homepage": addon_properties.get("homepage", ""), 119 + "conflicts": deepcopy(addon_properties["conflicts"]), 120 + - "mod": Git().modtime(version), 121 + + "mod": modtime if modtime is not None else Git().modtime(version), 122 + } 123 + 124 + # Add version specifiers:
+75
pkgs/by-name/aa/aab/fix-flaky-tests.patch
···
··· 1 + diff --git a/tests/test_legacy.py b/tests/test_legacy.py 2 + index 33790b9..0577262 100644 3 + --- a/tests/test_legacy.py 4 + +++ b/tests/test_legacy.py 5 + @@ -101,8 +101,8 @@ gui/ 6 + sample-project/ 7 + icons/ 8 + coffee.svg 9 + - heart.svg 10 + email.svg 11 + + heart.svg 12 + help.svg\ 13 + """ 14 + 15 + diff --git a/tests/test_ui.py b/tests/test_ui.py 16 + index 0774672..3764fda 100644 17 + --- a/tests/test_ui.py 18 + +++ b/tests/test_ui.py 19 + @@ -60,22 +60,22 @@ def test_ui_builder(tmp_path: Path): 20 + 21 + expected_file_structure = """\ 22 + gui/ 23 + + forms/ 24 + + __init__.py 25 + + qt5/ 26 + + __init__.py 27 + + dialog.py 28 + + qt6/ 29 + + __init__.py 30 + + dialog.py 31 + resources/ 32 + __init__.py 33 + sample-project/ 34 + icons/ 35 + coffee.svg 36 + - heart.svg 37 + email.svg 38 + - help.svg 39 + - forms/ 40 + - __init__.py 41 + - qt6/ 42 + - __init__.py 43 + - dialog.py 44 + - qt5/ 45 + - __init__.py 46 + - dialog.py\ 47 + + heart.svg 48 + + help.svg\ 49 + """ 50 + 51 + config = Config(test_project_root / "addon.json") 52 + @@ -136,8 +136,8 @@ gui/ 53 + sample-project/ 54 + icons/ 55 + coffee.svg 56 + - heart.svg 57 + email.svg 58 + + heart.svg 59 + help.svg\ 60 + """ 61 + 62 + diff --git a/tests/util.py b/tests/util.py 63 + index a682bcd..a4aa7de 100644 64 + --- a/tests/util.py 65 + +++ b/tests/util.py 66 + @@ -40,6 +40,9 @@ def list_files(startpath: Path): 67 + ret = [] 68 + 69 + for root, dirs, files in os.walk(path): 70 + + dirs.sort() 71 + + files.sort() 72 + + 73 + level = root.replace(path, "").count(os.sep) 74 + indent = " " * 4 * (level) 75 + ret.append("{}{}/".format(indent, os.path.basename(root)))
+14
pkgs/by-name/aa/aab/only-call-git-when-necessary.patch
···
··· 1 + diff --git a/aab/builder.py b/aab/builder.py 2 + index 5c3805c..a181b27 100644 3 + --- a/aab/builder.py 4 + +++ b/aab/builder.py 5 + @@ -67,8 +67,7 @@ class AddonBuilder: 6 + self._version = Git().parse_version(version) 7 + # git stash create comes up empty when no changes were made since the 8 + # last commit. Don't use 'dev' as version in these cases. 9 + - git_status = call_shell("git status --porcelain") 10 + - if self._version == "dev" and git_status == "": 11 + + if self._version == "dev" and call_shell("git status --porcelain") == "": 12 + self._version = Git().parse_version("current") 13 + if not self._version: 14 + logging.error("Error: Version could not be determined through Git")
+48
pkgs/by-name/aa/aab/package.nix
···
··· 1 + { 2 + lib, 3 + fetchFromGitHub, 4 + python3, 5 + }: 6 + 7 + python3.pkgs.buildPythonApplication rec { 8 + pname = "aab"; 9 + version = "1.0.0-dev.5"; 10 + pyproject = true; 11 + 12 + src = fetchFromGitHub { 13 + owner = "glutanimate"; 14 + repo = "anki-addon-builder"; 15 + tag = "v${version}"; 16 + hash = "sha256-92Xqxgb9MLhSIa5EN3Rdk4aJlRfzEWqKmXFe604Q354="; 17 + }; 18 + 19 + patches = [ 20 + ./fix-flaky-tests.patch 21 + ./only-call-git-when-necessary.patch 22 + ./allow-manually-setting-modtime.patch 23 + ]; 24 + 25 + build-system = [ python3.pkgs.poetry-core ]; 26 + 27 + dependencies = with python3.pkgs; [ 28 + jsonschema 29 + whichcraft 30 + pyqt5 31 + pyqt6 32 + ]; 33 + 34 + nativeCheckInputs = [ 35 + python3.pkgs.pytestCheckHook 36 + python3.pkgs.pyqt5 37 + python3.pkgs.pyqt6 38 + ]; 39 + 40 + pythonImportsCheck = [ "aab" ]; 41 + 42 + meta = { 43 + description = "Build tool for Anki add-ons"; 44 + homepage = "https://github.com/glutanimate/anki-addon-builder"; 45 + license = lib.licenses.agpl3Only; 46 + maintainers = with lib.maintainers; [ eljamm ]; 47 + }; 48 + }