feat: add version task
This commit is contained in:
@@ -49,10 +49,11 @@ class CommandExecutor:
|
||||
err_logger = CommandLogger(logging.TRACE)
|
||||
try:
|
||||
result = subprocess.run(
|
||||
self._command.split(" "),
|
||||
self._command,
|
||||
cwd=basepath,
|
||||
stdout=out_logger, # type: ignore
|
||||
stderr=err_logger, # type: ignore
|
||||
shell=True,
|
||||
)
|
||||
finally:
|
||||
out_logger.close()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import tomllib
|
||||
from pathlib import Path
|
||||
@@ -13,6 +14,10 @@ def do_bool(data: str | None) -> bool:
|
||||
return not (data is None or data.lower() in ["false", "null", "none", "0", ""])
|
||||
|
||||
|
||||
def do_env(key: str, default: str | None = None) -> str | None:
|
||||
return os.environ.get(key=key.upper(), default=default)
|
||||
|
||||
|
||||
def _build_env(basepath: Path) -> Environment:
|
||||
env = Environment()
|
||||
|
||||
@@ -65,6 +70,7 @@ def _build_env(basepath: Path) -> Environment:
|
||||
env.filters["search"] = do_search
|
||||
env.filters["key"] = do_key
|
||||
env.filters["bool"] = do_bool
|
||||
env.filters["env"] = do_env
|
||||
return env
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ class EntryResolver:
|
||||
self._ignore = ignore
|
||||
self._max_depth = max_depth
|
||||
|
||||
def _resolve(self, rootpath: Path, basepath: Path, depth: int = 0) -> Iterable[Entry]:
|
||||
def _resolve(
|
||||
self, rootpath: Path, basepath: Path, depth: int = 0
|
||||
) -> Iterable[Entry]:
|
||||
if basepath.is_dir():
|
||||
if basepath.name.startswith(".") or self._ignore.match_file(basepath):
|
||||
return
|
||||
@@ -30,4 +32,6 @@ class EntryResolver:
|
||||
yield from self._resolve(rootpath, path, depth + 1)
|
||||
|
||||
def resolve(self, basepath: Path) -> Iterable[Entry]:
|
||||
return self._resolve(basepath, basepath)
|
||||
result = list(self._resolve(basepath, basepath))
|
||||
result.reverse()
|
||||
return result
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
[presets.git]
|
||||
conditions = ["{{ '.git/config' | file }}"]
|
||||
|
||||
[presets.git.tasks.version.git]
|
||||
priority = -1
|
||||
conditions = ["{{ version }}"]
|
||||
commands = [
|
||||
"git add .",
|
||||
"git commit -m 'ci(version): {{ version }}'",
|
||||
"git tag '{{ version }}'",
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
[presets.'*']
|
||||
priority = 1000
|
||||
conditions = ["{{ true }}"]
|
||||
variables.version = "{{ 'version' | env }}"
|
||||
tasks = {}
|
||||
@@ -1,26 +1,37 @@
|
||||
[presets.nodejs]
|
||||
conditions = ["{{ 'package.json' | file }}"]
|
||||
|
||||
# install
|
||||
[presets.nodejs.tasks.setup.npm]
|
||||
conditions = ["{{ 'package-lock.json' | file }}"]
|
||||
commands = ["npm install-clean"]
|
||||
|
||||
# install legacy
|
||||
[presets.nodejs.tasks.setup.npm-legacy]
|
||||
conditions = ["{{ not ('package-lock.json' | file) }}"]
|
||||
commands = ["npm install"]
|
||||
|
||||
# test
|
||||
[presets.nodejs.tasks.test.jest]
|
||||
conditions = ["{{ 'node_modules/jest' | file }}"]
|
||||
commands = ["npx jest"]
|
||||
|
||||
# build
|
||||
[presets.nodejs.tasks.build.npm]
|
||||
conditions = ["{{ 'package.json' | read | get('scripts.build') }}"]
|
||||
commands = ["npm run build"]
|
||||
|
||||
# publish
|
||||
[presets.nodejs.tasks.publish.npm]
|
||||
conditions = ["{{ 'package.json' | read | get('scripts.publish') }}"]
|
||||
commands = ["npm run publish"]
|
||||
|
||||
# clean
|
||||
[presets.nodejs.tasks.clean.node_modules]
|
||||
conditions = ["{{ 'node_modules' | file }}"]
|
||||
commands = ["rm -rf node_modules"]
|
||||
|
||||
# version
|
||||
[presets.nodejs.tasks.version.npm]
|
||||
conditions = ["{{ version }}"]
|
||||
commands = ["npm version {{ version }} --allow-same-version"]
|
||||
|
||||
@@ -53,3 +53,8 @@ commands = [".venv/bin/black ./"]
|
||||
[presets.python.tasks.clean.venv]
|
||||
conditions = ["{{ '.venv' | file }}"]
|
||||
commands = ["rm -rf .venv"]
|
||||
|
||||
# version
|
||||
[presets.python.tasks.version.poetry]
|
||||
conditions = ["{{ python_poetry and version }}"]
|
||||
commands = ["poetry version {{ version }}"]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import operator
|
||||
from os import environ
|
||||
from pathlib import Path
|
||||
|
||||
from ..common.template import PathTemplate
|
||||
@@ -19,9 +20,15 @@ class PresetEntryDetector(EntryDetector):
|
||||
if preset.skip:
|
||||
return ENTRY_SKIP
|
||||
tasks = []
|
||||
for tag, preset in preset.presets.items():
|
||||
preset_variables: Variables = {"entry_path": basepath}
|
||||
global_variables = {f"env_{k.lower()}": v for k, v in environ.items()}
|
||||
presets = sorted(
|
||||
preset.presets.items(), key=lambda item: item[1].priority, reverse=True
|
||||
)
|
||||
for tag, preset in presets:
|
||||
preset_variables: Variables = {**global_variables, "entry_path": basepath}
|
||||
if preset.variables:
|
||||
if tag == "*":
|
||||
template.update_variables(preset.variables, global_variables)
|
||||
template.update_variables(preset.variables, preset_variables)
|
||||
if preset.conditions and not template.check_conditions(
|
||||
preset.conditions, preset_variables
|
||||
|
||||
@@ -12,6 +12,7 @@ class TaskPreset(BaseModel):
|
||||
|
||||
|
||||
class EntryPreset(BaseModel):
|
||||
priority: int = 0
|
||||
conditions: list[str] | None = None
|
||||
variables: Variables | None = None
|
||||
tasks: dict[str, dict[str, TaskPreset]]
|
||||
|
||||
Reference in New Issue
Block a user