Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
199d322
Complete initial set-up for secret management through 1Password CLI
thom-techlete Aug 1, 2025
3a411e0
Update secret management setup and streamline development dependencie…
thom-techlete Aug 1, 2025
14bd487
Implement secret retrieval using 1Password CLI in using_secrets.py
thom-techlete Aug 1, 2025
a73bfd1
Add jupytext hook for Jupyter notebook format management
thom-techlete Aug 1, 2025
daed6d5
Refactor pre-commit configuration and add nbstripout auto-add hook fo…
thom-techlete Aug 1, 2025
5fdf2ab
Change nbstripout hook language to Python and add additional dependen…
thom-techlete Aug 1, 2025
b9f86d4
Add CI workflow configuration and enhance secret management setup
thom-techlete Aug 1, 2025
d7e277f
Update dependency management setup through pyproject.toml
thom-techlete Aug 4, 2025
68ec2b7
Add README file
thom-techlete Aug 4, 2025
9fc6148
Add auto-formatting hooks for Python code using Black and isort
thom-techlete Aug 4, 2025
28ed89e
test
thom-techlete Aug 4, 2025
84d4fd8
Add ruff and specify python => 3.12
thom-techlete Aug 4, 2025
bc10ffc
Refactor code for improved readability and organization by rearrangin…
thom-techlete Aug 4, 2025
2ba8324
Remove isort autoformat hook script
thom-techlete Aug 4, 2025
d2e415d
Add mypy type checking and update ruff version in pre-commit config
thom-techlete Aug 4, 2025
dfa1219
Update .gitignore, add VSCode settings, and implement runtime type ch…
thom-techlete Aug 4, 2025
66a9c49
Refactor documentation: consolidate and enhance dependency and secret…
thom-techlete Aug 4, 2025
a5687c2
Unify dependency management to pyproject with pip tools
thom-techlete Aug 5, 2025
60cf957
Remove outdated comments from pyproject.toml and enhance check-requir…
thom-techlete Aug 5, 2025
ad5a339
Update docs
thom-techlete Aug 5, 2025
8106b6c
Update docs
thom-techlete Aug 5, 2025
207ed81
Update README
thom-techlete Aug 5, 2025
9263966
Setup pytest
thom-techlete Aug 5, 2025
7017e8b
Add pytest hook to pre-commit configuration for test coverage
thom-techlete Aug 5, 2025
5cfd0b5
Add comment to coverage omit section for clarity
thom-techlete Aug 5, 2025
bdfbf31
Add CI workflow for linting, testing, and coverage reporting
thom-techlete Aug 5, 2025
4b9a110
Fix pip-audit command and update CI workflow
thom-techlete Aug 5, 2025
890e666
Update CI workflow to use 'ruff check' and improve code formatting in…
thom-techlete Aug 5, 2025
f094d9e
Update python path for pytest
thom-techlete Aug 5, 2025
4477a61
Update CI workflow to generate coverage badge with specified output a…
thom-techlete Aug 5, 2025
521f008
Update CI workflow to add permissions and persist credentials during …
thom-techlete Aug 5, 2025
8f28263
test
thom-techlete Aug 5, 2025
710e8b3
Update coverage badge
thom-techlete Aug 5, 2025
7e46903
chore: update coverage badge
thom-techlete Aug 5, 2025
6985256
adds .ps1 scripts for Windows-native setup and updates readme
divaanster Aug 28, 2025
a055087
minor change to setup.ps1 to properly install utils.secrets
divaanster Aug 28, 2025
df07fc7
test automatically fixed code (rust) commit
romantechletes Aug 13, 2025
2c31400
test pre commit hooks: add fake secret
romantechletes Aug 13, 2025
200c05f
add manual edit error handling prompt for user
romantechletes Aug 14, 2025
878d325
delete testing files not necessary for template
romantechletes Aug 14, 2025
c01ee0c
changes ruff version to v0.12.8
DIstha Sep 10, 2025
8076dc2
copies verify-lockfile.sh to scripts/hooks
DIstha Sep 10, 2025
4bcdf36
adds verify-lockfile.ps1
DIstha Sep 10, 2025
45de203
Adds verify-prod-lockfile and verify-dev-lockfile for linux and windows
DIstha Sep 10, 2025
859d7a3
updates pre-commit config.yaml files to include verify-prod-lockfile …
DIstha Sep 10, 2025
bc29cd6
updates setup.sh to accommodate for Linux and WSL in one script
DIstha Sep 10, 2025
183292f
minor changes to setup.ps1
DIstha Sep 10, 2025
a096784
update readme with instructions for windows powershell execution poli…
DIstha Sep 10, 2025
8ab6d53
check
DIstha Sep 10, 2025
6fda9a7
refactor: clean up pre-commit hooks configuration and update document…
thom-techlete Sep 10, 2025
6ee9361
Remove redundant hooks
thom-techlete Sep 10, 2025
53e312c
Update setup-linux.sh
thom-techlete Sep 12, 2025
50ef9aa
Update .envrc
thom-techlete Sep 12, 2025
9040c7c
Restore /scripts folder from commit 8ab6d53
MLingerTechletes Sep 12, 2025
c7a7aa5
keep main version of scripts/dependency.sh
MLingerTechletes Sep 12, 2025
4a628cd
add steps to setup.sh to check for direnv/pip/python3.12-venv and ins…
romantechletes Sep 12, 2025
eacc35f
readme's: SETUP.md, USAGE.md have been created to split based on proj…
romantechletes Sep 19, 2025
26a9a24
Update VSCode type checking strictness
thom-techlete Sep 23, 2025
cdf7c11
Update pre commit config
thom-techlete Sep 23, 2025
1eae45d
Update dependencies and improve lockfile verification
thom-techlete Sep 23, 2025
4adef79
Improve virtual environment activation in precommit script
thom-techlete Sep 23, 2025
b91fdfc
minor addition to setup.md
divaanster Sep 24, 2025
7534e1c
updates setup.sh
divaanster Sep 24, 2025
38c1ca0
updates setup.sh
divaanster Sep 24, 2025
2e0646d
fix merge conflict
divaanster Sep 24, 2025
0ffd3e2
Update README.md
dominic-techletes Sep 24, 2025
6a19c97
Update README.md
dominic-techletes Sep 24, 2025
bcd78e5
Update README.md
dominic-techletes Sep 24, 2025
f0180ae
updates readme
divaanster Sep 24, 2025
ecc9ee6
renames docs
divaanster Sep 24, 2025
a04ead6
replaces 0_setup.md
divaanster Sep 29, 2025
377fe66
updates readme
divaanster Sep 29, 2025
c1f19c1
Remove faulty import & redundant final step
thom-techlete Oct 12, 2025
854e287
Fix syntax error
thom-techlete Oct 12, 2025
0e39cd2
Correct default naming of virtual environment
thom-techlete Oct 13, 2025
2c60a6f
Add linting pre-commit hooks
thom-techlete Oct 14, 2025
db5ec64
Enhance pre-commit and mypy configuration
thom-techlete Oct 15, 2025
ea4cb46
Run pip-audit against requirements.txt and remove leftover comment.
thom-techlete Oct 15, 2025
48b6efc
Pin pip-tools to 7.5.0 for lockfile verification; remove legacy check…
thom-techlete Oct 15, 2025
4a6c516
Regenerate requirements.txt: bump certifi, charset-normalizer, idna, …
thom-techlete Oct 15, 2025
5b0a152
Add GitHub issue templates and contact config
thom-techlete Oct 15, 2025
f331509
Refactor setup script, add Docker install, and update pre-commit deps
thom-techlete Oct 15, 2025
68bc16e
Add support for extra dependencies lockfile (requirements-full)
thom-techlete Oct 21, 2025
9162f7d
Add requirements-slim (core) lockfile and switch scripts/docs to laye…
thom-techlete Oct 21, 2025
ed05de5
Update dependency management docs to describe layered pip-tools workf…
thom-techlete Oct 21, 2025
7e8c418
Remove mention of --allow-unsafe
thom-techlete Oct 21, 2025
92b1dff
Refactor dependency installation instructions in READMEU
thom-techlete Oct 22, 2025
c92428d
Add PR template
thom-techlete Oct 22, 2025
2f3ee2e
Move issues template folder to correct location
thom-techlete Oct 27, 2025
dd28100
Update dependencies and remove obsolete scripts
thom-techlete Jan 13, 2026
b26a567
Refactor code structure for improved readability and maintainability
thom-techlete Jan 14, 2026
49d36bb
Pin dependencies to specific versions for stability and update depend…
thom-techlete Jan 14, 2026
2158fe2
Refactor dependency management script to handle major version updates…
thom-techlete Jan 14, 2026
6e40702
Refactor dependency definitions to use 'dependency-groups' and 'dev-d…
thom-techlete Jan 14, 2026
44f17fe
Adds CSV and Excel files to gitignore
dominic-techletes Feb 27, 2026
78f7572
Refactor dependency management to use uv and update version specifica…
thom-techlete Mar 3, 2026
e872372
Update dependency management to use 'uv sync' and adjust related docu…
thom-techlete Mar 3, 2026
69a6755
Update project metadata and improve interpreter path configuration
thom-techlete Mar 3, 2026
729ab58
Refactor setup script to use virtual environment for pre-commit and d…
thom-techlete Mar 3, 2026
304c75d
Enhance pre-commit configuration with additional hooks for import sor…
thom-techlete Mar 3, 2026
3a2afc4
Add comprehensive troubleshooting guide for pre-commit hooks
thom-techlete Mar 3, 2026
350da7f
Update CI configuration and add Copilot instructions for project setu…
thom-techlete Mar 3, 2026
10c78c1
Refactor dependabot configuration to consolidate updates into multi-e…
thom-techlete Mar 3, 2026
e97b84e
Add helper script to integrate pip-audit ignore list from pyproject.toml
thom-techlete Mar 3, 2026
6eed6c6
Refactor CI workflow to remove individual checks and consolidate into…
thom-techlete Mar 3, 2026
f88d5ee
Fix CI workflow to use 'uv run' for pre-commit hooks execution
thom-techlete Mar 3, 2026
621a341
Update CI workflow to use latest action versions and improve pre-comm…
thom-techlete Mar 3, 2026
0fcccf6
Update coverage badge and add genbadge dependency
thom-techlete Mar 3, 2026
d388497
Fix CI workflow to conditionally commit coverage badge on pull requests
thom-techlete Mar 3, 2026
74f3697
chore: update coverage badge
thom-techlete Mar 3, 2026
cfd2d12
Update CI workflow to use custom pre-commit cache path and exclude co…
thom-techlete Mar 3, 2026
c4bbd39
Add required-version for uv tool in pyproject.toml
thom-techlete Mar 3, 2026
f8cb7cd
deps(deps): bump the all-updates group with 4 updates
dependabot[bot] Mar 3, 2026
6d80b55
deps(deps-dev): bump the all-updates group across 1 directory with 2 …
dependabot[bot] Mar 3, 2026
26455d2
Merge branch 'main' into dependabot/main/all_updates-c7e5aa5971
thom-techlete Mar 4, 2026
36854cb
Merge pull request #25 from TECHLETES/dependabot/main/all_updates-c7e…
thom-techlete Mar 4, 2026
b774c82
refactor: clean up pyproject.toml formatting and reorganize dependencies
thom-techlete Mar 4, 2026
fd602e7
fix: add conditional check for pull request in coverage badge generation
thom-techlete Mar 4, 2026
7ade214
feat: add devcontainer setup with Python and uv (#28)
thom-techlete Apr 13, 2026
40580a5
feat: add additional VSCode extensions for enhanced Python development
thom-techlete Apr 14, 2026
619e32f
Refactor code structure for improved readability and maintainability
thom-techlete Apr 14, 2026
ab05f1d
feat: add shared Copilot agents and installation script for enhanced …
thom-techlete Apr 14, 2026
08f0e33
refactor: replace isort with Ruff for import sorting and linting
thom-techlete Apr 14, 2026
ae5557b
feat: add pre-commit compliance guidelines to Coder and Orchestrator …
thom-techlete Apr 14, 2026
f7e33f8
refactor: update VSCode settings for mypy type checker configuration …
thom-techlete Apr 15, 2026
7c5aada
chore: update dependabot configuration for daily dependency checks an…
thom-techlete Apr 16, 2026
ff4de40
refactor: remove unused lock file exports and update mypy configurati…
thom-techlete Apr 16, 2026
fc3f3dd
refactor: update pytest hook configuration to specify Python file types
thom-techlete Apr 16, 2026
a457f37
feat: enhance installation script to support skills installation and …
thom-techlete Apr 17, 2026
81c2637
refactor: simplify pip-audit command by removing unnecessary flags
thom-techlete Apr 17, 2026
1be106f
feat: enhance dependency vulnerability remediation skill with detaile…
thom-techlete Apr 17, 2026
6539588
refactor: update PR process to include breaking changes and detailed …
thom-techlete Apr 17, 2026
1c0eb80
refactor: update secrets baseline filename and remove old baseline file
thom-techlete Apr 20, 2026
969eeca
- Add project audit skill
thom-techlete Apr 22, 2026
ee00737
Update repo audit skill
thom-techlete Apr 23, 2026
57f26bf
feat: update development environment with additional VSCode extension…
thom-techlete Apr 23, 2026
f13e2d1
feat: enhance audit skill documentation and Dockerfile with new confi…
thom-techlete Apr 30, 2026
318872b
feat: update install script to include no-force option and set defaul…
MaartenHofland May 6, 2026
75ef6eb
Add CodeQL remediation templates and workflow documentation (#30)
thom-techlete May 6, 2026
a2cd86f
feat: update bandit configuration to set severity level and adjust ex…
thom-techlete May 6, 2026
19cf4de
feat: refine CodeQL remediation workflow and verification commands fo…
thom-techlete May 6, 2026
338f144
Refactor audit-python-template-compliance skill: Update documentation…
thom-techlete May 6, 2026
40ff8e0
feat: update config template manifest and documentation references; r…
thom-techlete May 6, 2026
9e48580
Devcontainer adjustments (#31)
MLingerTechletes May 7, 2026
e2ce5d2
feat: add GitHub Actions workflow for automatic PR labeling based on …
MaartenHofland May 18, 2026
8b77fab
feat: add branch name validation script and update pre-commit configu…
MaartenHofland May 18, 2026
ae748b7
fix: enhance branch name validation to allow protected branches for C…
MaartenHofland May 19, 2026
265217d
bugfix: multiple label allowance (#35)
MaartenHofland May 19, 2026
5812d17
Fix devcontainer setup
thom-techlete Jun 1, 2026
1788a34
fix: clean up post-create script and enhance VSCode settings for bett…
thom-techlete Jun 1, 2026
9a28b81
fix: update permissions for run-pip-audit script to make it executable
thom-techlete Jun 1, 2026
7c0a2c1
fix: add step to prepare Codex config mount in CI workflow
thom-techlete Jun 1, 2026
db2d981
fix: add Docker outside of Docker feature to devcontainer configuration
thom-techlete Jun 1, 2026
635a8a8
feat: add workflow to enforce PRs from 'staging' to 'main'
thom-techlete Jun 3, 2026
0074d05
fix: update Dockerfile and devcontainer configuration for improved en…
thom-techlete Jun 3, 2026
345cc03
fix: update VSCode extensions for improved development experience
thom-techlete Jun 3, 2026
c408ee5
Update skills & codex files
thom-techlete Jun 3, 2026
b65fdef
fix: streamline post-create script for virtual environment setup
thom-techlete Jun 3, 2026
521eca7
fix: update post-create script for improved virtual environment setup
thom-techlete Jun 3, 2026
36b6abb
Refactor code structure for improved readability and maintainability
thom-techlete Jul 6, 2026
88286f6
Implement code changes to enhance functionality and improve performance
thom-techlete Jul 6, 2026
040b6df
refactor: enhance run-pip-audit script for improved error handling an…
thom-techlete Jul 6, 2026
544f616
Create Techletes Superpowers plugin
thom-techlete Jul 7, 2026
70ca69d
refactor: update project references and improve post-create script fo…
thom-techlete Jul 9, 2026
281fda0
feat: add setup script for Techletes Codex installation and configura…
thom-techlete Jul 9, 2026
0372acc
refactor: remove unnecessary CAVEMAN_DEFAULT_MODE environment variable
thom-techlete Jul 9, 2026
7104708
chore: update coverage badge
thom-techlete Jul 9, 2026
e7c7135
Merge pull request #37 from TECHLETES/feature/agent-plugin
thom-techlete Jul 9, 2026
9181975
feat: update CI workflow and setup script for improved Codex configur…
thom-techlete Jul 9, 2026
2ace77a
Add repository template adoption helper
thom-techlete Jul 9, 2026
23c3a16
Add existing repository standardization guide
thom-techlete Jul 9, 2026
add9255
Allow chore branches in branch validation
thom-techlete Jul 9, 2026
bdf6ee0
fix: update AGENTS.md download logic in setup script
thom-techlete Jul 10, 2026
0f631dd
Remove codex plugins from repo
thom-techlete Jul 10, 2026
fceff70
Merge pull request #38 from TECHLETES/docs/repo-adoption-guide
thom-techlete Jul 10, 2026
ce22fd5
feat: add bootstrap instructions for new repositories and remove obso…
thom-techlete Jul 10, 2026
741ee18
chore: remove obsolete VSCode extensions configuration
thom-techlete Jul 10, 2026
cb91589
chore: remove obsolete Codex configuration file
thom-techlete Jul 10, 2026
bc15cfc
feat: implement staging branch check in PR workflow
thom-techlete Jul 10, 2026
e3a8a5c
feat: add postAttachCommand and script for template update checks
thom-techlete Jul 10, 2026
34aa9e9
Merge pull request #39 from TECHLETES/feature/auto-template-update
thom-techlete Jul 10, 2026
a653e3a
fix: update merge command in post-attach script and improve venv dete…
thom-techlete Jul 10, 2026
50d1ff6
feat: add _repo_url_from_git function to retrieve browsable repositor…
thom-techlete Jul 10, 2026
853f160
docs: specify post-attach template remote setup
thom-techlete Jul 10, 2026
d1bf7cd
feat: add template remote configuration in post-attach script and cor…
thom-techlete Jul 10, 2026
ec6cf8f
fix: handle fetch failure in post-attach script and update tests acco…
thom-techlete Jul 10, 2026
16215b6
refactor: remove local pytest hook from pre-commit configuration
thom-techlete Jul 10, 2026
e30a8a1
fix: update chatgpt setting to prevent opening on startup and add fro…
thom-techlete Jul 10, 2026
a1e0dd5
fix: add paths-ignore for coverage.svg in pull_request and push triggers
thom-techlete Jul 10, 2026
9704770
fix: skip template update check if current repository is the template
thom-techlete Jul 10, 2026
8cf1910
fix: create .gitconfig file in the setup process
thom-techlete Jul 10, 2026
fb2fc43
fix: ensure template remote push URL is set to DISABLED when added
thom-techlete Jul 13, 2026
5f6daeb
fix: enable use of environment file in Python terminal settings
thom-techlete Jul 14, 2026
6e3ae5a
fix: update devcontainer and VSCode settings for improved environment…
thom-techlete Jul 14, 2026
0e7a1bb
fix: update JSON formatter settings in devcontainer configuration
thom-techlete Jul 14, 2026
ae5daaa
fix: update devcontainer settings and post-attach script for improved…
thom-techlete Jul 14, 2026
a7eb458
fix: add command to update Codex CLI to the latest version in post-cr…
thom-techlete Jul 15, 2026
dc56ddb
fix: allow unrelated histories in template merge for better compatibi…
thom-techlete Jul 20, 2026
7940425
fix: update coverage badge generation to trigger on push events
thom-techlete Jul 24, 2026
45120d2
fix: update coverage badge generation to trigger on pull request events
thom-techlete Jul 24, 2026
577582d
Update docs
thom-techlete Jul 24, 2026
06f190e
fix: update detect-secrets integration with shared exclusions and new…
thom-techlete Jul 24, 2026
6cf542d
Merge remote-tracking branch 'template/main' into chore/adopt-template
thom-techlete Jul 24, 2026
54dcb1f
Merge template/main into chore/adopt-template
thom-techlete Jul 24, 2026
6a85928
fix: remove common issues section from AGENTS.md for clarity
thom-techlete Jul 24, 2026
4d0e45f
fix: add 'chore' label to branch name pattern matching in labeler wor…
thom-techlete Jul 24, 2026
9f2fac3
Lint & formatting
thom-techlete Jul 24, 2026
d1490cf
Merge template/main into chore/adopt-template
thom-techlete Jul 24, 2026
01f8a87
chore: update coverage badge
thom-techlete Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .devcontainer/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.git
.github
.mypy_cache
.pytest_cache
.ruff_cache
.venv
.coverage
.coverage.*
.direnv
__pycache__
*.py[cod]
*.egg-info
.ipynb_checkpoints
build
dist
htmlcov
coverage.xml
coverage.svg
41 changes: 41 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
FROM mcr.microsoft.com/devcontainers/python:1-3.12-bookworm

ARG USERNAME=vscode
ARG UV_VERSION=0.9.25

ADD https://astral.sh/uv/${UV_VERSION}/install.sh /tmp/uv-installer.sh

RUN env UV_UNMANAGED_INSTALL="/usr/local/bin" sh /tmp/uv-installer.sh \
&& rm /tmp/uv-installer.sh

RUN rm -f /etc/apt/sources.list.d/yarn.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
libpq-dev \
netcat-openbsd \
postgresql-client \
redis-tools \
bubblewrap \
socat \
&& rm -rf /var/lib/apt/lists/*

# Install 1Password CLI (Added by Michaël: 7-5-2026)
RUN curl -sS https://downloads.1password.com/linux/keys/1password.asc | gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | tee /etc/apt/sources.list.d/1password.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends 1password-cli \
&& rm -rf /var/lib/apt/lists/*

# Codex CLI ships as an npm package and requires Node.js 22+.
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get update \
&& apt-get install -y --no-install-recommends nodejs \
&& npm install -g @openai/codex \
&& codex --version \
&& rm -rf /var/lib/apt/lists/*

ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
PYTHONDONTWRITEBYTECODE=1

RUN mkdir -p /home/${USERNAME}/.cache/uv /home/${USERNAME}/.cache/pre-commit \
&& chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.cache
147 changes: 147 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
{
"build": {
"context": "..",
"dockerfile": "Dockerfile"
},
"containerEnv": {
"PRE_COMMIT_HOME": "/home/vscode/.cache/pre-commit",
"PYTHONPATH": "${containerWorkspaceFolder}",
"TZ": "Europe/Amsterdam",
"UV_CACHE_DIR": "/home/vscode/.cache/uv",
"UV_LINK_MODE": "copy",
"UV_PROJECT_ENVIRONMENT": "${containerWorkspaceFolder}/.venv",
"UV_PYTHON_DOWNLOADS": "never"
},
"customizations": {
"vscode": {
"extensions": [
"ms-azuretools.vscode-docker",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.mypy-type-checker",
"charliermarsh.ruff",
"ms-toolsai.jupyter",
"astral-sh.ty",
"ms-python.autopep8",
"ms-python.black-formatter",
"ms-python.debugpy",
"mgesbert.python-path",
"docker.docker",
"tamasfe.even-better-toml",
"cweijan.vscode-office",
"openai.chatgpt",
"github.vscode-github-actions",
"GitHub.vscode-pull-request-github",
"mtxr.sqltools",
"mtxr.sqltools-driver-mysql",
"mtxr.sqltools-driver-pg",
"mtxr.sqltools-driver-sqlite",
"ms-ossdata.vscode-pgsql",
"redhat.vscode-yaml",
"foxundermoon.shell-format"
],
"settings": {
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features",
"editor.formatOnSave": true
},
"[python]": {
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
},
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
},
"[yaml]": {
"editor.defaultFormatter": "redhat.vscode-yaml",
"editor.formatOnSave": true
},
"chatgpt.openOnStartup": false,
"chatgpt.runCodexInWindowsSubsystemForLinux": true,
"debug.internalConsoleOptions": "neverOpen",
"debug.showProtocolLogs": false,
"editor.formatOnPaste": true,
"editor.rulers": [
88
],
"editor.trimAutoWhitespace": true,
"files.exclude": {
"**/.pytest_cache": true,
"**/.ruff_cache": true,
"**/__pycache__": true
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.pytest_cache": true,
"**/.ruff_cache": true,
"**/__pycache__": true
},
"git.ignoreLimitWarning": true,
"js/ts.tsdk.promptToUseWorkspaceVersion": true,
"mypy-type-checker.args": [
"--config-file=pyproject.toml"
],
"mypy-type-checker.cwd": "${workspaceFolder}",
"mypy-type-checker.importStrategy": "fromEnvironment",
"mypy-type-checker.reportingScope": "workspace",
"python-envs.terminal.autoActivationType": "off",
"python.analysis.typeCheckingMode": "standard",
"python.defaultInterpreterPath": "${workspaceFolder}/.venv",
"python.terminal.activateEnvInCurrentTerminal": true,
"python.terminal.useEnvFile": true,
"python.testing.pytestArgs": [
"."
],
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"ruff.enable": true,
"search.exclude": {
"**/.git": true,
"**/.pytest_cache": true,
"**/.venv": true,
"**/__pycache__": true,
"**/build": true,
"**/dist": true,
"**/node_modules": true
},
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.env.linux": {
"PYTHONPATH": "${workspaceFolder}",
"UV_PROJECT_ENVIRONMENT": "${workspaceFolder}/.venv"
}
}
}
},
"features": {
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
"enableNonRootDocker": "true",
"moby": "false",
"version": "latest"
},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
},
"mounts": [
"source=${localEnv:HOME}/.gitconfig,target=/tmp/host-gitconfig,type=bind,consistency=cached",
"source=fst-uv-cache,target=/home/vscode/.cache/uv,type=volume",
"source=fst-pre-commit-cache,target=/home/vscode/.cache/pre-commit,type=volume",
"source=${localEnv:HOME}/.codex,target=/home/vscode/.codex,type=bind,consistency=cached",
"source=${localEnv:HOME}/.config/gh,target=/home/vscode/.config/gh,type=bind,consistency=cached"
],
"name": "zero-friction",
"overrideCommand": true,
"postAttachCommand": "bash .devcontainer/post-attach.sh",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"remoteEnv": {
"CODEX_HOME": "/home/vscode/.codex"
},
"remoteUser": "vscode",
"updateRemoteUserUID": true,
"waitFor": "postCreateCommand",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}"
}
60 changes: 60 additions & 0 deletions .devcontainer/post-attach.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
set -euo pipefail

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${repo_root}"

