Skip to content

Commit 828fe9c

Browse files
committed
chore: initial commit
1 parent 78f8b9a commit 828fe9c

65 files changed

Lines changed: 10065 additions & 0 deletions

Some content is hidden

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

.copier-answers.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Changes here will be overwritten by Copier
2+
_commit: v2.2.6
3+
_src_path: copier-phil65/
4+
author_email: philipptemminghoff@googlemail.com
5+
author_fullname: Philipp Temminghoff
6+
author_username: phil65
7+
copyright_date: '2025'
8+
copyright_holder: Philipp Temminghoff
9+
copyright_holder_email: philipptemminghoff@googlemail.com
10+
libraries_use_pydantic: true
11+
libraries_use_qt: false
12+
project_description: Execution environments
13+
project_name: Exxec
14+
python_minimum_version: '3.13'
15+
python_package_command_line_name: exxec
16+
python_package_distribution_name: exxec
17+
python_package_import_name: exxec
18+
repository_name: exxec
19+
repository_namespace: phil65
20+
repository_provider: github.com
21+

.github/FUNDING.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
github: phil65
2+
custom:
3+
- https://www.paypal.me/phil65

.github/copilot-instructions.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## Code style
2+
3+
You can assume Python 3.13.
4+
Use newest language features if possible
5+
Consider using pattern matching, walrus operators and other new syntax features.
6+
Adhere to pep8.
7+
8+
## Tests
9+
10+
Tests are written using PyTest. Dont put tests into a class.
11+
12+
## DocStrings
13+
14+
DocStrings are written in google-style.
15+
Dont add the types to the "Args" section.
16+
Only add a Return section if a value is returned and the meaning of the returned value
17+
is not obvious.
18+
You can use markdown admonitions with python-markdown syntax if neccessary (!!! info, !!! note, !!! warning).
19+
You can use markdown tables and markdown lists if neccessary.

.github/dependabot.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Set update schedule for GitHub Actions
2+
3+
version: 2
4+
updates:
5+
- package-ecosystem: "github-actions"
6+
directory: "/"
7+
schedule:
8+
# Check for updates to GitHub Actions every week
9+
interval: "weekly"

