Files
xiaoxia-saas/.github/workflows/ci-cd.yml
T
2026-06-21 00:39:02 +08:00

80 lines
2.4 KiB
YAML

name: CI/CD Pipeline
on:
push:
branches:
- main
- develop
- 'feature/**'
- 'bugfix/**'
- 'hotfix/**'
- 'release/**'
pull_request:
branches:
- main
- develop
jobs:
validate:
name: Validate Code Quality And Tests
runs-on: ubuntu-latest
container: xiaoxia-ci-python:3.12
steps:
- name: Checkout code
run: |
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: Verify CI environment
run: |
python --version
python -m pip --version
python -m black --version
python -m isort --version-number
python -m flake8 --version
bandit --version
pytest --version
echo "✅ Prebuilt CI environment is ready"
- name: Run code quality checks
run: |
python -m compileall -q apps packages tests
python -m black --check apps packages tests
python -m isort --check-only apps packages tests
python -m flake8 apps packages tests --count --statistics
bandit -r apps packages -q
- name: Run tests
run: |
python -m pytest tests -q
- name: Build summary
if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/main'
run: |
echo "✅ Build completed successfully!"
echo "Branch: ${GITHUB_REF_NAME}"
echo "Commit: ${GITHUB_SHA}"