跳到主要内容
知仓学习社ZHICANG

quarkus-verification

Verification loop for Quarkus projects: build, static analysis, tests with coverage, security scans, native compilation, and diff review before rele…

执行命令联网无严重或高危命中affaan-m/ECC

它会碰到什么

扫了多少1 个文本文件,11 KB
它会碰到什么执行命令联网
命中总数8 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Quarkus Doğrulama Döngüsü

PR'lardan önce, büyük değişikliklerden sonra ve deployment öncesi çalıştırın.

Ne Zaman Aktif Edilir

  • Quarkus servisi için pull request açmadan önce
  • Büyük refactoring veya bağımlılık yükseltmelerinden sonra
  • Staging veya production için deployment öncesi doğrulama
  • Tam build → lint → test → güvenlik taraması → native derleme pipeline'ı çalıştırma
  • Test kapsamının eşikleri karşıladığını doğrulama (%80+)
  • Native image uyumluluğunu test etme

Faz 1: Build

# Maven
mvn clean verify -DskipTests

# Gradle
./gradlew clean assemble -x test

Build başarısız olursa, durdurun ve derleme hatalarını düzeltin.

Faz 2: Static Analiz

Checkstyle, PMD, SpotBugs (Maven)

mvn checkstyle:check pmd:check spotbugs:check

SonarQube (yapılandırılmışsa)

mvn sonar:sonar \
  -Dsonar.projectKey=my-quarkus-project \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.login=${SONAR_TOKEN}

Ele Alınacak Yaygın Sorunlar

  • Kullanılmayan import'lar veya değişkenler
  • Karmaşık metodlar (yüksek cyclomatic complexity)
  • Potansiyel null pointer dereference'ları
  • SpotBugs tarafından işaretlenen güvenlik sorunları

Faz 3: Testler + Kapsam

# Tüm testleri çalıştır
mvn clean test

# Kapsam raporu oluştur
mvn jacoco:report

# Kapsam eşiğini zorla (%80)
mvn jacoco:check

# Veya Gradle ile
./gradlew test jacocoTestReport jacocoTestCoverageVerification

Test Kategorileri

Unit Testler

Mock'lanmış bağımlılıklarla servis mantığını test edin:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
  @Mock UserRepository userRepository;
  @InjectMocks UserService userService;

  @Test
  void createUser_validInput_returnsUser() {
    var dto = new CreateUserDto("Alice", "alice@example.com");

    // Panache persist() void döndürür — doNothing + verify kullanın
    doNothing().when(userRepository).persist(any(User.class));

    User result = userService.create(dto);

    assertThat(result.name).isEqualTo("Alice");
    verify(userRepository).persist(any(User.class));
  }
}

Entegrasyon Testleri

Gerçek veritabanıyla (Testcontainers) test edin:

@QuarkusTest
@QuarkusTestResource(PostgresTestResource.class)
class UserRepositoryIntegrationTest {

  @Inject
  UserRepository userRepository;

  @Test
  @Transactional
  void findByEmail_existingUser_returnsUser() {
    User user = new User();
    user.name = "Alice";
    user.email = "alice@example.com";
    userRepository.persist(user);

    Optional<User> found = userRepository.findByEmail("alice@example.com");

    assertThat(found).isPresent();
    assertThat(found.get().name).isEqualTo("Alice");
  }
}

API Testleri

REST Assured ile REST endpoint'lerini test edin:

@QuarkusTest
class UserResourceTest {

  @Test
  void createUser_validInput_returns201() {
    given()
        .contentType(ContentType.JSON)
        .body("""
            {"name": "Alice", "email": "alice@example.com"}
            """)
        .when().post("/api/users")
        .then()
        .statusCode(201)
        .body("name", equalTo("Alice"));
  }

  @Test
  void createUser_invalidEmail_returns400() {
    given()
        .contentType(ContentType.JSON)
        .body("""
            {"name": "Alice", "email": "invalid"}
            """)
        .when().post("/api/users")
        .then()
        .statusCode(400);
  }
}

Kapsam Raporu

Ayrıntılı kapsam için target/site/jacoco/index.html sayfasını kontrol edin:

  • Genel satır kapsamı (hedef: %80+)
  • Branch kapsamı (hedef: %70+)
  • Kapsanmamış kritik yolları belirleyin

Faz 4: Güvenlik Taraması

Bağımlılık Güvenlik Açıkları (Maven)

mvn org.owasp:dependency-check-maven:check