.github/workflows/build.yml

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: Build
2+
3+
on: [push, pull_request]
4+
5+
env:
6+
FORCE_COLOR: 1
7+
RUFF_OUTPUT_FORMAT: github
8+
9+
jobs:
10+
test:
11+
runs-on: ${{ matrix.os }}
12+
continue-on-error: ${{ matrix.python_version == '3.14' }}
13+
strategy:
14+
matrix:
15+
python_version: ["3.13", "3.14"]
16+
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
17+
steps:
18+
- name: Check out repository
19+
uses: actions/checkout@v6
20+
21+
- name: Set up Python ${{ matrix.python_version }}
22+
uses: actions/setup-python@v6
23+
with:
24+
python-version: ${{ matrix.python_version }}
25+
allow-prereleases: true
26+
27+
- name: Install uv
28+
uses: astral-sh/setup-uv@v7
29+
with:
30+
enable-cache: true
31+
cache-dependency-glob: pyproject.toml
32+
cache-suffix: py${{ matrix.python_version }}
33+
34+
- name: Install dependencies (uv sync)
35+
run: uv sync --all-extras --no-group docs --no-group lint
36+
37+
- name: Check for code issues (ruff check)
38+
uses: astral-sh/ruff-action@v3
39+
40+
- name: Check code format (ruff format)
41+
uses: astral-sh/ruff-action@v3
42+
with:
43+
args: "format --check"
44+
45+
- name: Static type checking (MyPy)
46+
run: uv run --no-group docs mypy src/exxec/
47+
48+
- name: Run tests
49+
run: uv run --no-group docs pytest --cov-report=xml --cov=src/exxec/ --cov-report=term-missing
50+
51+
- name: Upload test results to Codecov
52+
uses: codecov/codecov-action@v5
53+
with:
54+
fail_ci_if_error: false
55+
verbose: true
56+
57+
release:
58+
runs-on: ubuntu-latest
59+
needs: test
60+
if: startsWith(github.ref, 'refs/tags/')
61+
permissions:
62+
# this permission is mandatory for trusted publishing
63+
id-token: write
64+
contents: write
65+
steps:
66+
- name: Check out repository
67+
uses: actions/checkout@v6
68+
69+
- name: Set up Python
70+
uses: actions/setup-python@v6
71+
with:
72+
python-version: "3.13"
73+
74+
- name: Install uv
75+
uses: astral-sh/setup-uv@v7
76+
with:
77+
enable-cache: true
78+
cache-dependency-glob: pyproject.toml
79+
cache-suffix: py${{ matrix.python_version }}
80+
81+
- name: Build package
82+
run: uv build
83+
84+
- name: Publish package distributions to PyPI
85+
uses: pypa/gh-action-pypi-publish@release/v1
86+
87+
- name: Release package on GitHub
88+
uses: ncipollo/release-action@v1
89+
with:
90+
body: ${{ github.event.head_commit.message }}
91+
artifacts: dist/*.whl,dist/*.tar.gz
92+
token: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: Build documentation
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
# Allow one concurrent deployment
15+
concurrency:
16+
group: "pages"
17+
cancel-in-progress: true
18+
19+
# Default to bash
20+
defaults:
21+
run:
22+
shell: bash
23+
24+
jobs:
25+
build:
26+
runs-on: ubuntu-latest
27+
28+
steps:
29+
- uses: actions/checkout@v6
30+
with:
31+
fetch-depth: 0
32+
- name: Set up Python
33+
uses: actions/setup-python@v6
34+
with:
35+
python-version: "3.13"
36+
- name: Install uv
37+
uses: astral-sh/setup-uv@v7
38+
- name: Install dependencies
39+
run: |
40+
uv sync --all-extras
41+
- name: Build
42+
run: uv run mkdocs-mknodes build
43+
- name: Upload artifact
44+
uses: actions/upload-pages-artifact@v3
45+
with:
46+
path: ./site
47+
48+
deploy:
49+
environment:
50+
name: github-pages
51+
url: ${{ steps.deployment.outputs.page_url }}
52+
runs-on: ubuntu-latest
53+
needs: build
54+
steps:
55+
- name: Deploy to GitHub Pages
56+
id: deployment
57+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
# Distribution / packaging
5+
*.sublime-workspace
6+
# Unit test / coverage reports
7+
.coverage
8+
coverage.xml
9+
.cache
10+
.hatch
11+
.pytest_cache/
12+
junit.xml
13+
# Jupyter Notebook
14+
.ipynb_checkpoints
15+
# pyenv
16+
.python-version
17+
# dotenv
18+
.env
19+
# virtualenv
20+
.venv
21+
# mkdocs documentation
22+
/site
23+
# mypy
24+
.mypy_cache/
25+
# .vscode
26+
.vscode/
27+
# OS files
28+
.DS_Store
29+
# uv
30+
uv.lock
31+
# DiskCache cache file
32+
./model_cache

.pre-commit-config.yaml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
default_language_version:
2+
python: python3.13
3+
default_stages: [pre-commit]
4+
repos:
5+
# Phase 1: Fast basic checks (fail early)
6+
- repo: https://github.com/pre-commit/pre-commit-hooks
7+
# https://pre-commit.com/hooks.html
8+
rev: v6.0.0
9+
hooks:
10+
- id: check-added-large-files
11+
- id: check-case-conflict
12+
- id: check-merge-conflict
13+
- id: check-toml
14+
- id: check-json
15+
- id: check-xml
16+
- id: check-yaml
17+
args: [--allow-multiple-documents, --unsafe]
18+
- id: detect-private-key
19+
- id: debug-statements
20+
21+
# Phase 2: Code formatting (auto-fix, system commands)
22+
- repo: local
23+
hooks:
24+
- id: ruff-format
25+
name: ruff-format
26+
entry: uv run ruff format
27+
language: system
28+
types: [python]
29+
require_serial: true
30+
- id: ruff-fix
31+
name: ruff-fix
32+
entry: uv run ruff check --fix
33+
language: system
34+
types: [python]
35+
require_serial: true
36+
- id: tombi-format
37+
name: tombi-format
38+
entry: uv run tombi format pyproject.toml
39+
language: system
40+
files: ^pyproject\.toml$
41+
require_serial: true
42+
43+
# Phase 3: Linting and type checking (system commands)
44+
- repo: local
45+
hooks:
46+
- id: ruff
47+
name: ruff
48+
entry: uv run ruff check
49+
language: system
50+
types: [python]
51+
require_serial: true
52+
- id: mypy
53+
name: mypy
54+
entry: uv run mypy --fixed-format-cache
55+
language: system
56+
types: [python]
57+
require_serial: true
58+
59+
# Phase 4: Tests (most expensive, system command)
60+
- repo: local
61+
hooks:
62+
- id: pytest-check
63+
name: pytest-check
64+
entry: uv run pytest
65+
language: system
66+
types: [python]
67+
pass_filenames: false
68+
always_run: true
69+
require_serial: true
70+
71+
# Phase 5: Commit message validation (final)
72+
- repo: https://github.com/commitizen-tools/commitizen
73+
rev: v4.9.1
74+
hooks:
75+
- id: commitizen
76+
stages: [commit-msg]
77+
additional_dependencies: [typing-extensions]

LICENSE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
MIT License
2+
3+
Copyright (c) 2024, Philipp Temminghoff
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
22+

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Exxec
2+
3+
[![PyPI License](https://img.shields.io/pypi/l/exxec.svg)](https://pypi.org/project/exxec/)
4+
[![Package status](https://img.shields.io/pypi/status/exxec.svg)](https://pypi.org/project/exxec/)
5+
[![Monthly downloads](https://img.shields.io/pypi/dm/exxec.svg)](https://pypi.org/project/exxec/)
6+
[![Distribution format](https://img.shields.io/pypi/format/exxec.svg)](https://pypi.org/project/exxec/)
7+
[![Wheel availability](https://img.shields.io/pypi/wheel/exxec.svg)](https://pypi.org/project/exxec/)
8+
[![Python version](https://img.shields.io/pypi/pyversions/exxec.svg)](https://pypi.org/project/exxec/)
9+
[![Implementation](https://img.shields.io/pypi/implementation/exxec.svg)](https://pypi.org/project/exxec/)
10+
[![Releases](https://img.shields.io/github/downloads/phil65/exxec/total.svg)](https://github.com/phil65/exxec/releases)
11+
[![Github Contributors](https://img.shields.io/github/contributors/phil65/exxec)](https://github.com/phil65/exxec/graphs/contributors)
12+
[![Github Discussions](https://img.shields.io/github/discussions/phil65/exxec)](https://github.com/phil65/exxec/discussions)
13+
[![Github Forks](https://img.shields.io/github/forks/phil65/exxec)](https://github.com/phil65/exxec/forks)
14+
[![Github Issues](https://img.shields.io/github/issues/phil65/exxec)](https://github.com/phil65/exxec/issues)
15+
[![Github Issues](https://img.shields.io/github/issues-pr/phil65/exxec)](https://github.com/phil65/exxec/pulls)
16+
[![Github Watchers](https://img.shields.io/github/watchers/phil65/exxec)](https://github.com/phil65/exxec/watchers)
17+
[![Github Stars](https://img.shields.io/github/stars/phil65/exxec)](https://github.com/phil65/exxec/stars)
18+
[![Github Repository size](https://img.shields.io/github/repo-size/phil65/exxec)](https://github.com/phil65/exxec)
19+
[![Github last commit](https://img.shields.io/github/last-commit/phil65/exxec)](https://github.com/phil65/exxec/commits)
20+
[![Github release date](https://img.shields.io/github/release-date/phil65/exxec)](https://github.com/phil65/exxec/releases)
21+
[![Github language count](https://img.shields.io/github/languages/count/phil65/exxec)](https://github.com/phil65/exxec)
22+
[![Github commits this month](https://img.shields.io/github/commit-activity/m/phil65/exxec)](https://github.com/phil65/exxec)
23+
[![Package status](https://codecov.io/gh/phil65/exxec/branch/main/graph/badge.svg)](https://codecov.io/gh/phil65/exxec/)
24+
[![PyUp](https://pyup.io/repos/github/phil65/exxec/shield.svg)](https://pyup.io/repos/github/phil65/exxec/)
25+
26+
[Read the documentation!](https://phil65.github.io/exxec/)

0 commit comments

Comments
 (0)