git-goose 0.2.2__tar.gz → 0.3.0__tar.gz
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.
- {git_goose-0.2.2 → git_goose-0.3.0}/.github/workflows/ci.yaml +3 -3
- {git_goose-0.2.2 → git_goose-0.3.0}/.github/workflows/release.yaml +1 -1
- git_goose-0.3.0/.goose/node/manifest.json +1 -0
- git_goose-0.3.0/.goose/python/manifest.json +1 -0
- git_goose-0.3.0/.goose/python/requirements.txt +25 -0
- git_goose-0.3.0/.goose/type-check/manifest.json +1 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.goose/type-check/requirements.txt +33 -28
- {git_goose-0.2.2 → git_goose-0.3.0}/Dockerfile +5 -5
- {git_goose-0.2.2 → git_goose-0.3.0}/PKG-INFO +6 -6
- {git_goose-0.2.2 → git_goose-0.3.0}/README.md +3 -3
- {git_goose-0.2.2 → git_goose-0.3.0}/goose.yaml +3 -3
- {git_goose-0.2.2 → git_goose-0.3.0}/pyproject.toml +3 -3
- {git_goose-0.2.2 → git_goose-0.3.0}/requirements.txt +4 -4
- {git_goose-0.2.2 → git_goose-0.3.0}/src/git_goose.egg-info/PKG-INFO +6 -6
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/__main__.py +82 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/_version.py +2 -2
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/backend/node.py +1 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/backend/python.py +1 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/environment.py +45 -9
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/manifest.py +7 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/scheduler.py +4 -6
- git_goose-0.2.2/.goose/node/manifest.json +0 -1
- git_goose-0.2.2/.goose/python/manifest.json +0 -1
- git_goose-0.2.2/.goose/python/requirements.txt +0 -76
- git_goose-0.2.2/.goose/type-check/manifest.json +0 -1
- {git_goose-0.2.2 → git_goose-0.3.0}/.dockerignore +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.editorconfig +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.github/dependabot.yml +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.gitignore +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.goose/node/package-lock.json +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/.goose/node/package.json +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/LICENSE +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/Makefile +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/ruff.toml +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/setup.cfg +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/git_goose.egg-info/SOURCES.txt +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/git_goose.egg-info/dependency_links.txt +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/git_goose.egg-info/requires.txt +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/git_goose.egg-info/top_level.txt +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/__init__.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/_utils/__init__.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/_utils/pydantic.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/asyncio.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/backend/__init__.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/backend/base.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/backend/index.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/config.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/context.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/executable_unit.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/filter.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/git/__init__.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/git/shared.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/git/status.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/orphan_environments.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/parallel.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/paths.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/process.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/py.typed +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/src/goose/targets.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/tests/__init__.py +0 -0
- {git_goose-0.2.2 → git_goose-0.3.0}/tests/test_targets.py +0 -0
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
- uses: actions/checkout@v4
|
|
24
24
|
- uses: actions/setup-python@v5
|
|
25
25
|
with:
|
|
26
|
-
python-version: "3.
|
|
26
|
+
python-version: "3.13"
|
|
27
27
|
cache: pip
|
|
28
28
|
cache-dependency-path: .goose/**/manifest.json
|
|
29
29
|
check-latest: true
|
|
@@ -31,9 +31,9 @@ jobs:
|
|
|
31
31
|
uses: actions/cache@v4
|
|
32
32
|
with:
|
|
33
33
|
path: ~/.cache/goose
|
|
34
|
-
key: ${{ runner.os }}-goose-3.
|
|
34
|
+
key: ${{ runner.os }}-goose-3.13-${{ hashFiles('.goose/**/manifest.json') }}
|
|
35
35
|
restore-keys: |
|
|
36
|
-
${{ runner.os }}-goose-3.
|
|
36
|
+
${{ runner.os }}-goose-3.13
|
|
37
37
|
${{ runner.os }}-goose
|
|
38
38
|
- run: python3 -m pip install --require-hashes --no-dependencies -r requirements.txt
|
|
39
39
|
- run: python3 -m pip install --no-dependencies .
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"source_ecosystem":{"language":"node","version":"23.0.0"},"source_dependencies":["prettier"],"lock_files":[{"path":"package-lock.json","checksum":"sha256:c72f3206d345d7285c175a9363dc4d7efbb56729dd02e4828c9356ecfaaad0ca"},{"path":"package.json","checksum":"sha256:c5008cb00d6009f6d901cfe35523169a3deb91979b71fce65d6ac79fdace548b"}],"checksum":"sha256:e130609d6f3cb3681a612f936c5fac5c409019253d18071772d86949766d0bbb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"source_ecosystem":{"language":"python","version":"3.13"},"source_dependencies":["pre-commit-hooks","ruff"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:f649a1f943c1cfbd71571de02aedcf7d88e7427c0e985ec26f399d8c40970c8e"}],"checksum":"sha256:2087aaf2b95093aae8f2cfef2b6a55aaddd9e94d1814b268ea2fd699f0a10f11"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
pre-commit-hooks==5.0.0 \
|
|
2
|
+
--hash=sha256:10626959a9eaf602fbfc22bc61b6e75801436f82326bfcee82bb1f2fc4bc646e \
|
|
3
|
+
--hash=sha256:8d71cfb582c5c314a5498d94e0104b6567a8b93fb35903ea845c491f4e290a7a
|
|
4
|
+
ruamel-yaml==0.18.6 \
|
|
5
|
+
--hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \
|
|
6
|
+
--hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b
|
|
7
|
+
ruff==0.7.0 \
|
|
8
|
+
--hash=sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628 \
|
|
9
|
+
--hash=sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e \
|
|
10
|
+
--hash=sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495 \
|
|
11
|
+
--hash=sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9 \
|
|
12
|
+
--hash=sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa \
|
|
13
|
+
--hash=sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06 \
|
|
14
|
+
--hash=sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b \
|
|
15
|
+
--hash=sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737 \
|
|
16
|
+
--hash=sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11 \
|
|
17
|
+
--hash=sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be \
|
|
18
|
+
--hash=sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598 \
|
|
19
|
+
--hash=sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e \
|
|
20
|
+
--hash=sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4 \
|
|
21
|
+
--hash=sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914 \
|
|
22
|
+
--hash=sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9 \
|
|
23
|
+
--hash=sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d \
|
|
24
|
+
--hash=sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec \
|
|
25
|
+
--hash=sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"source_ecosystem":{"language":"python","version":"3.13"},"source_dependencies":["identify==2.6.0","mypy","pydantic==2.8.2","rich==13.7.1","typer==0.12.3","types-pyyaml==6.0.12.20240724"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:30a32dcd426ab99471b1d43f5a575db3d8df2b5b64ce3dc756ce730f7f0b388c"}],"checksum":"sha256:40b81307cd69b710976f92453cdf92ef743fdd9882eabea9c6b6b6688779a516"}
|
|
@@ -13,34 +13,39 @@ markdown-it-py==3.0.0 \
|
|
|
13
13
|
mdurl==0.1.2 \
|
|
14
14
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
|
15
15
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
|
16
|
-
mypy==1.
|
|
17
|
-
--hash=sha256:
|
|
18
|
-
--hash=sha256:
|
|
19
|
-
--hash=sha256:
|
|
20
|
-
--hash=sha256:
|
|
21
|
-
--hash=sha256:
|
|
22
|
-
--hash=sha256:
|
|
23
|
-
--hash=sha256:
|
|
24
|
-
--hash=sha256:
|
|
25
|
-
--hash=sha256:
|
|
26
|
-
--hash=sha256:
|
|
27
|
-
--hash=sha256:
|
|
28
|
-
--hash=sha256:
|
|
29
|
-
--hash=sha256:
|
|
30
|
-
--hash=sha256:
|
|
31
|
-
--hash=sha256:
|
|
32
|
-
--hash=sha256:
|
|
33
|
-
--hash=sha256:
|
|
34
|
-
--hash=sha256:
|
|
35
|
-
--hash=sha256:
|
|
36
|
-
--hash=sha256:
|
|
37
|
-
--hash=sha256:
|
|
38
|
-
--hash=sha256:
|
|
39
|
-
--hash=sha256:
|
|
40
|
-
--hash=sha256:
|
|
41
|
-
--hash=sha256:
|
|
42
|
-
--hash=sha256:
|
|
43
|
-
--hash=sha256:
|
|
16
|
+
mypy==1.12.0 \
|
|
17
|
+
--hash=sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a \
|
|
18
|
+
--hash=sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa \
|
|
19
|
+
--hash=sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff \
|
|
20
|
+
--hash=sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9 \
|
|
21
|
+
--hash=sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57 \
|
|
22
|
+
--hash=sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3 \
|
|
23
|
+
--hash=sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b \
|
|
24
|
+
--hash=sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721 \
|
|
25
|
+
--hash=sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed \
|
|
26
|
+
--hash=sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893 \
|
|
27
|
+
--hash=sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b \
|
|
28
|
+
--hash=sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7 \
|
|
29
|
+
--hash=sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521 \
|
|
30
|
+
--hash=sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9 \
|
|
31
|
+
--hash=sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0 \
|
|
32
|
+
--hash=sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d \
|
|
33
|
+
--hash=sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469 \
|
|
34
|
+
--hash=sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8 \
|
|
35
|
+
--hash=sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e \
|
|
36
|
+
--hash=sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1 \
|
|
37
|
+
--hash=sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164 \
|
|
38
|
+
--hash=sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475 \
|
|
39
|
+
--hash=sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e \
|
|
40
|
+
--hash=sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309 \
|
|
41
|
+
--hash=sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7 \
|
|
42
|
+
--hash=sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601 \
|
|
43
|
+
--hash=sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e \
|
|
44
|
+
--hash=sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0 \
|
|
45
|
+
--hash=sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642 \
|
|
46
|
+
--hash=sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f \
|
|
47
|
+
--hash=sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f \
|
|
48
|
+
--hash=sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266
|
|
44
49
|
mypy-extensions==1.0.0 \
|
|
45
50
|
--hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \
|
|
46
51
|
--hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
FROM python:3.
|
|
1
|
+
FROM python:3.13.0-bookworm AS build
|
|
2
2
|
|
|
3
3
|
ARG RELEASE_VERSION="dev"
|
|
4
4
|
ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_GIT_GOOSE=$RELEASE_VERSION
|
|
@@ -6,9 +6,9 @@ ENV SETUPTOOLS_SCM_PRETEND_VERSION_FOR_GIT_GOOSE=$RELEASE_VERSION
|
|
|
6
6
|
ENV PYTHONDONTWRITEBYTECODE 1
|
|
7
7
|
ENV PYTHONUNBUFFERED 1
|
|
8
8
|
ENV PIP_REQUIRE_VIRTUALENV true
|
|
9
|
-
ENV PIP_VERSION 24.
|
|
10
|
-
ENV SETUPTOOLS_VERSION
|
|
11
|
-
ENV WHEEL_VERSION 0.
|
|
9
|
+
ENV PIP_VERSION 24.2
|
|
10
|
+
ENV SETUPTOOLS_VERSION 75.2.0
|
|
11
|
+
ENV WHEEL_VERSION 0.44.0
|
|
12
12
|
# Permanently activate virtualenv.
|
|
13
13
|
ENV PATH="/venv/bin:$PATH"
|
|
14
14
|
|
|
@@ -29,7 +29,7 @@ RUN --mount=type=cache,target=/root/.cache/pip \
|
|
|
29
29
|
&& pip install --no-dependencies /app-src \
|
|
30
30
|
&& pip check
|
|
31
31
|
|
|
32
|
-
FROM python:3.
|
|
32
|
+
FROM python:3.13.0-slim-bookworm AS final
|
|
33
33
|
|
|
34
34
|
ARG UID="1000"
|
|
35
35
|
ARG GID="1000"
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: git-goose
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A picky and eager Git hook runner.
|
|
5
5
|
Author-email: Anton Agestam <git@antonagestam.se>
|
|
6
6
|
License: BSD 3-Clause
|
|
7
7
|
Project-URL: Source Repository, https://github.com/antonagestam/goose
|
|
8
8
|
Classifier: Intended Audience :: Developers
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
11
11
|
Classifier: Development Status :: 4 - Beta
|
|
12
12
|
Classifier: Typing :: Typed
|
|
13
|
-
Requires-Python: <3.
|
|
13
|
+
Requires-Python: <3.14,>=3.13
|
|
14
14
|
Description-Content-Type: text/markdown; charset=UTF-8
|
|
15
15
|
License-File: LICENSE
|
|
16
16
|
Requires-Dist: pydantic
|
|
@@ -93,7 +93,7 @@ environments:
|
|
|
93
93
|
- id: python
|
|
94
94
|
ecosystem:
|
|
95
95
|
language: python
|
|
96
|
-
version: "3.
|
|
96
|
+
version: "3.13"
|
|
97
97
|
dependencies:
|
|
98
98
|
- ruff
|
|
99
99
|
|
|
@@ -183,7 +183,7 @@ environments:
|
|
|
183
183
|
- id: python
|
|
184
184
|
ecosystem:
|
|
185
185
|
language: python
|
|
186
|
-
version: "3.
|
|
186
|
+
version: "3.13"
|
|
187
187
|
dependencies:
|
|
188
188
|
- pre-commit-hooks
|
|
189
189
|
|
|
@@ -237,7 +237,7 @@ environments:
|
|
|
237
237
|
- id: mypy
|
|
238
238
|
ecosystem:
|
|
239
239
|
language: python
|
|
240
|
-
version: "3.
|
|
240
|
+
version: "3.13"
|
|
241
241
|
dependencies:
|
|
242
242
|
- mypy
|
|
243
243
|
|
|
@@ -70,7 +70,7 @@ environments:
|
|
|
70
70
|
- id: python
|
|
71
71
|
ecosystem:
|
|
72
72
|
language: python
|
|
73
|
-
version: "3.
|
|
73
|
+
version: "3.13"
|
|
74
74
|
dependencies:
|
|
75
75
|
- ruff
|
|
76
76
|
|
|
@@ -160,7 +160,7 @@ environments:
|
|
|
160
160
|
- id: python
|
|
161
161
|
ecosystem:
|
|
162
162
|
language: python
|
|
163
|
-
version: "3.
|
|
163
|
+
version: "3.13"
|
|
164
164
|
dependencies:
|
|
165
165
|
- pre-commit-hooks
|
|
166
166
|
|
|
@@ -214,7 +214,7 @@ environments:
|
|
|
214
214
|
- id: mypy
|
|
215
215
|
ecosystem:
|
|
216
216
|
language: python
|
|
217
|
-
version: "3.
|
|
217
|
+
version: "3.13"
|
|
218
218
|
dependencies:
|
|
219
219
|
- mypy
|
|
220
220
|
|
|
@@ -2,7 +2,7 @@ environments:
|
|
|
2
2
|
- id: type-check
|
|
3
3
|
ecosystem:
|
|
4
4
|
language: python
|
|
5
|
-
version: "3.
|
|
5
|
+
version: "3.13"
|
|
6
6
|
dependencies:
|
|
7
7
|
- mypy
|
|
8
8
|
- pydantic==2.8.2
|
|
@@ -14,7 +14,7 @@ environments:
|
|
|
14
14
|
- id: python
|
|
15
15
|
ecosystem:
|
|
16
16
|
language: python
|
|
17
|
-
version: "3.
|
|
17
|
+
version: "3.13"
|
|
18
18
|
dependencies:
|
|
19
19
|
- ruff
|
|
20
20
|
- pre-commit-hooks
|
|
@@ -22,7 +22,7 @@ environments:
|
|
|
22
22
|
- id: node
|
|
23
23
|
ecosystem:
|
|
24
24
|
language: node
|
|
25
|
-
version: "
|
|
25
|
+
version: "23.0.0"
|
|
26
26
|
dependencies:
|
|
27
27
|
- prettier
|
|
28
28
|
|
|
@@ -27,11 +27,11 @@ authors = [
|
|
|
27
27
|
]
|
|
28
28
|
description = "A picky and eager Git hook runner."
|
|
29
29
|
license = {text = "BSD 3-Clause"}
|
|
30
|
-
requires-python = "
|
|
30
|
+
requires-python = ">=3.13,<3.14"
|
|
31
31
|
classifiers = [
|
|
32
32
|
"Intended Audience :: Developers",
|
|
33
33
|
"Operating System :: OS Independent",
|
|
34
|
-
"Programming Language :: Python :: 3.
|
|
34
|
+
"Programming Language :: Python :: 3.14",
|
|
35
35
|
"Development Status :: 4 - Beta",
|
|
36
36
|
"Typing :: Typed",
|
|
37
37
|
]
|
|
@@ -59,7 +59,7 @@ upgrade = true
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
[tool.mypy]
|
|
62
|
-
python_version = 3.
|
|
62
|
+
python_version = 3.13
|
|
63
63
|
show_error_codes = true
|
|
64
64
|
pretty = true
|
|
65
65
|
files = ["src", "tests"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file is autogenerated by pip-compile with Python 3.
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.13
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
5
|
# 'make requirements'
|
|
@@ -182,9 +182,9 @@ pyyaml==6.0.2 \
|
|
|
182
182
|
--hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \
|
|
183
183
|
--hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4
|
|
184
184
|
# via git-goose (pyproject.toml)
|
|
185
|
-
rich==13.
|
|
186
|
-
--hash=sha256:
|
|
187
|
-
--hash=sha256:
|
|
185
|
+
rich==13.9.2 \
|
|
186
|
+
--hash=sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c \
|
|
187
|
+
--hash=sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1
|
|
188
188
|
# via
|
|
189
189
|
# git-goose (pyproject.toml)
|
|
190
190
|
# typer
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: git-goose
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: A picky and eager Git hook runner.
|
|
5
5
|
Author-email: Anton Agestam <git@antonagestam.se>
|
|
6
6
|
License: BSD 3-Clause
|
|
7
7
|
Project-URL: Source Repository, https://github.com/antonagestam/goose
|
|
8
8
|
Classifier: Intended Audience :: Developers
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
11
11
|
Classifier: Development Status :: 4 - Beta
|
|
12
12
|
Classifier: Typing :: Typed
|
|
13
|
-
Requires-Python: <3.
|
|
13
|
+
Requires-Python: <3.14,>=3.13
|
|
14
14
|
Description-Content-Type: text/markdown; charset=UTF-8
|
|
15
15
|
License-File: LICENSE
|
|
16
16
|
Requires-Dist: pydantic
|
|
@@ -93,7 +93,7 @@ environments:
|
|
|
93
93
|
- id: python
|
|
94
94
|
ecosystem:
|
|
95
95
|
language: python
|
|
96
|
-
version: "3.
|
|
96
|
+
version: "3.13"
|
|
97
97
|
dependencies:
|
|
98
98
|
- ruff
|
|
99
99
|
|
|
@@ -183,7 +183,7 @@ environments:
|
|
|
183
183
|
- id: python
|
|
184
184
|
ecosystem:
|
|
185
185
|
language: python
|
|
186
|
-
version: "3.
|
|
186
|
+
version: "3.13"
|
|
187
187
|
dependencies:
|
|
188
188
|
- pre-commit-hooks
|
|
189
189
|
|
|
@@ -237,7 +237,7 @@ environments:
|
|
|
237
237
|
- id: mypy
|
|
238
238
|
ecosystem:
|
|
239
239
|
language: python
|
|
240
|
-
version: "3.
|
|
240
|
+
version: "3.13"
|
|
241
241
|
dependencies:
|
|
242
242
|
- mypy
|
|
243
243
|
|
|
@@ -20,17 +20,23 @@ from rich.table import Table
|
|
|
20
20
|
from rich.text import Text
|
|
21
21
|
|
|
22
22
|
from goose.backend.base import RunResult
|
|
23
|
+
from goose.config import EnvironmentId
|
|
23
24
|
from goose.config import HookConfig
|
|
24
25
|
|
|
25
26
|
from .asyncio import asyncio_entrypoint
|
|
26
27
|
from .context import gather_context
|
|
28
|
+
from .environment import Environment
|
|
29
|
+
from .environment import InitialState
|
|
27
30
|
from .environment import NeedsFreeze
|
|
31
|
+
from .environment import SyncedState
|
|
32
|
+
from .environment import UninitializedState
|
|
28
33
|
from .environment import prepare_environment
|
|
29
34
|
from .orphan_environments import probe_orphan_environments
|
|
30
35
|
from .scheduler import Scheduler
|
|
31
36
|
from .scheduler import UnitFinished
|
|
32
37
|
from .scheduler import UnitScheduled
|
|
33
38
|
from .targets import Selector
|
|
39
|
+
from .targets import filter_hook_targets
|
|
34
40
|
from .targets import get_targets
|
|
35
41
|
|
|
36
42
|
ConfigOption: TypeAlias = Annotated[
|
|
@@ -221,6 +227,82 @@ async def run(
|
|
|
221
227
|
print_summary(console, scheduler)
|
|
222
228
|
|
|
223
229
|
|
|
230
|
+
@cli.command()
|
|
231
|
+
@asyncio_entrypoint
|
|
232
|
+
async def environment(
|
|
233
|
+
selected_environment: Optional[str] = typer.Argument(default=None), # noqa
|
|
234
|
+
config_path: ConfigOption = default_config,
|
|
235
|
+
) -> None:
|
|
236
|
+
console = Console()
|
|
237
|
+
error_console = Console(stderr=True)
|
|
238
|
+
ctx = gather_context(config_path)
|
|
239
|
+
|
|
240
|
+
def print_environment(environment: Environment) -> None:
|
|
241
|
+
console.print(f"{environment.config.id}")
|
|
242
|
+
console.print(f" config.ecosystem: {environment.config.ecosystem}")
|
|
243
|
+
console.print(f" path: {environment._path}")
|
|
244
|
+
console.print(f" lock-files-path: {environment.lock_files_path}")
|
|
245
|
+
|
|
246
|
+
state = environment.state
|
|
247
|
+
if isinstance(state, UninitializedState):
|
|
248
|
+
console.print(" state: uninitialized")
|
|
249
|
+
elif isinstance(state, InitialState):
|
|
250
|
+
console.print(" state: initial")
|
|
251
|
+
console.print(f" state.stage: {state.stage.value}")
|
|
252
|
+
console.print(f" state.ecosystem: {state.ecosystem}")
|
|
253
|
+
elif isinstance(state, SyncedState):
|
|
254
|
+
console.print(" state: synced")
|
|
255
|
+
console.print(f" state.stage: {state.stage.value}")
|
|
256
|
+
console.print(f" state.ecosystem: {state.ecosystem}")
|
|
257
|
+
console.print(f" state.checksum: {state.checksum!r}")
|
|
258
|
+
|
|
259
|
+
else:
|
|
260
|
+
assert_never(state)
|
|
261
|
+
|
|
262
|
+
if selected_environment is None:
|
|
263
|
+
for environment in ctx.environments.values():
|
|
264
|
+
print_environment(environment)
|
|
265
|
+
return
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
environment = ctx.environments[EnvironmentId(selected_environment)]
|
|
269
|
+
except KeyError:
|
|
270
|
+
error_console.print("No such environment")
|
|
271
|
+
raise SystemExit(1) from None
|
|
272
|
+
|
|
273
|
+
print_environment(environment)
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@cli.command()
|
|
277
|
+
@asyncio_entrypoint
|
|
278
|
+
async def select(
|
|
279
|
+
selected_hook: str = typer.Argument(),
|
|
280
|
+
config_path: ConfigOption = default_config,
|
|
281
|
+
select: Selector = typer.Option(default="diff"),
|
|
282
|
+
) -> None:
|
|
283
|
+
"""Show file selection for a given hook."""
|
|
284
|
+
error_console = Console(stderr=True)
|
|
285
|
+
console = Console()
|
|
286
|
+
ctx = gather_context(config_path)
|
|
287
|
+
|
|
288
|
+
try:
|
|
289
|
+
hook = next(hook for hook in ctx.config.hooks if hook.id == selected_hook)
|
|
290
|
+
except StopIteration:
|
|
291
|
+
error_console.print("No such hook.")
|
|
292
|
+
raise SystemExit(1) from None
|
|
293
|
+
|
|
294
|
+
if not hook.parameterize:
|
|
295
|
+
error_console.print(
|
|
296
|
+
"Hook is not parameterized, no target files are passed to it."
|
|
297
|
+
)
|
|
298
|
+
return
|
|
299
|
+
|
|
300
|
+
targets = await get_targets(ctx.config, select)
|
|
301
|
+
target_files = filter_hook_targets(hook, targets)
|
|
302
|
+
for file in target_files:
|
|
303
|
+
console.print(file)
|
|
304
|
+
|
|
305
|
+
|
|
224
306
|
template = """\
|
|
225
307
|
#!/usr/bin/env bash
|
|
226
308
|
set -euo pipefail
|
|
@@ -138,6 +138,7 @@ async def freeze(
|
|
|
138
138
|
raise RuntimeError("Failed freezing dependencies {process.returncode=}")
|
|
139
139
|
|
|
140
140
|
manifest = build_manifest(
|
|
141
|
+
source_ecosystem=config.ecosystem,
|
|
141
142
|
source_dependencies=config.dependencies,
|
|
142
143
|
lock_files=(requirements_txt,),
|
|
143
144
|
lock_files_path=lock_files_path,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import enum
|
|
2
3
|
import os
|
|
4
|
+
import shutil
|
|
3
5
|
import sys
|
|
4
6
|
from collections.abc import Mapping
|
|
5
7
|
from pathlib import Path
|
|
@@ -15,6 +17,7 @@ from ._utils.pydantic import BaseModel
|
|
|
15
17
|
from .backend.base import RunResult
|
|
16
18
|
from .backend.index import load_backend
|
|
17
19
|
from .config import Config
|
|
20
|
+
from .config import EcosystemConfig
|
|
18
21
|
from .config import EnvironmentConfig
|
|
19
22
|
from .config import EnvironmentId
|
|
20
23
|
from .executable_unit import ExecutableUnit
|
|
@@ -27,7 +30,6 @@ class NeedsFreeze(Exception): ...
|
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
class InitialStage(enum.Enum):
|
|
30
|
-
new = "new"
|
|
31
33
|
bootstrapped = "bootstrapped"
|
|
32
34
|
frozen = "frozen"
|
|
33
35
|
|
|
@@ -39,23 +41,30 @@ class SyncedStage(enum.Enum):
|
|
|
39
41
|
class SyncedState(BaseModel):
|
|
40
42
|
stage: SyncedStage
|
|
41
43
|
checksum: str
|
|
44
|
+
ecosystem: EcosystemConfig
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
class InitialState(BaseModel):
|
|
45
48
|
stage: InitialStage
|
|
49
|
+
ecosystem: EcosystemConfig
|
|
46
50
|
|
|
47
51
|
|
|
48
|
-
|
|
52
|
+
class UninitializedState: ...
|
|
49
53
|
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
type State = SyncedState | InitialState | UninitializedState
|
|
56
|
+
|
|
57
|
+
_PersistedState = RootModel[SyncedState | InitialState]
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def read_state(env_dir: Path) -> State:
|
|
52
61
|
state_file = env_dir / "goose-state.json"
|
|
53
62
|
if not state_file.exists():
|
|
54
|
-
return
|
|
63
|
+
return UninitializedState()
|
|
55
64
|
return _PersistedState.model_validate_json(state_file.read_bytes()).root
|
|
56
65
|
|
|
57
66
|
|
|
58
|
-
def write_state(env_dir: Path, state:
|
|
67
|
+
def write_state(env_dir: Path, state: SyncedState | InitialState) -> None:
|
|
59
68
|
state_file = env_dir / "goose-state.json"
|
|
60
69
|
state_file.write_text(state.model_dump_json())
|
|
61
70
|
|
|
@@ -67,7 +76,7 @@ class Environment:
|
|
|
67
76
|
config: EnvironmentConfig,
|
|
68
77
|
path: Path,
|
|
69
78
|
lock_files_path: Path,
|
|
70
|
-
discovered_state:
|
|
79
|
+
discovered_state: State,
|
|
71
80
|
) -> None:
|
|
72
81
|
self.config: Final = config
|
|
73
82
|
self._backend: Final = load_backend(config.ecosystem)
|
|
@@ -80,8 +89,13 @@ class Environment:
|
|
|
80
89
|
def __repr__(self) -> str:
|
|
81
90
|
return f"Environment(id={self.config.id}, ecosystem={self._backend.ecosystem})"
|
|
82
91
|
|
|
92
|
+
def check_should_teardown(self) -> bool:
|
|
93
|
+
if isinstance(self.state, UninitializedState):
|
|
94
|
+
return False
|
|
95
|
+
return self.config.ecosystem != self.state.ecosystem
|
|
96
|
+
|
|
83
97
|
def check_should_bootstrap(self) -> bool:
|
|
84
|
-
if self.state
|
|
98
|
+
if isinstance(self.state, UninitializedState):
|
|
85
99
|
return True
|
|
86
100
|
if not self._path.exists():
|
|
87
101
|
print("State mismatch: environment does not exist")
|
|
@@ -153,12 +167,19 @@ class Environment:
|
|
|
153
167
|
else:
|
|
154
168
|
assert_never(state)
|
|
155
169
|
|
|
170
|
+
async def teardown(self) -> None:
|
|
171
|
+
await asyncio.to_thread(shutil.rmtree, self._path)
|
|
172
|
+
self.state = UninitializedState()
|
|
173
|
+
|
|
156
174
|
async def bootstrap(self) -> None:
|
|
157
175
|
await self._backend.bootstrap(
|
|
158
176
|
env_path=self._path,
|
|
159
177
|
config=self.config,
|
|
160
178
|
)
|
|
161
|
-
self.state = InitialState(
|
|
179
|
+
self.state = InitialState(
|
|
180
|
+
stage=InitialStage.bootstrapped,
|
|
181
|
+
ecosystem=self.config.ecosystem,
|
|
182
|
+
)
|
|
162
183
|
write_state(self._path, self.state)
|
|
163
184
|
|
|
164
185
|
async def freeze(self) -> None:
|
|
@@ -167,7 +188,10 @@ class Environment:
|
|
|
167
188
|
config=self.config,
|
|
168
189
|
lock_files_path=self.lock_files_path,
|
|
169
190
|
)
|
|
170
|
-
self.state = InitialState(
|
|
191
|
+
self.state = InitialState(
|
|
192
|
+
stage=InitialStage.frozen,
|
|
193
|
+
ecosystem=self.config.ecosystem,
|
|
194
|
+
)
|
|
171
195
|
write_state(self._path, self.state)
|
|
172
196
|
os.sync()
|
|
173
197
|
|
|
@@ -181,6 +205,7 @@ class Environment:
|
|
|
181
205
|
self.state = SyncedState(
|
|
182
206
|
stage=SyncedStage.synced,
|
|
183
207
|
checksum=manifest.checksum,
|
|
208
|
+
ecosystem=self.config.ecosystem,
|
|
184
209
|
)
|
|
185
210
|
write_state(self._path, self.state)
|
|
186
211
|
|
|
@@ -228,6 +253,17 @@ async def prepare_environment(
|
|
|
228
253
|
) -> None:
|
|
229
254
|
log_prefix = f"[{environment.config.id}] "
|
|
230
255
|
|
|
256
|
+
if environment.check_should_teardown():
|
|
257
|
+
print(
|
|
258
|
+
f"{log_prefix}Environment needs rebuilding, tearing down ...",
|
|
259
|
+
file=sys.stderr,
|
|
260
|
+
)
|
|
261
|
+
await environment.teardown()
|
|
262
|
+
print(
|
|
263
|
+
f"{log_prefix}Environment deleted.",
|
|
264
|
+
file=sys.stderr,
|
|
265
|
+
)
|
|
266
|
+
|
|
231
267
|
if environment.check_should_bootstrap():
|
|
232
268
|
print(f"{log_prefix}Bootstrapping environment ...", file=sys.stderr)
|
|
233
269
|
await environment.bootstrap()
|
|
@@ -13,6 +13,7 @@ from pydantic import ValidationInfo
|
|
|
13
13
|
from pydantic import field_validator
|
|
14
14
|
|
|
15
15
|
from ._utils.pydantic import BaseModel
|
|
16
|
+
from .config import EcosystemConfig
|
|
16
17
|
from .config import EnvironmentConfig
|
|
17
18
|
|
|
18
19
|
|
|
@@ -35,6 +36,7 @@ C = TypeVar("C", bound=Collection)
|
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
class LockManifest(BaseModel):
|
|
39
|
+
source_ecosystem: EcosystemConfig
|
|
38
40
|
source_dependencies: tuple[str, ...]
|
|
39
41
|
lock_files: tuple[LockFile, ...]
|
|
40
42
|
checksum: str
|
|
@@ -94,6 +96,7 @@ def read_lock_file(lock_files_path: Path, path: Path) -> LockFile:
|
|
|
94
96
|
|
|
95
97
|
|
|
96
98
|
def build_manifest(
|
|
99
|
+
source_ecosystem: EcosystemConfig,
|
|
97
100
|
source_dependencies: Iterable[str],
|
|
98
101
|
lock_files: Iterable[Path],
|
|
99
102
|
lock_files_path: Path,
|
|
@@ -102,6 +105,7 @@ def build_manifest(
|
|
|
102
105
|
sorted(read_lock_file(lock_files_path, path) for path in lock_files)
|
|
103
106
|
)
|
|
104
107
|
return LockManifest(
|
|
108
|
+
source_ecosystem=source_ecosystem,
|
|
105
109
|
source_dependencies=tuple(sorted(source_dependencies)),
|
|
106
110
|
lock_files=lock_file_instances,
|
|
107
111
|
checksum=_get_accumulated_checksum(lock_file_instances),
|
|
@@ -140,6 +144,9 @@ def check_lock_files(
|
|
|
140
144
|
except FileNotFoundError:
|
|
141
145
|
return LockFileState.config_manifest_mismatch
|
|
142
146
|
|
|
147
|
+
if config.ecosystem != manifest.source_ecosystem:
|
|
148
|
+
return LockFileState.config_manifest_mismatch
|
|
149
|
+
|
|
143
150
|
if set(config.dependencies) ^ set(manifest.source_dependencies):
|
|
144
151
|
return LockFileState.config_manifest_mismatch
|
|
145
152
|
|
|
@@ -7,7 +7,6 @@ from collections.abc import Sequence
|
|
|
7
7
|
from itertools import chain
|
|
8
8
|
from typing import Final
|
|
9
9
|
from typing import NamedTuple
|
|
10
|
-
from typing import TypeAlias
|
|
11
10
|
|
|
12
11
|
from .backend.base import RunResult
|
|
13
12
|
from .config import HookConfig
|
|
@@ -26,11 +25,10 @@ class UnitFinished(NamedTuple):
|
|
|
26
25
|
result: RunResult
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
SchedulerEvent
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
HookConfig, Mapping[ExecutableUnit, RunResult | asyncio.Task[RunResult] | None]
|
|
28
|
+
type SchedulerEvent = UnitScheduled | UnitFinished
|
|
29
|
+
type SchedulerState = Mapping[
|
|
30
|
+
HookConfig,
|
|
31
|
+
Mapping[ExecutableUnit, RunResult | asyncio.Task[RunResult] | None],
|
|
34
32
|
]
|
|
35
33
|
|
|
36
34
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"source_dependencies":["prettier"],"lock_files":[{"path":"package-lock.json","checksum":"sha256:c72f3206d345d7285c175a9363dc4d7efbb56729dd02e4828c9356ecfaaad0ca"},{"path":"package.json","checksum":"sha256:c5008cb00d6009f6d901cfe35523169a3deb91979b71fce65d6ac79fdace548b"}],"checksum":"sha256:e130609d6f3cb3681a612f936c5fac5c409019253d18071772d86949766d0bbb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"source_dependencies":["pre-commit-hooks","ruff"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:34f3c46f4be307cedefb0b07cddca78fded07e95b1c002d1fff7b3a6ee7c1b15"}],"checksum":"sha256:f0c588fafbbf1e1c33bde83a8804b3a84c4e6f25bf8b15257a17d926860849c8"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
pre-commit-hooks==4.6.0 \
|
|
2
|
-
--hash=sha256:a69199e6a2d45ec59c1020a81ca1549abddc2afb798276d9a0d951752d6abbfe \
|
|
3
|
-
--hash=sha256:eb1f43ee67869cd41b4c59017fad4a0f9d4d61201d163f2135535aaf65035a2b
|
|
4
|
-
ruamel-yaml==0.18.6 \
|
|
5
|
-
--hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \
|
|
6
|
-
--hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b
|
|
7
|
-
ruamel-yaml-clib==0.2.8 \
|
|
8
|
-
--hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \
|
|
9
|
-
--hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \
|
|
10
|
-
--hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \
|
|
11
|
-
--hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \
|
|
12
|
-
--hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \
|
|
13
|
-
--hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \
|
|
14
|
-
--hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \
|
|
15
|
-
--hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \
|
|
16
|
-
--hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \
|
|
17
|
-
--hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \
|
|
18
|
-
--hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \
|
|
19
|
-
--hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \
|
|
20
|
-
--hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \
|
|
21
|
-
--hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \
|
|
22
|
-
--hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \
|
|
23
|
-
--hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \
|
|
24
|
-
--hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \
|
|
25
|
-
--hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \
|
|
26
|
-
--hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \
|
|
27
|
-
--hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \
|
|
28
|
-
--hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \
|
|
29
|
-
--hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \
|
|
30
|
-
--hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \
|
|
31
|
-
--hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \
|
|
32
|
-
--hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \
|
|
33
|
-
--hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \
|
|
34
|
-
--hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \
|
|
35
|
-
--hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \
|
|
36
|
-
--hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \
|
|
37
|
-
--hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \
|
|
38
|
-
--hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \
|
|
39
|
-
--hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \
|
|
40
|
-
--hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \
|
|
41
|
-
--hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \
|
|
42
|
-
--hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \
|
|
43
|
-
--hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \
|
|
44
|
-
--hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \
|
|
45
|
-
--hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \
|
|
46
|
-
--hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \
|
|
47
|
-
--hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \
|
|
48
|
-
--hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \
|
|
49
|
-
--hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \
|
|
50
|
-
--hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \
|
|
51
|
-
--hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \
|
|
52
|
-
--hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \
|
|
53
|
-
--hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \
|
|
54
|
-
--hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \
|
|
55
|
-
--hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \
|
|
56
|
-
--hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \
|
|
57
|
-
--hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412
|
|
58
|
-
ruff==0.5.6 \
|
|
59
|
-
--hash=sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642 \
|
|
60
|
-
--hash=sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36 \
|
|
61
|
-
--hash=sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670 \
|
|
62
|
-
--hash=sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf \
|
|
63
|
-
--hash=sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd \
|
|
64
|
-
--hash=sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264 \
|
|
65
|
-
--hash=sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a \
|
|
66
|
-
--hash=sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414 \
|
|
67
|
-
--hash=sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd \
|
|
68
|
-
--hash=sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42 \
|
|
69
|
-
--hash=sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6 \
|
|
70
|
-
--hash=sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad \
|
|
71
|
-
--hash=sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a \
|
|
72
|
-
--hash=sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab \
|
|
73
|
-
--hash=sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb \
|
|
74
|
-
--hash=sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d \
|
|
75
|
-
--hash=sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed \
|
|
76
|
-
--hash=sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"source_dependencies":["identify==2.6.0","mypy","pydantic==2.8.2","rich==13.7.1","typer==0.12.3","types-pyyaml==6.0.12.20240724"],"lock_files":[{"path":"requirements.txt","checksum":"sha256:f02806bfbb5243ece11b6c0ad0ac86e0d4994d107765c8c3b12884267eefdabf"}],"checksum":"sha256:10f76a6df6fa9d3a8d3722f84379c993ebd6df4cdb2e92e5ca2d1d38bc27c87f"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|