Skip to content

Commit 1c6e21d

Browse files
committed
feat: initial release
0 parents  commit 1c6e21d

222 files changed

Lines changed: 21922 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.githooks/pre-commit

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Only run lint if we're not in a merge state.
6+
if [ ! -f "${GIT_DIR}/MERGE_HEAD" ]; then
7+
make lint
8+
fi

.githooks/pre-push

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
make lint test

.github/workflows/ci.yaml

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
branches:
9+
- '*'
10+
11+
jobs:
12+
test:
13+
runs-on: ubuntu-latest
14+
strategy:
15+
fail-fast: true
16+
matrix:
17+
py:
18+
- "3.13"
19+
- "3.12"
20+
steps:
21+
- uses: actions/checkout@v4
22+
with:
23+
fetch-depth: 0
24+
25+
- name: Install uv
26+
uses: astral-sh/setup-uv@v3
27+
with:
28+
enable-cache: true
29+
30+
- name: Set up Python ${{ matrix.py }}
31+
run: uv python install ${{ matrix.py }}
32+
33+
- name: Install tox
34+
run: uv tool install tox --with tox-uv
35+
36+
- name: Setup test suite
37+
run: tox -vv --notest
38+
39+
- name: Run test suite
40+
run: tox --skip-pkg-install
41+
42+
lint:
43+
name: lint (3.13)
44+
runs-on: ubuntu-latest
45+
steps:
46+
- uses: actions/checkout@v4
47+
with:
48+
fetch-depth: 0
49+
50+
- name: Install uv
51+
uses: astral-sh/setup-uv@v3
52+
with:
53+
enable-cache: true
54+
55+
- name: Set up Python 3.13
56+
run: uv python install 3.13
57+
58+
- name: Install tox
59+
run: uv tool install tox --with tox-uv
60+
61+
- name: Setup test suite
62+
run: tox -vv --notest
63+
64+
- name: Run lint
65+
run: tox -e lint
66+
67+
coverage:
68+
name: coverage (3.13)
69+
runs-on: ubuntu-latest
70+
steps:
71+
- uses: actions/checkout@v4
72+
with:
73+
fetch-depth: 0
74+
75+
- name: Install uv
76+
uses: astral-sh/setup-uv@v3
77+
with:
78+
enable-cache: true
79+
80+
- name: Set up Python 3.13
81+
run: uv python install 3.13
82+
83+
- name: Install tox
84+
run: uv tool install tox --with tox-uv
85+
86+
- name: Setup test suite
87+
run: tox -vv --notest
88+
89+
- name: Run coverage
90+
run: tox -e coverage
91+
92+
- uses: actions/upload-artifact@v4
93+
with:
94+
name: coverage_report
95+
path: ./reports
96+
97+
coverage-report:
98+
name: coverage report
99+
needs:
100+
- coverage
101+
runs-on: ubuntu-latest
102+
permissions:
103+
contents: write
104+
pull-requests: write
105+
steps:
106+
- uses: actions/download-artifact@v4
107+
with:
108+
name: coverage_report
109+
path: reports
110+
111+
- name: Produce the coverage report
112+
uses: insightsengineering/coverage-action@v2
113+
with:
114+
path: ./reports/coverage.xml
115+
threshold: 90
116+
fail: false
117+
publish: true
118+
diff: true
119+
diff-branch: main
120+
diff-storage: _xml_coverage_reports
121+
coverage-reduction-failure: false
122+
togglable-report: true

.github/workflows/release.yaml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Semantic Release
2+
3+
on:
4+
workflow_run:
5+
workflows: ["CI"]
6+
branches: [main]
7+
types:
8+
- completed
9+
10+
jobs:
11+
release:
12+
runs-on: ubuntu-latest
13+
if: ${{ github.event.workflow_run.conclusion == 'success' }}
14+
concurrency: release
15+
environment: release
16+
permissions:
17+
id-token: write
18+
contents: write
19+
20+
steps:
21+
- uses: actions/checkout@v6
22+
with:
23+
fetch-depth: 0
24+
25+
- name: Setup | Force release branch to be at workflow sha
26+
run: |
27+
git reset --hard ${{ github.sha }}
28+
29+
- name: Python Semantic Release
30+
id: release
31+
uses: python-semantic-release/python-semantic-release@v10.5.2
32+
with:
33+
github_token: ${{ secrets.GITHUB_TOKEN }}
34+
35+
- name: Publish to PyPI
36+
if: steps.release.outputs.released == 'true'
37+
uses: pypa/gh-action-pypi-publish@release/v1

.gitignore

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
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+
*.manifest
31+
*.spec
32+
33+
# Installer logs
34+
pip-log.txt
35+
pip-delete-this-directory.txt
36+
37+
# Unit test / coverage reports
38+
htmlcov/
39+
.tox/
40+
.nox/
41+
.coverage
42+
.coverage.*
43+
.cache
44+
nosetests.xml
45+
coverage.xml
46+
*.cover
47+
*.py,cover
48+
.hypothesis/
49+
.pytest_cache/
50+
reports/
51+
52+
# Translations
53+
*.mo
54+
*.pot
55+
56+
# Django stuff:
57+
*.log
58+
local_settings.py
59+
db.sqlite3
60+
db.sqlite3-journal
61+
62+
# Flask stuff:
63+
instance/
64+
.webassets-cache
65+
66+
# Scrapy stuff:
67+
.scrapy
68+
69+
# Sphinx documentation
70+
docs/_build/
71+
72+
# PyBuilder
73+
.pybuilder/
74+
target/
75+
76+
# Jupyter Notebook
77+
.ipynb_checkpoints
78+
79+
# IPython
80+
profile_default/
81+
ipython_config.py
82+
83+
# pyenv
84+
.python-version
85+
86+
# pipenv
87+
Pipfile.lock
88+
89+
# poetry
90+
poetry.lock
91+
92+
# pdm
93+
.pdm.toml
94+
.pdm-python
95+
.pdm-build/
96+
97+
# PEP 582
98+
__pypackages__/
99+
100+
# Celery stuff
101+
celerybeat-schedule
102+
celerybeat.pid
103+
104+
# SageMath parsed files
105+
*.sage.py
106+
107+
# Environments
108+
.env
109+
.venv
110+
env/
111+
venv/
112+
ENV/
113+
env.bak/
114+
venv.bak/
115+
116+
# Spyder project settings
117+
.spyderproject
118+
.spyproject
119+
120+
# Rope project settings
121+
.ropeproject
122+
123+
# mkdocs documentation
124+
/site
125+
126+
# mypy
127+
.mypy_cache/
128+
.dmypy.json
129+
dmypy.json
130+
131+
# Pyre type checker
132+
.pyre/
133+
134+
# pytype static type analyzer
135+
.pytype/
136+
137+
# Cython debug symbols
138+
cython_debug/
139+
140+
# IDE
141+
.idea/
142+
.vscode/
143+
*.swp
144+
*.swo
145+
*~
146+
147+
# UV
148+
uv.lock
149+
150+
# OS
151+
.DS_Store
152+
Thumbs.db

.history/.githooks/pre-commit_20251128213641

Whitespace-only changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Only run lint if we're not in a merge state.
6+
if [ ! -f "${GIT_DIR}/MERGE_HEAD" ]; then
7+
make lint
8+
fi

.history/.githooks/pre-push_20251128213642

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
make lint test

.history/.github/workflows/ci_20251128203410.yaml

Whitespace-only changes.

0 commit comments

Comments
 (0)