New to Claude Skills? Learn how to install them →

Qaffaan-m on GitHub

Quarkus Verification Loop

Free

Automate verification for Quarkus projects before release.

by affaan-m239.3k stars on affaan-m/ecc
2 views
Updated Aug 10, 2026
Get this skill

Free · Opens the source repo

What Quarkus Verification Loop does

The Quarkus Verification Loop skill provides a comprehensive automated process for verifying Quarkus projects prior to deployment or merging pull requests. It integrates multiple verification steps including building the project, performing static analysis, running tests with coverage checks, conducting security scans, and compiling native images. This skill is particularly useful for developers and teams working with Quarkus who want to ensure code quality and security before making significant changes or deploying applications.

The verification process begins with building the project, utilizing either Maven or Gradle commands to ensure that the application compiles successfully. If the build fails, the process halts, prompting developers to address compilation errors before proceeding. Following a successful build, static analysis tools such as Checkstyle, PMD, and SpotBugs are employed to identify potential issues in the code, including unused imports, complex methods, and security vulnerabilities.

Next, the skill runs unit, integration, and API tests to validate the functionality of the application. It enforces coverage thresholds, ensuring that at least 80% of the code is covered by tests. The skill also includes security scanning capabilities using OWASP tools to identify vulnerabilities in dependencies and application code. Finally, it tests the compatibility of the application with GraalVM for native image generation, ensuring that performance optimizations are achievable.

This skill is ideal for developers who are looking to implement a robust verification process in their CI/CD pipelines, ensuring that their Quarkus applications are reliable, secure, and performant before they reach production.

When to use it

Use this skill when preparing for a major pull request, after significant refactoring, or before deploying to staging or production environments.

When not to use it

This skill may not be suitable for projects that do not use Quarkus or for teams that prefer to handle verification processes manually.

What you can build with it

Pre-Pull Request Verification

Run the verification loop before opening a pull request to ensure code quality and security.

Post-Refactoring Checks

Use the skill after major refactoring or dependency upgrades to validate the integrity of your application.

Deployment Readiness

Execute the verification process before deploying to staging or production to guarantee that all checks pass.

How to install Quarkus Verification Loop

View source

1. Install with the skills CLI

npx skills add affaan-m/ecc/quarkus-verification --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by affaan-m

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 owasp/zap2docker-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@v3

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

      - name: Cache Maven packages
        uses: actions/cache@v3
        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@v3
        with:
          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

Frequently asked questions about Quarkus Verification Loop

Similar skills