Обновлен файл README_GITEA_ACTIONS.md для добавления информации о новом workflow проверки pull request. Изменен файл docker-build-local.yml для поддержки сборки образов при создании pull request. Эти изменения улучшают документацию и функциональность CI/CD процесса.
This commit is contained in:
parent
d059e7b1be
commit
cbd5cf5577
@ -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
|
||||
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
|
||||
111
.gitea/workflows/pull-request-check.yml
Normal file
111
.gitea/workflows/pull-request-check.yml
Normal 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
|
||||
@ -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
|
||||
- Проверка зависимостей
|
||||
- Базовые проверки безопасности
|
||||
|
||||
## Оптимизация
|
||||
|
||||
### Кэширование
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user