CI-GATE.0-2: establish repository CI canary

This commit is contained in:
2026-08-04 19:01:59 +03:00
parent 64a5bdd04c
commit 49cc0e2fb8
9 changed files with 1637 additions and 15 deletions

View File

@@ -0,0 +1,162 @@
name: CI Required
# До отдельной приёмки canary workflow запускается только вручную.
on:
workflow_dispatch: {}
env:
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_CACHE_DIR: "1"
PIP_NO_INPUT: "1"
PYTHONDONTWRITEBYTECODE: "1"
jobs:
quality:
name: quality
runs-on: dzentra-python312
steps:
- name: Checkout закреплённой revision
uses: https://github.com/actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
fetch-depth: 1
persist-credentials: false
- name: Проверка контракта runner
run: |
set -euo pipefail
test "$(uname -s)" = "Linux"
command -v bash
command -v git
command -v grep
command -v node
command -v python3.12
command -v timeout
test "$(python3.12 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" = "3.12"
case "$(node --version)" in
v20.*) ;;
*) printf 'Требуется Node.js 20.\n' >&2; exit 1 ;;
esac
timeout --version | grep -q 'GNU coreutils'
python3.12 -c 'import socket; sock = socket.socket(); sock.bind(("127.0.0.1", 0)); sock.close()'
- name: Установка hash-locked environment
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 2m \
python3.12 -m venv app/.venv
timeout --signal=TERM --kill-after=30s 10m \
app/.venv/bin/python -m pip install \
--require-hashes \
-r app/requirements-dev.lock
app/.venv/bin/python -m pip check
- name: Quality gate
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 10m \
./scripts/run_ci_gate.sh quality
- name: Проверка отсутствия артефактов
run: |
set -euo pipefail
changes="$(git status --short --untracked-files=all)"
if [[ -n "${changes}" ]]; then
printf '%s\n' "${changes}" >&2
exit 1
fi
offline-regression:
name: offline-regression
runs-on: dzentra-python312
steps:
- name: Checkout закреплённой revision
uses: https://github.com/actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
fetch-depth: 1
persist-credentials: false
- name: Проверка контракта runner
run: |
set -euo pipefail
test "$(uname -s)" = "Linux"
command -v bash
command -v git
command -v grep
command -v node
command -v python3.12
command -v timeout
test "$(python3.12 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" = "3.12"
case "$(node --version)" in
v20.*) ;;
*) printf 'Требуется Node.js 20.\n' >&2; exit 1 ;;
esac
timeout --version | grep -q 'GNU coreutils'
python3.12 -c 'import socket; sock = socket.socket(); sock.bind(("127.0.0.1", 0)); sock.close()'
- name: Установка hash-locked environment
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 2m \
python3.12 -m venv app/.venv
timeout --signal=TERM --kill-after=30s 10m \
app/.venv/bin/python -m pip install \
--require-hashes \
-r app/requirements-dev.lock
app/.venv/bin/python -m pip check
- name: Offline regression
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 20m \
./scripts/run_ci_gate.sh offline-regression
- name: Проверка отсутствия артефактов
run: |
set -euo pipefail
changes="$(git status --short --untracked-files=all)"
if [[ -n "${changes}" ]]; then
printf '%s\n' "${changes}" >&2
exit 1
fi
loopback-integration:
name: loopback-integration
runs-on: dzentra-python312
steps:
- name: Checkout закреплённой revision
uses: https://github.com/actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
fetch-depth: 1
persist-credentials: false
- name: Проверка контракта runner
run: |
set -euo pipefail
test "$(uname -s)" = "Linux"
command -v bash
command -v git
command -v grep
command -v node
command -v python3.12
command -v timeout
test "$(python3.12 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" = "3.12"
case "$(node --version)" in
v20.*) ;;
*) printf 'Требуется Node.js 20.\n' >&2; exit 1 ;;
esac
timeout --version | grep -q 'GNU coreutils'
python3.12 -c 'import socket; sock = socket.socket(); sock.bind(("127.0.0.1", 0)); sock.close()'
- name: Установка hash-locked environment
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 2m \
python3.12 -m venv app/.venv
timeout --signal=TERM --kill-after=30s 10m \
app/.venv/bin/python -m pip install \
--require-hashes \
-r app/requirements-dev.lock
app/.venv/bin/python -m pip check
- name: Loopback integration
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 10m \
./scripts/run_ci_gate.sh loopback-integration
- name: Проверка отсутствия артефактов
run: |
set -euo pipefail
changes="$(git status --short --untracked-files=all)"
if [[ -n "${changes}" ]]; then
printf '%s\n' "${changes}" >&2
exit 1
fi