Sprint 0 / #17: CI-пайплайн с гейтами (lint, unit+coverage>=70%, security, build, image-scan, push) #60

Merged
embeddevio merged 8 commits from feat/17-ci into main 2026-10-29 21:09:27 +03:00
Showing only changes of commit 336df50ca0 - Show all commits
+21 -19
View File
@@ -248,35 +248,37 @@ jobs:
TRIVY_VERSION: "0.76.1" TRIVY_VERSION: "0.76.1"
TRIVY_SEVERITY: "HIGH,CRITICAL" TRIVY_SEVERITY: "HIGH,CRITICAL"
steps: steps:
- name: install trivy # trivy запускается официальным образом через docker-сокет: не требует
run: | # скачивания бинаря (github releases отдаёт медленно) + БД кэшируется в
set -euo pipefail # /opt/trivy-cache на build-хосте.
curl -fsSL -o /tmp/trivy.tar.gz \
"https://github.com/aquasecurity/trivy/releases/download/v${TRIVY_VERSION}/trivy_${TRIVY_VERSION}_Linux-64bit.tar.gz"
tar -xzf /tmp/trivy.tar.gz -C /usr/local/bin trivy
chmod +x /usr/local/bin/trivy
trivy --version
- name: "trivy image (HIGH/CRITICAL -> fail)" - name: "trivy image (HIGH/CRITICAL -> fail)"
run: | run: |
set -o pipefail set -o pipefail
IMAGE="${REGISTRY}/${IMAGE_NAME}:staging-${GITHUB_SHA::8}" IMAGE="${REGISTRY}/${IMAGE_NAME}:staging-${GITHUB_SHA::8}"
echo "scan: ${IMAGE}" echo "scan: ${IMAGE}"
trivy image \ docker run --rm \
--image-src docker \ -v /var/run/docker.sock:/var/run/docker.sock \
--scanners vuln \ -v /opt/trivy-cache:/root/.cache/trivy \
--severity "$TRIVY_SEVERITY" \ "aquasec/trivy:${TRIVY_VERSION}" image \
--ignore-unfixed \ --image-src docker --scanners vuln \
--exit-code 1 \ --severity "$TRIVY_SEVERITY" --ignore-unfixed \
--format table \ --exit-code 1 --format table "$IMAGE" 2>&1 | tee trivy-report.txt
"$IMAGE" 2>&1 | tee trivy-report.txt
- name: trivy json report - name: trivy json report
if: always() if: always()
run: | run: |
set -o pipefail
IMAGE="${REGISTRY}/${IMAGE_NAME}:staging-${GITHUB_SHA::8}" IMAGE="${REGISTRY}/${IMAGE_NAME}:staging-${GITHUB_SHA::8}"
trivy image --image-src docker --scanners vuln --severity "$TRIVY_SEVERITY" \ mkdir -p reports
--ignore-unfixed --format json -o trivy-report.json "$IMAGE" || true docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/trivy-cache:/root/.cache/trivy \
-v "$PWD/reports:/reports" \
"aquasec/trivy:${TRIVY_VERSION}" image \
--image-src docker --scanners vuln \
--severity "$TRIVY_SEVERITY" --ignore-unfixed \
--format json -o /reports/trivy-report.json "$IMAGE" || true
cp reports/trivy-report.json ./trivy-report.json 2>/dev/null || true
- name: upload trivy report - name: upload trivy report
if: always() if: always()