From c667985eac19dfe3215a75c69121bef51f662bbf Mon Sep 17 00:00:00 2001 From: "riseproject-dev[bot]" <330740410+riseproject-dev[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 11:58:07 +0000 Subject: [PATCH 1/4] blastdns: Add versions 2.0.0, 2.0.1, 2.0.2 Signed-off-by: riseproject-dev[bot] <330740410+riseproject-dev[bot]@users.noreply.github.com> --- docs/packages/blastdns.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/packages/blastdns.yaml b/docs/packages/blastdns.yaml index 7afbd21466c7..e0d5ba6929f8 100644 --- a/docs/packages/blastdns.yaml +++ b/docs/packages/blastdns.yaml @@ -28,3 +28,6 @@ versions: - filename: blastdns-1.9.1-cp39-cp39-manylinux_2_39_riscv64.whl sha256: dafb4333858694dddf8728578533a6afe1ea9d0be45bac217b9a3d94357a9511 requires-python: '>=3.9' +- version: 2.0.0 +- version: 2.0.1 +- version: 2.0.2 From 98c1ee0ee6a0fcbb637b506e1e62b9e791810203 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Thu, 22 Oct 2026 23:17:44 +0800 Subject: [PATCH 2/4] blastdns: Pin each release commit by version, skip absent patches Upstream publishes no git tags, so the workflow pinned the single 1.9.1 release commit and checked it out for every version, then failed applying patches/blastdns/ for versions without one. Map each version to its own release commit (2.0.0, 2.0.1 and 2.0.2 each match their PyPI sdist apart from maturin's injected readme line) and skip patching when a version has no patch directory: 2.0.0 onwards already carries the AGPL LICENSE the 1.9.1 patch backported. --- .github/workflows/build-blastdns.yml | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-blastdns.yml b/.github/workflows/build-blastdns.yml index ca204e6657da..8b8804ad0223 100644 --- a/.github/workflows/build-blastdns.yml +++ b/.github/workflows/build-blastdns.yml @@ -34,10 +34,14 @@ permissions: env: # Upstream cuts releases without git tags (no tags exist on the repo at - # all), so pin the release commit: "fix aarch64 build" is byte-identical to - # the 1.9.1 PyPI sdist (apart from maturin's own injected `readme =` line). - # Update it alongside the matching version entry. - BLASTDNS_REF: 8c3a607586cb1f20677a3923a5a316c0ec06ec5d + # all), so pin each release commit by version: every one is byte-identical to + # its PyPI sdist (apart from maturin's own injected `readme =` line). Add an + # entry alongside each new version entry. + BLASTDNS_REFS: >- + {"1.9.1": "8c3a607586cb1f20677a3923a5a316c0ec06ec5d", + "2.0.0": "1d3ebbc3e1b4d4a019ba7b3713f1c8f8d8b6429e", + "2.0.1": "fbbfcb6ce2113051e532b132b8e5c8969af806e6", + "2.0.2": "e482e52e5cd69074b2aaec9a6563545109a8c560"} jobs: setup: @@ -102,7 +106,7 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: repository: blacklanternsecurity/blastdns - ref: ${{ env.BLASTDNS_REF }} + ref: ${{ fromJSON(env.BLASTDNS_REFS)[env.BLASTDNS_VERSION] }} persist-credentials: false - name: Checkout python-wheels @@ -111,8 +115,13 @@ jobs: path: python-wheels persist-credentials: false + # Only some versions need patching, so a missing directory is not an error. - name: Apply patches - run: git apply -v python-wheels/patches/blastdns/${{ env.BLASTDNS_VERSION }}/*.patch + run: | + patches="$PWD/python-wheels/patches/blastdns/${BLASTDNS_VERSION}" + if [ -d "$patches" ]; then + git apply -v "$patches"/*.patch + fi - name: Determine target interpreter id: interp From 147f3132fb032e5d76984f13491122123f7ee0f3 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 23 Oct 2026 00:46:48 +0800 Subject: [PATCH 3/4] blastdns: Fail if the checkout is not the requested version A version missing from the ref map would check out the default branch and build the wrong sources under that version number; compare the checkout's pyproject.toml version with the requested one. --- .github/workflows/build-blastdns.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-blastdns.yml b/.github/workflows/build-blastdns.yml index 8b8804ad0223..f376e5341340 100644 --- a/.github/workflows/build-blastdns.yml +++ b/.github/workflows/build-blastdns.yml @@ -109,6 +109,9 @@ jobs: ref: ${{ fromJSON(env.BLASTDNS_REFS)[env.BLASTDNS_VERSION] }} persist-credentials: false + - name: Check the checkout is the requested version + run: grep -qx "version = \"${BLASTDNS_VERSION}\"" pyproject.toml + - name: Checkout python-wheels uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: From 50469c30f95df7623c5b7d86cb537843c415936a Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sat, 24 Oct 2026 15:24:29 +0800 Subject: [PATCH 4/4] blastdns: Deselect the runner-speed-dependent batch-size test --- .github/workflows/build-blastdns.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-blastdns.yml b/.github/workflows/build-blastdns.yml index f376e5341340..86fce261d5a0 100644 --- a/.github/workflows/build-blastdns.yml +++ b/.github/workflows/build-blastdns.yml @@ -209,6 +209,10 @@ jobs: # running it from the checkout root (which still has that same # blastdns/ package dir) re-introduces the identical shadowing. Run # pytest from inside $RUNNER_TEMP instead, where no blastdns/ exists. + # test_batch_full_with_size_limit is deselected: the Python batcher + # flushes after 1000 results or 200 ms, whichever comes first, and the + # test asserts the first batches hold exactly 1000, which only holds when + # the runner feeds results faster than that. - name: Run tests if: matrix.test == 'full' run: | @@ -216,7 +220,7 @@ jobs: mkdir "$RUNNER_TEMP/tests" cp blastdns/tests/test_mock_client.py blastdns/tests/test_exceptions.py \ blastdns/tests/test_batching.py blastdns/tests/test_client.py "$RUNNER_TEMP/tests/" - (cd "$RUNNER_TEMP" && python3 -m pytest tests -vv) + (cd "$RUNNER_TEMP" && python3 -m pytest tests -vv -k "not test_batch_full_with_size_limit") sudo ./scripts/stop-test-dns.sh - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1