Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,9 @@ updates:
interval: weekly
cooldown:
default-days: 7
- package-ecosystem: docker
directory: "/"
schedule:
interval: weekly
cooldown:
default-days: 7
19 changes: 12 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
FROM ghcr.io/astral-sh/uv:0.11.8@sha256:3b7b60a81d3c57ef471703e5c83fd4aaa33abcd403596fb22ab07db85ae91347 AS uv

FROM python:3.12.6-bookworm
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
Expand Down Expand Up @@ -32,16 +34,19 @@ RUN case $(uname -m) in \
RUN mkdir /code
WORKDIR /code

RUN pip --no-cache-dir --disable-pip-version-check install --upgrade pip setuptools wheel
COPY --from=uv /uv /uvx /usr/local/bin/

COPY pyproject.toml /code/
COPY pyproject.toml uv.lock /code/

RUN --mount=type=cache,target=/root/.cache/pip \
RUN --mount=type=cache,target=/root/.cache \
set -x \
&& pip --disable-pip-version-check \
install --group dev \
.
&& uv sync \
--frozen \
--no-editable \
--no-install-project

COPY . /code/

RUN pip --disable-pip-version-check install --no-deps -e '.'
RUN uv sync \
--frozen \
--no-editable
26 changes: 18 additions & 8 deletions Dockerfile.cabotage
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
FROM ghcr.io/astral-sh/uv:0.11.8@sha256:3b7b60a81d3c57ef471703e5c83fd4aaa33abcd403596fb22ab07db85ae91347 AS uv

FROM python:3.12.6-bookworm
COPY --from=ewdurbin/nginx-static:1.25.x /usr/bin/nginx /usr/bin/nginx
ENV PYTHONUNBUFFERED=1
Expand Down Expand Up @@ -33,17 +35,25 @@ RUN case $(uname -m) in \
RUN mkdir /code
WORKDIR /code

RUN pip --no-cache-dir --disable-pip-version-check install --upgrade pip setuptools wheel
COPY --from=uv /uv /uvx /usr/local/bin/

COPY pyproject.toml /code/
COPY pyproject.toml uv.lock /code/

RUN --mount=type=cache,target=/root/.cache/pip \
RUN --mount=type=cache,target=/root/.cache \
set -x \
&& pip --disable-pip-version-check \
install \
'.[prod]'
&& uv sync \
--frozen \
--no-editable \
--no-dev \
--extra prod \
--no-install-project

COPY . /code/

RUN pip --disable-pip-version-check install --no-deps '.'
RUN DJANGO_SETTINGS_MODULE=pydotorg.settings.static python manage.py collectstatic --noinput
RUN uv sync \
--frozen \
--no-editable \
--no-dev \
--extra prod

RUN DJANGO_SETTINGS_MODULE=pydotorg.settings.static uv run python manage.py collectstatic --noinput
14 changes: 7 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ help: ## Display this help text
mkdir -p .state && touch .state/db-migrated

.state/db-initialized: .state/docker-build-web .state/db-migrated
docker compose run --rm web ./manage.py createcachetable
docker compose run --rm web ./manage.py loaddata fixtures/*.json
docker compose run --rm web uv run ./manage.py createcachetable
docker compose run --rm web uv run ./manage.py loaddata fixtures/*.json
mkdir -p .state && touch .state/db-initialized

# =============================================================================
Expand All @@ -30,16 +30,16 @@ serve: .state/db-initialized ## Start the application
docker compose up --remove-orphans

migrations: .state/db-initialized ## Generate migrations from models
docker compose run --rm web ./manage.py makemigrations
docker compose run --rm web uv run ./manage.py makemigrations

migrate: .state/docker-build-web ## Run Django migrate
docker compose run --rm web ./manage.py migrate
docker compose run --rm web uv run ./manage.py migrate

manage: .state/db-initialized ## Run arbitrary manage.py commands
docker compose run --rm web ./manage.py $(filter-out $@,$(MAKECMDGOALS))
docker compose run --rm web uv run ./manage.py $(filter-out $@,$(MAKECMDGOALS))

shell: .state/db-initialized ## Open Django interactive shell
docker compose run --rm web ./manage.py shell
docker compose run --rm web uv run ./manage.py shell

docker_shell: .state/db-initialized ## Open bash in web container
docker compose run --rm web /bin/bash
Expand All @@ -61,7 +61,7 @@ fmt: ## Run ruff formatter
@if command -v ruff >/dev/null 2>&1; then ruff format .; else docker compose run --rm web ruff format .; fi

test: .state/db-initialized ## Run test suite
docker compose run --rm web ./manage.py test
docker compose run --rm web uv run python ./manage.py test

ci: lint fmt test ## Run lint, fmt, then tests

Expand Down
4 changes: 2 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ services:
web:
build: .
image: pythondotorg:docker-compose
command: python manage.py runserver 0.0.0.0:8000
command: uv run python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
Expand All @@ -39,7 +39,7 @@ services:

worker:
image: pythondotorg:docker-compose
command: celery -A pydotorg worker -B -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
command: uv run celery -A pydotorg worker -B -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
volumes:
- .:/code
environment:
Expand Down