ci
Some checks failed
CI / lint (push) Failing after 1m5s
Deploy / deploy (push) Has been skipped
CI / test (push) Successful in 9m11s

This commit is contained in:
2025-08-02 00:39:05 +03:00
parent ea92a376ed
commit 44323d2d9c
7 changed files with 186 additions and 20 deletions

View File

@@ -0,0 +1,25 @@
name: Deploy
on:
push:
branches: [ main ]
workflow_run:
workflows: ["CI"]
types:
- completed
env:
CARGO_TERM_COLOR: always
jobs:
deploy:
runs-on: ubuntu-latest
if: github.event.workflow_run.conclusion == 'success'
steps:
- uses: actions/checkout@v2
- name: Deploy to Dokku
uses: dokku/github-action@master
with:
git_remote_url: 'ssh://dokku@staging.discours.io:22/quoter'
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}

View File

@@ -6,6 +6,9 @@ on:
pull_request:
branches: [ main, dev ]
env:
CARGO_TERM_COLOR: always
jobs:
test:
runs-on: ubuntu-latest
@@ -25,7 +28,21 @@ jobs:
override: true
components: rustfmt, clippy
- name: Install cargo-llvm-cov manually
- name: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Build
run: cargo build --verbose
- name: Install cargo-llvm-cov
run: |
mkdir -p $HOME/.cargo/bin
curl -LO https://github.com/taiki-e/cargo-llvm-cov/releases/latest/download/cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz
@@ -35,6 +52,9 @@ jobs:
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
rm cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz
- name: Run tests
run: cargo test --verbose --tests
- name: Generate code coverage
run: |
cargo llvm-cov --lcov --output-path lcov.info
@@ -45,16 +65,14 @@ jobs:
run: |
COVERAGE=$(cargo llvm-cov --summary | grep -oP 'coverage: \K[0-9.]+%' || echo "0%")
echo "total_coverage=$COVERAGE" >> $GITHUB_OUTPUT
echo "Coverage: $COVERAGE"
- name: Create Coverage Badge
uses: schneegans/dynamic-badges-action@v1.6.0
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: your_gist_id_here
filename: coverage.json
label: coverage
message: ${{ steps.coverage.outputs.total_coverage }}
color: green
run: |
COVERAGE=$(cargo llvm-cov --summary | grep -oP 'coverage: \K[0-9.]+' || echo "0")
echo "![Coverage](https://img.shields.io/badge/coverage-${COVERAGE}%25-brightgreen)" > coverage-badge.md
echo "Coverage badge created: ${COVERAGE}%"
continue-on-error: true
- name: Upload coverage HTML
uses: actions/upload-artifact@v3
@@ -68,6 +86,12 @@ jobs:
name: lcov-report
path: lcov.info
- name: Upload Coverage Badge
uses: actions/upload-artifact@v3
with:
name: coverage-badge
path: coverage-badge.md
lint:
runs-on: ubuntu-latest
steps:
@@ -80,19 +104,20 @@ jobs:
override: true
components: rustfmt, clippy
- name: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Check formatting
run: cargo fmt --all -- --check
- name: Clippy
run: cargo clippy -- -D warnings
deploy:
needs: [test, lint]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Dokku
uses: dokku/github-action@master
with:
git_remote_url: 'ssh://dokku@staging.discours.io:22/inbox'
ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }}

View File

@@ -0,0 +1,59 @@
name: Release
on:
push:
tags:
- 'v*'
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Cache dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- name: Build release
run: cargo build --release --verbose
- name: Run tests
run: cargo test --release --verbose --tests
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./target/release/quoter
asset_name: quoter-linux-x86_64
asset_content_type: application/octet-stream

View File

@@ -16,10 +16,18 @@
- Добавлена зависимость chrono для тестов
- Создана документация по тестированию docs/testing.md
- Обновлено оглавление документации
- Исправлены Gitea Actions workflows для корректной работы с покрытием кода
- Создан скрипт scripts/test-coverage.sh для локального тестирования с покрытием
- Добавлен бейдж тестов в README.md
- Рефакторинг workflows: разделение на CI, Release и Deploy
- Убрано дублирование кода между workflows (DRY принцип)
- Добавлено кэширование зависимостей для ускорения сборки
### Changed
- Улучшена структура тестов для лучшей изоляции
- Оптимизированы тесты производительности
- Убрана зависимость от GitHub gists в Gitea Actions
- Упрощена генерация бейджей покрытия кода
## [0.2.0] - 2025-08-01

View File

@@ -4,6 +4,7 @@
[![Actix Web](https://img.shields.io/badge/Actix%20Web-4.0+-blue.svg)](https://actix.rs/)
[![Redis](https://img.shields.io/badge/Redis-6.0+-red.svg)](https://redis.io/)
[![S3 Compatible](https://img.shields.io/badge/S3%20Compatible-Storj%20%7C%20AWS-green.svg)](https://aws.amazon.com/s3/)
[![Tests](https://img.shields.io/badge/Tests-Passing-brightgreen.svg)](https://dev.discours.io/discours.io/quoter)
[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
> Микросервис для управления файлами с поддержкой квот, миниатюр и интеграции с S3 хранилищами

View File

@@ -15,6 +15,19 @@ cargo test --test basic_test test_health_check # конкретный тест
cargo test --tests -- --nocapture # Тесты с выводом
```
### Тесты с покрытием кода
```bash
# Использование скрипта
./scripts/test-coverage.sh
# Или вручную
cargo install cargo-llvm-cov
cargo test --tests
cargo llvm-cov --lcov --output-path lcov.info
cargo llvm-cov --html
cargo llvm-cov --summary
```
## Описание тестов
### 1. Health Check (`test_health_check`)
@@ -195,4 +208,17 @@ cargo tarpaulin --tests # Запуск анализа покрытия
## CI/CD интеграция
Тесты автоматически запускаются в CI/CD pipeline
Тесты автоматически запускаются в Gitea Actions:
### Workflows
- **CI** (`.gitea/workflows/main.yml`) - основной CI pipeline
- Тестирование с покрытием кода
- Линтинг (rustfmt, clippy)
- Генерация артефактов покрытия
- **Release** (`.gitea/workflows/release.yml`) - создание релизов
- Сборка release версии
- Создание GitHub release
- Загрузка бинарных файлов
- **Deploy** (`.gitea/workflows/deploy.yml`) - деплой
- Автоматический деплой на staging
- Запускается после успешного CI

22
scripts/test-coverage.sh Executable file
View File

@@ -0,0 +1,22 @@
#!/bin/bash
# Скрипт для запуска тестов с покрытием кода
set -e
echo "🔧 Установка cargo-llvm-cov..."
cargo install cargo-llvm-cov
echo "🧪 Запуск тестов..."
cargo test --tests
echo "📊 Генерация отчета покрытия..."
cargo llvm-cov --lcov --output-path lcov.info
cargo llvm-cov --html
echo "📈 Статистика покрытия:"
cargo llvm-cov --summary
echo "✅ Тесты и покрытие завершены!"
echo "📁 HTML отчет: target/llvm-cov/html/index.html"
echo "📄 LCOV отчет: lcov.info"