diff --git a/.dockerignore b/.dockerignore index e8bf2549e..8a330a9fb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,6 +2,7 @@ !Containerfile* !Dockerfile !README.md +!LICENSE.md !bin/container-entrypoint.sh !examples/ !extra/ diff --git a/.github/workflows/container-build.yaml b/.github/workflows/container-build.yaml index 4fed96470..08cd17af6 100644 --- a/.github/workflows/container-build.yaml +++ b/.github/workflows/container-build.yaml @@ -75,3 +75,5 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Containerfile.alpine b/Containerfile.alpine index 053d050c5..ffabe6bc0 100644 --- a/Containerfile.alpine +++ b/Containerfile.alpine @@ -5,24 +5,31 @@ ARG TARGET_VERSION="3.11-alpine" ARG TARGET_ARCH="library" -FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} +FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} AS builder WORKDIR /tmp/build -COPY . /tmp/build +COPY pyproject.toml poetry.lock /tmp/build/ + +RUN apk add --no-cache --virtual .build-deps build-base libffi-dev && \ + pip install --no-cache-dir 'poetry==2.4.1' && \ + poetry config virtualenvs.create false && \ + poetry install --without dev --extras cli --extras tunnel --no-interaction --no-ansi --no-root + +COPY . /tmp/build/ + +RUN poetry build --format wheel --no-interaction -RUN _poetry_venv_dir="$(mktemp -d -p "${TMPDIR:-/tmp}" 'poetry_venv.XXXXXX')" && \ - apk add --no-cache libffi && \ - apk add --no-cache --virtual .build-deps build-base libffi-dev && \ - python -m 'venv' "${_poetry_venv_dir}" && \ - "${_poetry_venv_dir}/bin/pip" install --no-cache-dir 'poetry' && \ - "${_poetry_venv_dir}/bin/poetry" config --local virtualenvs.create false && \ - "${_poetry_venv_dir}/bin/poetry" install --without dev --extras cli --extras tunnel --no-interaction --no-ansi && \ - apk del .build-deps && \ +FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} + +RUN apk add --no-cache libffi && \ addgroup -S meshtastic && \ - adduser -S -G meshtastic -h /home/meshtastic meshtastic && \ - rm -f -r "${_poetry_venv_dir}" && \ - rm -f -r "/tmp/build" + adduser -S -G meshtastic -h /home/meshtastic meshtastic + +COPY --from=builder /tmp/build/dist/*.whl /tmp/ + +RUN wheel=$(echo /tmp/meshtastic-*.whl) && pip install --no-cache-dir "${wheel}[cli,tunnel]" && \ + rm -f /tmp/meshtastic-*.whl COPY "./bin/container-entrypoint.sh" "/init" RUN chmod 0755 /init diff --git a/Containerfile.debian b/Containerfile.debian index 50aa8cbb1..3c771bb62 100644 --- a/Containerfile.debian +++ b/Containerfile.debian @@ -5,20 +5,28 @@ ARG TARGET_VERSION="3.11" ARG TARGET_ARCH="library" -FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} +FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} AS builder WORKDIR /tmp/build -COPY . /tmp/build +COPY pyproject.toml poetry.lock /tmp/build/ + +RUN pip install --no-cache-dir 'poetry==2.4.1' && \ + poetry config virtualenvs.create false && \ + poetry install --without dev --extras cli --extras tunnel --no-interaction --no-ansi --no-root + +COPY . /tmp/build/ + +RUN poetry build --format wheel --no-interaction + +FROM docker.io/${TARGET_ARCH}/python:${TARGET_VERSION} + +RUN useradd --system --create-home --home-dir /home/meshtastic meshtastic + +COPY --from=builder /tmp/build/dist/*.whl /tmp/ -RUN _poetry_venv_dir="$(mktemp -d -p "${TMPDIR:-/tmp}" 'poetry_venv.XXXXXX')" && \ - python -m 'venv' "${_poetry_venv_dir}" && \ - "${_poetry_venv_dir}/bin/pip" install --no-cache-dir 'poetry' && \ - "${_poetry_venv_dir}/bin/poetry" config --local virtualenvs.create false && \ - "${_poetry_venv_dir}/bin/poetry" install --without dev --extras cli --extras tunnel --no-interaction --no-ansi && \ - useradd --system --create-home --home-dir /home/meshtastic meshtastic && \ - rm -f -r "${_poetry_venv_dir}" && \ - rm -f -r "/tmp/build" +RUN wheel=$(echo /tmp/meshtastic-*.whl) && pip install --no-cache-dir "${wheel}[cli,tunnel]" && \ + rm -f /tmp/meshtastic-*.whl COPY "./bin/container-entrypoint.sh" "/init" RUN chmod 0755 /init