Увеличить таймаут Trivy в CI
Some checks failed
Проверка, сборка и развёртывание Magistr / Обязательные проверки (push) Successful in 1m11s
Проверка, сборка и развёртывание Magistr / Собрать backend image (push) Successful in 22s
Проверка, сборка и развёртывание Magistr / Собрать frontend image (push) Successful in 13s
Проверка, сборка и развёртывание Magistr / Проверить опубликованные образы (push) Failing after 5m6s
Проверка, сборка и развёртывание Magistr / Развернуть проверенные digests (push) Has been skipped

This commit is contained in:
Zuev
2026-07-30 00:50:57 +03:00
parent c3f477788e
commit 0180b450b3
7 changed files with 158 additions and 60 deletions

View File

@@ -69,6 +69,8 @@ require_count() {
}
check_workflow_gates() {
local security_timeout
require_file "$WORKFLOW" || return
require_file "$CI_CONTAINER_SCRIPT" || return
require_file "$CI_CONTAINER_TEST" || return
@@ -77,8 +79,8 @@ check_workflow_gates() {
"для обоих образов должна публиковаться SBOM attestation"
require_count '^[[:space:]]+provenance:[[:space:]]+mode=max$' 2 \
"для обоих образов должна публиковаться provenance attestation"
require_count 'image --scanners vuln --exit-code 1 --severity HIGH,CRITICAL' 2 \
"оба образа должны проходить блокирующее HIGH/CRITICAL-сканирование"
require_count 'image --timeout 15m --scanners vuln --exit-code 1 --severity HIGH,CRITICAL' 2 \
"оба образа должны проходить блокирующее HIGH/CRITICAL-сканирование с достаточным таймаутом"
require_count 'TRIVY_IMAGE: [^[:space:]]+@sha256:[0-9a-f]{64}$' 1 \
"образ Trivy должен быть закреплён digest"
require_count 'MAVEN_IMAGE: [^[:space:]]+@sha256:[0-9a-f]{64}$' 1 \
@@ -92,6 +94,23 @@ check_workflow_gates() {
require_count '--env DOCKER_CONFIG=/workspace' 2 \
"оба Trivy scan должны получать registry credentials через Docker API"
security_timeout=$(awk '
$0 == " security-scan:" {
in_job = 1
next
}
in_job && $0 ~ /^ [[:alnum:]_-]+:$/ {
exit
}
in_job && $1 == "timeout-minutes:" {
print $2
exit
}
' "$WORKFLOW")
if [[ "$security_timeout" != "35" ]]; then
fail "security-scan job должен иметь таймаут 35 минут"
fi
if grep -Fq '${{ github.workspace }}' "$WORKFLOW" \
|| grep -Fq -- '-v "$HOME' "$WORKFLOW"; then
fail "нельзя использовать пути job-контейнера в bind mount внешнего Docker daemon"

View File

@@ -38,6 +38,8 @@ if PROJECT_ROOT="$FIXTURE_DIR" bash "$CHECK_SCRIPT" >/dev/null 2>&1; then
fi
cp "$ROOT_DIR/backend/Dockerfile" "$FIXTURE_DIR/backend/Dockerfile"
cp "$ROOT_DIR/.gitea/workflows/docker-build.yaml" \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
sed -i '/RUN apk upgrade --no-cache/d' "$FIXTURE_DIR/backend/Dockerfile"
if PROJECT_ROOT="$FIXTURE_DIR" bash "$CHECK_SCRIPT" >/dev/null 2>&1; then
printf 'Ошибка теста: отсутствие Alpine security updates не было отклонено\n' >&2
@@ -45,6 +47,24 @@ if PROJECT_ROOT="$FIXTURE_DIR" bash "$CHECK_SCRIPT" >/dev/null 2>&1; then
fi
cp "$ROOT_DIR/backend/Dockerfile" "$FIXTURE_DIR/backend/Dockerfile"
cp "$ROOT_DIR/.gitea/workflows/docker-build.yaml" \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
sed -i '0,/image --timeout 15m --scanners vuln/{s/image --timeout 15m --scanners vuln/image --scanners vuln/;}' \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
if PROJECT_ROOT="$FIXTURE_DIR" bash "$CHECK_SCRIPT" >/dev/null 2>&1; then
printf 'Ошибка теста: недостаточный таймаут Trivy не был отклонён\n' >&2
exit 1
fi
cp "$ROOT_DIR/.gitea/workflows/docker-build.yaml" \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
sed -i '0,/timeout-minutes: 35/s//timeout-minutes: 20/' \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
if PROJECT_ROOT="$FIXTURE_DIR" bash "$CHECK_SCRIPT" >/dev/null 2>&1; then
printf 'Ошибка теста: недостаточный таймаут security-scan job не был отклонён\n' >&2
exit 1
fi
cp "$ROOT_DIR/.gitea/workflows/docker-build.yaml" \
"$FIXTURE_DIR/.gitea/workflows/docker-build.yaml"
sed -i "/gitea.event_name == 'workflow_dispatch'/d" \