Обновлен файл README_GITEA_ACTIONS.md для добавления информации о новом workflow проверки pull request. Изменен файл docker-build-local.yml для поддержки сборки образов при создании pull request. Эти изменения улучшают документацию и функциональность CI/CD процесса.

This commit is contained in:
Vlad 2025-06-07 08:19:47 +03:00
parent d059e7b1be
commit cbd5cf5577
3 changed files with 141 additions and 6 deletions

View File

@ -7,6 +7,10 @@ on:
- develop
tags:
- 'v*'
pull_request:
branches:
- main
- develop
workflow_dispatch:
inputs:
tag:
@ -42,6 +46,9 @@ jobs:
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
pr_number=${{ github.event.number }}
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:pr-${pr_number}" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
tag=${GITHUB_REF#refs/tags/}
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${tag},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_OUTPUT
@ -58,7 +65,7 @@ jobs:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.tags.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
@ -70,7 +77,14 @@ jobs:
- name: Summary
run: |
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
echo "- **Event:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
echo "- **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
echo "- **Image:** ${{ env.IMAGE_NAME }}" >> $GITHUB_STEP_SUMMARY
echo "- **Tags:** ${{ steps.tags.outputs.tags }}" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "- **PR Number:** #${{ github.event.number }}" >> $GITHUB_STEP_SUMMARY
echo "- **Action:** Build only (no push)" >> $GITHUB_STEP_SUMMARY
else
echo "- **Action:** Build and push" >> $GITHUB_STEP_SUMMARY
fi

View File

@ -0,0 +1,111 @@
name: Pull Request Checks
on:
pull_request:
branches:
- main
- develop
paths-ignore:
- '**.md'
- '.gitignore'
- 'LICENSE'
jobs:
docker-build-test:
runs-on: ubuntu-latest
name: Test Docker Build
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image (test only)
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: false
tags: salvagedb-bot:pr-${{ github.event.number }}
cache-from: type=gha
cache-to: type=gha,mode=max
outputs: type=docker,dest=/tmp/image.tar
- name: Test image
run: |
docker load -i /tmp/image.tar
echo "✅ Docker image built successfully"
docker images salvagedb-bot:pr-${{ github.event.number }}
- name: Validate Dockerfile
run: |
echo "🔍 Checking Dockerfile best practices..."
if command -v hadolint >/dev/null 2>&1; then
hadolint Dockerfile || echo "⚠️ Hadolint not available, skipping Dockerfile linting"
else
echo " Basic Dockerfile validation..."
if grep -q "FROM python:" Dockerfile; then
echo "✅ Base image specified"
fi
if grep -q "WORKDIR" Dockerfile; then
echo "✅ Working directory set"
fi
if grep -q "USER" Dockerfile; then
echo "✅ Non-root user configured"
fi
fi
- name: Check requirements.txt
run: |
echo "📦 Checking Python dependencies..."
if [ -f requirements.txt ]; then
echo "✅ requirements.txt found"
echo "Dependencies count: $(wc -l < requirements.txt)"
echo "🔍 Checking for potential security issues..."
if grep -i "django\|flask\|fastapi" requirements.txt; then
echo " Web framework detected"
fi
else
echo "❌ requirements.txt not found"
exit 1
fi
- name: Security check
run: |
echo "🔒 Basic security checks..."
# Проверяем отсутствие секретов в коде
echo "Checking for potential secrets..."
if grep -r -i "password\|secret\|key\|token" --include="*.py" --include="*.sh" . | grep -v ".git" | grep -v "requirements.txt"; then
echo "⚠️ Potential secrets found in code - please review"
else
echo "✅ No obvious secrets found"
fi
# Проверяем Dockerfile на базовые практики безопасности
if grep -q "USER.*root" Dockerfile; then
echo "⚠️ Running as root user detected"
else
echo "✅ Non-root user configuration"
fi
- name: PR Summary
run: |
echo "## 🚀 Pull Request Build Summary" >> $GITHUB_STEP_SUMMARY
echo "- **PR Number:** #${{ github.event.number }}" >> $GITHUB_STEP_SUMMARY
echo "- **Target Branch:** ${{ github.base_ref }}" >> $GITHUB_STEP_SUMMARY
echo "- **Source Branch:** ${{ github.head_ref }}" >> $GITHUB_STEP_SUMMARY
echo "- **Docker Build:** ✅ Successful" >> $GITHUB_STEP_SUMMARY
echo "- **Image Tag:** \`salvagedb-bot:pr-${{ github.event.number }}\`" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📋 Checks Performed:" >> $GITHUB_STEP_SUMMARY
echo "- ✅ Docker image builds without errors" >> $GITHUB_STEP_SUMMARY
echo "- ✅ Dockerfile validation" >> $GITHUB_STEP_SUMMARY
echo "- ✅ Dependencies check" >> $GITHUB_STEP_SUMMARY
echo "- ✅ Basic security scan" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Note:** This is a test build only. No images were pushed to registry." >> $GITHUB_STEP_SUMMARY

View File

@ -2,10 +2,11 @@
## Обзор
В проекте настроены два workflow для автоматической сборки Docker образов:
В проекте настроены три workflow для автоматической сборки Docker образов:
1. `docker-build.yml` - для публикации в Docker Hub
2. `docker-build-local.yml` - для публикации в локальный registry
3. `pull-request-check.yml` - для проверки сборки в pull request (только тестирование)
## Настройка
@ -63,8 +64,10 @@ env:
2. **Создание тегов начинающихся с `v`** (например, `v1.0.0`)
- Создает образы с семантическими тегами: `1.0.0`, `1.0`, `1`, `latest`
3. **Pull Request в `main`**
- Собирает образ для тестирования (не публикует)
3. **Pull Request в `main` или `develop`**
- **docker-build.yml**: собирает образ для тестирования (не публикует)
- **docker-build-local.yml**: собирает образ с тегом `pr-XXX` (не публикует)
- **pull-request-check.yml**: полная проверка сборки + валидация + тесты безопасности
### Ручной запуск:
@ -78,14 +81,21 @@ env:
- `latest` - только для main ветки
- `main`, `develop` - соответствующие ветки
- `v1.0.0`, `1.0.0`, `1.0`, `1` - семантические версии
- `pr-123` - для pull requests
- `pr-123` - для pull requests (не публикуется)
### Локальный registry workflow:
- `latest` - для main ветки и версионных тегов
- `main`, `develop` - соответствующие ветки
- Версионные теги как есть (`v1.0.0`)
- `pr-123` - для pull requests (не публикуется)
- Произвольные теги при ручном запуске
### Pull Request Check workflow:
- Только сборка и тестирование (не публикация)
- Валидация Dockerfile
- Проверка зависимостей
- Базовые проверки безопасности
## Оптимизация
### Кэширование