Обновлен файл 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
|
- develop
|
||||||
tags:
|
tags:
|
||||||
- 'v*'
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
tag:
|
tag:
|
||||||
@ -42,6 +46,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
||||||
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT
|
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
|
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
|
||||||
tag=${GITHUB_REF#refs/tags/}
|
tag=${GITHUB_REF#refs/tags/}
|
||||||
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${tag},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_OUTPUT
|
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${tag},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_OUTPUT
|
||||||
@ -58,7 +65,7 @@ jobs:
|
|||||||
context: .
|
context: .
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
push: true
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
tags: ${{ steps.tags.outputs.tags }}
|
tags: ${{ steps.tags.outputs.tags }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
@ -70,7 +77,14 @@ jobs:
|
|||||||
- name: Summary
|
- name: Summary
|
||||||
run: |
|
run: |
|
||||||
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
|
echo "## Docker Build Summary" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Event:** ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Registry:** ${{ env.REGISTRY }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Image:** ${{ env.IMAGE_NAME }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **Image:** ${{ env.IMAGE_NAME }}" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **Tags:** ${{ steps.tags.outputs.tags }}" >> $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
|
1. `docker-build.yml` - для публикации в Docker Hub
|
||||||
2. `docker-build-local.yml` - для публикации в локальный registry
|
2. `docker-build-local.yml` - для публикации в локальный registry
|
||||||
|
3. `pull-request-check.yml` - для проверки сборки в pull request (только тестирование)
|
||||||
|
|
||||||
## Настройка
|
## Настройка
|
||||||
|
|
||||||
@ -63,8 +64,10 @@ env:
|
|||||||
2. **Создание тегов начинающихся с `v`** (например, `v1.0.0`)
|
2. **Создание тегов начинающихся с `v`** (например, `v1.0.0`)
|
||||||
- Создает образы с семантическими тегами: `1.0.0`, `1.0`, `1`, `latest`
|
- Создает образы с семантическими тегами: `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 ветки
|
- `latest` - только для main ветки
|
||||||
- `main`, `develop` - соответствующие ветки
|
- `main`, `develop` - соответствующие ветки
|
||||||
- `v1.0.0`, `1.0.0`, `1.0`, `1` - семантические версии
|
- `v1.0.0`, `1.0.0`, `1.0`, `1` - семантические версии
|
||||||
- `pr-123` - для pull requests
|
- `pr-123` - для pull requests (не публикуется)
|
||||||
|
|
||||||
### Локальный registry workflow:
|
### Локальный registry workflow:
|
||||||
- `latest` - для main ветки и версионных тегов
|
- `latest` - для main ветки и версионных тегов
|
||||||
- `main`, `develop` - соответствующие ветки
|
- `main`, `develop` - соответствующие ветки
|
||||||
- Версионные теги как есть (`v1.0.0`)
|
- Версионные теги как есть (`v1.0.0`)
|
||||||
|
- `pr-123` - для pull requests (не публикуется)
|
||||||
- Произвольные теги при ручном запуске
|
- Произвольные теги при ручном запуске
|
||||||
|
|
||||||
|
### Pull Request Check workflow:
|
||||||
|
- Только сборка и тестирование (не публикация)
|
||||||
|
- Валидация Dockerfile
|
||||||
|
- Проверка зависимостей
|
||||||
|
- Базовые проверки безопасности
|
||||||
|
|
||||||
## Оптимизация
|
## Оптимизация
|
||||||
|
|
||||||
### Кэширование
|
### Кэширование
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user