commitrocket 0.1.1__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.
- commitrocket-0.1.1/.github/ISSUE_TEMPLATE/bug_report.yml +65 -0
- commitrocket-0.1.1/.github/ISSUE_TEMPLATE/config.yml +8 -0
- commitrocket-0.1.1/.github/ISSUE_TEMPLATE/feature_request.yml +30 -0
- commitrocket-0.1.1/.github/PULL_REQUEST_TEMPLATE.md +17 -0
- commitrocket-0.1.1/.github/dependabot.yml +33 -0
- commitrocket-0.1.1/.github/workflows/lint.yml +27 -0
- commitrocket-0.1.1/.github/workflows/release.yml +69 -0
- commitrocket-0.1.1/.github/workflows/tests.yml +45 -0
- commitrocket-0.1.1/.gitignore +223 -0
- commitrocket-0.1.1/.pre-commit-config.yaml +17 -0
- commitrocket-0.1.1/.python-version +1 -0
- commitrocket-0.1.1/CHANGELOG.md +48 -0
- commitrocket-0.1.1/CODE_OF_CONDUCT.md +131 -0
- commitrocket-0.1.1/CONTRIBUTING.md +62 -0
- commitrocket-0.1.1/LICENSE +21 -0
- commitrocket-0.1.1/PKG-INFO +520 -0
- commitrocket-0.1.1/README.md +489 -0
- commitrocket-0.1.1/SECURITY.md +43 -0
- commitrocket-0.1.1/docs/architecture.md +192 -0
- commitrocket-0.1.1/docs/development.md +66 -0
- commitrocket-0.1.1/pyproject.toml +40 -0
- commitrocket-0.1.1/src/commitrocket/__init__.py +3 -0
- commitrocket-0.1.1/src/commitrocket/__main__.py +3 -0
- commitrocket-0.1.1/src/commitrocket/batching.py +184 -0
- commitrocket-0.1.1/src/commitrocket/cli.py +431 -0
- commitrocket-0.1.1/src/commitrocket/config.py +125 -0
- commitrocket-0.1.1/src/commitrocket/doctor.py +202 -0
- commitrocket-0.1.1/src/commitrocket/errors.py +14 -0
- commitrocket-0.1.1/src/commitrocket/eta.py +40 -0
- commitrocket-0.1.1/src/commitrocket/filters.py +72 -0
- commitrocket-0.1.1/src/commitrocket/git.py +228 -0
- commitrocket-0.1.1/src/commitrocket/journal.py +31 -0
- commitrocket-0.1.1/src/commitrocket/lfs.py +212 -0
- commitrocket-0.1.1/src/commitrocket/logs.py +67 -0
- commitrocket-0.1.1/src/commitrocket/notify.py +162 -0
- commitrocket-0.1.1/src/commitrocket/options.py +38 -0
- commitrocket-0.1.1/src/commitrocket/push.py +246 -0
- commitrocket-0.1.1/src/commitrocket/report.py +130 -0
- commitrocket-0.1.1/src/commitrocket/runner.py +680 -0
- commitrocket-0.1.1/src/commitrocket/security.py +50 -0
- commitrocket-0.1.1/src/commitrocket/template.py +37 -0
- commitrocket-0.1.1/src/commitrocket/ui.py +216 -0
- commitrocket-0.1.1/src/commitrocket/verify.py +129 -0
- commitrocket-0.1.1/tests/conftest.py +22 -0
- commitrocket-0.1.1/tests/integration/test_e2e.py +166 -0
- commitrocket-0.1.1/tests/test_batching.py +112 -0
- commitrocket-0.1.1/tests/test_cli.py +39 -0
- commitrocket-0.1.1/tests/test_config.py +126 -0
- commitrocket-0.1.1/tests/test_doctor.py +34 -0
- commitrocket-0.1.1/tests/test_eta.py +44 -0
- commitrocket-0.1.1/tests/test_filters.py +51 -0
- commitrocket-0.1.1/tests/test_git.py +112 -0
- commitrocket-0.1.1/tests/test_journal.py +17 -0
- commitrocket-0.1.1/tests/test_lfs.py +86 -0
- commitrocket-0.1.1/tests/test_logs.py +44 -0
- commitrocket-0.1.1/tests/test_notify.py +118 -0
- commitrocket-0.1.1/tests/test_push_parsing.py +31 -0
- commitrocket-0.1.1/tests/test_report.py +58 -0
- commitrocket-0.1.1/tests/test_retries.py +70 -0
- commitrocket-0.1.1/tests/test_security.py +197 -0
- commitrocket-0.1.1/tests/test_template.py +39 -0
- commitrocket-0.1.1/tests/test_verify.py +84 -0
- commitrocket-0.1.1/uv.lock +338 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something did not work as expected
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for reporting a bug. Please check the [README](https://github.com/coldsofttech/CommitRocket#readme)
|
|
10
|
+
and existing issues first. Do not include secrets, tokens or private file names.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: what-happened
|
|
13
|
+
attributes:
|
|
14
|
+
label: What happened?
|
|
15
|
+
description: What did you expect, and what happened instead?
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: command
|
|
20
|
+
attributes:
|
|
21
|
+
label: Command you ran
|
|
22
|
+
description: The full `commitrocket` command, including options.
|
|
23
|
+
render: shell
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: output
|
|
28
|
+
attributes:
|
|
29
|
+
label: Output or error
|
|
30
|
+
description: Paste the terminal output. The log file path is printed at the end of every run.
|
|
31
|
+
render: text
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: log
|
|
34
|
+
attributes:
|
|
35
|
+
label: Relevant log lines
|
|
36
|
+
description: Re-run with `--level DEBUG` and paste the relevant part of the log file, with any private paths removed.
|
|
37
|
+
render: text
|
|
38
|
+
- type: input
|
|
39
|
+
id: version
|
|
40
|
+
attributes:
|
|
41
|
+
label: CommitRocket version
|
|
42
|
+
description: Output of `commitrocket --version`
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: dropdown
|
|
46
|
+
id: os
|
|
47
|
+
attributes:
|
|
48
|
+
label: Operating system
|
|
49
|
+
options:
|
|
50
|
+
- Windows
|
|
51
|
+
- macOS
|
|
52
|
+
- Linux
|
|
53
|
+
- Other
|
|
54
|
+
validations:
|
|
55
|
+
required: true
|
|
56
|
+
- type: input
|
|
57
|
+
id: tooling
|
|
58
|
+
attributes:
|
|
59
|
+
label: Python, Git and git-lfs versions
|
|
60
|
+
description: For example `Python 3.12, git 2.47, git-lfs 3.6`. `commitrocket doctor` shows these.
|
|
61
|
+
- type: input
|
|
62
|
+
id: host
|
|
63
|
+
attributes:
|
|
64
|
+
label: Git host
|
|
65
|
+
description: For example GitHub, GitLab, Bitbucket, self-hosted.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Report a security vulnerability
|
|
4
|
+
url: https://github.com/coldsofttech/CommitRocket/security/advisories/new
|
|
5
|
+
about: Please report security problems privately, not in a public issue.
|
|
6
|
+
- name: Questions and ideas
|
|
7
|
+
url: https://github.com/coldsofttech/CommitRocket/discussions
|
|
8
|
+
about: Ask a question or float an idea before opening an issue.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest an improvement or a new option
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: problem
|
|
8
|
+
attributes:
|
|
9
|
+
label: What problem are you trying to solve?
|
|
10
|
+
description: Describe the situation, not only the solution.
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: proposal
|
|
15
|
+
attributes:
|
|
16
|
+
label: What would you like to happen?
|
|
17
|
+
description: For example a new option, a change in behavior, or a new output.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: alternatives
|
|
22
|
+
attributes:
|
|
23
|
+
label: Alternatives you considered
|
|
24
|
+
description: Workarounds you use today, or other designs.
|
|
25
|
+
- type: checkboxes
|
|
26
|
+
id: contribute
|
|
27
|
+
attributes:
|
|
28
|
+
label: Contributing
|
|
29
|
+
options:
|
|
30
|
+
- label: I would be willing to open a pull request for this.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## What does this change?
|
|
2
|
+
|
|
3
|
+
<!-- A short summary, and why it is needed. Link the issue it closes, e.g. "Closes #123". -->
|
|
4
|
+
|
|
5
|
+
## How was it tested?
|
|
6
|
+
|
|
7
|
+
<!-- Commands you ran and anything you checked by hand. -->
|
|
8
|
+
|
|
9
|
+
## Checklist
|
|
10
|
+
|
|
11
|
+
- [ ] `uv run ruff check .` passes
|
|
12
|
+
- [ ] `uv run pytest -m "not integration"` passes
|
|
13
|
+
- [ ] `uv run pytest -m integration` passes (if the change touches the run flow, Git handling or LFS)
|
|
14
|
+
- [ ] Tests added or updated for the change
|
|
15
|
+
- [ ] `CHANGELOG.md` has a short entry under `[Unreleased]` (what changed for the reader, in one or two lines)
|
|
16
|
+
- [ ] `README.md` updated if user-facing behavior or options changed; technical details go in `docs/`
|
|
17
|
+
- [ ] No secrets, tokens or private paths in the code, tests or logs
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
updates:
|
|
4
|
+
# Python dependencies and the uv.lock file
|
|
5
|
+
- package-ecosystem: "uv"
|
|
6
|
+
directory: "/"
|
|
7
|
+
schedule:
|
|
8
|
+
interval: "weekly"
|
|
9
|
+
commit-message:
|
|
10
|
+
prefix: "chore(deps)"
|
|
11
|
+
groups:
|
|
12
|
+
python-dependencies:
|
|
13
|
+
patterns: ["*"]
|
|
14
|
+
update-types: ["minor", "patch"]
|
|
15
|
+
|
|
16
|
+
# Actions used in .github/workflows
|
|
17
|
+
- package-ecosystem: "github-actions"
|
|
18
|
+
directory: "/"
|
|
19
|
+
schedule:
|
|
20
|
+
interval: "weekly"
|
|
21
|
+
commit-message:
|
|
22
|
+
prefix: "chore(ci)"
|
|
23
|
+
groups:
|
|
24
|
+
github-actions:
|
|
25
|
+
patterns: ["*"]
|
|
26
|
+
|
|
27
|
+
# Hook versions in .pre-commit-config.yaml
|
|
28
|
+
- package-ecosystem: "pre-commit"
|
|
29
|
+
directory: "/"
|
|
30
|
+
schedule:
|
|
31
|
+
interval: "weekly"
|
|
32
|
+
commit-message:
|
|
33
|
+
prefix: "chore(deps)"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: lint-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
ruff:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v7
|
|
20
|
+
|
|
21
|
+
- uses: astral-sh/setup-uv@v7
|
|
22
|
+
|
|
23
|
+
- name: Install
|
|
24
|
+
run: uv sync --python 3.11
|
|
25
|
+
|
|
26
|
+
- name: Ruff
|
|
27
|
+
run: uv run ruff check .
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Publishes to PyPI when a version tag such as v0.2.0 is pushed.
|
|
4
|
+
# Needs a PYPI_API_TOKEN secret (Settings > Secrets and variables > Actions).
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
tags: ["v*.*.*"]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
check:
|
|
14
|
+
name: Check version and tests
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
|
+
|
|
19
|
+
- uses: astral-sh/setup-uv@v7
|
|
20
|
+
|
|
21
|
+
- name: Tag must match the package version
|
|
22
|
+
shell: bash
|
|
23
|
+
run: |
|
|
24
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
25
|
+
project=$(python3 -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
|
|
26
|
+
module=$(python3 -c "import re; print(re.search(r'__version__ = \"(.+?)\"', open('src/commitrocket/__init__.py').read()).group(1))")
|
|
27
|
+
echo "tag=$tag pyproject=$project __init__=$module"
|
|
28
|
+
if [ "$tag" != "$project" ] || [ "$tag" != "$module" ]; then
|
|
29
|
+
echo "::error::Tag v$tag must match the version in pyproject.toml ($project) and src/commitrocket/__init__.py ($module)."
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
- name: Install
|
|
34
|
+
run: uv sync --python 3.11
|
|
35
|
+
|
|
36
|
+
- name: Lint
|
|
37
|
+
run: uv run ruff check .
|
|
38
|
+
|
|
39
|
+
- name: Unit tests
|
|
40
|
+
run: uv run pytest -m "not integration"
|
|
41
|
+
|
|
42
|
+
- name: Integration tests
|
|
43
|
+
run: uv run pytest -m integration
|
|
44
|
+
|
|
45
|
+
publish:
|
|
46
|
+
name: Build and publish
|
|
47
|
+
needs: check
|
|
48
|
+
runs-on: ubuntu-latest
|
|
49
|
+
environment: pypi
|
|
50
|
+
permissions:
|
|
51
|
+
contents: write
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v7
|
|
54
|
+
|
|
55
|
+
- uses: astral-sh/setup-uv@v7
|
|
56
|
+
|
|
57
|
+
- name: Build
|
|
58
|
+
run: uv build
|
|
59
|
+
|
|
60
|
+
- name: Publish to PyPI
|
|
61
|
+
env:
|
|
62
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
|
63
|
+
run: uv publish
|
|
64
|
+
|
|
65
|
+
- name: GitHub release
|
|
66
|
+
uses: softprops/action-gh-release@v3
|
|
67
|
+
with:
|
|
68
|
+
generate_release_notes: true
|
|
69
|
+
files: dist/*
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: tests-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
test:
|
|
17
|
+
name: ${{ matrix.os }} / Python ${{ matrix.python }}
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
|
+
# Python 3.15 may still be a pre-release; don't let it block the build.
|
|
20
|
+
continue-on-error: ${{ matrix.python == '3.15' }}
|
|
21
|
+
strategy:
|
|
22
|
+
fail-fast: false
|
|
23
|
+
matrix:
|
|
24
|
+
include:
|
|
25
|
+
- { os: ubuntu-latest, python: "3.11" }
|
|
26
|
+
- { os: ubuntu-latest, python: "3.12" }
|
|
27
|
+
- { os: ubuntu-latest, python: "3.13" }
|
|
28
|
+
- { os: ubuntu-latest, python: "3.14" }
|
|
29
|
+
- { os: ubuntu-latest, python: "3.15" }
|
|
30
|
+
- { os: windows-latest, python: "3.11" }
|
|
31
|
+
- { os: macos-latest, python: "3.11" }
|
|
32
|
+
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v7
|
|
35
|
+
|
|
36
|
+
- uses: astral-sh/setup-uv@v7
|
|
37
|
+
|
|
38
|
+
- name: Install
|
|
39
|
+
run: uv sync --python ${{ matrix.python }}
|
|
40
|
+
|
|
41
|
+
- name: Unit tests
|
|
42
|
+
run: uv run pytest -m "not integration" -n auto
|
|
43
|
+
|
|
44
|
+
- name: Integration tests
|
|
45
|
+
run: uv run pytest -m integration -n auto
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
*.lcov
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
cover/
|
|
54
|
+
|
|
55
|
+
# Translations
|
|
56
|
+
*.mo
|
|
57
|
+
*.pot
|
|
58
|
+
|
|
59
|
+
# Django stuff:
|
|
60
|
+
*.log
|
|
61
|
+
local_settings.py
|
|
62
|
+
db.sqlite3
|
|
63
|
+
db.sqlite3-journal
|
|
64
|
+
|
|
65
|
+
# Flask stuff:
|
|
66
|
+
instance/
|
|
67
|
+
.webassets-cache
|
|
68
|
+
|
|
69
|
+
# Scrapy stuff:
|
|
70
|
+
.scrapy
|
|
71
|
+
|
|
72
|
+
# Sphinx documentation
|
|
73
|
+
docs/_build/
|
|
74
|
+
|
|
75
|
+
# PyBuilder
|
|
76
|
+
.pybuilder/
|
|
77
|
+
target/
|
|
78
|
+
|
|
79
|
+
# Jupyter Notebook
|
|
80
|
+
.ipynb_checkpoints
|
|
81
|
+
|
|
82
|
+
# IPython
|
|
83
|
+
profile_default/
|
|
84
|
+
ipython_config.py
|
|
85
|
+
|
|
86
|
+
# pyenv
|
|
87
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
88
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
89
|
+
# .python-version
|
|
90
|
+
|
|
91
|
+
# pipenv
|
|
92
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
93
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
94
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
95
|
+
# install all needed dependencies.
|
|
96
|
+
# Pipfile.lock
|
|
97
|
+
|
|
98
|
+
# uv
|
|
99
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
100
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
101
|
+
# commonly ignored for libraries.
|
|
102
|
+
# uv.lock
|
|
103
|
+
|
|
104
|
+
# poetry
|
|
105
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
106
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
107
|
+
# commonly ignored for libraries.
|
|
108
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
109
|
+
# poetry.lock
|
|
110
|
+
# poetry.toml
|
|
111
|
+
|
|
112
|
+
# pdm
|
|
113
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
114
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
115
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
116
|
+
# pdm.lock
|
|
117
|
+
# pdm.toml
|
|
118
|
+
.pdm-python
|
|
119
|
+
.pdm-build/
|
|
120
|
+
|
|
121
|
+
# pixi
|
|
122
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
123
|
+
# pixi.lock
|
|
124
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
125
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
126
|
+
.pixi/*
|
|
127
|
+
!.pixi/config.toml
|
|
128
|
+
|
|
129
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
130
|
+
__pypackages__/
|
|
131
|
+
|
|
132
|
+
# Celery stuff
|
|
133
|
+
celerybeat-schedule*
|
|
134
|
+
celerybeat.pid
|
|
135
|
+
|
|
136
|
+
# Redis
|
|
137
|
+
*.rdb
|
|
138
|
+
*.aof
|
|
139
|
+
*.pid
|
|
140
|
+
|
|
141
|
+
# RabbitMQ
|
|
142
|
+
mnesia/
|
|
143
|
+
rabbitmq/
|
|
144
|
+
rabbitmq-data/
|
|
145
|
+
|
|
146
|
+
# ActiveMQ
|
|
147
|
+
activemq-data/
|
|
148
|
+
|
|
149
|
+
# SageMath parsed files
|
|
150
|
+
*.sage.py
|
|
151
|
+
|
|
152
|
+
# Environments
|
|
153
|
+
.env
|
|
154
|
+
.envrc
|
|
155
|
+
.venv
|
|
156
|
+
env/
|
|
157
|
+
venv/
|
|
158
|
+
ENV/
|
|
159
|
+
env.bak/
|
|
160
|
+
venv.bak/
|
|
161
|
+
|
|
162
|
+
# Spyder project settings
|
|
163
|
+
.spyderproject
|
|
164
|
+
.spyproject
|
|
165
|
+
|
|
166
|
+
# Rope project settings
|
|
167
|
+
.ropeproject
|
|
168
|
+
|
|
169
|
+
# mkdocs/Zensical documentation
|
|
170
|
+
/site
|
|
171
|
+
|
|
172
|
+
# mypy
|
|
173
|
+
.mypy_cache/
|
|
174
|
+
.dmypy.json
|
|
175
|
+
dmypy.json
|
|
176
|
+
|
|
177
|
+
# Pyre type checker
|
|
178
|
+
.pyre/
|
|
179
|
+
|
|
180
|
+
# pytype static type analyzer
|
|
181
|
+
.pytype/
|
|
182
|
+
|
|
183
|
+
# Cython debug symbols
|
|
184
|
+
cython_debug/
|
|
185
|
+
|
|
186
|
+
# PyCharm
|
|
187
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
188
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
189
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
190
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
191
|
+
# .idea/
|
|
192
|
+
|
|
193
|
+
# Abstra
|
|
194
|
+
# Abstra is an AI-powered process automation framework.
|
|
195
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
196
|
+
# Learn more at https://abstra.io/docs
|
|
197
|
+
.abstra/
|
|
198
|
+
|
|
199
|
+
# Visual Studio Code
|
|
200
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that
|
|
201
|
+
# can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
202
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer, you
|
|
203
|
+
# could uncomment the following to ignore the entire vscode folder
|
|
204
|
+
# .vscode/
|
|
205
|
+
# Temporary file for partial code execution
|
|
206
|
+
tempCodeRunnerFile.py
|
|
207
|
+
|
|
208
|
+
# Ruff stuff:
|
|
209
|
+
.ruff_cache/
|
|
210
|
+
|
|
211
|
+
# PyPI configuration file
|
|
212
|
+
.pypirc
|
|
213
|
+
|
|
214
|
+
# Marimo
|
|
215
|
+
marimo/_static/
|
|
216
|
+
marimo/_lsp/
|
|
217
|
+
__marimo__/
|
|
218
|
+
|
|
219
|
+
# Streamlit
|
|
220
|
+
.streamlit/secrets.toml
|
|
221
|
+
|
|
222
|
+
CLAUDE.md
|
|
223
|
+
.temp/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Install once with: uv run pre-commit install
|
|
2
|
+
# Integration tests (marker "integration") are slower and run only in CI.
|
|
3
|
+
repos:
|
|
4
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
5
|
+
rev: v0.17.2
|
|
6
|
+
hooks:
|
|
7
|
+
- id: ruff
|
|
8
|
+
args: [--fix, --exit-non-zero-on-fix]
|
|
9
|
+
|
|
10
|
+
- repo: local
|
|
11
|
+
hooks:
|
|
12
|
+
- id: pytest
|
|
13
|
+
name: pytest (unit tests)
|
|
14
|
+
entry: uv run pytest -m "not integration" -n auto -q
|
|
15
|
+
language: system
|
|
16
|
+
types: [python]
|
|
17
|
+
pass_filenames: false
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [0.1.1] - 2026-10-24
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Issue and pull request templates, a security policy, a code of conduct and contributing guidelines.
|
|
9
|
+
- Dependabot keeps dependencies, GitHub Actions and pre-commit hooks up to date.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- Batches with thousands of files no longer fail on Windows with "The filename or extension is too long".
|
|
13
|
+
|
|
14
|
+
### Security
|
|
15
|
+
- A config file found inside a repository can no longer turn on `force`, set the remote or branch, write reports or logs, or read pattern files; use `--config` for those.
|
|
16
|
+
- File names with characters like `[` or `*` are treated literally, so they no longer pull other files into a batch.
|
|
17
|
+
- `--remote` and `--branch` values that look like Git options are rejected.
|
|
18
|
+
- Credentials inside remote URLs are hidden in logs, errors and reports, and log and report files are readable only by you.
|
|
19
|
+
- File names with line breaks are refused when creating LFS rules.
|
|
20
|
+
- Square brackets in file names and Git messages no longer break or hide output.
|
|
21
|
+
|
|
22
|
+
## [0.1.0] - 2026-10-24
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- CommitRocket is now an installable package with a `commitrocket` command.
|
|
26
|
+
- Files over 100 MiB are detected up front, and the run stops with a hint to use `--use-lfs` instead of failing at push time.
|
|
27
|
+
- The overall progress bar shows an ETA based on the average speed of the whole run so far, updating live during each upload.
|
|
28
|
+
- `--use-lfs` stores files over 100 MiB with Git LFS during the run, without committing any LFS config, and removes the local setup afterwards.
|
|
29
|
+
- `--report FILE` writes a machine-readable JSON summary of every run.
|
|
30
|
+
- `--notify` and `--notify-webhook` tell you when a run ends, via a desktop notification or a web hook.
|
|
31
|
+
- `commitrocket doctor` checks Git, git-lfs, your settings, the remote and the repository before a run.
|
|
32
|
+
- Settings can be saved in `commitrocket.toml` or `[tool.commitrocket]` in `pyproject.toml`.
|
|
33
|
+
- `--include`, `--exclude`, `--include-from`, `--exclude-from` and `.commitrocketignore` choose which files are handled, using `.gitignore`-style patterns.
|
|
34
|
+
- `--remote` and `--branch` choose where to push, `--no-push` only commits, and `--message-template` customises commit messages.
|
|
35
|
+
- `--lfs-commit-rules` commits LFS rules per file type so clones get the real files.
|
|
36
|
+
- A failed `--use-lfs` run now keeps the LFS hooks until its commits are pushed, so LFS files are never published as bare pointers.
|
|
37
|
+
- `--repo` now defaults to the current folder.
|
|
38
|
+
- A `--log-file` or `--report` inside the repository is no longer committed, which previously made a run commit its own log forever.
|
|
39
|
+
- `--dry-run` shows the planned batches and commit messages without changing anything.
|
|
40
|
+
- Failed pushes are retried with growing waits (`--retries`, default 3); rejections are not retried.
|
|
41
|
+
- Interrupted or failed runs can be resumed by running the same command again.
|
|
42
|
+
- `--post-buffer-mib` raises Git's HTTP buffer for large pushes over HTTPS.
|
|
43
|
+
- Each push is checked against the remote, and LFS files are confirmed as pointers before upload.
|
|
44
|
+
- `--lfs-threshold-mib` sets the size above which `--use-lfs` applies (default 100); `0` sends every file through LFS.
|
|
45
|
+
- Each run writes a log file to the system's standard log folder; `--level` sets the detail and `--log-file` overrides the location.
|
|
46
|
+
- `--batch-type` chooses how files are grouped: `deterministic` (default, unchanged), `sequential` or `soft`.
|
|
47
|
+
- `--compression-threads`, `--lfs-threads` and `--lfs-batch-mib` speed up pushes; the thread settings apply to the repository only and are restored afterwards.
|
|
48
|
+
- Leftover local commits containing files over 100 MiB are detected at startup, with the command to clean them up.
|