# gradle 판 Gradle 9.0.0 # grpc-testkit 이 등록하는 레인 넷과 각각의 태그 grpc-testkit/build.gradle:15 lane('grpcInProcessContractTest') { grpc-testkit/build.gradle:16 tag = 'grpc-inprocess' grpc-testkit/build.gradle:20 lane('grpcNettyContractTest') { grpc-testkit/build.gradle:21 tag = 'grpc-netty' grpc-testkit/build.gradle:25 lane('grpcFaultTest') { grpc-testkit/build.gradle:26 tag = 'grpc-fault' grpc-testkit/build.gradle:30 lane('grpcPerformanceTest') { grpc-testkit/build.gradle:31 tag = 'grpc-performance' # 기본 test 에 실제로 걸리는 제외 태그는 두 곳에서 온다 build.gradle:548: // (the skeleton default) excludeTags is a no-op. build.gradle:551: excludeTags 'quarantine' grpc/grpc-testkit/build.gradle:42: excludeTags 'grpc-performance' grpc-testkit/build.gradle:37 // The performance lane is excluded from the default `test` task. It measures a running server grpc-testkit/build.gradle:38 // under load, and a measurement in the release gate is a flaky test on a shared CI runner; it runs grpc-testkit/build.gradle:39 // when somebody asks for it, by name. grpc-testkit/build.gradle:40 tasks.named('test') { grpc-testkit/build.gradle:41 useJUnitPlatform { grpc-testkit/build.gradle:42 excludeTags 'grpc-performance' grpc-testkit/build.gradle:43 } grpc-testkit/build.gradle:44 } grpc-testkit 안의 quarantine 태그 : 0 건 # 레인 태그는 클래스 단위인가 testkit/GrpcInProcessContractFixtureTest.java:22:@Tag("grpc-inprocess") testkit/GrpcInProcessContractFixtureTest.java-23-class GrpcInProcessContractFixtureTest { testkit/GrpcNettyContractProfileTest.java:24:@Tag("grpc-netty") testkit/GrpcNettyContractProfileTest.java-25-class GrpcNettyContractProfileTest { testkit/GrpcTransportEvidenceClassifierTest.java:37:@Tag("grpc-fault") testkit/GrpcTransportEvidenceClassifierTest.java-38-class GrpcTransportEvidenceClassifierTest { performance/GrpcPerformanceLaneTest.java:32:@Tag("grpc-performance") performance/GrpcPerformanceLaneTest.java-33-class GrpcPerformanceLaneTest { # check 의 태스크 그래프 — 시험을 돌리지 않고 확인한다 $ ./gradlew :grpc:grpc-testkit:check --dry-run GRADLE_EXIT=0 :grpc:grpc-testkit:compileJava SKIPPED :grpc:grpc-testkit:processResources SKIPPED :grpc:grpc-testkit:classes SKIPPED :grpc:grpc-testkit:checkstyleMain SKIPPED :grpc:grpc-testkit:compileTestJava SKIPPED :grpc:grpc-testkit:processTestResources SKIPPED :grpc:grpc-testkit:testClasses SKIPPED :grpc:grpc-testkit:checkstyleTest SKIPPED :grpc:grpc-testkit:spotbugsMain SKIPPED :grpc:grpc-testkit:spotbugsTest SKIPPED :grpc:grpc-testkit:spotlessJava SKIPPED :grpc:grpc-testkit:spotlessJavaCheck SKIPPED :grpc:grpc-testkit:spotlessCheck SKIPPED :grpc:grpc-testkit:test SKIPPED :grpc:grpc-testkit:check SKIPPED 그 그래프 안의 레인 태스크 : 0 건 # 낡은 결과를 지우고 세 레인을 이름으로 돌린다 실행 전 남아 있는 결과 XML : 0 건 $ ./gradlew :grpc:grpc-testkit:{grpcInProcessContractTest,grpcNettyContractTest,grpcFaultTest} BUILD SUCCESSFUL GRADLE_EXIT=0 [grpcInProcessContractTest] GrpcInProcessContractFixtureTest tests=7 failures=0 errors=0 skipped=0 시험 7 개 [grpcNettyContractTest] GrpcNettyContractProfileTest tests=9 failures=0 errors=0 skipped=0 시험 9 개 [grpcFaultTest] GrpcTransportEvidenceClassifierTest tests=9 failures=0 errors=0 skipped=0 시험 9 개 # 같은 leaf 의 기본 test 를 돌린다 $ ./gradlew :grpc:grpc-testkit:test BUILD SUCCESSFUL GRADLE_EXIT=0 GrpcPerformanceGateTest tests=7 failures=0 errors=0 skipped=0 GrpcStableReleaseGateTest tests=9 failures=0 errors=0 skipped=0 GrpcInProcessContractFixtureTest tests=7 failures=0 errors=0 skipped=0 GrpcNettyContractProfileTest tests=9 failures=0 errors=0 skipped=0 GrpcServerStreamingContractTest tests=7 failures=0 errors=0 skipped=0 GrpcTransportEvidenceClassifierTest tests=9 failures=0 errors=0 skipped=0 GrpcUnaryReliabilityContractTest tests=8 failures=0 errors=0 skipped=0 시험 56 개 # 레인이 돌린 시험이 기본 test 가 돌린 시험의 부분집합인가 레인 25 개 · 기본 test 56 개 레인이 돌린 시험이 기본 test 안에 전부 있는가 : True 기본 test 에만 있는 시험 : 31 개 성능 레인 클래스가 기본 test 결과에 있는가 : 0 건 # 레인 태스크만 거는 보증 ca.strict-test-lane.gradle:4 // useJUnitPlatform { includeTags }, failOnNoDiscoveredTests, outputs.upToDateWhen { false } — once per ca.strict-test-lane.gradle:6 // `failOnNoDiscoveredTests` and `upToDateWhen { false }`, and a lane that is added by copy-paste is a ca.strict-test-lane.gradle:23 // What a leaf may still not do is opt out of failing closed. There is no `failOnNoDiscoveredTests` ca.strict-test-lane.gradle:237 failOnNoDiscoveredTests = true ca.strict-test-lane.gradle:239 // And it is not sufficient, which a TestKit fixture established. `failOnNoDiscoveredTests` ca.strict-test-lane.gradle:240 // applies to discovery; a tag filter excludes tests *after* discovery, so a lane whose tag ca.strict-test-lane.gradle:245 // So the lane counts what it actually executed and refuses zero. ca.strict-test-lane.gradle:246 def executedTests = new java.util.concurrent.atomic.AtomicLong(0L) ca.strict-test-lane.gradle:247 def executedSelectors = ca.strict-test-lane.gradle:250 executedTests.incrementAndGet() ca.strict-test-lane.gradle:252 executedSelectors.add(descriptor.className as String) ca.strict-test-lane.gradle:253 executedSelectors.add("${descriptor.className}.${descriptor.name}" as String) ca.strict-test-lane.gradle:257 if (executedTests.get() == 0L) { ca.strict-test-lane.gradle:258 throw new GradleException( ca.strict-test-lane.gradle:276 !executedSelectors.any { String executed -> ca.strict-test-lane.gradle:285 throw new GradleException( ca.strict-test-lane.gradle:293 outputs.upToDateWhen { false } ca.strict-test-lane.gradle:299 // failOnNoDiscoveredTests is not enough on its own, which a TestKit fixture established rather ca.strict-test-lane.gradle:320 throw new GradleException( ca.strict-test-lane.gradle:333 throw new GradleException( ca.strict-test-lane.gradle:342 throw new GradleException( ca.strict-test-lane.gradle:347 throw new GradleException( # 레인 태스크를 자동으로 부르는 경로 grpc-testkit/build.gradle 이 check 를 언급하는가 : 0 건 워크플로 28 개 중 grpc 를 언급하는 것 : 0 건 ci-quality-gates.yml:48 - name: Check quality, public paths, and dependency locks ci-quality-gates.yml:49 working-directory: src ci-quality-gates.yml:50 run: ./gradlew check verifyPublicPathSnapshot verifyDependencyLocks --warning-mode=fail --no-daemon --stacktrace ci-quality-gates.yml:51 # Named as its own step because nothing else runs it: `check` does not depend on ci-quality-gates.yml:52 # graphqlStableTest, so the lane's required-class guard — the check that its module-boundary ci-quality-gates.yml:53 # suite has not silently stopped being discovered — protected nothing in CI. A separate step ci-quality-gates.yml:54 # keeps the aggregate invocation below byte-identical, which ConditionalTransportQualification ci-quality-gates.yml:55 # ContractTest asserts on, and the two tasks do not overlap. ci-quality-gates.yml:56 - name: Qualify the GraphQL Stable lane ci-quality-gates.yml:57 working-directory: src ci-quality-gates.yml:58 run: ./gradlew :adapter:inbound:graphql:graphqlStableTest --no-daemon --stacktrace ci-quality-gates.yml:59 - name: Qualify opt-in inbound transports without skips ci-quality-gates.yml:60 working-directory: src ci-quality-gates.yml:61 run: ./gradlew conditionalTransportQualification --no-daemon --stacktrace 그 마지막 스텝이 부르는 태스크가 무엇을 요구하는가 : src/build.gradle:594 'test-results/grpcTransportQualificationTest'), src/build.gradle:606 dependsOn ':adapter:inbound:grpc:grpcTransportQualificationTest'