blastdns 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ version: 2
2
+ updates:
3
+ # Monitor GitHub Actions
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ open-pull-requests-limit: 10
9
+
10
+ # Monitor Cargo dependencies
11
+ - package-ecosystem: "cargo"
12
+ directory: "/"
13
+ schedule:
14
+ interval: "weekly"
15
+ open-pull-requests-limit: 10
@@ -0,0 +1,151 @@
1
+ name: Benchmark
2
+
3
+ on:
4
+ push:
5
+ branches: [dev, stable]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ benchmark:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+
19
+ - name: Install Rust toolchain
20
+ uses: actions-rust-lang/setup-rust-toolchain@v1
21
+
22
+ - name: Build release binary
23
+ run: cargo build --release
24
+
25
+ - name: Build MassDNS
26
+ run: |
27
+ git clone --depth 1 https://github.com/blechschmidt/massdns.git /tmp/massdns
28
+ cd /tmp/massdns && make
29
+ sudo cp /tmp/massdns/bin/massdns /usr/local/bin/massdns
30
+
31
+ - name: Set up Python
32
+ uses: actions/setup-python@v5
33
+ with:
34
+ python-version: '3.x'
35
+
36
+ - name: Install uv
37
+ uses: astral-sh/setup-uv@v7
38
+
39
+ - name: Install Python dependencies
40
+ run: uv sync
41
+
42
+ - name: Build Python extension
43
+ run: uv run maturin develop --release
44
+
45
+ - name: Install dnsmasq
46
+ run: sudo apt-get update && sudo apt-get install -y dnsmasq
47
+
48
+ - name: Start test DNS server
49
+ run: sudo ./scripts/start-test-dns.sh
50
+
51
+ - name: Run benchmark
52
+ run: uv run python scripts/benchmark.py > benchmark_report.md
53
+
54
+ - name: Display benchmark results
55
+ run: cat benchmark_report.md
56
+
57
+ - name: Upload benchmark results
58
+ if: always()
59
+ uses: actions/upload-artifact@v4
60
+ with:
61
+ name: benchmark-results
62
+ path: benchmark_report.md
63
+ retention-days: 30
64
+
65
+ - name: Stop test DNS server
66
+ if: always()
67
+ run: sudo ./scripts/stop-test-dns.sh || true
68
+
69
+ - name: Comment benchmark results on PR
70
+ if: github.event_name == 'pull_request'
71
+ uses: actions/github-script@v7
72
+ with:
73
+ script: |
74
+ const fs = require('fs');
75
+
76
+ try {
77
+ const report = fs.readFileSync('benchmark_report.md', 'utf8');
78
+
79
+ // Find existing benchmark comment
80
+ const comments = await github.rest.issues.listComments({
81
+ owner: context.repo.owner,
82
+ repo: context.repo.repo,
83
+ issue_number: context.issue.number,
84
+ per_page: 100,
85
+ });
86
+
87
+ console.log(`Found ${comments.data.length} comments on this PR`);
88
+
89
+ const existingComments = comments.data.filter(comment =>
90
+ comment.body.includes('DNS Resolver Benchmark') &&
91
+ comment.user.login === 'github-actions[bot]'
92
+ );
93
+
94
+ console.log(`Found ${existingComments.length} existing benchmark comments`);
95
+
96
+ if (existingComments.length > 0) {
97
+ // Update most recent comment
98
+ const sortedComments = existingComments.sort((a, b) =>
99
+ new Date(b.created_at) - new Date(a.created_at)
100
+ );
101
+
102
+ const mostRecentComment = sortedComments[0];
103
+ console.log(`Updating benchmark comment: ${mostRecentComment.id}`);
104
+
105
+ await github.rest.issues.updateComment({
106
+ owner: context.repo.owner,
107
+ repo: context.repo.repo,
108
+ comment_id: mostRecentComment.id,
109
+ body: report
110
+ });
111
+
112
+ // Delete older duplicates
113
+ for (let i = 1; i < sortedComments.length; i++) {
114
+ try {
115
+ await github.rest.issues.deleteComment({
116
+ owner: context.repo.owner,
117
+ repo: context.repo.repo,
118
+ comment_id: sortedComments[i].id
119
+ });
120
+ console.log(`Deleted duplicate comment: ${sortedComments[i].id}`);
121
+ } catch (error) {
122
+ console.error(`Failed to delete comment: ${error.message}`);
123
+ }
124
+ }
125
+ } else {
126
+ // Create new comment
127
+ await github.rest.issues.createComment({
128
+ owner: context.repo.owner,
129
+ repo: context.repo.repo,
130
+ issue_number: context.issue.number,
131
+ body: report
132
+ });
133
+ console.log('Created new benchmark comment');
134
+ }
135
+ } catch (error) {
136
+ console.error('Failed to post benchmark results:', error);
137
+
138
+ await github.rest.issues.createComment({
139
+ owner: context.repo.owner,
140
+ repo: context.repo.repo,
141
+ issue_number: context.issue.number,
142
+ body: [
143
+ '## DNS Resolver Benchmark',
144
+ '',
145
+ '> ⚠️ **Failed to generate benchmark results**',
146
+ '> ',
147
+ `> Please check the [workflow logs](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}) for details.`
148
+ ].join('\n')
149
+ });
150
+ }
151
+
@@ -0,0 +1,240 @@
1
+ # This file is autogenerated by maturin v1.9.4
2
+ # To update, run
3
+
4
+ # maturin generate-ci github
5
+
6
+ name: Python Tests
7
+
8
+ on:
9
+ pull_request:
10
+ push:
11
+ branches:
12
+ - stable
13
+ workflow_dispatch:
14
+
15
+ concurrency:
16
+ group: ${{ github.workflow }}-${{ github.ref }}
17
+ cancel-in-progress: true
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ jobs:
23
+ python-tests:
24
+ runs-on: ubuntu-latest
25
+ strategy:
26
+ matrix:
27
+ python-version:
28
+ - "3.9"
29
+ - "3.10"
30
+ - "3.11"
31
+ - "3.12"
32
+ - "3.13"
33
+ - "3.14"
34
+
35
+ steps:
36
+ - uses: actions/checkout@v6
37
+
38
+ - name: Install Rust toolchain
39
+ uses: actions-rust-lang/setup-rust-toolchain@v1
40
+
41
+ - name: Set up Python
42
+ uses: actions/setup-python@v6
43
+ with:
44
+ python-version: ${{ matrix.python-version }}
45
+
46
+ - name: Install dnsmasq
47
+ run: sudo apt-get update && sudo apt-get install -y dnsmasq
48
+
49
+ - name: Start test DNS server
50
+ run: sudo ./scripts/start-test-dns.sh
51
+
52
+ - name: Install uv
53
+ uses: astral-sh/setup-uv@v7
54
+
55
+ - name: Install Python dependencies
56
+ run: uv sync
57
+
58
+ - name: Build Python extension
59
+ run: uv run maturin develop --release
60
+
61
+ - name: Run Python tests
62
+ run: uv run pytest blastdns/tests -vv
63
+
64
+ - name: Stop test DNS server
65
+ if: always()
66
+ run: sudo ./scripts/stop-test-dns.sh || true
67
+
68
+ linux-build:
69
+ needs: python-tests
70
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
71
+ runs-on: ${{ matrix.platform.runner }}
72
+ strategy:
73
+ matrix:
74
+ platform:
75
+ - runner: ubuntu-22.04
76
+ target: x86_64
77
+ - runner: ubuntu-22.04
78
+ target: x86
79
+ - runner: ubuntu-22.04
80
+ target: aarch64
81
+ - runner: ubuntu-22.04
82
+ target: armv7
83
+ - runner: ubuntu-22.04
84
+ target: s390x
85
+ - runner: ubuntu-22.04
86
+ target: ppc64le
87
+ steps:
88
+ - uses: actions/checkout@v6
89
+ - uses: actions/setup-python@v5
90
+ with:
91
+ python-version: 3.x
92
+ - name: Build wheels
93
+ uses: PyO3/maturin-action@v1
94
+ with:
95
+ target: ${{ matrix.platform.target }}
96
+ args: --release --out dist --find-interpreter
97
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
98
+ manylinux: auto
99
+ - name: Upload wheels
100
+ uses: actions/upload-artifact@v4
101
+ with:
102
+ name: wheels-linux-${{ matrix.platform.target }}
103
+ path: dist
104
+
105
+ musllinux-build:
106
+ needs: python-tests
107
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
108
+ runs-on: ${{ matrix.platform.runner }}
109
+ strategy:
110
+ matrix:
111
+ platform:
112
+ - runner: ubuntu-22.04
113
+ target: x86_64
114
+ - runner: ubuntu-22.04
115
+ target: x86
116
+ - runner: ubuntu-22.04
117
+ target: aarch64
118
+ - runner: ubuntu-22.04
119
+ target: armv7
120
+ steps:
121
+ - uses: actions/checkout@v6
122
+ - uses: actions/setup-python@v5
123
+ with:
124
+ python-version: 3.x
125
+ - name: Build wheels
126
+ uses: PyO3/maturin-action@v1
127
+ with:
128
+ target: ${{ matrix.platform.target }}
129
+ args: --release --out dist --find-interpreter
130
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
131
+ manylinux: musllinux_1_2
132
+ - name: Upload wheels
133
+ uses: actions/upload-artifact@v4
134
+ with:
135
+ name: wheels-musllinux-${{ matrix.platform.target }}
136
+ path: dist
137
+
138
+ windows-build:
139
+ needs: python-tests
140
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
141
+ runs-on: ${{ matrix.platform.runner }}
142
+ strategy:
143
+ matrix:
144
+ platform:
145
+ - runner: windows-latest
146
+ target: x64
147
+ - runner: windows-latest
148
+ target: x86
149
+ steps:
150
+ - uses: actions/checkout@v6
151
+ - uses: actions/setup-python@v5
152
+ with:
153
+ python-version: 3.x
154
+ architecture: ${{ matrix.platform.target }}
155
+ - name: Build wheels
156
+ uses: PyO3/maturin-action@v1
157
+ with:
158
+ target: ${{ matrix.platform.target }}
159
+ args: --release --out dist --find-interpreter
160
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
161
+ - name: Upload wheels
162
+ uses: actions/upload-artifact@v4
163
+ with:
164
+ name: wheels-windows-${{ matrix.platform.target }}
165
+ path: dist
166
+
167
+ macos-build:
168
+ needs: python-tests
169
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
170
+ runs-on: ${{ matrix.platform.runner }}
171
+ strategy:
172
+ matrix:
173
+ platform:
174
+ - runner: macos-13
175
+ target: x86_64
176
+ - runner: macos-14
177
+ target: aarch64
178
+ steps:
179
+ - uses: actions/checkout@v6
180
+ - uses: actions/setup-python@v5
181
+ with:
182
+ python-version: 3.x
183
+ - name: Build wheels
184
+ uses: PyO3/maturin-action@v1
185
+ with:
186
+ target: ${{ matrix.platform.target }}
187
+ args: --release --out dist --find-interpreter
188
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
189
+ - name: Upload wheels
190
+ uses: actions/upload-artifact@v4
191
+ with:
192
+ name: wheels-macos-${{ matrix.platform.target }}
193
+ path: dist
194
+
195
+ sdist-build:
196
+ needs: python-tests
197
+ runs-on: ubuntu-latest
198
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
199
+ steps:
200
+ - uses: actions/checkout@v6
201
+ - name: Build sdist
202
+ uses: PyO3/maturin-action@v1
203
+ with:
204
+ command: sdist
205
+ args: --out dist
206
+ - name: Upload sdist
207
+ uses: actions/upload-artifact@v4
208
+ with:
209
+ name: wheels-sdist
210
+ path: dist
211
+
212
+ release:
213
+ name: Release
214
+ needs:
215
+ - linux-build
216
+ - musllinux-build
217
+ - windows-build
218
+ - macos-build
219
+ - sdist-build
220
+ runs-on: ubuntu-latest
221
+ permissions:
222
+ # Use to sign the release artifacts
223
+ id-token: write
224
+ # Used to upload release artifacts
225
+ contents: write
226
+ # Used to generate artifact attestation
227
+ attestations: write
228
+ steps:
229
+ - uses: actions/download-artifact@v6
230
+ - name: Generate artifact attestation
231
+ uses: actions/attest-build-provenance@v3
232
+ with:
233
+ subject-path: 'wheels-*/*'
234
+ - name: Publish to PyPI
235
+ uses: PyO3/maturin-action@v1
236
+ env:
237
+ MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
238
+ with:
239
+ command: upload
240
+ args: --non-interactive --skip-existing wheels-*/*
@@ -0,0 +1,77 @@
1
+ name: Rust Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ stable ]
6
+ pull_request:
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ rust-tests:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+
19
+ - name: Install Rust toolchain
20
+ uses: actions-rust-lang/setup-rust-toolchain@v1
21
+
22
+ - name: Check formatting
23
+ run: cargo fmt --all -- --check
24
+
25
+ - name: Run clippy
26
+ run: cargo clippy --all-targets --all-features --locked -- -D warnings
27
+
28
+ - name: Install dnsmasq
29
+ run: sudo apt-get update && sudo apt-get install -y dnsmasq
30
+
31
+ - name: Start test DNS server
32
+ run: sudo ./scripts/start-test-dns.sh
33
+
34
+ - name: Run tests
35
+ run: cargo test --all --locked --verbose -- --include-ignored
36
+
37
+ - name: Stop test DNS server
38
+ if: always()
39
+ run: ./scripts/stop-test-dns.sh || true
40
+
41
+ cli-tests:
42
+ runs-on: ubuntu-latest
43
+
44
+ steps:
45
+ - uses: actions/checkout@v6
46
+
47
+ - name: Install Rust toolchain
48
+ uses: actions-rust-lang/setup-rust-toolchain@v1
49
+
50
+ - name: Build release binary
51
+ run: cargo build --release --locked
52
+
53
+ - name: Set up Python
54
+ uses: actions/setup-python@v6
55
+ with:
56
+ python-version: '3.x'
57
+
58
+ - name: Run streaming test
59
+ run: python tests/test-streaming.py
60
+
61
+ rust-publish:
62
+ needs: rust-tests
63
+ runs-on: ubuntu-latest
64
+ if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
65
+
66
+ steps:
67
+ - uses: actions/checkout@v6
68
+
69
+ - name: Install Rust toolchain
70
+ uses: actions-rs/toolchain@v1
71
+ with:
72
+ toolchain: stable
73
+ override: true
74
+ profile: minimal
75
+
76
+ - name: Publish to crates.io
77
+ run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}