# Python Project Template Template pre Python projekt s Dev Container workflow, kde sa devcontainer image taha z registry a nebuildi sa pri kazdom otvoreni. ## Co projekt obsahuje - devcontainer konfiguraciu (`.devcontainer/devcontainer.json`) - compose definiciu pre devcontainer (`.devcontainer/docker-compose.yml`) - centralne nastavenie verzie Pythonu a image tagov (`.devcontainer/.env`) - skript na build/push devcontainer image (`scripts/publish-devcontainer-image.ps1`) - VS Code tasky na build/push (`.vscode/tasks.json`) - vzorovy `Dockerfile` pre aplikaciu (`Dockerfile`) ## Centralne nastavenie verzie a repo Vsetko sa riadi cez `.devcontainer/.env`: - `PYTHON_BASE` - verzia Pythonu pre devcontainer image - `DEVCONTAINER_IMAGE_PULL_REPO` - odkial sa image taha pri otvoreni devcontainera (napr. `docker.masara.eu/python`) - `DEVCONTAINER_IMAGE_PUSH_REPO` - kam sa image pushuje pri publikovani (napr. `repo.masara.eu/python`) - `DEVCONTAINER_IMAGE_REV` - revizia image (napr. `0.1`) ## Build a publish devcontainer image Predpoklady: - Docker je nainstalovany a bezi - mas pristup do push registry (`repo.masara.eu`) ### Cez VS Code task 1. Spusti task `devcontainer: build and push image`. 2. Task zavola skript `scripts/publish-devcontainer-image.ps1 -Push`. ### Cez terminal ```powershell # iba build powershell -ExecutionPolicy Bypass -File scripts/publish-devcontainer-image.ps1 # build + push powershell -ExecutionPolicy Bypass -File scripts/publish-devcontainer-image.ps1 -Push ``` Poznamka: - Ak `docker push` zlyha (napr. neautorizovany pristup), skript spravi fallback `docker login ` a push zopakuje este raz. ## Pouzitie pri vytvoreni/otvoreni projektu 1. Naklonuj alebo vytvor projekt z tejto sablony. 2. Nastav hodnoty v `.devcontainer/.env` (hlavne `PYTHON_BASE`, pull/push repo, revision). 3. Ak menis base image (napr. Python verziu), publikuj novu verziu devcontainer image do push registry. 4. Otvor projekt vo VS Code a pouzi `Reopen in Container`. Devcontainer sa spusti z image definovaneho v `.devcontainer/docker-compose.yml`: - image sa taha z `DEVCONTAINER_IMAGE_PULL_REPO` - workspace je pripojeny bind mountom do `/workspace` - `postCreateCommand` vytvori `.venv` a nainstaluje zavislosti z `requirements.txt` ## Bezne scenare - Chcem iba zmenit Python verziu: 1. Zmen `PYTHON_BASE` v `.devcontainer/.env`. 2. Spusti `devcontainer: build and push image`. 3. Vo VS Code daj `Rebuild/Reopen in Container`. - Chcem zmenit iba aplikacny kod: - Nerebuildi sa devcontainer image, staci reopen/restart kontajnera podla potreby.