if ! git rev-parse --git-dir >/dev/null 2>&1; then
exit 0
fi

template_remote_url="git@github.com:TECHLETES/python_template.git"
origin_url="$(git remote get-url origin 2>/dev/null || true)"
if [[ "${origin_url}" == "${template_remote_url}" ]]; then
echo "Current repository is the template; skipping template update check."
exit 0
fi

if ! git remote get-url template >/dev/null 2>&1; then
echo "Template remote not configured; adding it."
git remote add template "${template_remote_url}"
git remote set-url --push template DISABLED
fi

current_branch="$(git symbolic-ref --quiet --short HEAD || true)"
if [[ -z "${current_branch}" ]]; then
echo "Detached HEAD; skipping template update check."
exit 0
fi

echo "Checking for updates from template/main..."
if ! git fetch template --prune; then
echo "Template update check failed; continuing without updates."
exit 0
fi

if ! git show-ref --verify --quiet refs/remotes/template/main; then
echo "Template remote exists but template/main is not available; skipping."
exit 0
fi

ahead_count="$(git rev-list --count HEAD..template/main)"
if [[ "${ahead_count}" -eq 0 ]]; then
echo "Template is up to date."
exit 0
fi

echo "Template has ${ahead_count} new commit(s)."

if [[ -n "$(git status --porcelain=v1)" ]]; then
echo "Working tree is dirty; skipping automatic merge from template/main."
echo "Review and merge template/main manually when you are ready."
exit 0
fi

