From 77c663b9b72f96a16ffcb5d33226eb6c0a04ba70 Mon Sep 17 00:00:00 2001 From: Jesse_Chen Date: Wed, 5 Aug 2026 15:48:09 +0800 Subject: [PATCH] Install Python headers for Gitea CI --- .gitea/workflows/backend-quality-gate.yml | 3 +++ frontend/tests/staging-backend-workflows.test.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/.gitea/workflows/backend-quality-gate.yml b/.gitea/workflows/backend-quality-gate.yml index 115837b8..387e8f44 100644 --- a/.gitea/workflows/backend-quality-gate.yml +++ b/.gitea/workflows/backend-quality-gate.yml @@ -59,6 +59,9 @@ jobs: packages+=(python3-venv) fi rm -rf "$venv_probe" + if ! python3 -c 'import pathlib, sysconfig; assert pathlib.Path(sysconfig.get_path("include"), "Python.h").is_file()'; then + packages+=(python3-dev) + fi if [ "${#packages[@]}" -gt 0 ]; then apt-get -o Acquire::Retries=3 -o Acquire::http::Timeout=30 \ -o Acquire::https::Timeout=30 update diff --git a/frontend/tests/staging-backend-workflows.test.ts b/frontend/tests/staging-backend-workflows.test.ts index 95a89f02..94987121 100644 --- a/frontend/tests/staging-backend-workflows.test.ts +++ b/frontend/tests/staging-backend-workflows.test.ts @@ -145,6 +145,7 @@ test("Gitea quality gate validates before publishing an immutable ACR manifest", assert.match(workflow, /packages\+=\(docker-compose-v2\)/); assert.match(workflow, /python3 -m venv "\$venv_probe\/venv"/); assert.match(workflow, /packages\+=\(python3-venv\)/); + assert.match(workflow, /sysconfig\.get_path\("include"\)[\s\S]*packages\+=\(python3-dev\)/); assert.match(workflow, /apt-get install -y --no-install-recommends[\s\S]*"\$\{packages\[@\]\}"/); assert.doesNotMatch(workflow, /packages\+=\((?:nodejs|npm)\)|apt-get install[^\n]*(?:nodejs|npm)/); assert.equal((workflow.match(/NODE_TOOL_SOURCE_IMAGE: swr\.cn-north-4\.myhuaweicloud\.com\/ddn-k8s\/docker\.io\/library\/node:22-bookworm-slim@sha256:ef343465b6a14bbdf2ab52f6e100ec0659a792464fcf72c462370d88b3df909c/g) ?? []).length, 2);