From 32d6d0eb9d7bc4431fc57cd7d3eb6e625a077528 Mon Sep 17 00:00:00 2001 From: Xiaoxia AI Date: Sat, 20 Jun 2026 19:03:52 +0800 Subject: [PATCH] fix(ci): checkout without git in slim runner image --- .gitea/workflows/ci-cd.yml | 26 ++++++++++++++++++++++++-- .github/workflows/ci-cd.yml | 28 +++++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index 9b73a99e2..9769a493c 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -23,8 +23,30 @@ jobs: steps: - name: Checkout code run: | - git clone --depth=1 --branch=${GITHUB_REF_NAME} https://api.xiaoxiajianji.com/git/${GITHUB_REPOSITORY}.git . - git checkout ${GITHUB_SHA} + python - <<'PY' + import os + import tarfile + import urllib.request + + api_url = os.environ['GITHUB_API_URL'] + repository = os.environ['GITHUB_REPOSITORY'] + sha = os.environ['GITHUB_SHA'] + token = os.environ.get('GITHUB_TOKEN', '') + archive_url = f"{api_url}/repos/{repository}/archive/{sha}.tar.gz" + request = urllib.request.Request(archive_url) + if token: + request.add_header('Authorization', f'token {token}') + with urllib.request.urlopen(request, timeout=120) as response: + with open('/tmp/repo.tar.gz', 'wb') as archive: + archive.write(response.read()) + with tarfile.open('/tmp/repo.tar.gz', 'r:gz') as archive: + members = archive.getmembers() + top_level = members[0].name.split('/')[0] + '/' + for member in members: + member.name = member.name.removeprefix(top_level) + if member.name: + archive.extract(member, '.') + PY - name: Prepare environment run: | diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index b15782ed6..9769a493c 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -18,13 +18,35 @@ jobs: validate: name: Validate Code Quality And Tests runs-on: ubuntu-latest - container: catthehacker/ubuntu:act-latest + container: python:3.12-slim steps: - name: Checkout code run: | - git clone --depth=1 --branch=${GITHUB_REF_NAME} https://api.xiaoxiajianji.com/git/${GITHUB_REPOSITORY}.git . - git checkout ${GITHUB_SHA} + python - <<'PY' + import os + import tarfile + import urllib.request + + api_url = os.environ['GITHUB_API_URL'] + repository = os.environ['GITHUB_REPOSITORY'] + sha = os.environ['GITHUB_SHA'] + token = os.environ.get('GITHUB_TOKEN', '') + archive_url = f"{api_url}/repos/{repository}/archive/{sha}.tar.gz" + request = urllib.request.Request(archive_url) + if token: + request.add_header('Authorization', f'token {token}') + with urllib.request.urlopen(request, timeout=120) as response: + with open('/tmp/repo.tar.gz', 'wb') as archive: + archive.write(response.read()) + with tarfile.open('/tmp/repo.tar.gz', 'r:gz') as archive: + members = archive.getmembers() + top_level = members[0].name.split('/')[0] + '/' + for member in members: + member.name = member.name.removeprefix(top_level) + if member.name: + archive.extract(member, '.') + PY - name: Prepare environment run: |