diff --git a/.github/workflows/task141-coroutines-test-mirror.yml b/.github/workflows/task141-coroutines-test-mirror.yml new file mode 100644 index 000000000..af74b8984 --- /dev/null +++ b/.github/workflows/task141-coroutines-test-mirror.yml @@ -0,0 +1,113 @@ +name: Task141 OHOS Coroutines-Test Maven Mirror + +on: + pull_request: + paths: + - .github/workflows/task141-coroutines-test-mirror.yml + - publish/predecessors/task141-coroutines-test-manifest.tsv + - tools/raft-artifacts/mirror_maven_manifest.py + - tools/raft-artifacts/test_mirror_maven_manifest.py + - tools/raft-artifacts/task141-coroutines-test-resolver/** + workflow_dispatch: + inputs: + expected_sha: + description: Exact 40-character landed source SHA to verify and publish + required: true + type: string + publish: + description: Publish only missing exact bytes after validation + required: true + default: false + type: boolean + +permissions: + contents: read + +concurrency: + group: task141-coroutines-test-${{ github.event.pull_request.head.sha || inputs.expected_sha || github.sha }} + cancel-in-progress: false + +env: + MANIFEST: publish/predecessors/task141-coroutines-test-manifest.tsv + TARGET_SHA: ${{ github.event.pull_request.head.sha || inputs.expected_sha || github.sha }} + RESOLVER: tools/raft-artifacts/task141-coroutines-test-resolver + +jobs: + source-contract: + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ env.TARGET_SHA }} + fetch-depth: 2 + persist-credentials: false + - name: Bind the exact signed source + run: | + set -euo pipefail + [[ "$TARGET_SHA" =~ ^[0-9a-f]{40}$ ]] + test "$(git rev-parse HEAD)" = "$TARGET_SHA" + test -z "$(git status --porcelain=v1 --untracked-files=all)" + git diff --check HEAD^ + test "$(git log -1 --format=%B | grep -Ec '^Signed-off-by: .+ <[^>]+>$')" -eq 1 + - name: Verify every immutable manifest contract and the fresh Raft plan + run: | + set -euo pipefail + python3 tools/raft-artifacts/test_mirror_maven_manifest.py + python3 tools/raft-artifacts/mirror_maven_manifest.py \ + --manifest "$MANIFEST" \ + --mode plan + + tencent-authority-resolve: + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ env.TARGET_SHA }} + fetch-depth: 2 + persist-credentials: false + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + - name: Resolve the frozen root jar and OHOS klib from an empty cache + run: | + set -euo pipefail + test "$(git rev-parse HEAD)" = "$TARGET_SHA" + cache_dir="$(mktemp -d)" + trap 'rm -rf "$cache_dir"' EXIT + GRADLE_USER_HOME="$cache_dir" ./gradlew \ + --no-daemon \ + --refresh-dependencies \ + -p "$RESOLVER" \ + resolveTask141Authority + + publish: + if: github.event_name == 'workflow_dispatch' && inputs.publish + needs: + - source-contract + - tencent-authority-resolve + runs-on: ubuntu-latest + timeout-minutes: 20 + environment: raft-artifacts-production + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ env.TARGET_SHA }} + fetch-depth: 2 + persist-credentials: false + - name: Bind the exact landed source + run: | + set -euo pipefail + test "$(git rev-parse HEAD)" = "$TARGET_SHA" + test "$(git ls-remote "https://github.com/${GITHUB_REPOSITORY}.git" refs/heads/staging3 | cut -f1)" = "$TARGET_SHA" + - name: Publish with missing-only immutable Maven PUT semantics + env: + RAFT_ARTIFACTS_PUBLISH_TOKEN: ${{ secrets.RAFT_ARTIFACTS_PUBLISH_TOKEN }} + run: | + set -euo pipefail + test -n "$RAFT_ARTIFACTS_PUBLISH_TOKEN" + python3 tools/raft-artifacts/mirror_maven_manifest.py \ + --manifest "$MANIFEST" \ + --mode publish diff --git a/publish/predecessors/task141-coroutines-test-manifest.tsv b/publish/predecessors/task141-coroutines-test-manifest.tsv new file mode 100644 index 000000000..bd2315413 --- /dev/null +++ b/publish/predecessors/task141-coroutines-test-manifest.tsv @@ -0,0 +1,63 @@ +# schema=1 +# task=141 +# selected_by=KuiklyUI staging3@3dbfd5adc69b871b0bc72277f150d49e6842e6e7 +# selection=OHOS kotlinx-coroutines-test root plus available-at ohosarm64 only +# predecessor_gavs=2 +# files=45 +# total_bytes=201738 +# deterministic_set_sha256=57c45a26d73f97b28e8a81c7b7c7a95e79e6c8663461409c67143ead73977675 +# inventory_packet_sha256=c22ae909916db9e2d2732124710a08aff0cb36a79c08c24b210f30788af6f565 +# closure_already_public=atomicfu 0.23.2-KBA-001 and kotlinx-coroutines-core 1.8.0-KBA-002 with their ohosarm64 modules +# conditional_closure=kotlin-stdlib 2.0.21-KBA-001 is absent from Raft but is a pre-existing condition of the already-published kotlinx-coroutines-core-ohosarm64 1.8.0-KBA-002 and is not published by this task +# authority_files=50 +# excluded=every non-OHOS available-at platform module of the same root; and the root -kotlin-tooling-metadata.json plus its 4 checksum sidecars, which the authority does supply but which take no part in dependency resolution and are absent from Raft for the already-published sibling family kotlinx-coroutines-core 1.8.0-KBA-002 and atomicfu 0.23.2-KBA-001 +# authority_superset=the authority supplies 50 files for these two coordinates; this manifest deliberately freezes 45 and the 5-file difference is the tooling metadata named above, measured by a 228-probe suffix sweep rather than assumed +# probe_grid=jar klib pom module aar zip json spdx.json sbom.json cyclonedx.json -sources.jar -javadoc.jar -all.jar -common-sources.jar -samplessources.jar -tests.jar -metadata.jar -kotlin-tooling-metadata.json -tooling-metadata.json .asc .sigstore .intoto.jsonl each crossed with md5/sha1/sha256/sha512 sidecars +# authority_listing=the authority answers a directory URL with HTTP 200 and a not-browseable notice, never 404; any check that treats absent listing as 404 is reading the wrong signal +# provenance=canonical Tencent Maven bytes; exact source-to-publication run is not publicly auditable +groupId artifactId version path size sha256 authority +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar 261 f1cca90dcc5a0c4c95049ca680966ed7c1a5037679ec8978a9767cdb77f59847 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.md5 32 c778ed47eb41f794965fd502760d01648bb2b18626e232ed14f7ec6ec80b8bda https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha1 40 115c567234e4df822421a546d9cd4c6e8214ae28816d687259c10291556c7976 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha256 64 b822a648520a2459f0ce31ef5233a7628c61c1c9544c648d32406db337e30dd7 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha512 128 0b10fe1699f6a0c32fda1bb518742cb1a88b036c2336447586df0bdfd8f5d9b9 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-javadoc.jar.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar 25452 2a7bd0ddc38d588db0038634534680fc61880025f9cbd88925f90945b274d78b https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.md5 32 ebf8db4d8e61985432aac05cc11850c4fdfe10af68dd64741b05f8f9ebf1aebb https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha1 40 d822a9ef0c3b605ea3209d96da7e2102b1d98df33a57014b76be8e3983ba0bdb https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha256 64 285bdb1c0bee5e1f7d486fa0b3eaaefdf46d86222cfe02d0329d769d4bc3cbcb https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha512 128 f1cfe0431fd172c520beac66d4a4009c7f161ded5999a50c3b4fa7b412fac678 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002-sources.jar.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib 78170 ce0cf5e6683d55254ed89c733d05ca65581f024d6475f4f1f36b66017b8c75fb https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.md5 32 46c77144894bd6581b5350c44d0eb646dde8443615c0cf452ed9721b3cdef885 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha1 40 a557e1803566d56ee9f783c3eecc8535d86d68f85d4ff6c94e38747a36f755af https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha256 64 12fea473b0cb19b6d08b741915e944cab934826514e89155f32ca8ff4c0a5c2f https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha512 128 bbbc8b5ec3e8a5f3dff2962eea3eec35616f9d6cc6191c8f6c4a192cf74569d5 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.klib.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module 2959 f0889ac34f99b14b071181197ed5e05fb3102dcf18aa5a5e04145c770d9b4094 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.md5 32 f926cba726cfda7aa243dddbeda3dfed76171a28d9facf1dcbfa22d282d4be48 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha1 40 f18e234808c12b4010a24b24b0d58c86bc83b3b84bfd218b1b2743b241cb8c90 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha256 64 d5a4c044fe6899b0a1453ccfde8659866b1a902bdb7bc874beb456d44447c277 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha512 128 cc18fb07795596c0b7461b468e8227430eb73de26135c98b7e00a33b02d738ea https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.module.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom 2164 2b5d39c0d4575daab431fb3a217f8c22394e52d8aec712e28f0423ea75c36132 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.md5 32 8f7602b31b112de186a8325ad40ffd7c28a14db4fcb8529c363b5c15d8f904b0 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha1 40 2fba1f38ac7dee714ccd9c5ee3982510351d4d18e15ad46a2262814d21605234 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha256 64 19ab218dc7eb9dd43a1758548446ba1f50ef2723004e331b3813fdd118d4e464 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test-ohosarm64 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha512 128 4584de233298f638b6d6d471972ba60f5ca127714e3ce2137897535ed0e5ef9b https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test-ohosarm64/1.8.0-KBA-002/kotlinx-coroutines-test-ohosarm64-1.8.0-KBA-002.pom.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar 25452 c0a496fc17c99a9c9fb4f88b149330e083e975707d7c13b48ce7159acaf9154b https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.md5 32 022055495968f37160a1f2fe50c2aec6acff609f60d65884fac8b39b0012a849 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha1 40 99a7a88847b8451ec98f6c11c06406789444ab1187a850036f5b468d715dedd4 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha256 64 d0b31a5068062e4aab808ebffef92309e17aafabb6db9c197c39806bb331a689 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha512 128 088eed0aa482eafdf15da6eee6d2cb0eca023af80a98d258a8a1470aebe802fe https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002-sources.jar.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar 14799 41faf619ea9466712501851e6ba4f0328be2673415c5c136054955f0d70a045b https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.md5 32 d754a669b8bbcf295a288e23c23cd60d18b693277f2da600d9629f51d3ba3fa4 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha1 40 121c63df243889d57378234fadae24dc7af84991d08295f0a85ef1105438aa16 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha256 64 4a46d2ddca1f731d5005c681e32bf98b8bc926bc23615a8ff828090027afebb7 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha512 128 d2f8f24b70402aa63c15282188f44f1ac3898fdf1e4a26c12f9b2b54781d485e https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.jar.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module 48024 19eb69b41f45389036f8984654ed8326cfe7f37cb8622bda4330fcfa9fa092d3 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.md5 32 16705aee2d1a55a38ec247ffca84bc0799c4c98e6f2db695fd9e74407b42978d https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha1 40 a092f97eaefda8bff7e0a9a1a45f79f5299c95c0bf80dbc56d1648160349a055 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha256 64 f04b9f094121a5c74c0a3555c9a871d05a3ad90c3fec31c9363bee6253676f27 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha512 128 c50f18f1dd50bc9f3307f895dcba8fdd36b41acdc8655a0a399a2555f9649fa7 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.module.sha512 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom 2081 32520a725f5471ada914d26a70783c0728a0241c71ff2b8bd45c2a9840937167 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.md5 32 8715aea066c7e43d4b38fd2d27483db41751a5c90e63eed7d4721baf44735873 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.md5 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha1 40 b0e45f9cfa44b170492485d4b8a9984b075f3001e9b7e89129d95dcb58646fbf https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha1 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha256 64 86af1183db9ce9aab50debf180aa24f0b60cbc538ea515c72504dd4153aaff8f https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha256 +org.jetbrains.kotlinx kotlinx-coroutines-test 1.8.0-KBA-002 org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha512 128 8e8fad4d3b1468a153195604987da8f440ea3603336bf11b8b58923672a97565 https://mirrors.tencent.com/repository/maven-tencent/org/jetbrains/kotlinx/kotlinx-coroutines-test/1.8.0-KBA-002/kotlinx-coroutines-test-1.8.0-KBA-002.pom.sha512 diff --git a/tools/raft-artifacts/mirror_maven_manifest.py b/tools/raft-artifacts/mirror_maven_manifest.py index 43ca1c354..122bbb1ba 100644 --- a/tools/raft-artifacts/mirror_maven_manifest.py +++ b/tools/raft-artifacts/mirror_maven_manifest.py @@ -43,6 +43,10 @@ ("org.jetbrains.kotlin", "kotlin-stdlib-common", "2.0.21-KBA-010"), ("org.jetbrains.kotlin", "kotlin-stdlib", "2.0.21-KBA-010"), } +TASK141_EXPECTED_GAVS = { + ("org.jetbrains.kotlinx", "kotlinx-coroutines-test", "1.8.0-KBA-002"), + ("org.jetbrains.kotlinx", "kotlinx-coroutines-test-ohosarm64", "1.8.0-KBA-002"), +} MANIFEST_CONTRACTS = { "121": { "files": 31, @@ -67,6 +71,23 @@ "deterministic_set_sha256": "3a789c3fc63d7ae70966c793f0cc07f483b0cfaa3dc860428937dc1a96c2c906", }, }, + "141": { + "files": 45, + "gavs": TASK141_EXPECTED_GAVS, + "total_bytes": 201738, + "set_sha256": "57c45a26d73f97b28e8a81c7b7c7a95e79e6c8663461409c67143ead73977675", + "metadata": { + "inventory_packet_sha256": "c22ae909916db9e2d2732124710a08aff0cb36a79c08c24b210f30788af6f565", + "files": "45", + # The authority supplies 50 files for these two coordinates. Binding + # the superset count here keeps the 45-vs-50 gap machine-enforced, + # so the exclusion cannot silently drift back into prose. + "authority_files": "50", + "predecessor_gavs": "2", + "total_bytes": "201738", + "deterministic_set_sha256": "57c45a26d73f97b28e8a81c7b7c7a95e79e6c8663461409c67143ead73977675", + }, + }, } AUTHORITY_ORIGIN = "mirrors.tencent.com" AUTHORITY_PREFIX = "/repository/maven-tencent/" diff --git a/tools/raft-artifacts/task141-coroutines-test-resolver/build.gradle b/tools/raft-artifacts/task141-coroutines-test-resolver/build.gradle new file mode 100644 index 000000000..0b091ef65 --- /dev/null +++ b/tools/raft-artifacts/task141-coroutines-test-resolver/build.gradle @@ -0,0 +1,59 @@ +import org.gradle.api.artifacts.component.ModuleComponentIdentifier + +def version = "1.8.0-KBA-002" +def rootGav = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${version}" +def ohosGav = "org.jetbrains.kotlinx:kotlinx-coroutines-test-ohosarm64:${version}" + +// Only the OHOS platform module is asserted through module metadata. Resolving +// the multiplatform root on a JVM host selects jvmApiElements-published, which +// redirects via available-at to kotlinx-coroutines-test-jvm — a platform this +// task deliberately does not mirror. That redirect is a property of the host, +// not of the frozen bytes, so the root is checked as artifact bytes instead. +def ohosMetadataClosure = configurations.create("task141OhosMetadataClosure") { + canBeConsumed = false + canBeResolved = true +} +def artifactClosure = configurations.create("task141ArtifactClosure") { + canBeConsumed = false + canBeResolved = true +} + +dependencies { + add(ohosMetadataClosure.name, ohosGav) { transitive = false } + // Artifact-only notation keeps this check on the frozen authority bytes and + // off Kotlin/Native variant matching, which needs the OHOS toolchain. Real + // OHOS variant selection is proven separately by the Mobile compileTest. + add(artifactClosure.name, "${rootGav}@jar") { transitive = false } + add(artifactClosure.name, "${ohosGav}@klib") { transitive = false } +} + +tasks.register("resolveTask141Authority") { + doLast { + def actualComponents = ohosMetadataClosure.incoming.resolutionResult.allComponents + .collect { it.id } + .findAll { it instanceof ModuleComponentIdentifier } + .collect { "${it.group}:${it.module}:${it.version}" } + .toSet() + assert actualComponents == [ohosGav].toSet(): + "unexpected task #141 OHOS metadata closure: ${actualComponents.sort()}" + + def expectedArtifacts = [ + ("kotlinx-coroutines-test-${version}.jar".toString()): + "41faf619ea9466712501851e6ba4f0328be2673415c5c136054955f0d70a045b", + ("kotlinx-coroutines-test-ohosarm64-${version}.klib".toString()): + "ce0cf5e6683d55254ed89c733d05ca65581f024d6475f4f1f36b66017b8c75fb", + ] + def actualArtifacts = artifactClosure.resolve().collectEntries { file -> + def digest = java.security.MessageDigest.getInstance("SHA-256") + .digest(file.bytes) + .encodeHex() + .toString() + [(file.name): digest] + } + assert actualArtifacts == expectedArtifacts: + "unexpected task #141 authority artifacts: ${actualArtifacts}" + println "TASK141_TENCENT_AUTHORITY_RESOLVE_PASS ohos_components=1 artifacts=2" + println "TASK141_DISCLOSURE mirrored root resolves for OHOS targets only; " + + "non-OHOS available-at platforms are not mirrored by task #141" + } +} diff --git a/tools/raft-artifacts/task141-coroutines-test-resolver/settings.gradle b/tools/raft-artifacts/task141-coroutines-test-resolver/settings.gradle new file mode 100644 index 000000000..1fb169387 --- /dev/null +++ b/tools/raft-artifacts/task141-coroutines-test-resolver/settings.gradle @@ -0,0 +1,22 @@ +import org.gradle.api.initialization.resolve.RepositoriesMode + +pluginManagement { + repositories.clear() +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + maven { + name = "TencentAuthority" + url = uri("https://mirrors.tencent.com/repository/maven-tencent") + metadataSources { + gradleMetadata() + mavenPom() + artifact() + } + } + } +} + +rootProject.name = "task141-coroutines-test-authority-resolver" diff --git a/tools/raft-artifacts/test_mirror_maven_manifest.py b/tools/raft-artifacts/test_mirror_maven_manifest.py index f7d1f2891..b679be738 100644 --- a/tools/raft-artifacts/test_mirror_maven_manifest.py +++ b/tools/raft-artifacts/test_mirror_maven_manifest.py @@ -18,6 +18,7 @@ REPOSITORY = SCRIPT.parents[2] TASK121_MANIFEST = REPOSITORY / "publish/predecessors/task121-current-kba-manifest.tsv" TASK127_MANIFEST = REPOSITORY / "publish/predecessors/task127-kba010-manifest.tsv" +TASK141_MANIFEST = REPOSITORY / "publish/predecessors/task141-coroutines-test-manifest.tsv" SPEC = importlib.util.spec_from_file_location("mirror_maven_manifest", SCRIPT) assert SPEC and SPEC.loader mirror = importlib.util.module_from_spec(SPEC) @@ -70,6 +71,123 @@ def test_task127_repository_manifest_is_the_exact_frozen_closure(self) -> None: ): self.assertNotIn(excluded, paths) + def test_task141_repository_manifest_is_the_exact_frozen_closure(self) -> None: + metadata, entries = mirror.load_manifest(TASK141_MANIFEST) + + self.assertEqual(metadata["task"], "141") + self.assertEqual(len(entries), 45) + self.assertEqual(sum(item.size for item in entries), 201738) + actual_gavs = {(item.group_id, item.artifact_id, item.version) for item in entries} + self.assertEqual(actual_gavs, mirror.TASK141_EXPECTED_GAVS) + + primaries = [ + item + for item in entries + if not item.path.endswith((".md5", ".sha1", ".sha256", ".sha512")) + ] + self.assertEqual(len(primaries), 9) + self.assertEqual(len(entries) - len(primaries), 36) + + paths = "\n".join(item.path for item in entries) + # Only the OHOS platform module is mirrored; every other available-at + # platform of the same root stays out of this task. + for excluded in ( + "-jvm/", + "-js/", + "-wasm-js/", + "-iosarm64/", + "-iossimulatorarm64/", + "-iosx64/", + "-linuxx64/", + "-linuxarm64/", + "-macosarm64/", + "-macosx64/", + "-mingwx64/", + "-tvosarm64/", + "-watchosarm64/", + "-androidnativearm64/", + ): + self.assertNotIn(excluded, paths) + # The conditional closure member is recorded but never published here. + self.assertNotIn("kotlin-stdlib", paths) + self.assertNotIn("2.0.21-KBA-001", paths) + + def test_task141_declares_the_authority_superset_it_does_not_mirror(self) -> None: + metadata, entries = mirror.load_manifest(TASK141_MANIFEST) + + # The authority supplies 50 files for these coordinates; this task + # freezes 45. The 5-file difference must stay named in the record, + # because a create-only Maven write can never be yanked. + self.assertEqual(metadata["authority_files"], "50") + self.assertEqual(len(entries), 45) + self.assertIn("kotlin-tooling-metadata.json", metadata["excluded"]) + self.assertIn("checksum sidecars", metadata["excluded"]) + self.assertIn("50", metadata["authority_superset"]) + # The exclusion claim rests on the sibling family, so keep that stated. + self.assertIn("kotlinx-coroutines-core", metadata["excluded"]) + self.assertIn("atomicfu", metadata["excluded"]) + # No tooling-metadata path may appear among the mirrored rows. + for item in entries: + self.assertNotIn("kotlin-tooling-metadata", item.path) + + def test_task141_authority_superset_count_is_fail_closed(self) -> None: + manifest = self._mutated_task141( + "# authority_files=50", + "# authority_files=45", + ) + with self.assertRaisesRegex(mirror.MirrorError, "metadata mismatch"): + mirror.load_manifest(manifest) + + def _mutated_task141(self, old: str, new: str) -> Path: + temporary = tempfile.NamedTemporaryFile( + mode="w", encoding="utf-8", suffix=".tsv", delete=False + ) + self.addCleanup(Path(temporary.name).unlink, missing_ok=True) + source = TASK141_MANIFEST.read_text(encoding="utf-8") + self.assertIn(old, source) + temporary.write(source.replace(old, new, 1)) + temporary.close() + return Path(temporary.name) + + def test_task141_inventory_packet_binding_is_fail_closed(self) -> None: + manifest = self._mutated_task141( + "# inventory_packet_sha256=" + "c22ae909916db9e2d2732124710a08aff0cb36a79c08c24b210f30788af6f565", + "# inventory_packet_sha256=" + "0" * 64, + ) + with self.assertRaisesRegex(mirror.MirrorError, "metadata mismatch"): + mirror.load_manifest(manifest) + + def test_task141_klib_digest_mutation_is_fail_closed(self) -> None: + _, entries = mirror.load_manifest(TASK141_MANIFEST) + klib = next(item for item in entries if item.path.endswith(".klib")) + manifest = self._mutated_task141(klib.sha256, "0" * 64) + with self.assertRaisesRegex(mirror.MirrorError, "exact frozen closure"): + mirror.load_manifest(manifest) + + def test_task141_authority_origin_mutation_is_fail_closed(self) -> None: + manifest = self._mutated_task141( + "https://mirrors.tencent.com/repository/maven-tencent/", + "https://repo1.maven.org/maven2/", + ) + with self.assertRaisesRegex(mirror.MirrorError, "authority does not bind"): + mirror.load_manifest(manifest) + + def test_task141_dropping_one_file_is_fail_closed(self) -> None: + lines = TASK141_MANIFEST.read_text(encoding="utf-8").splitlines() + data_index = next( + index for index, line in enumerate(lines) if not line.startswith("#") + ) + del lines[data_index + 1] + with tempfile.NamedTemporaryFile( + mode="w", encoding="utf-8", suffix=".tsv", delete=False + ) as temporary: + temporary.write("\n".join(lines) + "\n") + path = Path(temporary.name) + self.addCleanup(path.unlink, missing_ok=True) + with self.assertRaisesRegex(mirror.MirrorError, "exact frozen closure"): + mirror.load_manifest(path) + def _mutated_task127(self, old: str, new: str) -> Path: temporary = tempfile.NamedTemporaryFile( mode="w", encoding="utf-8", suffix=".tsv", delete=False