From 3aa489008f0a25ce58351034962c6b1903a27aa7 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 20 Jul 2026 12:51:34 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(ci):=20code-review=20checkout=E6=94=B9?= =?UTF-8?q?=E7=94=A8tarball+5=E6=AC=A1=E9=87=8D=E8=AF=95=EF=BC=8C=E6=9B=BF?= =?UTF-8?q?=E4=BB=A3actions/checkout@v3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/code-review.yml | 51 ++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/code-review.yml b/.gitea/workflows/code-review.yml index fcc59cdad..d7c6ca1e7 100644 --- a/.gitea/workflows/code-review.yml +++ b/.gitea/workflows/code-review.yml @@ -20,10 +20,51 @@ jobs: if: ${{ !gitea.event.pull_request.draft }} steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 + - name: Checkout code + shell: sh + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + set -eu + python3 - <<'PY' + import io, os, tarfile, time, urllib.request, urllib.error + url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz" + request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"}) + last_err = None + for attempt in range(5): + try: + with urllib.request.urlopen(request, timeout=120) as response: + archive = response.read() + break + except urllib.error.HTTPError as e: + last_err = e + if e.code >= 500 and attempt < 4: + wait = 2 ** attempt + print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...") + time.sleep(wait) + continue + raise + except Exception as e: + last_err = e + if attempt < 4: + wait = 2 ** attempt + print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...") + time.sleep(wait) + continue + raise + else: + raise last_err + with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar: + root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/' + for member in tar.getmembers(): + name = member.name + if name == root_prefix[:-1]: + continue + if name.startswith(root_prefix): + member.name = name[len(root_prefix):] + if member.name: + tar.extract(member, '.') + PY - name: Install dependencies run: | @@ -51,6 +92,7 @@ jobs: python3 scripts/ci_code_review.py # 审查脚本异常不影响 CI 通过 continue-on-error: true + - name: Report CI trace if: always() shell: sh @@ -62,4 +104,3 @@ jobs: START_TIME="" [ -f /tmp/ci_job_start_time ] && START_TIME=$(cat /tmp/ci_job_start_time) python3 scripts/ci/ci_trace_report.py --service xiaoxia-saas-ci --status $STATUS --start-time "$START_TIME" || true - -- 2.54.0 From 52405bb02acfc97c8166b46e9da30221c7f93ba9 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 20 Jul 2026 13:18:07 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(ci):=20code-review=20tarball=20checkout?= =?UTF-8?q?=E6=94=B9=E7=94=A8gitea.server=5Furl=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=86=85Connection=20refused?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/code-review.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/code-review.yml b/.gitea/workflows/code-review.yml index d7c6ca1e7..fcafb6275 100644 --- a/.gitea/workflows/code-review.yml +++ b/.gitea/workflows/code-review.yml @@ -24,11 +24,16 @@ jobs: shell: sh env: GITHUB_TOKEN: ${{ github.token }} + GITEA_SERVER_URL: ${{ gitea.server_url }} run: | set -eu python3 - <<'PY' import io, os, tarfile, time, urllib.request, urllib.error - url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz" + # 用 gitea.server_url(公网地址)替代 GITHUB_API_URL(容器内可能不可达) + server_url = os.environ.get('GITEA_SERVER_URL', '').rstrip('/') + repo = os.environ['GITHUB_REPOSITORY'] + sha = os.environ['GITHUB_SHA'] + url = f"{server_url}/api/v1/repos/{repo}/archive/{sha}.tar.gz" request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"}) last_err = None for attempt in range(5): -- 2.54.0 From 72e613f4b6b5929ae7cf5a16fd009d6e785c30b1 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Mon, 20 Jul 2026 13:34:02 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix(ci):=20code-review=E6=8D=A2=E5=9B=9Eact?= =?UTF-8?q?ions/checkout@v3=EF=BC=88runner=E5=B1=82=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=8D=E5=8F=97=E5=AE=B9=E5=99=A8=E7=BD=91=E7=BB=9C=E5=BD=B1?= =?UTF-8?q?=E5=93=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/code-review.yml | 53 +++----------------------------- 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/.gitea/workflows/code-review.yml b/.gitea/workflows/code-review.yml index fcafb6275..07daa8bd5 100644 --- a/.gitea/workflows/code-review.yml +++ b/.gitea/workflows/code-review.yml @@ -20,56 +20,11 @@ jobs: if: ${{ !gitea.event.pull_request.draft }} steps: + # actions/checkout 由 runner 在宿主机层面处理,不受容器网络影响 - name: Checkout code - shell: sh - env: - GITHUB_TOKEN: ${{ github.token }} - GITEA_SERVER_URL: ${{ gitea.server_url }} - run: | - set -eu - python3 - <<'PY' - import io, os, tarfile, time, urllib.request, urllib.error - # 用 gitea.server_url(公网地址)替代 GITHUB_API_URL(容器内可能不可达) - server_url = os.environ.get('GITEA_SERVER_URL', '').rstrip('/') - repo = os.environ['GITHUB_REPOSITORY'] - sha = os.environ['GITHUB_SHA'] - url = f"{server_url}/api/v1/repos/{repo}/archive/{sha}.tar.gz" - request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"}) - last_err = None - for attempt in range(5): - try: - with urllib.request.urlopen(request, timeout=120) as response: - archive = response.read() - break - except urllib.error.HTTPError as e: - last_err = e - if e.code >= 500 and attempt < 4: - wait = 2 ** attempt - print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...") - time.sleep(wait) - continue - raise - except Exception as e: - last_err = e - if attempt < 4: - wait = 2 ** attempt - print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...") - time.sleep(wait) - continue - raise - else: - raise last_err - with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar: - root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/' - for member in tar.getmembers(): - name = member.name - if name == root_prefix[:-1]: - continue - if name.startswith(root_prefix): - member.name = name[len(root_prefix):] - if member.name: - tar.extract(member, '.') - PY + uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Install dependencies run: | -- 2.54.0