feat(with-uv:3.12-alpine): Create new image.

Create new `with-uv:3.12-alpine` image, restructure the folders, create a pushing script to make things easier.
This commit is contained in:
2025-03-15 11:47:28 -03:00
parent ddab7d1a04
commit c24ac43964
8 changed files with 286 additions and 3 deletions
+115
View File
@@ -0,0 +1,115 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
@@ -0,0 +1,5 @@
FROM python:3.12-alpine
RUN pip install uv
ENTRYPOINT [ "python3", "-m", "uv", "run", "--no-dev" ]
@@ -0,0 +1,5 @@
FROM python:3.13.2-alpine
RUN pip install uv
ENTRYPOINT [ "python3", "-m", "uv", "run", "--no-dev" ]
+22
View File
@@ -0,0 +1,22 @@
# Usage
To optimize the building and pushing of your images, use the following template:
```dockerfile
# Use the image and tag you need.
FROM registry.nyeki.dev/docker/python/with-uv:3.13.2-alpine
# Only copy uv-related files, necessary for syncing and caching.
WORKDIR /app
COPY pyproject.toml uv.lock /app/
# Run with --no-dev on not to install dev dependencies.
RUN python3 -m uv sync --no-dev
# Copy the rest of your app.
COPY . /app/
# The ENTRYPOINT is set to `uv run --no-dev` by default, so only put your app's src directory as
# the command.
CMD [ "your_app" ]
```
+9
View File
@@ -0,0 +1,9 @@
[project]
name = "python"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"rich>=13.9.4",
]
+73
View File
@@ -0,0 +1,73 @@
try:
from rich import print
from rich.prompt import Prompt
except ImportError:
import sys
print("You need to have `rich` installed to be able to run this script.")
sys.exit(1)
import os
def list_folders(path: str) -> list[str]:
"""Lists all (immediate) subdirectories in a directory.
Args:
path (str): The path to list the subdirectories for.
Returns:
list[str]: A list of paths containing all the subdirectories for the specified path.
"""
return [f.path.rsplit("/", 1)[-1] for f in os.scandir(path) if f.is_dir()]
variations = list_folders("./dockerfiles")
variation = Prompt.ask("What variation do you want to build?", choices=variations) if len(variations) > 1 else variations[0]
tags = list_folders(f"./dockerfiles/{variation}")
tag = Prompt.ask("What Python tag do you want to build?", choices=tags, default="all") if len(tags) > 1 else tags[0]
def build_image(variation: str, tag: str) -> bool:
image = f"registry.nyeki.dev/docker/python/{variation}:{tag}"
print(f"[yellow]Building and pushing [bold]{image}[/].[/]")
commands = [
f"cd ./dockerfiles/{variation}/{tag}",
f"docker build -t {image} .",
f"docker push {image}"
]
if os.system(" && ".join(commands)) == 0:
print(f"[green]Successfully built and pushed![/]")
return True
else:
print(f"[red]The image couldn't be built or pushed.[/]")
return False
if tag == "all":
successes = 0
for tag in tags:
if build_image(variation, tag):
successes += 1
if successes == len(tags):
print(f"[green]All tags were successfully built and pushed.[/]")
elif successes != 0:
print(f"[yellow]Only {successes}/{len(tags)} tags could be built and pushed.[/]")
else:
print(f"[red]No tag could be built nor pushed.[/]")
else:
build_image(variation, tag)
Generated
+57
View File
@@ -0,0 +1,57 @@
version = 1
revision = 1
requires-python = ">=3.13"
[[package]]
name = "markdown-it-py"
version = "3.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mdurl" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
]
[[package]]
name = "mdurl"
version = "0.1.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
]
[[package]]
name = "pygments"
version = "2.19.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
]
[[package]]
name = "python"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "rich" },
]
[package.metadata]
requires-dist = [{ name = "rich", specifier = ">=13.9.4" }]
[[package]]
name = "rich"
version = "13.9.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
{ name = "pygments" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
]
-3
View File
@@ -1,3 +0,0 @@
FROM python:3.13.2-alpine
RUN pip install uv