dycw-actions 0.7.1__py3-none-any.whl → 0.8.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- actions/__init__.py +1 -1
- actions/clean_dir/lib.py +1 -0
- actions/cli.py +10 -0
- actions/constants.py +64 -1
- actions/pre_commit/conformalize_repo/action_dicts.py +247 -0
- actions/pre_commit/conformalize_repo/cli.py +14 -14
- actions/pre_commit/conformalize_repo/constants.py +2 -38
- actions/pre_commit/conformalize_repo/lib.py +317 -242
- actions/pre_commit/conformalize_repo/settings.py +37 -33
- actions/pre_commit/touch_empty_py/lib.py +9 -1
- actions/pre_commit/touch_py_typed/lib.py +9 -1
- actions/pre_commit/update_requirements/classes.py +16 -3
- actions/pre_commit/update_requirements/lib.py +15 -4
- actions/pre_commit/utilities.py +3 -4
- actions/register_gitea_runner/cli.py +32 -0
- actions/register_gitea_runner/configs/config.yml +110 -0
- actions/register_gitea_runner/configs/entrypoint.sh +23 -0
- actions/register_gitea_runner/constants.py +23 -0
- actions/register_gitea_runner/lib.py +289 -0
- actions/register_gitea_runner/settings.py +33 -0
- actions/run_hooks/lib.py +13 -4
- actions/run_hooks/settings.py +3 -0
- actions/types.py +2 -2
- {dycw_actions-0.7.1.dist-info → dycw_actions-0.8.4.dist-info}/METADATA +4 -3
- {dycw_actions-0.7.1.dist-info → dycw_actions-0.8.4.dist-info}/RECORD +28 -23
- actions/action_dicts/constants.py +0 -8
- actions/action_dicts/lib.py +0 -186
- /actions/{action_dicts → register_gitea_runner}/__init__.py +0 -0
- {dycw_actions-0.7.1.dist-info → dycw_actions-0.8.4.dist-info}/WHEEL +0 -0
- {dycw_actions-0.7.1.dist-info → dycw_actions-0.8.4.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from re import search
|
|
5
|
+
from string import Template
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from requests import get
|
|
9
|
+
from utilities.atomicwrites import writer
|
|
10
|
+
from utilities.subprocess import chmod, run, ssh
|
|
11
|
+
from utilities.text import strip_and_dedent
|
|
12
|
+
|
|
13
|
+
from actions import __version__
|
|
14
|
+
from actions.logging import LOGGER
|
|
15
|
+
from actions.register_gitea_runner.constants import (
|
|
16
|
+
PATH_CACHE,
|
|
17
|
+
PATH_CONFIGS,
|
|
18
|
+
PATH_WAIT_FOR_IT,
|
|
19
|
+
URL_WAIT_FOR_IT,
|
|
20
|
+
)
|
|
21
|
+
from actions.register_gitea_runner.settings import SETTINGS
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from utilities.types import PathLike
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def register_gitea_runner(
|
|
28
|
+
*,
|
|
29
|
+
ssh_user: str = SETTINGS.ssh_user,
|
|
30
|
+
ssh_host: str = SETTINGS.ssh_host,
|
|
31
|
+
gitea_container_user: str = SETTINGS.gitea_container_user,
|
|
32
|
+
gitea_container_name: str = SETTINGS.gitea_container_name,
|
|
33
|
+
runner_certificate: PathLike = SETTINGS.runner_certificate,
|
|
34
|
+
runner_capacity: int = SETTINGS.runner_capacity,
|
|
35
|
+
runner_container_name: str = SETTINGS.runner_container_name,
|
|
36
|
+
gitea_host: str = SETTINGS.gitea_host,
|
|
37
|
+
gitea_port: int = SETTINGS.gitea_port,
|
|
38
|
+
runner_instance_name: str = SETTINGS.runner_instance_name,
|
|
39
|
+
) -> None:
|
|
40
|
+
"""Register against a remote instance of Gitea."""
|
|
41
|
+
LOGGER.info(
|
|
42
|
+
strip_and_dedent("""
|
|
43
|
+
Running '%s' (version %s) with settings:
|
|
44
|
+
- ssh_user = %s
|
|
45
|
+
- ssh_host = %s
|
|
46
|
+
- gitea_container_user = %s
|
|
47
|
+
- gitea_container_name = %s
|
|
48
|
+
- runner_certificate = %s
|
|
49
|
+
- runner_capacity = %d
|
|
50
|
+
- runner_container_name = %s
|
|
51
|
+
- gitea_host = %s
|
|
52
|
+
- gitea_port = %d
|
|
53
|
+
- runner_instance_name = %s
|
|
54
|
+
"""),
|
|
55
|
+
register_gitea_runner.__name__,
|
|
56
|
+
__version__,
|
|
57
|
+
ssh_user,
|
|
58
|
+
ssh_host,
|
|
59
|
+
gitea_container_user,
|
|
60
|
+
gitea_container_name,
|
|
61
|
+
runner_certificate,
|
|
62
|
+
runner_capacity,
|
|
63
|
+
runner_container_name,
|
|
64
|
+
gitea_host,
|
|
65
|
+
gitea_port,
|
|
66
|
+
runner_instance_name,
|
|
67
|
+
)
|
|
68
|
+
token = ssh(
|
|
69
|
+
ssh_user,
|
|
70
|
+
ssh_host,
|
|
71
|
+
*_docker_exec_generate(user=gitea_container_user, name=gitea_container_name),
|
|
72
|
+
return_=True,
|
|
73
|
+
)
|
|
74
|
+
_start_runner(
|
|
75
|
+
token,
|
|
76
|
+
runner_certificate=runner_certificate,
|
|
77
|
+
runner_capacity=runner_capacity,
|
|
78
|
+
runner_container_name=runner_container_name,
|
|
79
|
+
gitea_host=gitea_host,
|
|
80
|
+
gitea_port=gitea_port,
|
|
81
|
+
runner_instance_name=runner_instance_name,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def register_against_local(
|
|
86
|
+
*,
|
|
87
|
+
gitea_container_user: str = SETTINGS.gitea_container_user,
|
|
88
|
+
gitea_container_name: str = SETTINGS.gitea_container_name,
|
|
89
|
+
runner_certificate: PathLike = SETTINGS.runner_certificate,
|
|
90
|
+
runner_capacity: int = SETTINGS.runner_capacity,
|
|
91
|
+
runner_container_name: str = SETTINGS.runner_container_name,
|
|
92
|
+
gitea_host: str = SETTINGS.gitea_host,
|
|
93
|
+
gitea_port: int = SETTINGS.gitea_port,
|
|
94
|
+
runner_instance_name: str = SETTINGS.runner_instance_name,
|
|
95
|
+
) -> None:
|
|
96
|
+
"""Register against a local instance of Gitea."""
|
|
97
|
+
LOGGER.info("Registering against %s:%d...", gitea_host, gitea_port)
|
|
98
|
+
token = run(
|
|
99
|
+
*_docker_exec_generate(user=gitea_container_user, name=gitea_container_name),
|
|
100
|
+
return_=True,
|
|
101
|
+
logger=LOGGER,
|
|
102
|
+
)
|
|
103
|
+
_start_runner(
|
|
104
|
+
token,
|
|
105
|
+
runner_certificate=runner_certificate,
|
|
106
|
+
runner_capacity=runner_capacity,
|
|
107
|
+
runner_container_name=runner_container_name,
|
|
108
|
+
gitea_host=gitea_host,
|
|
109
|
+
gitea_port=gitea_port,
|
|
110
|
+
runner_instance_name=runner_instance_name,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _check_certificate(*, certificate: PathLike = SETTINGS.runner_certificate) -> None:
|
|
115
|
+
if not Path(certificate).is_file():
|
|
116
|
+
msg = f"Missing certificate {certificate!r}"
|
|
117
|
+
raise FileNotFoundError(msg)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _check_token(text: str, /) -> None:
|
|
121
|
+
if not search(r"^[A-Za-z0-9]{40}$", text):
|
|
122
|
+
msg = f"Invalid token; got {text!r}"
|
|
123
|
+
raise ValueError(msg)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _docker_exec_generate(
|
|
127
|
+
*,
|
|
128
|
+
user: str = SETTINGS.gitea_container_user,
|
|
129
|
+
name: str = SETTINGS.gitea_container_name,
|
|
130
|
+
) -> list[str]:
|
|
131
|
+
return [
|
|
132
|
+
"docker",
|
|
133
|
+
"exec",
|
|
134
|
+
"--user",
|
|
135
|
+
user,
|
|
136
|
+
name,
|
|
137
|
+
"gitea",
|
|
138
|
+
"actions",
|
|
139
|
+
"generate-runner-token",
|
|
140
|
+
]
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _docker_run_act_runner_args(
|
|
144
|
+
token: str,
|
|
145
|
+
/,
|
|
146
|
+
*,
|
|
147
|
+
host: str = SETTINGS.gitea_host,
|
|
148
|
+
port: int = SETTINGS.gitea_port,
|
|
149
|
+
runner_certificate: PathLike = SETTINGS.runner_certificate,
|
|
150
|
+
instance_name: str = SETTINGS.runner_instance_name,
|
|
151
|
+
container_name: str = SETTINGS.runner_container_name,
|
|
152
|
+
) -> list[str]:
|
|
153
|
+
config_host = _get_config_path(token)
|
|
154
|
+
config_cont = "/config.yml"
|
|
155
|
+
entrypoint_host = _get_entrypoint_path(host=host, port=port)
|
|
156
|
+
entrypoint_cont = Path("/usr/local/bin/entrypoint.sh")
|
|
157
|
+
return [
|
|
158
|
+
"docker",
|
|
159
|
+
"run",
|
|
160
|
+
"--detach",
|
|
161
|
+
"--entrypoint",
|
|
162
|
+
str(entrypoint_cont),
|
|
163
|
+
"--env",
|
|
164
|
+
f"CONFIG_FILE={config_cont}",
|
|
165
|
+
"--env",
|
|
166
|
+
f"GITEA_INSTANCE_URL=https://{host}:{port}",
|
|
167
|
+
"--env",
|
|
168
|
+
f"GITEA_RUNNER_NAME={instance_name}",
|
|
169
|
+
"--env",
|
|
170
|
+
f"GITEA_RUNNER_REGISTRATION_TOKEN={token}",
|
|
171
|
+
"--name",
|
|
172
|
+
container_name,
|
|
173
|
+
"--volume",
|
|
174
|
+
"/var/run/docker.sock:/var/run/docker.sock",
|
|
175
|
+
"--volume",
|
|
176
|
+
f"{PATH_WAIT_FOR_IT}:/usr/local/bin/wait-for-it.sh:ro",
|
|
177
|
+
"--volume",
|
|
178
|
+
f"{Path.cwd()}/data:/data",
|
|
179
|
+
"--volume",
|
|
180
|
+
f"{config_host}:{config_cont}:ro",
|
|
181
|
+
"--volume",
|
|
182
|
+
f"{entrypoint_host}:{entrypoint_cont}:ro",
|
|
183
|
+
"--volume",
|
|
184
|
+
f"{runner_certificate}:/etc/ssl/certs/runner-certificate.pem:ro",
|
|
185
|
+
"gitea/act_runner",
|
|
186
|
+
]
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _docker_stop_runner_args(
|
|
190
|
+
*, name: str = SETTINGS.runner_container_name
|
|
191
|
+
) -> list[str]:
|
|
192
|
+
return ["docker", "rm", "--force", name]
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _get_config_contents(
|
|
196
|
+
*,
|
|
197
|
+
capacity: int = SETTINGS.runner_capacity,
|
|
198
|
+
certificate: PathLike = SETTINGS.runner_certificate,
|
|
199
|
+
) -> str:
|
|
200
|
+
src = PATH_CONFIGS / "config.yml"
|
|
201
|
+
return Template(src.read_text()).safe_substitute(
|
|
202
|
+
CAPACITY=capacity, CERTIFICATE=certificate
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _get_config_path(token: str, /) -> Path:
|
|
207
|
+
return PATH_CACHE / f"configs/{token}.yml"
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _get_entrypoint_contents(
|
|
211
|
+
*, host: str = SETTINGS.gitea_host, port: int = SETTINGS.gitea_port
|
|
212
|
+
) -> str:
|
|
213
|
+
src = PATH_CONFIGS / "entrypoint.sh"
|
|
214
|
+
return Template(src.read_text()).safe_substitute(GITEA_HOST=host, GITEA_PORT=port)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _get_entrypoint_path(
|
|
218
|
+
*, host: str = SETTINGS.gitea_host, port: int = SETTINGS.gitea_port
|
|
219
|
+
) -> Path:
|
|
220
|
+
return PATH_CACHE / f"entrypoints/{host}-{port}"
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
def _start_runner(
|
|
224
|
+
token: str,
|
|
225
|
+
/,
|
|
226
|
+
*,
|
|
227
|
+
runner_certificate: PathLike = SETTINGS.runner_certificate,
|
|
228
|
+
runner_capacity: int = SETTINGS.runner_capacity,
|
|
229
|
+
runner_container_name: str = SETTINGS.runner_container_name,
|
|
230
|
+
gitea_host: str = SETTINGS.gitea_host,
|
|
231
|
+
gitea_port: int = SETTINGS.gitea_port,
|
|
232
|
+
runner_instance_name: str = SETTINGS.runner_instance_name,
|
|
233
|
+
) -> None:
|
|
234
|
+
_check_certificate(certificate=runner_certificate)
|
|
235
|
+
_check_token(token)
|
|
236
|
+
_write_config(token, capacity=runner_capacity, certificate=runner_certificate)
|
|
237
|
+
_write_entrypoint(host=gitea_host, port=gitea_port)
|
|
238
|
+
_write_wait_for_it()
|
|
239
|
+
run(
|
|
240
|
+
*_docker_stop_runner_args(name=runner_container_name), print=True, logger=LOGGER
|
|
241
|
+
)
|
|
242
|
+
run(
|
|
243
|
+
*_docker_run_act_runner_args(
|
|
244
|
+
token,
|
|
245
|
+
host=gitea_host,
|
|
246
|
+
port=gitea_port,
|
|
247
|
+
runner_certificate=runner_certificate,
|
|
248
|
+
instance_name=runner_instance_name,
|
|
249
|
+
container_name=runner_container_name,
|
|
250
|
+
),
|
|
251
|
+
print=True,
|
|
252
|
+
logger=LOGGER,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _write_config(
|
|
257
|
+
token: str,
|
|
258
|
+
/,
|
|
259
|
+
*,
|
|
260
|
+
capacity: int = SETTINGS.runner_capacity,
|
|
261
|
+
certificate: PathLike = SETTINGS.runner_certificate,
|
|
262
|
+
) -> None:
|
|
263
|
+
dest = _get_config_path(token)
|
|
264
|
+
text = _get_config_contents(capacity=capacity, certificate=certificate)
|
|
265
|
+
with writer(dest, overwrite=True) as temp:
|
|
266
|
+
_ = temp.write_text(text)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _write_entrypoint(
|
|
270
|
+
*, host: str = SETTINGS.gitea_host, port: int = SETTINGS.gitea_port
|
|
271
|
+
) -> None:
|
|
272
|
+
dest = _get_entrypoint_path(host=host, port=port)
|
|
273
|
+
text = _get_entrypoint_contents(host=host, port=port)
|
|
274
|
+
with writer(dest, overwrite=True) as temp:
|
|
275
|
+
_ = temp.write_text(text)
|
|
276
|
+
chmod(temp, "u=rwx,g=rx,o=rx")
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def _write_wait_for_it() -> None:
|
|
280
|
+
if PATH_WAIT_FOR_IT.is_file():
|
|
281
|
+
return
|
|
282
|
+
with writer(PATH_WAIT_FOR_IT, overwrite=True) as temp:
|
|
283
|
+
resp = get(URL_WAIT_FOR_IT, timeout=60)
|
|
284
|
+
resp.raise_for_status()
|
|
285
|
+
_ = temp.write_bytes(resp.content)
|
|
286
|
+
chmod(temp, "u=rwx,g=rx,o=rx")
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
__all__ = ["register_against_local"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from typed_settings import load_settings, option, settings
|
|
6
|
+
from utilities.getpass import USER
|
|
7
|
+
from utilities.socket import HOSTNAME
|
|
8
|
+
|
|
9
|
+
from actions.utilities import LOADER
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@settings
|
|
13
|
+
class Settings:
|
|
14
|
+
ssh_user: str = option(default="user", help="SSH username")
|
|
15
|
+
ssh_host: str = option(default="gitea", help="SSH host")
|
|
16
|
+
gitea_container_user: str = option(default="git", help="Gitea container user name")
|
|
17
|
+
gitea_container_name: str = option(default="gitea", help="Gitea container name")
|
|
18
|
+
gitea_host: str = option(default="gitea", help="Gitea host")
|
|
19
|
+
gitea_port: int = option(default=3000, help="Gitea port")
|
|
20
|
+
runner_capacity: int = option(default=1, help="Runner capacity")
|
|
21
|
+
runner_instance_name: str = option(
|
|
22
|
+
default=f"{USER}--{HOSTNAME}", help="Runner instance name"
|
|
23
|
+
)
|
|
24
|
+
runner_certificate: Path = option(
|
|
25
|
+
default=Path("root.pem"), help="Runner root certificate"
|
|
26
|
+
)
|
|
27
|
+
runner_container_name: str = option(default="runner", help="Runner container name")
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
SETTINGS = load_settings(Settings, [LOADER])
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
__all__ = ["SETTINGS", "Settings"]
|
actions/run_hooks/lib.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
|
+
from contextlib import suppress
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from re import search
|
|
6
7
|
from subprocess import CalledProcessError
|
|
@@ -24,24 +25,27 @@ def run_hooks(
|
|
|
24
25
|
*,
|
|
25
26
|
repos: list[str] | None = SETTINGS.repos,
|
|
26
27
|
hooks: list[str] | None = SETTINGS.hooks,
|
|
28
|
+
hooks_exclude: list[str] | None = SETTINGS.hooks_exclude,
|
|
27
29
|
sleep: int = SETTINGS.sleep,
|
|
28
30
|
) -> None:
|
|
29
31
|
LOGGER.info(
|
|
30
32
|
strip_and_dedent("""
|
|
31
33
|
Running '%s' (version %s) with settings:
|
|
32
|
-
- repos
|
|
33
|
-
- hooks
|
|
34
|
-
-
|
|
34
|
+
- repos = %s
|
|
35
|
+
- hooks = %s
|
|
36
|
+
- hooks_exclude = %s
|
|
37
|
+
- sleep = %d
|
|
35
38
|
"""),
|
|
36
39
|
run_hooks.__name__,
|
|
37
40
|
__version__,
|
|
38
41
|
repos,
|
|
39
42
|
hooks,
|
|
43
|
+
hooks_exclude,
|
|
40
44
|
sleep,
|
|
41
45
|
)
|
|
42
46
|
results = {
|
|
43
47
|
hook: _run_hook(hook, sleep=sleep)
|
|
44
|
-
for hook in _yield_hooks(repos=repos, hooks=hooks)
|
|
48
|
+
for hook in _yield_hooks(repos=repos, hooks=hooks, hooks_exclude=hooks_exclude)
|
|
45
49
|
}
|
|
46
50
|
failed = {hook: result for hook, result in results.items() if not result}
|
|
47
51
|
if len(failed) >= 1:
|
|
@@ -53,6 +57,7 @@ def _yield_hooks(
|
|
|
53
57
|
*,
|
|
54
58
|
repos: list[str] | None = SETTINGS.repos,
|
|
55
59
|
hooks: list[str] | None = SETTINGS.hooks,
|
|
60
|
+
hooks_exclude: list[str] | None = SETTINGS.hooks_exclude,
|
|
56
61
|
) -> Iterator[str]:
|
|
57
62
|
dict_ = safe_load(Path(".pre-commit-config.yaml").read_text())
|
|
58
63
|
repos_list = ensure_class(dict_["repos"], list)
|
|
@@ -65,6 +70,10 @@ def _yield_hooks(
|
|
|
65
70
|
for hook in _yield_repo_hooks(repo):
|
|
66
71
|
if any(search(hook_i, hook) for hook_i in hooks):
|
|
67
72
|
results.add(hook)
|
|
73
|
+
if hooks_exclude is not None:
|
|
74
|
+
for hook in hooks_exclude:
|
|
75
|
+
with suppress(KeyError):
|
|
76
|
+
results.remove(hook)
|
|
68
77
|
yield from sorted(results)
|
|
69
78
|
|
|
70
79
|
|
actions/run_hooks/settings.py
CHANGED
|
@@ -15,6 +15,9 @@ class Settings:
|
|
|
15
15
|
hooks: list[str] | None = option(
|
|
16
16
|
default=None, converter=convert_list_strs, help="The hooks to be run"
|
|
17
17
|
)
|
|
18
|
+
hooks_exclude: list[str] | None = option(
|
|
19
|
+
default=None, converter=convert_list_strs, help="The hooks not to be run"
|
|
20
|
+
)
|
|
18
21
|
sleep: int = option(default=1, help="Sleep in between runs")
|
|
19
22
|
|
|
20
23
|
|
actions/types.py
CHANGED
|
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
6
6
|
from tomlkit.items import Array, Table
|
|
7
7
|
from typed_settings import Secret
|
|
8
8
|
from utilities.packaging import Requirement
|
|
9
|
+
from utilities.types import StrDict
|
|
9
10
|
|
|
10
11
|
if TYPE_CHECKING:
|
|
11
12
|
from tomlkit.container import Container
|
|
@@ -15,7 +16,6 @@ type FuncRequirement = Callable[[Requirement], Requirement]
|
|
|
15
16
|
type HasAppend = Array | list[Any]
|
|
16
17
|
type HasSetDefault = Container | StrDict | Table
|
|
17
18
|
type SecretLike = str | Secret[str]
|
|
18
|
-
type StrDict = dict[str, Any]
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
__all__ = ["FuncRequirement", "HasAppend", "HasSetDefault", "SecretLike"
|
|
21
|
+
__all__ = ["FuncRequirement", "HasAppend", "HasSetDefault", "SecretLike"]
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dycw-actions
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: Library of actions
|
|
5
5
|
Requires-Dist: click>=8.3.1,<9
|
|
6
|
-
Requires-Dist: dycw-utilities>=0.
|
|
6
|
+
Requires-Dist: dycw-utilities>=0.179.0,<1
|
|
7
7
|
Requires-Dist: inflect>=7.5.0,<8
|
|
8
8
|
Requires-Dist: libcst>=1.8.6,<2
|
|
9
9
|
Requires-Dist: packaging>=25.0,<26
|
|
10
10
|
Requires-Dist: pydantic>=2.12.5,<3
|
|
11
11
|
Requires-Dist: pyyaml>=6.0.3,<7
|
|
12
|
+
Requires-Dist: requests>=2.32.5,<3
|
|
12
13
|
Requires-Dist: rich>=14.2.0,<15
|
|
13
|
-
Requires-Dist: ruamel-yaml>=0.19.
|
|
14
|
+
Requires-Dist: ruamel-yaml>=0.19.1,<1
|
|
14
15
|
Requires-Dist: tomlkit>=0.13.3,<1
|
|
15
16
|
Requires-Dist: typed-settings[attrs,click]>=25.3.0,<26
|
|
16
17
|
Requires-Dist: xdg-base-dirs>=6.0.2,<7
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
actions/__init__.py,sha256=
|
|
2
|
-
actions/action_dicts/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
3
|
-
actions/action_dicts/constants.py,sha256=tYYLr3aRRRvnR6NSADOJMN-B6gtqg2A9gBuheEPyGy4,189
|
|
4
|
-
actions/action_dicts/lib.py,sha256=MpK_y5Jao0-3p6bWeYX5QQy3-JjMxwyzXRU5LjO25Iw,5547
|
|
1
|
+
actions/__init__.py,sha256=H8mH4w15RqfIw35Zak8l6adkEaCxYcUWrU66Ygj9eb0,58
|
|
5
2
|
actions/clean_dir/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
6
3
|
actions/clean_dir/cli.py,sha256=OrFA2nEN2LyGF22mhTNEBr7KSuKgX54sGy9RyE73qUc,569
|
|
7
4
|
actions/clean_dir/constants.py,sha256=aDNaYtemEv3lcMXo96Oh4pw_HASMby1GZC1D_gbjPAc,167
|
|
8
|
-
actions/clean_dir/lib.py,sha256=
|
|
5
|
+
actions/clean_dir/lib.py,sha256=7_-QbvB9Bq2veEl4eYWkBBWN0jSNrjGVlx1gLWS1PwU,1606
|
|
9
6
|
actions/clean_dir/settings.py,sha256=mqM0Oq-yz4dXKcUi3JmOCvDhoeBNQm_Qe70cGmhdcQE,345
|
|
10
|
-
actions/cli.py,sha256=
|
|
11
|
-
actions/constants.py,sha256=
|
|
7
|
+
actions/cli.py,sha256=J9k7_BQzgDHdgzkTqwXVzncRMHm0eAT0WW_c_gAUFlE,4441
|
|
8
|
+
actions/constants.py,sha256=C_eTTPwNJRjXV5BkFqdHMC2yQW86-iNTOCZjHYkMix0,1776
|
|
12
9
|
actions/logging.py,sha256=rMTcQMGndUHTCaXXtyOHt_VXUMhQGRHoN7okpoX0y5I,120
|
|
13
10
|
actions/pre_commit/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
14
11
|
actions/pre_commit/click.py,sha256=BLHjkO0gIW7rgLabuWnszwXmI4yb8Li5D8gt81GR-FQ,270
|
|
15
12
|
actions/pre_commit/conformalize_repo/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
16
|
-
actions/pre_commit/conformalize_repo/
|
|
13
|
+
actions/pre_commit/conformalize_repo/action_dicts.py,sha256=6KVL5xeQ8fSAjPpgRnDmKV9lsqqJJND7VvHNBqMgjs8,7605
|
|
14
|
+
actions/pre_commit/conformalize_repo/cli.py,sha256=1og2QndEIvOgub_az3Nk3KOLWSaae6eARpBMw22eUu4,2891
|
|
17
15
|
actions/pre_commit/conformalize_repo/configs/gitignore,sha256=8YCRPwysCD8-67yFXaTg6O8TTl4xeNIh7_DVmaU5Ix0,5063
|
|
18
|
-
actions/pre_commit/conformalize_repo/constants.py,sha256=
|
|
19
|
-
actions/pre_commit/conformalize_repo/lib.py,sha256=
|
|
20
|
-
actions/pre_commit/conformalize_repo/settings.py,sha256=
|
|
16
|
+
actions/pre_commit/conformalize_repo/constants.py,sha256=s96CbNkfghrxQSJSWSOGuqWs-XjpwLyJBwKDlb-YdUY,1136
|
|
17
|
+
actions/pre_commit/conformalize_repo/lib.py,sha256=ur2gDK3MwB5Vnb6Zb33alXobgN55tQgECkjd9AfXpfU,50348
|
|
18
|
+
actions/pre_commit/conformalize_repo/settings.py,sha256=SDP34Ux75Db1MEsHpXx52bEJuqA03xKTYulJX1wvl4g,5338
|
|
21
19
|
actions/pre_commit/constants.py,sha256=NBJ5GBMg5qhMAhAfxx1FKw0CdPwW_wG2cUJJ0dkF5HE,158
|
|
22
20
|
actions/pre_commit/format_requirements/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
23
21
|
actions/pre_commit/format_requirements/cli.py,sha256=c9UdOFDLEei5AEzrVvo6FopIEOf2EqyOliA-bOR5a2o,584
|
|
@@ -30,17 +28,17 @@ actions/pre_commit/replace_sequence_strs/lib.py,sha256=FzfwYeL3bhTCYbb1T-Yk1NtdH
|
|
|
30
28
|
actions/pre_commit/touch_empty_py/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
31
29
|
actions/pre_commit/touch_empty_py/cli.py,sha256=s2S5OfAGcSLtd2aGm1ooa1k20oNK-LQ1PZWz6T30vO8,559
|
|
32
30
|
actions/pre_commit/touch_empty_py/constants.py,sha256=zSwH60zfn9RhIAbBFnXjHrm2s1nFpPUskX3CZuJpQLk,198
|
|
33
|
-
actions/pre_commit/touch_empty_py/lib.py,sha256=
|
|
31
|
+
actions/pre_commit/touch_empty_py/lib.py,sha256=jxT6CRZ3rrBatk3o-D0xDXon3a-G02sCvdMSNuRvCv0,1706
|
|
34
32
|
actions/pre_commit/touch_py_typed/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
35
33
|
actions/pre_commit/touch_py_typed/cli.py,sha256=CDJV4NuUHJlSdJ84dY0XvdwYHMdqygZ7C6x07B-iN3E,559
|
|
36
34
|
actions/pre_commit/touch_py_typed/constants.py,sha256=kLZOm_wgypp7MaXRYq-6AZqVE4OttOMKmUqt11V2zn0,191
|
|
37
|
-
actions/pre_commit/touch_py_typed/lib.py,sha256=
|
|
35
|
+
actions/pre_commit/touch_py_typed/lib.py,sha256=8crPXxI6CwudW13RIJrn3YtrFcZsspyJnTmNRHz4TaU,2020
|
|
38
36
|
actions/pre_commit/update_requirements/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
39
|
-
actions/pre_commit/update_requirements/classes.py,sha256=
|
|
37
|
+
actions/pre_commit/update_requirements/classes.py,sha256=ERC70c1CxQ3rOsQaEtp6FGbK_VaJ4K0jAV5XTB5-L30,3486
|
|
40
38
|
actions/pre_commit/update_requirements/cli.py,sha256=CBfm8M7hwSRw8KS6ttiNE86IFHJ52V42AxlfakqTDN0,584
|
|
41
39
|
actions/pre_commit/update_requirements/constants.py,sha256=ve44_RYed_41ckgQNPkb08u7Y1cpLpzutGSL9FdGBF8,228
|
|
42
|
-
actions/pre_commit/update_requirements/lib.py,sha256=
|
|
43
|
-
actions/pre_commit/utilities.py,sha256=
|
|
40
|
+
actions/pre_commit/update_requirements/lib.py,sha256=Wh8Lq6s_YJv4sDoUUMB-HuP0Ysm9nHePX7_xZ81o7Pk,4590
|
|
41
|
+
actions/pre_commit/utilities.py,sha256=VLh2tC9NNI60Uwx-ze3uuqKgOJ1OvFCvzYjDWM5o0Js,11397
|
|
44
42
|
actions/publish_package/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
45
43
|
actions/publish_package/cli.py,sha256=nAPHCq67mxUb3yHepVGcoQ69qgaQahM1-cxdbHfxQg0,803
|
|
46
44
|
actions/publish_package/constants.py,sha256=C68ZCVL_jVlYdLGpOK6saZccWoFy5AmC_NMBIWYdYOE,209
|
|
@@ -52,11 +50,18 @@ actions/random_sleep/cli.py,sha256=-d9y63oWgvQtNp9j_8v3zt5gKl-GrUq8-b3Ky52R42c,6
|
|
|
52
50
|
actions/random_sleep/constants.py,sha256=5GMqCD1f12uyKDVTZBbnDDn6TQa99mUYZb9p-crg5BA,190
|
|
53
51
|
actions/random_sleep/lib.py,sha256=JzgpeEONdKXSBeNc3ex9goVyJR3bsa76lB_tkH1Ggc0,1762
|
|
54
52
|
actions/random_sleep/settings.py,sha256=F8gO2j2EEX8moemwhWWCPdRuOpZ_qLtqzSfWhjIy3P8,529
|
|
53
|
+
actions/register_gitea_runner/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
54
|
+
actions/register_gitea_runner/cli.py,sha256=70RUyzKCZHxyDRMFwCAwDC0LDsUZxBi2T6ctzbFlpc8,1129
|
|
55
|
+
actions/register_gitea_runner/configs/config.yml,sha256=0kpaqAjMRDqdSxkSK8ydOk2IsrlkB4cUkYmbkHAurrg,5683
|
|
56
|
+
actions/register_gitea_runner/configs/entrypoint.sh,sha256=IN40hAu8ufyyFWPIgsX_hWp0ZZZ0c36czCaqmECjBrw,476
|
|
57
|
+
actions/register_gitea_runner/constants.py,sha256=wX1f5qvhIXngBVWbIQRoIaXIdPaUByvG8HS8P0WcCGM,694
|
|
58
|
+
actions/register_gitea_runner/lib.py,sha256=V_K6UHmZOD9V-DF6ZNA2QakNyuyuyjgJZ6AJQFf37lQ,8832
|
|
59
|
+
actions/register_gitea_runner/settings.py,sha256=0UQm8M3qDiBE3jiE333M4FdLjikNAzpc9gk_VlzI0s8,1149
|
|
55
60
|
actions/run_hooks/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
56
61
|
actions/run_hooks/cli.py,sha256=xKBw6iIlHpUlHl6-QWQLSL6KKVjnsihBeJ7h58Rl8P4,616
|
|
57
62
|
actions/run_hooks/constants.py,sha256=JRhDk08qbzo5C-zwHdXZV5ajvNSKh4GcOcBvOIY6IGU,172
|
|
58
|
-
actions/run_hooks/lib.py,sha256=
|
|
59
|
-
actions/run_hooks/settings.py,sha256=
|
|
63
|
+
actions/run_hooks/lib.py,sha256=_IXK6uzKpXyyky6D0oYLjXoRLHsbA1pvTk_bcdY26RU,3259
|
|
64
|
+
actions/run_hooks/settings.py,sha256=Cj6QVK6JspzOp6-1CaOENlXbg25kvgPXG4FKWgIiDgY,740
|
|
60
65
|
actions/setup_cronjob/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
|
|
61
66
|
actions/setup_cronjob/cli.py,sha256=l6t2WjCUprACV0rY8kHvpHLt3LgMI4q2XY4AEOiutkk,891
|
|
62
67
|
actions/setup_cronjob/configs/cron.tmpl,sha256=UD_d0LYlB6tbkXAcUTzpGDWVNgIhCR45Jgky91iSCP8,412
|
|
@@ -69,9 +74,9 @@ actions/tag_commit/cli.py,sha256=1E6cM0XKTCt_Ukb7pxqOojHpJjoa63dVBO6DXoESe9Q,745
|
|
|
69
74
|
actions/tag_commit/constants.py,sha256=ceOvQpY4dgtJSd7v_jI1V00S0SjRq2ToGeZu41-DL7M,176
|
|
70
75
|
actions/tag_commit/lib.py,sha256=rq1SqAkNp98cPsNOsFY4F1D6nNi7N3wqVbFPno8lsuI,1849
|
|
71
76
|
actions/tag_commit/settings.py,sha256=TOeKG_GODP--2lBSyGzH_M32jDIfh4vk_Ts06R3_ak4,629
|
|
72
|
-
actions/types.py,sha256=
|
|
77
|
+
actions/types.py,sha256=1P3oAnYxyKgAfv8986jZ6whwdHV0qLHoX0oR8brviQk,586
|
|
73
78
|
actions/utilities.py,sha256=VpFLBiAezgSRlm9dvnyPyQohreaV2Lv7cJ9HAxqZ4WI,4086
|
|
74
|
-
dycw_actions-0.
|
|
75
|
-
dycw_actions-0.
|
|
76
|
-
dycw_actions-0.
|
|
77
|
-
dycw_actions-0.
|
|
79
|
+
dycw_actions-0.8.4.dist-info/WHEEL,sha256=KSLUh82mDPEPk0Bx0ScXlWL64bc8KmzIPNcpQZFV-6E,79
|
|
80
|
+
dycw_actions-0.8.4.dist-info/entry_points.txt,sha256=2Uu7wAZOm0mmcsGBEsGB370HAWgVWECRFJ9rKgfC3-I,46
|
|
81
|
+
dycw_actions-0.8.4.dist-info/METADATA,sha256=GyCgKEL03OjKWo5XN-TLYvLBqNfsih61YIFlwZwvQW4,654
|
|
82
|
+
dycw_actions-0.8.4.dist-info/RECORD,,
|