Files
cms-SiteForge/.github/workflows/ci.yml
T
浅念 5c7643fcf2 upgrade: adopt V8.12.0-dev.1 (V8.11 unified professional UI + V8.12 workflow usability)
- Overlay 26 changed files from SiteForge_Enterprise_V8_12 (UI layer only:
  professional-ui.js/css, workspace/factory-v2/operations/editor templates,
  +2 test files, compose/ci/scripts/docs)
- Re-apply v8_workflows type-mapping fix (类型/分类) lost in upgrade
- Pin compose project name to siteforge-v8-10 so existing data volumes
  (hesupipe site 483295c29ea0, 193 entries) keep attached
- Drop stray .s10_* state files; ignore .s10_*/.sf_*/.s87_* patterns
- Plan/spec revisions per plan-review round 1 (icons are new design,
  real test assertions, recorded deviations)

Tests: 226 passed / 1 env-only failure (test needs node binary in PATH,
absent in python:3.12-slim container; host node v24 --check all 9 JS OK)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-22 17:02:45 +08:00

91 lines
3.5 KiB
YAML

name: SiteForge quality gates
on:
push:
pull_request:
permissions:
contents: read
jobs:
tests:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
python: ['3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
cache: pip
- name: Install locked dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements-dev.lock
python -m pip check
- name: Validate Python and tests
env:
SITEFORGE_ADMIN_PASSWORD: administrator-strong-password-for-ci
SITEFORGE_SESSION_SECRET: ci-only-session-key-not-for-production-with-entropy
run: |
bash scripts/check.sh
container:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Validate Compose
env:
SITEFORGE_ADMIN_PASSWORD: ci-test-only-not-production
SITEFORGE_SESSION_SECRET: ci-test-only-session-key-not-for-production-123456
SITEFORGE_PG_PASSWORD: ci-postgresql-password
SITEFORGE_DEPLOY_SECRET: ci-release-secret-should-not-be-used-in-production
run: |
docker compose config --quiet
docker compose -f compose.enterprise.yaml config --quiet
docker compose -f compose.release-agent.yaml config --quiet
- name: One-command Compose build and start smoke
env:
SITEFORGE_ADMIN_PASSWORD: ci-test-only-not-production
SITEFORGE_SESSION_SECRET: ci-test-only-session-key-not-for-production-123456
run: |
docker compose up -d --build
for n in $(seq 1 45); do
web=$(docker inspect --format='{{.State.Health.Status}}' "$(docker compose ps -q siteforge)" 2>/dev/null || true)
worker=$(docker inspect --format='{{.State.Health.Status}}' "$(docker compose ps -q worker)" 2>/dev/null || true)
if [ "$web" = healthy ] && [ "$worker" = healthy ]; then break; fi
sleep 2
done
test "$web" = healthy && test "$worker" = healthy
docker compose exec -T siteforge python -c "import json,urllib.request; data=json.load(urllib.request.urlopen('http://127.0.0.1:8787/api/health')); assert data['version']=='8.12.0-dev.1' and data.get('commit')"
- name: Stop Compose smoke
if: always()
env:
SITEFORGE_ADMIN_PASSWORD: ci-test-only-not-production
SITEFORGE_SESSION_SECRET: ci-test-only-session-key-not-for-production-123456
run: docker compose down -v --remove-orphans
postgres-smoke:
runs-on: ubuntu-24.04
services:
postgres:
image: postgres:16.9-alpine
env:
POSTGRES_USER: siteforge
POSTGRES_PASSWORD: postgres-ci-only
POSTGRES_DB: siteforge_ci
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U siteforge -d siteforge_ci"
--health-interval 10s --health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install pinned dependencies and PG driver
run: pip install -r requirements.lock -r requirements-enterprise.txt
- name: Bootstrap PG and verify transactional queue
env:
SITEFORGE_DATABASE_URL: postgresql://siteforge:postgres-ci-only@127.0.0.1:5432/siteforge_ci
run: python scripts/verify_pg_bootstrap.py