diff --git a/.forgejo/workflows/publish-image.yaml b/.forgejo/workflows/publish-image.yaml index fbe7c68..736326a 100644 --- a/.forgejo/workflows/publish-image.yaml +++ b/.forgejo/workflows/publish-image.yaml @@ -44,7 +44,14 @@ jobs: test "${#REF}" -eq 40 SHORT="${REF:0:7}" BUILD_ROOT="$(mktemp -d)" - trap 'rm -rf "${BUILD_ROOT}"' EXIT + PYTHON_CONTAINER="" + cleanup() { + if [ -n "${PYTHON_CONTAINER}" ] && [ -x "${HOME}/bin/docker" ]; then + "${HOME}/bin/docker" rm -f "${PYTHON_CONTAINER}" >/dev/null 2>&1 || true + fi + rm -rf "${BUILD_ROOT}" + } + trap cleanup EXIT BUILD_CONTEXT="${BUILD_ROOT}/buildctx" mkdir -p "${BUILD_CONTEXT}" "${HOME}/bin" @@ -58,16 +65,20 @@ jobs: export PATH="${HOME}/bin:${PATH}" docker version PYTHON_IMAGE="docker.io/library/python@sha256:d09d15e60962ca365d1cd544a48773bac9d33f2fb1b00f2aa0deec78ade7dc31" - docker run --rm \ - --volume "${BUILD_CONTEXT}:/workspace" \ - --workdir /workspace \ - "${PYTHON_IMAGE}" \ + PYTHON_CONTAINER="policy-source-fetch-${SHORT}-${GITHUB_RUN_ID:-0}" + docker create --name "${PYTHON_CONTAINER}" "${PYTHON_IMAGE}" sleep 300 + docker cp "${BUILD_CONTEXT}/." "${PYTHON_CONTAINER}:/workspace" + docker start "${PYTHON_CONTAINER}" + docker exec --workdir /workspace "${PYTHON_CONTAINER}" \ python3 tools/fetch_sources.py \ - --config source-inventory.config.json \ - --destination _sources \ - --policy-revision "${REF}" - NETKINGDOM_REVISION="$(docker run --rm --volume "${BUILD_CONTEXT}:/workspace" "${PYTHON_IMAGE}" python3 -c 'import json; print(json.load(open("/workspace/_sources/source-lock.json"))["repositories"]["net-kingdom"]["revision"])')" - SOURCE_SET_DIGEST="$(docker run --rm --volume "${BUILD_CONTEXT}:/workspace" "${PYTHON_IMAGE}" python3 -c 'import json; print(json.load(open("/workspace/_sources/source-lock.json"))["source_set_digest"])')" + --config source-inventory.config.json \ + --destination _sources \ + --policy-revision "${REF}" + NETKINGDOM_REVISION="$(docker exec "${PYTHON_CONTAINER}" python3 -c 'import json; print(json.load(open("/workspace/_sources/source-lock.json"))["repositories"]["net-kingdom"]["revision"])')" + SOURCE_SET_DIGEST="$(docker exec "${PYTHON_CONTAINER}" python3 -c 'import json; print(json.load(open("/workspace/_sources/source-lock.json"))["source_set_digest"])')" + docker cp "${PYTHON_CONTAINER}:/workspace/_sources" "${BUILD_CONTEXT}/" + docker rm -f "${PYTHON_CONTAINER}" + PYTHON_CONTAINER="" SOURCE_TAG="source-${SOURCE_SET_DIGEST}" REVISION_TAG="git-${REF}-sources-${SOURCE_SET_DIGEST:0:16}"