echo "Applying template/main without committing; review and commit or abort the merge manually."
if git merge --no-commit --allow-unrelated-histories --no-ff -m "Merge template/main into ${current_branch}" template/main; then
echo "Template updates applied without a commit. Review the staged merge, then commit or abort it manually."
else
echo "Template merge needs manual resolution."
fi
74 changes: 74 additions & 0 deletions .devcontainer/post-create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env bash
set -euo pipefail

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${repo_root}"

if [[ ! -f .env && -f .env.template ]]; then
cp .env.template .env
echo "Created .env from .env.template for local devcontainer startup."
elif [[ -f .env ]]; then
source .env
else
echo "No .env file found and no .env.template to copy from. Please create a .env file based on the .env.template for local development."
fi

echo "Bootstrapping the container workspace with uv..."
uv --version
python --version

if [[ -d .venv ]]; then
if [[ -f .venv/pyvenv.cfg ]]; then
venv_home="$(grep -E '^home = ' .venv/pyvenv.cfg | cut -d= -f2- | sed 's/^ *//;s/ *$//')"
if [[ -n "${venv_home}" ]]; then
if python3 -c 'import sys; print(sys.executable)' >/dev/null 2>&1; then
current_python="$(python3 -c 'import sys; print(sys.executable)')"
elif python -c 'import sys; print(sys.executable)' >/dev/null 2>&1; then
current_python="$(python -c 'import sys; print(sys.executable)')"
fi
current_python_home="$(dirname "${current_python-}")"
if [[ -n "${current_python-}" && "${venv_home}" != "${current_python_home}" ]]; then
echo "Detected existing .venv built with ${venv_home}; removing so uv sync can recreate it for the devcontainer."
rm -rf .venv
fi
fi
fi
fi

uv sync
uv tool install graphifyy

if [[ -d .git ]]; then
uv run pre-commit install --install-hooks
fi

if ! uv run python -c "import ipykernel" >/dev/null 2>&1; then
echo "Notebook execution in the container uses the local Python environment and needs ipykernel available there."
fi

if command -v op >/dev/null 2>&1; then
echo "1Password CLI detected. Run 'op account list' if you need secret-backed examples."
else
echo "1Password CLI is optional and not installed in this container."
fi

git config pull.rebase false && git config branch.autosetuprebase never

if [[ -f /tmp/host-gitconfig ]]; then
host_git_user_name="$(git config --file /tmp/host-gitconfig --get user.name || true)"
host_git_user_email="$(git config --file /tmp/host-gitconfig --get user.email || true)"

if [[ -n "${host_git_user_name}" ]]; then
git config --local user.name "${host_git_user_name}"
fi
if [[ -n "${host_git_user_email}" ]]; then
git config --local user.email "${host_git_user_email}"
fi
fi

gh auth setup-git || true

echo "Updating Codex CLI to the latest version..."
sudo npm install -g @openai/codex

echo "For Windows contributors, keep this repo inside the WSL filesystem before reopening it in the container for the best bind-mount performance."
Loading
Loading