oe-python-template 0.0.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.
- oe_python_template-0.0.1/.act-env +2 -0
- oe_python_template-0.0.1/.act-secret +1 -0
- oe_python_template-0.0.1/.copier-answers.yml +21 -0
- oe_python_template-0.0.1/.devcontainer/Dockerfile +7 -0
- oe_python_template-0.0.1/.devcontainer/devcontainer.json +50 -0
- oe_python_template-0.0.1/.devcontainer/onCreateCommand +9 -0
- oe_python_template-0.0.1/.devcontainer/postAttachCommand +4 -0
- oe_python_template-0.0.1/.devcontainer/postCreateCommand +4 -0
- oe_python_template-0.0.1/.env.example +1 -0
- oe_python_template-0.0.1/.github/workflows/docker-image-build-publish.yml +74 -0
- oe_python_template-0.0.1/.github/workflows/package-build-publish-release.yml +61 -0
- oe_python_template-0.0.1/.github/workflows/test-and-report.yml +113 -0
- oe_python_template-0.0.1/.gitignore +72 -0
- oe_python_template-0.0.1/.pre-commit-config.yaml +60 -0
- oe_python_template-0.0.1/.python-version +1 -0
- oe_python_template-0.0.1/.readthedocs.yml +36 -0
- oe_python_template-0.0.1/.secrets.baseline +127 -0
- oe_python_template-0.0.1/.vscode/extensions.json +26 -0
- oe_python_template-0.0.1/.vscode/settings.json +75 -0
- oe_python_template-0.0.1/CHANGELOG.md +0 -0
- oe_python_template-0.0.1/CODEOWNERS +3 -0
- oe_python_template-0.0.1/CONTRIBUTING.md +119 -0
- oe_python_template-0.0.1/Dockerfile +39 -0
- oe_python_template-0.0.1/LICENSE +21 -0
- oe_python_template-0.0.1/PKG-INFO +225 -0
- oe_python_template-0.0.1/README.md +166 -0
- oe_python_template-0.0.1/TEMPLATE.md +14 -0
- oe_python_template-0.0.1/VERSION +1 -0
- oe_python_template-0.0.1/_readme_footer.md +15 -0
- oe_python_template-0.0.1/_readme_header.md +29 -0
- oe_python_template-0.0.1/_readme_main.md +155 -0
- oe_python_template-0.0.1/bump +3 -0
- oe_python_template-0.0.1/codecov.yml +11 -0
- oe_python_template-0.0.1/compose.yaml +13 -0
- oe_python_template-0.0.1/copier.yml +230 -0
- oe_python_template-0.0.1/docs/Makefile +20 -0
- oe_python_template-0.0.1/docs/make.bat +35 -0
- oe_python_template-0.0.1/docs/source/_static/.keep +0 -0
- oe_python_template-0.0.1/docs/source/conf.py +124 -0
- oe_python_template-0.0.1/docs/source/contributing.rst +1 -0
- oe_python_template-0.0.1/docs/source/index.rst +36 -0
- oe_python_template-0.0.1/docs/source/latexmkrc +11 -0
- oe_python_template-0.0.1/docs/source/main.rst +2 -0
- oe_python_template-0.0.1/docs/source/reference.rst +5 -0
- oe_python_template-0.0.1/docs/source/release-notes.rst +4 -0
- oe_python_template-0.0.1/examples/__init__.py +1 -0
- oe_python_template-0.0.1/examples/jupyter.ipynb +49 -0
- oe_python_template-0.0.1/examples/script.py +13 -0
- oe_python_template-0.0.1/examples/streamlit.py +30 -0
- oe_python_template-0.0.1/github-action-run +4 -0
- oe_python_template-0.0.1/latexmkrc +11 -0
- oe_python_template-0.0.1/logo.png +0 -0
- oe_python_template-0.0.1/noxfile.py +113 -0
- oe_python_template-0.0.1/pyproject.toml +356 -0
- oe_python_template-0.0.1/sonar-project.properties +12 -0
- oe_python_template-0.0.1/src/oe_python_template/__init__.py +16 -0
- oe_python_template-0.0.1/src/oe_python_template/cli.py +55 -0
- oe_python_template-0.0.1/src/oe_python_template/constants.py +10 -0
- oe_python_template-0.0.1/src/oe_python_template/service.py +25 -0
- oe_python_template-0.0.1/template/.act-env.jinja +2 -0
- oe_python_template-0.0.1/template/.act-secret.jinja +1 -0
- oe_python_template-0.0.1/template/.devcontainer/Dockerfile.jinja +7 -0
- oe_python_template-0.0.1/template/.devcontainer/devcontainer.json.jinja +51 -0
- oe_python_template-0.0.1/template/.devcontainer/onCreateCommand.jinja +9 -0
- oe_python_template-0.0.1/template/.devcontainer/postAttachCommand.jinja +4 -0
- oe_python_template-0.0.1/template/.devcontainer/postCreateCommand.jinja +4 -0
- oe_python_template-0.0.1/template/.env.example.jinja +1 -0
- oe_python_template-0.0.1/template/.github/workflows/docker-image-build-publish.yml.jinja +74 -0
- oe_python_template-0.0.1/template/.github/workflows/package-build-publish-release.yml.jinja +61 -0
- oe_python_template-0.0.1/template/.github/workflows/test-and-report.yml.jinja +113 -0
- oe_python_template-0.0.1/template/.gitignore.jinja +72 -0
- oe_python_template-0.0.1/template/.pre-commit-config.yaml.jinja +60 -0
- oe_python_template-0.0.1/template/.python-version +1 -0
- oe_python_template-0.0.1/template/.readthedocs.yml.jinja +36 -0
- oe_python_template-0.0.1/template/.vscode/extensions.json +27 -0
- oe_python_template-0.0.1/template/.vscode/settings.json +75 -0
- oe_python_template-0.0.1/template/CHANGELOG.md +0 -0
- oe_python_template-0.0.1/template/CODEOWNERS.jinja +3 -0
- oe_python_template-0.0.1/template/CONTRIBUTING.md.jinja +119 -0
- oe_python_template-0.0.1/template/Dockerfile.jinja +39 -0
- oe_python_template-0.0.1/template/LICENSE.jinja +21 -0
- oe_python_template-0.0.1/template/VERSION +1 -0
- oe_python_template-0.0.1/template/_readme_footer.md.jinja +15 -0
- oe_python_template-0.0.1/template/_readme_header.md.jinja +29 -0
- oe_python_template-0.0.1/template/_readme_main.md.jinja +155 -0
- oe_python_template-0.0.1/template/bump.jinja +3 -0
- oe_python_template-0.0.1/template/codecov.yml.jinja +11 -0
- oe_python_template-0.0.1/template/compose.yaml.jinja +13 -0
- oe_python_template-0.0.1/template/docs/Makefile.jinja +20 -0
- oe_python_template-0.0.1/template/docs/make.bat.jinja +35 -0
- oe_python_template-0.0.1/template/docs/source/_static/.keep +0 -0
- oe_python_template-0.0.1/template/docs/source/conf.py.jinja +124 -0
- oe_python_template-0.0.1/template/docs/source/contributing.rst.jinja +1 -0
- oe_python_template-0.0.1/template/docs/source/index.rst.jinja +36 -0
- oe_python_template-0.0.1/template/docs/source/latexmkrc.jinja +11 -0
- oe_python_template-0.0.1/template/docs/source/main.rst.jinja +2 -0
- oe_python_template-0.0.1/template/docs/source/reference.rst.jinja +5 -0
- oe_python_template-0.0.1/template/docs/source/release-notes.rst.jinja +4 -0
- oe_python_template-0.0.1/template/examples/__init__.py.jinja +1 -0
- oe_python_template-0.0.1/template/examples/jupyter.ipynb.jinja +45 -0
- oe_python_template-0.0.1/template/examples/script.py.jinja +13 -0
- oe_python_template-0.0.1/template/examples/streamlit.py.jinja +29 -0
- oe_python_template-0.0.1/template/examples/streamlit.webm +0 -0
- oe_python_template-0.0.1/template/github-action-run.jinja +4 -0
- oe_python_template-0.0.1/template/latexmkrc.jinja +11 -0
- oe_python_template-0.0.1/template/logo.png +0 -0
- oe_python_template-0.0.1/template/noxfile.py.jinja +113 -0
- oe_python_template-0.0.1/template/pyproject.toml.jinja +356 -0
- oe_python_template-0.0.1/template/sonar-project.properties.jinja +12 -0
- oe_python_template-0.0.1/template/src/{{ project_name_snake_case }}/__init__.py.jinja +16 -0
- oe_python_template-0.0.1/template/src/{{ project_name_snake_case }}/cli.py.jinja +55 -0
- oe_python_template-0.0.1/template/src/{{ project_name_snake_case }}/constants.py.jinja +10 -0
- oe_python_template-0.0.1/template/src/{{ project_name_snake_case }}/service.py.jinja +23 -0
- oe_python_template-0.0.1/template/tests/__init__.py.jinja +1 -0
- oe_python_template-0.0.1/template/tests/cli_test.py.jinja +41 -0
- oe_python_template-0.0.1/template/tests/fixtures/.keep +0 -0
- oe_python_template-0.0.1/template/{{_copier_conf.answers_file}}.jinja +1 -0
- oe_python_template-0.0.1/tests/__init__.py +1 -0
- oe_python_template-0.0.1/tests/cli_test.py +41 -0
- oe_python_template-0.0.1/tests/fixtures/.keep +0 -0
- oe_python_template-0.0.1/uv.lock +3939 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ACTIONS_RUNTIME_TOKEN=TOKEN
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
_commit: 4004dcc
|
|
2
|
+
_src_path: .
|
|
3
|
+
author_email: helmuthva@gmail.com
|
|
4
|
+
author_github_username: helmut-hoffer-von-ankershoffen
|
|
5
|
+
author_name: Helmut Hoffer von Ankershoffen
|
|
6
|
+
docker_io_image_name: oe-python-template
|
|
7
|
+
docker_io_owner: helmuthva
|
|
8
|
+
github_repository_name: oe-python-template
|
|
9
|
+
github_repository_owner: helmut-hoffer-von-ankershoffen
|
|
10
|
+
github_repository_url_https: https://github.com/helmut-hoffer-von-ankershoffen/oe-python-template
|
|
11
|
+
github_repository_url_ssh: git@github.com:helmut-hoffer-von-ankershoffen/oe-python-template.git
|
|
12
|
+
org_email: helmuthva@gmail.com
|
|
13
|
+
org_name: Helmut Hoffer von Ankershoffen
|
|
14
|
+
project_description: Copier template to scaffold Python projects compliant with best
|
|
15
|
+
practices and modern tooling.
|
|
16
|
+
project_icon: 🧠
|
|
17
|
+
project_name: OE Python Template
|
|
18
|
+
pypi_distribution_name: oe-python-template
|
|
19
|
+
readthedocs_project_key: oe-python-template
|
|
20
|
+
sonarqube_key: helmut-hoffer-von-ankershoffen_oe-python-template
|
|
21
|
+
streamlit_project_key: oe-python-template
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
FROM mcr.microsoft.com/devcontainers/python:1-3.11-bullseye
|
|
2
|
+
|
|
3
|
+
RUN curl --proto '=https' --tlsv1.2 -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
|
|
4
|
+
apt update -y && \
|
|
5
|
+
apt install -y --no-install-recommends curl gnupg2 jq less nano nodejs procps psmisc && \
|
|
6
|
+
apt-get clean && \
|
|
7
|
+
rm -rf /var/lib/apt/lists/*
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"build": {
|
|
3
|
+
"dockerfile": "Dockerfile"
|
|
4
|
+
},
|
|
5
|
+
"features": {
|
|
6
|
+
"ghcr.io/devcontainers/features/github-cli:1": {},
|
|
7
|
+
"ghcr.io/va-h/devcontainers-features/uv:1": {},
|
|
8
|
+
"ghcr.io/dhoeric/features/act:1": {},
|
|
9
|
+
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
|
|
10
|
+
"ghcr.io/devcontainers/features/java:1": {},
|
|
11
|
+
"ghcr.io/devcontainers/features/node:1": {}
|
|
12
|
+
},
|
|
13
|
+
"onCreateCommand": ".devcontainer/onCreateCommand",
|
|
14
|
+
"postCreateCommand": ".devcontainer/postCreateCommand",
|
|
15
|
+
"postAttachCommand": ".devcontainer/postAttachCommand",
|
|
16
|
+
"customizations": {
|
|
17
|
+
// Configure properties specific to VS Code.
|
|
18
|
+
"vscode": {
|
|
19
|
+
// Add the IDs of extensions you want installed when the container is created.
|
|
20
|
+
"extensions": [
|
|
21
|
+
"charliermarsh.ruff",
|
|
22
|
+
"codecov.codecov",
|
|
23
|
+
"donjayamanne.python-environment-manager",
|
|
24
|
+
"elagil.pre-commit-helper",
|
|
25
|
+
"fill-labs.dependi",
|
|
26
|
+
"github.vscode-github-actions",
|
|
27
|
+
"github.copilot",
|
|
28
|
+
"github.copilot-chat",
|
|
29
|
+
"gruntfuggly.todo-tree",
|
|
30
|
+
"kaih2o.python-resource-monitor",
|
|
31
|
+
"mikestead.dotenv",
|
|
32
|
+
"ms-azuretools.vscode-docker",
|
|
33
|
+
"ms-python.debugpy",
|
|
34
|
+
"ms-python.python",
|
|
35
|
+
"ms-python.vscode-pylance",
|
|
36
|
+
"ms-toolsai.jupyter",
|
|
37
|
+
"oderwat.indent-rainbow",
|
|
38
|
+
"samuelcolvin.jinjahtml",
|
|
39
|
+
"sonarsource.sonarlint-vscode",
|
|
40
|
+
"tamasfe.even-better-toml",
|
|
41
|
+
"tomoki1207.pdf",
|
|
42
|
+
"wayou.vscode-todo-highlight"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"mounts": [
|
|
47
|
+
"source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached"
|
|
48
|
+
],
|
|
49
|
+
"forwardPorts": []
|
|
50
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
THE_KEY=A value
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: "Build and publish Docker image to docker.io and ghcr.io"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
REGISTRY: docker.io
|
|
10
|
+
IMAGE_NAME: helmuthva/oe-python-template
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
docker_image_build_publish:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
packages: write
|
|
18
|
+
contents: read
|
|
19
|
+
attestations: write
|
|
20
|
+
id-token: write
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Set up QEMU
|
|
26
|
+
uses: docker/setup-qemu-action@v3
|
|
27
|
+
|
|
28
|
+
- name: Set up Docker Buildx
|
|
29
|
+
uses: docker/setup-buildx-action@v3
|
|
30
|
+
|
|
31
|
+
- name: Log in to Docker Hub
|
|
32
|
+
uses: docker/login-action@v3
|
|
33
|
+
with:
|
|
34
|
+
username: ${{ secrets.DOCKER_USERNAME }}
|
|
35
|
+
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
36
|
+
|
|
37
|
+
- name: Log in to GitHub container registry
|
|
38
|
+
uses: docker/login-action@v3
|
|
39
|
+
with:
|
|
40
|
+
registry: ghcr.io
|
|
41
|
+
username: ${{ github.actor }}
|
|
42
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
43
|
+
- name: Extract metadata (tags, labels) for Docker
|
|
44
|
+
id: meta
|
|
45
|
+
uses: docker/metadata-action@v5
|
|
46
|
+
with:
|
|
47
|
+
images: |
|
|
48
|
+
${{ env.IMAGE_NAME }}
|
|
49
|
+
ghcr.io/${{ github.repository }}
|
|
50
|
+
tags: |
|
|
51
|
+
# set latest tag for releases
|
|
52
|
+
type=raw,value=latest
|
|
53
|
+
# set semver tags from git tags (v1.2.3 -> 1.2.3, 1.2, 1)
|
|
54
|
+
type=semver,pattern={{version}}
|
|
55
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
56
|
+
type=semver,pattern={{major}}
|
|
57
|
+
|
|
58
|
+
- name: Build and push Docker image
|
|
59
|
+
id: push
|
|
60
|
+
uses: docker/build-push-action@v6
|
|
61
|
+
with:
|
|
62
|
+
context: .
|
|
63
|
+
file: ./Dockerfile
|
|
64
|
+
platforms: linux/amd64,linuxpy/arm64
|
|
65
|
+
push: true
|
|
66
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
67
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
68
|
+
|
|
69
|
+
- name: Generate artifact attestation
|
|
70
|
+
uses: actions/attest-build-provenance@v2
|
|
71
|
+
with:
|
|
72
|
+
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
73
|
+
subject-digest: ${{ steps.push.outputs.digest }}
|
|
74
|
+
push-to-registry: true
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: "Build package, publish to PyPI, create GitHub release"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
packages: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
package_build_publish_release:
|
|
14
|
+
environment: release
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0
|
|
22
|
+
|
|
23
|
+
- name: Generate release notes
|
|
24
|
+
uses: orhun/git-cliff-action@v4
|
|
25
|
+
id: git-cliff
|
|
26
|
+
with:
|
|
27
|
+
config: pyproject.toml
|
|
28
|
+
args: --verbose
|
|
29
|
+
env:
|
|
30
|
+
OUTPUT: RELEASE_NOTES.md
|
|
31
|
+
GITHUB_REPO: ${{ github.repository }}
|
|
32
|
+
|
|
33
|
+
- name: Print the release notes
|
|
34
|
+
run: cat "${{ steps.git-cliff.outputs.changelog }}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
- name: Install uv
|
|
38
|
+
uses: astral-sh/setup-uv@v5
|
|
39
|
+
with:
|
|
40
|
+
version: "0.5.9"
|
|
41
|
+
cache-dependency-glob: uv.lock
|
|
42
|
+
enable-cache: true
|
|
43
|
+
|
|
44
|
+
- name: Build package into dist/
|
|
45
|
+
run: uv build
|
|
46
|
+
|
|
47
|
+
- name: Publish package to PyPI
|
|
48
|
+
run: uv publish -t ${{ secrets.UV_PUBLISH_TOKEN }}
|
|
49
|
+
|
|
50
|
+
- name: Create GitHub release
|
|
51
|
+
env:
|
|
52
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
53
|
+
run: |
|
|
54
|
+
gh release create ${{ github.ref_name }} ./dist/* --notes-file ${{ steps.git-cliff.outputs.changelog }}
|
|
55
|
+
|
|
56
|
+
- name: Allow other workflows to trigger on release
|
|
57
|
+
env:
|
|
58
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
59
|
+
run: |
|
|
60
|
+
gh api repos/helmut-hoffer-von-ankershoffen/oe-python-template/dispatches \
|
|
61
|
+
-f event_type=release_created_programatically
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
name: "CI"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- "**"
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: |
|
|
21
|
+
sudo apt-get update && sudo apt-get install -y libcairo2
|
|
22
|
+
|
|
23
|
+
- name: Install dev tools
|
|
24
|
+
run: |
|
|
25
|
+
sudo apt-get install -y curl jq xsltproc gnupg2 libcairo2
|
|
26
|
+
|
|
27
|
+
- name: Install uv (python package manager)
|
|
28
|
+
uses: astral-sh/setup-uv@v5
|
|
29
|
+
with:
|
|
30
|
+
version: "0.5.9"
|
|
31
|
+
enable-cache: true
|
|
32
|
+
cache-dependency-glob: uv.lock
|
|
33
|
+
|
|
34
|
+
- uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: 18
|
|
37
|
+
- run: npm install @modelcontextprotocol/inspector@0.3.0
|
|
38
|
+
|
|
39
|
+
- name: Install Python, venv and dependencies
|
|
40
|
+
run: |
|
|
41
|
+
uv sync --all-extras --frozen --link-mode=copy
|
|
42
|
+
|
|
43
|
+
- name: Release version check
|
|
44
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
45
|
+
run: |
|
|
46
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
47
|
+
TOML_VERSION=$(uv run python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
|
|
48
|
+
|
|
49
|
+
if [ "$TAG_VERSION" != "$TOML_VERSION" ]; then
|
|
50
|
+
echo "Release version mismatch: Tag $TAG_VERSION != pyproject.toml $TOML_VERSION"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
- name: Print development version info
|
|
55
|
+
if: s${{ !startsWith(github.ref, 'refs/tags/v') }}
|
|
56
|
+
run: |
|
|
57
|
+
TOML_VERSION=$(uv run python -c "import tomli; print(tomli.load(open('pyproject.toml', 'rb'))['project']['version'])")
|
|
58
|
+
echo "Development build - Current version in pyproject.toml: $TOML_VERSION"
|
|
59
|
+
|
|
60
|
+
- name: Create .env file
|
|
61
|
+
uses: SpicyPizza/create-envfile@v2.0
|
|
62
|
+
with:
|
|
63
|
+
envkey_ENV_KEY: "ENV_VALUE"
|
|
64
|
+
fail_on_empty: true
|
|
65
|
+
|
|
66
|
+
- name: Validate installation
|
|
67
|
+
run: |
|
|
68
|
+
OUTPUT=$(uv run oe-python-template --help)
|
|
69
|
+
if [[ "$OUTPUT" != *"built with love in Berlin"* ]]; then
|
|
70
|
+
echo "Output does not contain 'built with love in Berlin'"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
- name: Smoke tests
|
|
75
|
+
run: |
|
|
76
|
+
uv run oe-python-template hello-world
|
|
77
|
+
|
|
78
|
+
- name: Run unit tests, measure coverage, lint, and check vulnerabilities
|
|
79
|
+
run: |
|
|
80
|
+
uv run nox
|
|
81
|
+
|
|
82
|
+
- name: Upload test results
|
|
83
|
+
uses: actions/upload-artifact@v4
|
|
84
|
+
if: ${{ always() && (env.GITLAB_WORKFLOW_RUNTIME != 'ACT') }}
|
|
85
|
+
with:
|
|
86
|
+
name: test-results
|
|
87
|
+
path: |
|
|
88
|
+
junit.xml
|
|
89
|
+
coverage.xml
|
|
90
|
+
coverage_html/
|
|
91
|
+
vulnerabilities.json
|
|
92
|
+
licenses.json
|
|
93
|
+
licenses-inverted.json
|
|
94
|
+
retention-days: 30
|
|
95
|
+
|
|
96
|
+
- name: Upload coverage reports to Codecov
|
|
97
|
+
uses: codecov/codecov-action@v5
|
|
98
|
+
if: ${{ !cancelled() && (env.GITLAB_WORKFLOW_RUNTIME != 'ACT') }}
|
|
99
|
+
with:
|
|
100
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
101
|
+
slug: helmut-hoffer-von-ankershoffen/oe-python-template
|
|
102
|
+
|
|
103
|
+
- name: Upload test results to Codecov
|
|
104
|
+
if: ${{ !cancelled() && (env.GITLAB_WORKFLOW_RUNTIME != 'ACT') }}
|
|
105
|
+
uses: codecov/test-results-action@v1
|
|
106
|
+
with:
|
|
107
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
108
|
+
- name: SonarQube Scan
|
|
109
|
+
if: ${{ !cancelled() && (env.GITLAB_WORKFLOW_RUNTIME != 'ACT') }}
|
|
110
|
+
uses: SonarSource/sonarqube-scan-action@v4
|
|
111
|
+
env:
|
|
112
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
113
|
+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# .gitignore of project OE Python Template
|
|
2
|
+
|
|
3
|
+
# Environment
|
|
4
|
+
.env
|
|
5
|
+
.env.backup
|
|
6
|
+
.env.bak
|
|
7
|
+
ENV/
|
|
8
|
+
env/
|
|
9
|
+
.envrc
|
|
10
|
+
|
|
11
|
+
# Python virtual environment
|
|
12
|
+
venv/
|
|
13
|
+
.venv/
|
|
14
|
+
|
|
15
|
+
# Python temps
|
|
16
|
+
*.py[cdo]
|
|
17
|
+
__pycache__/
|
|
18
|
+
*.so
|
|
19
|
+
*.egg
|
|
20
|
+
*.egg-info/
|
|
21
|
+
*.log
|
|
22
|
+
dist/
|
|
23
|
+
build/
|
|
24
|
+
eggs/
|
|
25
|
+
parts/
|
|
26
|
+
sdist/
|
|
27
|
+
develop-eggs/
|
|
28
|
+
.installed.cfg
|
|
29
|
+
.Python
|
|
30
|
+
.pytest_cache/
|
|
31
|
+
.ruff_cache/
|
|
32
|
+
.nox
|
|
33
|
+
.dmypy.json
|
|
34
|
+
.mypy_cache/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Build Artefacts
|
|
38
|
+
junit.xml
|
|
39
|
+
.coverage*
|
|
40
|
+
coverage.xml
|
|
41
|
+
coverage_html/
|
|
42
|
+
vulnerabilities.json
|
|
43
|
+
licenses.json
|
|
44
|
+
licenses-inverted.json
|
|
45
|
+
sbom.json
|
|
46
|
+
|
|
47
|
+
# IDE
|
|
48
|
+
.idea/
|
|
49
|
+
*.swp
|
|
50
|
+
*.swo
|
|
51
|
+
|
|
52
|
+
# macOS
|
|
53
|
+
.DS_Store
|
|
54
|
+
|
|
55
|
+
# Other OS
|
|
56
|
+
lib/
|
|
57
|
+
lib64/
|
|
58
|
+
|
|
59
|
+
# Data
|
|
60
|
+
var/
|
|
61
|
+
tmp/
|
|
62
|
+
|
|
63
|
+
# Node temps
|
|
64
|
+
node_modules/
|
|
65
|
+
|
|
66
|
+
# AI workflow
|
|
67
|
+
.fixme
|
|
68
|
+
|
|
69
|
+
# Copier
|
|
70
|
+
*.rej
|
|
71
|
+
|
|
72
|
+
# Application specific
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# .pre-commit-config.yaml
|
|
2
|
+
default_install_hook_types:
|
|
3
|
+
- pre-commit
|
|
4
|
+
- post-checkout
|
|
5
|
+
- post-merge
|
|
6
|
+
- post-rewrite
|
|
7
|
+
fail_fast: true
|
|
8
|
+
repos:
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v5.0.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: check-added-large-files
|
|
13
|
+
- id: check-case-conflict
|
|
14
|
+
- id: check-illegal-windows-names
|
|
15
|
+
- id: check-merge-conflict
|
|
16
|
+
args: ["--assume-in-merge"]
|
|
17
|
+
- id: check-shebang-scripts-are-executable
|
|
18
|
+
- id: check-symlinks
|
|
19
|
+
- id: check-toml
|
|
20
|
+
- id: check-xml
|
|
21
|
+
- id: check-yaml
|
|
22
|
+
exclude: |
|
|
23
|
+
(?x)^(
|
|
24
|
+
test.*|
|
|
25
|
+
mkdocs.yml
|
|
26
|
+
)$
|
|
27
|
+
args: [--allow-multiple-documents]
|
|
28
|
+
- id: debug-statements
|
|
29
|
+
- id: destroyed-symlinks
|
|
30
|
+
- id: detect-private-key
|
|
31
|
+
- id: end-of-file-fixer
|
|
32
|
+
exclude: "^tests/fixtures/|.json$"
|
|
33
|
+
- id: fix-byte-order-marker
|
|
34
|
+
- id: fix-encoding-pragma
|
|
35
|
+
args: ["--remove"]
|
|
36
|
+
- id: mixed-line-ending
|
|
37
|
+
- id: name-tests-test
|
|
38
|
+
- id: requirements-txt-fixer
|
|
39
|
+
- id: trailing-whitespace
|
|
40
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
41
|
+
rev: v1.5.0
|
|
42
|
+
hooks:
|
|
43
|
+
- id: detect-secrets
|
|
44
|
+
args: ['--baseline', '.secrets.baseline']
|
|
45
|
+
additional_dependencies: ["gibberish-detector"]
|
|
46
|
+
exclude: package.lock.json
|
|
47
|
+
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
48
|
+
# uv version.
|
|
49
|
+
rev: 0.5.8
|
|
50
|
+
hooks:
|
|
51
|
+
- id: uv-lock
|
|
52
|
+
- repo: local
|
|
53
|
+
hooks:
|
|
54
|
+
- id: nox
|
|
55
|
+
name: nox
|
|
56
|
+
entry: uv run nox
|
|
57
|
+
language: system
|
|
58
|
+
pass_filenames: false
|
|
59
|
+
always_run: true
|
|
60
|
+
verbose: true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Read the Docs configuration file for OE Python Template
|
|
2
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
3
|
+
|
|
4
|
+
# Required
|
|
5
|
+
version: 2
|
|
6
|
+
|
|
7
|
+
# Don't publish the docs if there are any warnings, as they might be relevant
|
|
8
|
+
# https://github.com/readthedocs/readthedocs.org/issues/6837#issuecomment-607229633
|
|
9
|
+
sphinx:
|
|
10
|
+
builder: html
|
|
11
|
+
configuration: docs/source/conf.py
|
|
12
|
+
fail_on_warning: true
|
|
13
|
+
|
|
14
|
+
# Formats of the documentation to be built
|
|
15
|
+
formats:
|
|
16
|
+
- htmlzip
|
|
17
|
+
- pdf
|
|
18
|
+
|
|
19
|
+
# Build configuration
|
|
20
|
+
# We use Ubuntu 22.04 with Python 3.12 and set up uv as package manager
|
|
21
|
+
# for faster and more reliable dependency installation
|
|
22
|
+
build:
|
|
23
|
+
os: ubuntu-22.04
|
|
24
|
+
tools:
|
|
25
|
+
python: "3.12"
|
|
26
|
+
apt_packages:
|
|
27
|
+
- imagemagick
|
|
28
|
+
jobs:
|
|
29
|
+
install:
|
|
30
|
+
- asdf plugin add uv
|
|
31
|
+
- asdf install uv latest
|
|
32
|
+
- asdf global uv latest
|
|
33
|
+
- echo $READTHEDOCS_VIRTUALENV_PATH
|
|
34
|
+
- uv venv $READTHEDOCS_VIRTUALENV_PATH
|
|
35
|
+
- . ${READTHEDOCS_VIRTUALENV_PATH}/bin/activate
|
|
36
|
+
- UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --frozen --all-extras
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.5.0",
|
|
3
|
+
"plugins_used": [
|
|
4
|
+
{
|
|
5
|
+
"name": "ArtifactoryDetector"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"name": "AWSKeyDetector"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "AzureStorageKeyDetector"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Base64HighEntropyString",
|
|
15
|
+
"limit": 4.5
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "BasicAuthDetector"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "CloudantDetector"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "DiscordBotTokenDetector"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "GitHubTokenDetector"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "GitLabTokenDetector"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "HexHighEntropyString",
|
|
34
|
+
"limit": 3.0
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "IbmCloudIamDetector"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "IbmCosHmacDetector"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "IPPublicDetector"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "JwtTokenDetector"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "KeywordDetector",
|
|
50
|
+
"keyword_exclude": ""
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "MailchimpDetector"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "NpmDetector"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "OpenAIDetector"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "PrivateKeyDetector"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "PypiTokenDetector"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "SendGridDetector"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "SlackDetector"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "SoftlayerDetector"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "SquareOAuthDetector"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "StripeDetector"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "TelegramBotTokenDetector"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "TwilioKeyDetector"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"filters_used": [
|
|
90
|
+
{
|
|
91
|
+
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
|
|
95
|
+
"min_level": 2
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"path": "detect_secrets.filters.heuristic.is_lock_file"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "detect_secrets.filters.heuristic.is_sequential_string"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "detect_secrets.filters.heuristic.is_swagger_file"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"path": "detect_secrets.filters.heuristic.is_templated_secret"
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"results": {},
|
|
126
|
+
"generated_at": "2025-03-02T09:27:40Z"
|
|
127
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recommendations": [
|
|
3
|
+
"charliermarsh.ruff",
|
|
4
|
+
"codecov.codecov",
|
|
5
|
+
"donjayamanne.python-environment-manager",
|
|
6
|
+
"elagil.pre-commit-helper",
|
|
7
|
+
"fill-labs.dependi",
|
|
8
|
+
"github.vscode-github-actions",
|
|
9
|
+
"github.copilot",
|
|
10
|
+
"github.copilot-chat",
|
|
11
|
+
"gruntfuggly.todo-tree",
|
|
12
|
+
"kaih2o.python-resource-monitor",
|
|
13
|
+
"mikestead.dotenv",
|
|
14
|
+
"ms-azuretools.vscode-docker",
|
|
15
|
+
"ms-python.debugpy",
|
|
16
|
+
"ms-python.python",
|
|
17
|
+
"ms-python.vscode-pylance",
|
|
18
|
+
"ms-toolsai.jupyter",
|
|
19
|
+
"oderwat.indent-rainbow",
|
|
20
|
+
"samuelcolvin.jinjahtml",
|
|
21
|
+
"sonarsource.sonarlint-vscode",
|
|
22
|
+
"tamasfe.even-better-toml",
|
|
23
|
+
"tomoki1207.pdf",
|
|
24
|
+
"wayou.vscode-todo-highlight",
|
|
25
|
+
]
|
|
26
|
+
}
|