diff --git a/.woodpecker/docker-buildx.yml b/.woodpecker/docker-buildx.yml new file mode 100644 index 0000000..32ed36b --- /dev/null +++ b/.woodpecker/docker-buildx.yml @@ -0,0 +1,21 @@ +when: + branch: main + event: + - push + +variables: + - &repo scm.gruezi.net/buckbanzai/crossposter + +steps: + publish: + image: docker.io/woodpeckerci/plugin-docker-buildx:latest + settings: + repo: *repo + registry: scm.gruezi.net + tags: latest + username: woodpecker_bot + password: + from_secret: FORGEJO_PACKAGES_API_TOKEN + platforms: linux/amd64,linux/arm64 + when: + event: push diff --git a/.woodpecker/inactive/docker-buildx.yml b/.woodpecker/inactive/docker-buildx.yml deleted file mode 100644 index 301b339..0000000 --- a/.woodpecker/inactive/docker-buildx.yml +++ /dev/null @@ -1,33 +0,0 @@ -when: - branch: main - event: [push, pull_request] - -variables: - - &file Dockerfile - - &repo scm.gruezi.net/${CI_REPO} - -steps: - dryrun: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: *file - platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le - dry_run: true - repo: *repo - tags: latest - when: - event: pull_request - - publish: - image: woodpeckerci/plugin-docker-buildx - settings: - dockerfile: *file - platforms: linux/arm/v7,linux/arm64/v8,linux/amd64,linux/ppc64le - repo: *repo - registry: scm.gruezi.net - tags: latest - username: ${CI_REPO_OWNER} - password: - from_secret: FORGEJO_API_TOKEN - when: - event: push diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f0dfdba --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# An example using multi-stage image builds to create a final image without uv. + +# First, build the application in the `/app` directory. +# See `Dockerfile` for details. +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS builder +ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy + +# Disable Python downloads, because we want to use the system interpreter +# across both images. If using a managed Python version, it needs to be +# copied from the build image into the final image; see `standalone.Dockerfile` +# for an example. +ENV UV_PYTHON_DOWNLOADS=0 + +WORKDIR /app +RUN --mount=type=cache,target=/root/.cache/uv \ + --mount=type=bind,source=uv.lock,target=uv.lock \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + uv sync --locked --no-install-project --no-dev +COPY . /app +RUN --mount=type=cache,target=/root/.cache/uv \ + uv sync --locked --no-dev + + +# Then, use a final image without uv +FROM python:3.12-slim-bookworm +# It is important to use the image that matches the builder, as the path to the +# Python executable must be the same, e.g., using `python:3.11-slim-bookworm` +# will fail. + +# Copy the application from the builder +COPY --from=builder --chown=app:app /app /app + +# Place executables in the environment at the front of the path +ENV PATH="/app/.venv/bin:$PATH" + +CMD ["python", "scl.py"] \ No newline at end of file