163 lines
5.9 KiB
YAML
163 lines
5.9 KiB
YAML
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
|