refactor: use .python-version for docker build

This commit is contained in:
ducklet 2024-05-10 17:01:18 +02:00
parent d385860ca9
commit 06e60fb212
4 changed files with 45 additions and 10 deletions

View file

@ -1,4 +1,6 @@
**/__pycache__
*.local *.local
.*
/data /data
/tests /tests
/unwind-ui /unwind-ui

View file

@ -1,4 +1,6 @@
FROM docker.io/library/python:3.12-alpine ARG PYTHON_VERSION
FROM docker.io/library/python:${PYTHON_VERSION}-alpine
RUN apk update --no-cache \ RUN apk update --no-cache \
&& apk upgrade --no-cache \ && apk upgrade --no-cache \
@ -9,14 +11,16 @@ RUN addgroup -g 10001 py \
WORKDIR /var/app WORKDIR /var/app
COPY requirements.txt ./ COPY build/requirements.txt ./
RUN pip install --no-cache-dir --upgrade \ RUN pip install --no-cache-dir --upgrade \
--requirement requirements.txt --requirement requirements.txt
USER 10000:10001 USER 10000:10001
COPY . ./ COPY run ./
COPY scripts ./scripts
COPY unwind ./unwind
ENV UNWIND_DATA="/data" ENV UNWIND_DATA="/data"
VOLUME $UNWIND_DATA VOLUME $UNWIND_DATA

View file

@ -6,20 +6,41 @@ cd "$RUN_DIR"
builddir=build builddir=build
_latest_python_version() {
filter="$1"
filter_regex=$(echo "$filter" | sed 's/\./\\\\./')
curl -sfL https://api.github.com/repos/python/cpython/git/refs/tags \
| jq -r 'map(select(.ref | test("^refs/tags/v?'"$filter_regex"'($|\\.)")) | .ref | match("refs/tags/v?(.*)").captures[0].string)[]' \
| grep -xE '[.0-9]+' \
| sort --version-sort \
| tail -n 1
}
[ -z "${DEBUG:-}" ] || set -x [ -z "${DEBUG:-}" ] || set -x
mkdir -p "$builddir" mkdir -p "$builddir"
python_version_filter=$(cat .python-version)
python_version=$(_latest_python_version "$python_version_filter")
if [ -z "$python_version" ]; then
echo >&2 "No Python version found matching the filter: $python_version_filter"
exit 1
fi
githash_short=$(git rev-parse --short HEAD)
githash_long=$(git rev-parse HEAD)
version="$githash_short"
echo "$version" >"$builddir"/version
poetry export \ poetry export \
--with=build \ --with=build \
--output="$builddir"/requirements.txt --output="$builddir"/requirements.txt
githash=$(git rev-parse --short HEAD)
today=$(date -u '+%Y.%m.%d')
version="${today}+${githash}"
echo "$version" >"$builddir"/version
$DOCKER_BIN build \ $DOCKER_BIN build \
--pull \ --pull \
--tag "code.dumpr.org/ducklet/unwind":"$version" \ --build-arg="PYTHON_VERSION=$python_version" \
--label="python.version=$python_version" \
--label="git.hash=$githash_long" \
--tag="code.dumpr.org/ducklet/unwind":"$version" \
. .

View file

@ -1,6 +1,7 @@
#!/bin/sh -eu #!/bin/sh -eu
: "${DOCKER_BIN:=docker}" : "${DOCKER_BIN:=docker}"
: "${UNWIND_PORT:=8097}"
cd "$RUN_DIR" cd "$RUN_DIR"
@ -8,11 +9,18 @@ cd "$RUN_DIR"
version=$(cat build/version) version=$(cat build/version)
localhost=127.0.0.1
localport=8000
netloc="$localhost:$localport"
echo >&2 "Unwind will be available on http://$netloc/
"
$DOCKER_BIN run \ $DOCKER_BIN run \
--init \ --init \
-it --rm \ -it --rm \
--read-only \ --read-only \
--memory '500m' \ --memory '500m' \
--publish 127.0.0.1:8000:8000 \ --publish "$netloc":"$UNWIND_PORT" \
--volume "$RUN_DIR"/data:/data \ --volume "$RUN_DIR"/data:/data \
"code.dumpr.org/ducklet/unwind":"$version" "code.dumpr.org/ducklet/unwind":"$version"