CVE'ler için target/dependency-check-report.html raporunu inceleyin.

Quarkus Güvenlik Denetimi

# Güvenlik açığı olan extension'ları kontrol et
mvn quarkus:audit

# Tüm extension'ları listele
mvn quarkus:list-extensions

OWASP ZAP (API Güvenlik Testi)

docker run -t ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py \
  -t http://localhost:8080/q/openapi \
  -f openapi

Yaygın Güvenlik Kontrolleri

  • [ ] Tüm gizli bilgiler ortam değişkenlerinde (kodda değil)
  • [ ] Tüm endpoint'lerde girdi doğrulama
  • [ ] Kimlik doğrulama/yetkilendirme yapılandırılmış
  • [ ] CORS düzgün yapılandırılmış
  • [ ] Güvenlik başlıkları ayarlanmış
  • [ ] Parolalar BCrypt ile hash'lenmiş
  • [ ] SQL injection koruması (parametreli sorgular)
  • [ ] Genel endpoint'lerde rate limiting

Faz 5: Native Derleme

GraalVM native image uyumluluğunu test edin:

# Native executable oluştur
mvn package -Dnative

# Veya container ile
mvn package -Dnative -Dquarkus.native.container-build=true

# Native executable'ı test et
./target/*-runner

# Temel smoke testleri çalıştır
curl http://localhost:8080/q/health/live
curl http://localhost:8080/q/health/ready

Native Image Sorun Giderme

Yaygın sorunlar:

  • Reflection: Dinamik sınıflar için reflection yapılandırması ekleyin
  • Resources: quarkus.native.resources.includes ile kaynakları dahil edin
  • JNI: Native kütüphaneler kullanıyorsanız JNI sınıflarını kaydedin

Örnek reflection yapılandırması:

@RegisterForReflection(targets = {MyDynamicClass.class})
public class ReflectionConfiguration {}

Faz 6: Performans Testi

K6 ile Yük Testi

// load-test.js
import http from 'k6/http';
import { check } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 50 },
    { duration: '1m', target: 100 },
    { duration: '30s', target: 0 },
  ],
};

export default function () {
  const res = http.get('http://localhost:8080/api/markets');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
}

Çalıştırın:

k6 run load-test.js

İzlenecek Metrikler

  • Yanıt süresi (p50, p95, p99)
  • Throughput (istek/saniye)
  • Hata oranı
  • Bellek kullanımı
  • CPU kullanımı

Faz 7: Sağlık Kontrolleri

# Liveness
curl http://localhost:8080/q/health/live

# Readiness
curl http://localhost:8080/q/health/ready

# Tüm sağlık kontrolleri
curl http://localhost:8080/q/health

# Metrikler (etkinleştirilmişse)
curl http://localhost:8080/q/metrics

Beklenen yanıtlar:

{
  "status": "UP",
  "checks": [
    {
      "name": "Database connection",
      "status": "UP"
    }
  ]
}

Faz 8: Container Image Build

# Container image oluştur
mvn package -Dquarkus.container-image.build=true

# Veya belirli registry ile
mvn package \
  -Dquarkus.container-image.build=true \
  -Dquarkus.container-image.registry=docker.io \
  -Dquarkus.container-image.group=myorg \
  -Dquarkus.container-image.tag=1.0.0

# Container'ı test et
docker run -p 8080:8080 myorg/my-quarkus-app:1.0.0

Container Güvenlik Taraması

# Trivy
trivy image myorg/my-quarkus-app:1.0.0

# Grype
grype myorg/my-quarkus-app:1.0.0

Faz 9: Yapılandırma Doğrulama

# Tüm yapılandırma özelliklerini kontrol et
mvn quarkus:info

# Tüm yapılandırma kaynaklarını listele
curl http://localhost:8080/q/dev/io.quarkus.quarkus-vertx-http/config

Ortama Özgü Kontroller

  • [ ] Veritabanı URL'leri ortam başına yapılandırılmış
  • [ ] Gizli bilgiler dışsallaştırılmış (Vault, ortam değişkenleri)
  • [ ] Loglama seviyeleri uygun
  • [ ] CORS origin'leri doğru ayarlanmış
  • [ ] Rate limiting yapılandırılmış
  • [ ] İzleme/tracing etkinleştirilmiş

Faz 10: Dokümantasyon İncelemesi

  • [ ] OpenAPI/Swagger dokümanları güncel (/q/swagger-ui)
  • [ ] README kurulum talimatlarını içeriyor
  • [ ] API değişiklikleri belgelenmiş
  • [ ] Breaking change'ler için migration rehberi
  • [ ] Yapılandırma özellikleri belgelenmiş

OpenAPI spec oluşturun:

curl http://localhost:8080/q/openapi -o openapi.json

Doğrulama Kontrol Listesi

Kod Kalitesi

  • [ ] Build uyarısız geçiyor
  • [ ] Static analiz temiz (yüksek/orta sorun yok)
  • [ ] Kod ekip kurallarını takip ediyor
  • [ ] PR'da yorum satırına alınmış kod veya TODO yok

Test

  • [ ] Tüm testler geçiyor
  • [ ] Kod kapsamı ≥ %80
  • [ ] Gerçek veritabanıyla entegrasyon testleri
  • [ ] Güvenlik testleri geçiyor
  • [ ] Performans kabul edilebilir sınırlar içinde

Güvenlik

  • [ ] Bağımlılık güvenlik açığı yok
  • [ ] Kimlik doğrulama/yetkilendirme test edilmiş
  • [ ] Girdi doğrulama tamamlanmış
  • [ ] Gizli bilgiler kaynak kodda değil
  • [ ] Güvenlik başlıkları yapılandırılmış

Deployment

  • [ ] Native derleme başarılı
  • [ ] Container image oluşturuluyor
  • [ ] Sağlık kontrolleri doğru yanıt veriyor
  • [ ] Hedef ortam için yapılandırma geçerli

Native Image

  • [ ] Native executable oluşturuluyor
  • [ ] Native testler geçiyor
  • [ ] Başlangıç süresi < 100ms
  • [ ] Bellek ayak izi kabul edilebilir

Otomatik Doğrulama Script'i

#!/bin/bash
set -e

echo "=== Faz 1: Build ==="
mvn clean verify -DskipTests

echo "=== Faz 2: Static Analiz ==="
mvn checkstyle:check pmd:check spotbugs:check

echo "=== Faz 3: Testler + Kapsam ==="
mvn test jacoco:report jacoco:check

echo "=== Faz 4: Güvenlik Taraması ==="
mvn org.owasp:dependency-check-maven:check

echo "=== Faz 5: Native Derleme ==="
mvn package -Dnative -Dquarkus.native.container-build=true

echo "=== Tüm Fazlar Tamamlandı ==="
echo "Raporları inceleyin:"
echo "  - Kapsam: target/site/jacoco/index.html"
echo "  - Güvenlik: target/dependency-check-report.html"
echo "  - Native: target/*-runner"

CI/CD Entegrasyonu

GitHub Actions Örneği

name: Verification

on: [push, pull_request]

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7

      - name: Set up JDK 21
        uses: actions/setup-java@v5
        with:
          java-version: '21'
          distribution: 'temurin'

      - name: Cache Maven packages
        uses: actions/cache@v6
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}

      - name: Build
        run: mvn clean verify -DskipTests

      - name: Test with Coverage
        run: mvn test jacoco:report jacoco:check

      - name: Security Scan
        run: mvn org.owasp:dependency-check-maven:check

      - name: Upload Coverage
        uses: codecov/codecov-action@v7
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: target/site/jacoco/jacoco.xml

En İyi Uygulamalar

  • Her PR öncesi doğrulama döngüsünü çalıştırın
  • CI/CD pipeline'ında otomatize edin
  • Sorunları hemen düzeltin; borç biriktirmeyin
  • Kapsamı %80'in üzerinde tutun
  • Bağımlılıkları düzenli olarak güncelleyin
  • Native derlemeyi periyodik olarak test edin
  • Performans trendlerini izleyin
  • Breaking change'leri belgeleyin
  • Güvenlik tarama sonuçlarını inceleyin
  • Her ortam için yapılandırmayı doğrulayın

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 4 个不同仓库或目录里都有叫 quarkus-verification 的技能。它们内容并不相同,别混用:

  • affaan-m/ECC — Bucle de verificación para proyectos Quarkus: build, análisis estático, pruebas con cobert
  • affaan-m/ECC — Quarkusプロジェクト検証ループ:ビルド、静的分析、カバレッジ付きテスト、セキュリティスキャン、ネイティブコンパイル、本番環境またはPR前の差分レビュー。
  • affaan-m/ECC — Verification loop for Quarkus projects: build, static analysis, tests with coverage, secur