name: contract-openapi # Контракт OpenAPI 3.1 (issue #19): линтеры, контрактный тест «схема ↔ реализация» # и проверка, что сгенерированный TS-клиент актуален относительно docs/openapi.yaml. # # Обход дефекта Gitea git-http (issue #59): `git-upload-pack` отдаёт пустой pack # (`bad pack header`), из-за чего actions/checkout падает и оба job'а красные на любом # коммите. Основной путь оставлен, но при падении checkout источники забираются # архивом `/archive/.tar.gz` — тот же приём, что в .gitea/workflows/ci.yml. on: push: branches: - "**" pull_request: branches: - main workflow_dispatch: jobs: contract: name: openapi-contract runs-on: ubuntu-latest steps: - name: checkout id: checkout uses: actions/checkout@v4 continue-on-error: true - name: "checkout fallback (archive tarball)" if: steps.checkout.outcome == 'failure' run: | set -euo pipefail curl -fsSL -o /tmp/src.tar.gz "http://192.168.1.111:3000/${GITHUB_REPOSITORY}/archive/${GITHUB_SHA}.tar.gz" tar -xzf /tmp/src.tar.gz --strip-components=1 -C . echo "sources: archive fallback, $(ls -1 | wc -l) entries" - name: python 3.12 uses: actions/setup-python@v5 with: python-version: "3.12" - name: install dependencies run: | python -m pip install --upgrade pip pip install -r requirements-dev.txt -r requirements-contract.txt - name: lint (ruff + mypy) run: | ruff check backend ruff format --check backend mypy backend - name: contract and unit tests (coverage >= 70%) run: pytest ts-client: name: ts-client-is-current runs-on: ubuntu-latest steps: - name: checkout id: checkout uses: actions/checkout@v4 continue-on-error: true - name: "checkout fallback (archive tarball)" if: steps.checkout.outcome == 'failure' run: | set -euo pipefail curl -fsSL -o /tmp/src.tar.gz "http://192.168.1.111:3000/${GITHUB_REPOSITORY}/archive/${GITHUB_SHA}.tar.gz" tar -xzf /tmp/src.tar.gz --strip-components=1 -C . echo "sources: archive fallback, $(ls -1 | wc -l) entries" - name: node 20 uses: actions/setup-node@v4 with: node-version: "20" - name: regenerate client and compare run: | set -euo pipefail target="ui/src/api/generated/schema.d.ts" if [ -d .git ]; then bash ui/scripts/generate-api.sh git diff --exit-code -- "$target" else sha256sum "$target" > /tmp/before.sha bash ui/scripts/generate-api.sh sha256sum -c /tmp/before.sha fi