From e56ac0b7994320dcd98c1dcdc93be5b3f83d0700 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 01:16:40 +0900 Subject: [PATCH 01/10] =?UTF-8?q?`fix/ci-test`=20draft=20PR=20=EB=B0=98?= =?UTF-8?q?=EC=98=81=20=EB=B0=8F=20=EB=B9=8C=EB=93=9C=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=88=98=EC=A0=95,=20=EB=82=B4=EB=B6=80=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=20=EB=B3=80=EC=88=98=EB=AA=85=20=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 51 ++++++++++++++++--- entlib-native | 2 +- native-benchmark/src/lib.rs | 3 +- .../NativeAVXCall_JMHBenchmark.java} | 6 +-- .../benchmark/NativeCall_JMHBenchmark.java} | 6 +-- src/benchmark/resources/logback.xml | 49 ++++++++++++++++++ .../entanglementlib/EntanglementLibEnvs.java | 2 +- 7 files changed, 102 insertions(+), 17 deletions(-) rename src/{test/java/space/qu4nt/entanglementlib/benchmarks/NativeAVXCallBenchmark.java => benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeAVXCall_JMHBenchmark.java} (98%) rename src/{test/java/space/qu4nt/entanglementlib/benchmarks/NativeCallBenchmark.java => benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeCall_JMHBenchmark.java} (98%) create mode 100644 src/benchmark/resources/logback.xml diff --git a/build.gradle.kts b/build.gradle.kts index 132bf4c..6ac1a06 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,25 +9,59 @@ plugins { id("me.champeau.jmh") version "0.7.3" } +val commonGroupId = project.findProperty("commonGroupId") as? String ?: "space.qu4nt" +val quantPublicDir = project.findProperty("quantPublicDir") as? String + ?: layout.buildDirectory.dir("dummy-resources").get().asFile.absolutePath + val lombokVersion = "org.projectlombok:lombok:1.18.42" -val quantPublicDir: String by project -val commonGroupId: String by project val bouncyCastleVer = "1.83" -val entLibVersion = "1.1.2-Alpha2" +val entLibVersion = "1.1.2-Alpha3" group = commonGroupId version = entLibVersion sourceSets { main { + java { + srcDirs("src/main/java") + } resources { - srcDirs += File("${quantPublicDir}/entanglementlib") + srcDirs("src/main/resources") + + if (quantPublicDir.isNotEmpty()) { + val extraResourceDir = File("${quantPublicDir}/entanglementlib") + if (extraResourceDir.exists()) { + srcDir(extraResourceDir) + } else { + logger.warn("Warning: External resource directory not found: $extraResourceDir. Skipping...") + } + } } } + test { + java { + srcDirs("src/test/java") + } + resources { + srcDirs("src/test/resources") + + if (quantPublicDir.isNotEmpty()) { + val extraTestResourceDir = File("${quantPublicDir}/entanglementlib-test") + if (extraTestResourceDir.exists()) { + srcDir(extraTestResourceDir) + } + } + } + } + + named("jmh") { + java { + srcDirs("src/benchmark/java") + } resources { - srcDirs += File("${quantPublicDir}/entanglementlib-test") + srcDirs("src/benchmark/resources") } } } @@ -96,6 +130,7 @@ dependencies { testImplementation("org.openjdk.jmh:jmh-core:1.37") // Source: https://mvnrepository.com/artifact/org.openjdk.jmh/jmh-generator-annprocess testImplementation("org.openjdk.jmh:jmh-generator-annprocess:1.37") + jmhAnnotationProcessor(lombokVersion) } tasks.test { @@ -111,6 +146,10 @@ tasks.jar { } } +tasks.withType { + duplicatesStrategy = DuplicatesStrategy.INCLUDE +} + mavenPublishing { signAllPublications() @@ -160,7 +199,7 @@ jmh { // 테스트 벤치마킹 클래스 등록 includeTests.set(true) - includes.set(listOf(".*Benchmark")) + includes.set(listOf(".*_JMHBenchmark")) // 벤치마크 실행 시 필요한 jvm 인자 중앙 제어 jvmArgs.set(listOf( diff --git a/entlib-native b/entlib-native index a2ca93a..5e58861 160000 --- a/entlib-native +++ b/entlib-native @@ -1 +1 @@ -Subproject commit a2ca93a6ef616f5ac97143baa8c4f4ae989ff34f +Subproject commit 5e588617098544f9f98e5ab15616996e697737dd diff --git a/native-benchmark/src/lib.rs b/native-benchmark/src/lib.rs index bd79178..ae16675 100644 --- a/native-benchmark/src/lib.rs +++ b/native-benchmark/src/lib.rs @@ -119,7 +119,8 @@ pub unsafe extern "C" fn bless_poly_modular_add( /// jni 단순 ++++ #[unsafe(no_mangle)] -#[unsafe(export_name = "Java_space_qu4nt_entanglementlib_benchmarks_NativeCallBenchmark_jni_1add_1numbers")] +// TODO: 사실 이 JNI 테스트가 작동되는지 모르겠음. 아마 안 될거임. 클래스명까지 "_1"로 언더스코어를 포함할 수 없는걸로 알고 있긴 함. +#[unsafe(export_name = "Java_space_qu4nt_entanglementlib_benchmark_NativeCall_1JMHBenchmark_jni_1add_1numbers")] pub extern "C" fn jni_add_numbers_impl( mut _env: JNIEnv, _class: jclass, diff --git a/src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeAVXCallBenchmark.java b/src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeAVXCall_JMHBenchmark.java similarity index 98% rename from src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeAVXCallBenchmark.java rename to src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeAVXCall_JMHBenchmark.java index 2999ea2..6a0bab6 100644 --- a/src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeAVXCallBenchmark.java +++ b/src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeAVXCall_JMHBenchmark.java @@ -1,10 +1,8 @@ -/* +package space.qu4nt.entanglementlib.benchmark;/* * Copyright © 2025-2026 Quant. * Under License "PolyForm Noncommercial License 1.0.0". */ -package space.qu4nt.entanglementlib.benchmarks; - import org.openjdk.jmh.annotations.*; import java.lang.foreign.*; @@ -23,7 +21,7 @@ }) @Warmup(iterations = 5, time = 1) @Measurement(iterations = 5, time = 1) -public class NativeAVXCallBenchmark { +public class NativeAVXCall_JMHBenchmark { private static final Linker LINKER = Linker.nativeLinker(); diff --git a/src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeCallBenchmark.java b/src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeCall_JMHBenchmark.java similarity index 98% rename from src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeCallBenchmark.java rename to src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeCall_JMHBenchmark.java index 7580fac..82f5979 100644 --- a/src/test/java/space/qu4nt/entanglementlib/benchmarks/NativeCallBenchmark.java +++ b/src/benchmark/java/space/qu4nt/entanglementlib/benchmark/NativeCall_JMHBenchmark.java @@ -1,10 +1,8 @@ -/* +package space.qu4nt.entanglementlib.benchmark;/* * Copyright © 2025-2026 Quant. * Under License "PolyForm Noncommercial License 1.0.0". */ -package space.qu4nt.entanglementlib.benchmarks; - import org.openjdk.jmh.annotations.*; import java.lang.foreign.*; @@ -19,7 +17,7 @@ @Fork(value = 1, jvmArgs = {"--enable-native-access=ALL-UNNAMED", "--enable-preview"}) @Warmup(iterations = 3, time = 1) @Measurement(iterations = 5, time = 1) -public class NativeCallBenchmark { +public class NativeCall_JMHBenchmark { private static final Linker LINKER = Linker.nativeLinker(); diff --git a/src/benchmark/resources/logback.xml b/src/benchmark/resources/logback.xml new file mode 100644 index 0000000..5f5b457 --- /dev/null +++ b/src/benchmark/resources/logback.xml @@ -0,0 +1,49 @@ + + + + + + + + + + ${LOG_PATTERN_CONSOLE} + + + + + ${LOG_DIR}/benchmark.log + + ${LOG_DIR}/benchmark-%d{yyyy-MM-dd}.log + 30 + + + ${LOG_PATTERN_FILE} + + + + + + 512 + 0 false + + + + 1024 + 0 + false + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/space/qu4nt/entanglementlib/EntanglementLibEnvs.java b/src/main/java/space/qu4nt/entanglementlib/EntanglementLibEnvs.java index 7c73113..6b303f3 100644 --- a/src/main/java/space/qu4nt/entanglementlib/EntanglementLibEnvs.java +++ b/src/main/java/space/qu4nt/entanglementlib/EntanglementLibEnvs.java @@ -28,7 +28,7 @@ sealed class EntanglementLibEnvs extends WrapEnv permits InternalFactory { static { entanglementPublicDir = new EntanglementLibEnvs("ENTANGLEMENT_PUBLIC_DIR" , true); entanglementHomeDir = new EntanglementLibEnvs("ENTANGLEMENT_HOME_DIR" , true); - entLibNativeDir = new EntanglementLibEnvs("ENTLIB_NATIVE_DIR" , false, "native"); + entLibNativeDir = new EntanglementLibEnvs("ENTLIB_NATIVE_BIN" , false, "native"); } EntanglementLibEnvs() { From 30ea9cde1f8f6b269661925a31fe4d57e348a4b1 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 01:33:47 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EB=84=A4=EC=9D=B4=ED=8B=B0=EB=B8=8C=20?= =?UTF-8?q?=EB=B2=A4=EC=B9=98=EB=A7=88=ED=82=B9=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=8C=80=EC=9D=91=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=84=9C=EB=B8=8C=EB=AA=A8=EB=93=88=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/security-and-static-analysis.yml | 9 +++++++-- .gitmodules | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .gitmodules diff --git a/.github/workflows/security-and-static-analysis.yml b/.github/workflows/security-and-static-analysis.yml index 4cb0876..a3a8706 100644 --- a/.github/workflows/security-and-static-analysis.yml +++ b/.github/workflows/security-and-static-analysis.yml @@ -49,7 +49,12 @@ jobs: # 정적 분석 및 린트 (Clippy) - 보안 취약점 및 잠재적 버그 탐지 - name: Run Clippy (Linting) working-directory: ./${{ matrix.project-path }} - run: cargo clippy --all-targets --all-features -- -D warnings + run: | + if [ "${{ matrix.project-path }}" == "native-benchmark" ]; then + cargo clippy --all-targets --all-features + else + cargo clippy --all-targets --all-features -- -D warnings + fi # 의존성 보안 검사 (Audit) - RustSec 데이터베이스 기반 - name: Run Security Audit @@ -100,4 +105,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: - category: "/language:${{ matrix.language }}" \ No newline at end of file + category: "/language:${{ matrix.language }}" diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..26990c1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "entlib-native"] + path = entlib-native + url = https://github.com/Quant-Off/entlib-native.git \ No newline at end of file From adda9b77a5f9423232c59e476677907bac32b120 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 01:42:31 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EB=84=A4=EC=9D=B4=ED=8B=B0=EB=B8=8C=20?= =?UTF-8?q?=EB=B2=A4=EC=B9=98=EB=A7=88=ED=82=B9=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=A6=B0=ED=84=B0=20=EC=9E=AC=EC=88=98=EC=A0=95,=20=EC=84=9C?= =?UTF-8?q?=EB=B8=8C=EB=AA=A8=EB=93=88=20=EC=9E=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 2 +- native-benchmark/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 26990c1..9541551 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "entlib-native"] path = entlib-native - url = https://github.com/Quant-Off/entlib-native.git \ No newline at end of file + url = https://github.com/Quant-Off/entlib-native.git diff --git a/native-benchmark/src/lib.rs b/native-benchmark/src/lib.rs index ae16675..d6aceea 100644 --- a/native-benchmark/src/lib.rs +++ b/native-benchmark/src/lib.rs @@ -1,7 +1,7 @@ use jni::sys::*; use std::arch::x86_64::{ __m256i, _mm256_add_epi32, _mm256_and_si256, _mm256_cmpgt_epi32, _mm256_loadu_si256, - _mm256_set1_epi32, _mm256_set1_epi8, _mm256_storeu_si256, _mm256_sub_epi32, _mm256_xor_si256, + _mm256_set1_epi8, _mm256_set1_epi32, _mm256_storeu_si256, _mm256_sub_epi32, _mm256_xor_si256, }; use std::slice; From 6483ec0d9fefd16ad4f99000080a06cdcd28441e Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 01:59:01 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EC=84=9C=EB=B8=8C=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=EC=95=84=EC=9B=83=20=EC=88=98=ED=96=89?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/security-and-static-analysis.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/security-and-static-analysis.yml b/.github/workflows/security-and-static-analysis.yml index a3a8706..d70a23a 100644 --- a/.github/workflows/security-and-static-analysis.yml +++ b/.github/workflows/security-and-static-analysis.yml @@ -24,6 +24,11 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 + with: + # 서브모듈을 재귀호출 + submodules: recursive + # 비공개 저장소의 경우 토큰 설정 필요 + # token: ${{ secrets.GITHUB_TOKEN }} # Rust 툴체인 설치 (clippy, rustfmt 포함) - name: Install Rust toolchain @@ -47,6 +52,7 @@ jobs: run: cargo fmt -- --check # 정적 분석 및 린트 (Clippy) - 보안 취약점 및 잠재적 버그 탐지 + # 벤치마킹 모듈은 검사 강도 하향 가능 - name: Run Clippy (Linting) working-directory: ./${{ matrix.project-path }} run: | @@ -80,6 +86,9 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 + with: + # Java 빌드 시에도 entlib-native 참조 가능성을 위해 서브모듈 체크아웃 + submodules: recursive # Java 25 환경 설정 (프로젝트 요구사항) - name: Set up JDK 25 @@ -105,4 +114,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: - category: "/language:${{ matrix.language }}" + category: "/language:${{ matrix.language }}" \ No newline at end of file From e9cd043c6286b261ca493d9acf884df50914bf42 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 02:04:29 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=EB=84=A4=EC=9D=B4=ED=8B=B0=EB=B8=8C=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entlib-native | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entlib-native b/entlib-native index 5e58861..988dd79 160000 --- a/entlib-native +++ b/entlib-native @@ -1 +1 @@ -Subproject commit 5e588617098544f9f98e5ab15616996e697737dd +Subproject commit 988dd79552f2afddd47dda3404f7db106639e569 From 4ae23e965876d451d896d2f9b2e758aba236fedd Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:06:10 +0900 Subject: [PATCH 06/10] =?UTF-8?q?https://github.com/Quant-Off/entanglement?= =?UTF-8?q?lib/security/code-scanning/2=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../communication/session/Session.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/space/qu4nt/entanglementlib/security/communication/session/Session.java b/src/main/java/space/qu4nt/entanglementlib/security/communication/session/Session.java index d363220..03c813f 100644 --- a/src/main/java/space/qu4nt/entanglementlib/security/communication/session/Session.java +++ b/src/main/java/space/qu4nt/entanglementlib/security/communication/session/Session.java @@ -13,6 +13,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.function.Consumer; @@ -94,7 +95,8 @@ private Session(String sessionId, SessionConfig config) { this.participants = new ConcurrentHashMap<>(); this.participantsByRole = new ConcurrentHashMap<>(); this.participantsLock = new ReentrantReadWriteLock(); - this.eventListeners = Collections.synchronizedList(new ArrayList<>()); + // 순회 시 락이 필요 없는 CopyOnWrite 병렬 컬렉션 사용 변경 + this.eventListeners = new CopyOnWriteArrayList<>(); log.debug("세션 생성됨: {}", sessionId); } @@ -318,21 +320,27 @@ public void close() { if (state.compareAndSet(current, SessionState.CLOSING)) { try { - // 모든 참여자에게 종료 알림 notifyListeners(listener -> listener.onSessionClosing(this)); - // 참여자 정리 + // 방어적 복사 로컬 리스트 + List participantsToClose; + + // lock scope 최소화 -> 내부 컬렉션 상태만 조작 participantsLock.writeLock().lock(); try { - participants.values().forEach(p -> - p.transitionState(ConnectionState.CLOSING)); + // 스냅샷 생성 + participantsToClose = new ArrayList<>(participants.values()); participants.clear(); participantsByRole.clear(); } finally { participantsLock.writeLock().unlock(); } - // 보안 컨텍스트 정리 + // 락이 해제된 안전한 상태에서 외부 메소드(alien method) 호출 + participantsToClose.forEach(p -> + p.transitionState(ConnectionState.CLOSING) + ); + if (sessionSecurityContext != null) { sessionSecurityContext.clear(); } From bc2b9e1c1beaaec908b1d043faee7385dd139946 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:06:25 +0900 Subject: [PATCH 07/10] =?UTF-8?q?Qodana=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qodana_code_quality.yml | 40 +++++++++++++++++++ qodana.yaml | 48 +++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 .github/workflows/qodana_code_quality.yml create mode 100644 qodana.yaml diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml new file mode 100644 index 0000000..36f0a13 --- /dev/null +++ b/.github/workflows/qodana_code_quality.yml @@ -0,0 +1,40 @@ +#-------------------------------------------------------------------------------# +# Discover additional configuration options in our documentation # +# https://www.jetbrains.com/help/qodana/github.html # +#-------------------------------------------------------------------------------# + +name: Qodana +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + - feature/1.1.0-Alpha + +jobs: + qodana: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + checks: write + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: 0 + - name: 'Qodana Scan' + uses: JetBrains/qodana-action@v2025.3 + env: + QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} + with: + # When pr-mode is set to true, Qodana analyzes only the files that have been changed + pr-mode: false + use-caches: true + post-pr-comment: true + use-annotations: true + # Upload Qodana results (SARIF, other artifacts, logs) as an artifact to the job + upload-result: false + # quick-fixes available in Ultimate and Ultimate Plus plans + push-fixes: 'none' \ No newline at end of file diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..4cfb240 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,48 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# + +################################################################################# +# WARNING: Do not store sensitive information in this file, # +# as its contents will be included in the Qodana report. # +################################################################################# +version: "1.0" + +#Specify inspection profile for code analysis +profile: + name: qodana.starter + +#Enable inspections +#include: +# - name: + +#Disable inspections +#exclude: +# - name: +# paths: +# - + +projectJDK: "25" #(Applied in CI/CD pipeline) + +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh + +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) + +# Quality gate. Will fail the CI/CD pipeline if any condition is not met +# severityThresholds - configures maximum thresholds for different problem severities +# testCoverageThresholds - configures minimum code coverage on a whole project and newly added code +# Code Coverage is available in Ultimate and Ultimate Plus plans +#failureConditions: +# severityThresholds: +# any: 15 +# critical: 5 +# testCoverageThresholds: +# fresh: 70 +# total: 50 + +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-jvm:2025.3 From ebd205f2988c884762eb42cac0c570f5345dcca8 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:19:02 +0900 Subject: [PATCH 08/10] =?UTF-8?q?Qodana=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=20=EC=9E=90=EB=8F=99=ED=99=94=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD(=EC=9D=B4=20PR=EC=97=90=20=ED=8F=AC=ED=95=A8=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qodana_code_quality.yml | 40 ------------------- qodana.yaml | 48 ----------------------- 2 files changed, 88 deletions(-) delete mode 100644 .github/workflows/qodana_code_quality.yml delete mode 100644 qodana.yaml diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml deleted file mode 100644 index 36f0a13..0000000 --- a/.github/workflows/qodana_code_quality.yml +++ /dev/null @@ -1,40 +0,0 @@ -#-------------------------------------------------------------------------------# -# Discover additional configuration options in our documentation # -# https://www.jetbrains.com/help/qodana/github.html # -#-------------------------------------------------------------------------------# - -name: Qodana -on: - workflow_dispatch: - pull_request: - push: - branches: - - master - - feature/1.1.0-Alpha - -jobs: - qodana: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - checks: write - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 - - name: 'Qodana Scan' - uses: JetBrains/qodana-action@v2025.3 - env: - QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} - with: - # When pr-mode is set to true, Qodana analyzes only the files that have been changed - pr-mode: false - use-caches: true - post-pr-comment: true - use-annotations: true - # Upload Qodana results (SARIF, other artifacts, logs) as an artifact to the job - upload-result: false - # quick-fixes available in Ultimate and Ultimate Plus plans - push-fixes: 'none' \ No newline at end of file diff --git a/qodana.yaml b/qodana.yaml deleted file mode 100644 index 4cfb240..0000000 --- a/qodana.yaml +++ /dev/null @@ -1,48 +0,0 @@ -#-------------------------------------------------------------------------------# -# Qodana analysis is configured by qodana.yaml file # -# https://www.jetbrains.com/help/qodana/qodana-yaml.html # -#-------------------------------------------------------------------------------# - -################################################################################# -# WARNING: Do not store sensitive information in this file, # -# as its contents will be included in the Qodana report. # -################################################################################# -version: "1.0" - -#Specify inspection profile for code analysis -profile: - name: qodana.starter - -#Enable inspections -#include: -# - name: - -#Disable inspections -#exclude: -# - name: -# paths: -# - - -projectJDK: "25" #(Applied in CI/CD pipeline) - -#Execute shell command before Qodana execution (Applied in CI/CD pipeline) -#bootstrap: sh ./prepare-qodana.sh - -#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) -#plugins: -# - id: #(plugin id can be found at https://plugins.jetbrains.com) - -# Quality gate. Will fail the CI/CD pipeline if any condition is not met -# severityThresholds - configures maximum thresholds for different problem severities -# testCoverageThresholds - configures minimum code coverage on a whole project and newly added code -# Code Coverage is available in Ultimate and Ultimate Plus plans -#failureConditions: -# severityThresholds: -# any: 15 -# critical: 5 -# testCoverageThresholds: -# fresh: 70 -# total: 50 - -#Specify Qodana linter for analysis (Applied in CI/CD pipeline) -linter: jetbrains/qodana-jvm:2025.3 From 2f706953a28c8b78004efdf947ccf7b6ea688f1a Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 13:39:22 +0900 Subject: [PATCH 09/10] =?UTF-8?q?Qodana=20=EC=9B=8C=ED=81=AC=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/code_quality.yml | 28 ++++++++++++++++++++++++++++ qodana.yaml | 10 ++++++++++ 2 files changed, 38 insertions(+) create mode 100644 .github/workflows/code_quality.yml create mode 100644 qodana.yaml diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml new file mode 100644 index 0000000..60ba925 --- /dev/null +++ b/.github/workflows/code_quality.yml @@ -0,0 +1,28 @@ +name: Qodana +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + - 'feature/*' # The release branches + +jobs: + qodana: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + checks: write + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit + fetch-depth: 0 # a full history is required for pull request analysis + - name: 'Qodana Scan' + uses: JetBrains/qodana-action@v2025.3 + with: + pr-mode: false + env: + QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} + QODANA_ENDPOINT: 'https://qodana.cloud' \ No newline at end of file diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..8bc8ec1 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,10 @@ +#################################################################################################################### +# WARNING: Do not store sensitive information in this file, as its contents will be included in the Qodana report. # +#################################################################################################################### + +version: "1.0" +linter: jetbrains/qodana-jvm-community:2025.3 +profile: + name: qodana.recommended +include: + - name: CheckDependencyLicenses \ No newline at end of file From 1398dbddc689131dd9092a3468828423279f1438 Mon Sep 17 00:00:00 2001 From: "Q. T. Felix" <53819958+Quant-TheodoreFelix@users.noreply.github.com> Date: Sat, 14 Feb 2026 14:11:34 +0900 Subject: [PATCH 10/10] =?UTF-8?q?Qodana=20=EC=B2=B4=ED=81=AC=EC=95=84?= =?UTF-8?q?=EC=9B=83=20->=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/code_quality.yml | 4 ++-- .github/workflows/security-and-static-analysis.yml | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index 60ba925..366acc3 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -5,7 +5,7 @@ on: push: branches: - master - - 'feature/*' # The release branches + - 'feature/*' jobs: qodana: @@ -15,7 +15,7 @@ jobs: pull-requests: write checks: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis diff --git a/.github/workflows/security-and-static-analysis.yml b/.github/workflows/security-and-static-analysis.yml index d70a23a..e1dcd68 100644 --- a/.github/workflows/security-and-static-analysis.yml +++ b/.github/workflows/security-and-static-analysis.yml @@ -2,7 +2,6 @@ name: Security & Static Analysis on: push: - branches: [ "master", "develop" ] pull_request: branches: [ "master", "develop" ] schedule: