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.
- blastdns-1.0.1/.github/dependabot.yml +15 -0
- blastdns-1.0.1/.github/workflows/benchmark.yml +151 -0
- blastdns-1.0.1/.github/workflows/python-tests.yml +240 -0
- blastdns-1.0.1/.github/workflows/rust-tests.yml +77 -0
- blastdns-1.0.1/Cargo.lock +1525 -0
- blastdns-1.0.1/Cargo.toml +38 -0
- blastdns-1.0.1/PKG-INFO +352 -0
- blastdns-1.0.1/README.md +339 -0
- blastdns-1.0.1/blastdns/__init__.py +151 -0
- blastdns-1.0.1/blastdns/tests/test_client.py +235 -0
- blastdns-1.0.1/examples/resolve-batch.py +26 -0
- blastdns-1.0.1/examples/resolve-single-host.py +20 -0
- blastdns-1.0.1/pyproject.toml +33 -0
- blastdns-1.0.1/scripts/benchmark.py +338 -0
- blastdns-1.0.1/scripts/start-test-dns.sh +59 -0
- blastdns-1.0.1/scripts/stop-test-dns.sh +24 -0
- blastdns-1.0.1/src/client.rs +696 -0
- blastdns-1.0.1/src/config.rs +63 -0
- blastdns-1.0.1/src/error.rs +65 -0
- blastdns-1.0.1/src/lib.rs +16 -0
- blastdns-1.0.1/src/main.rs +141 -0
- blastdns-1.0.1/src/python.rs +259 -0
- blastdns-1.0.1/src/utils.rs +105 -0
- blastdns-1.0.1/src/worker.rs +176 -0
- blastdns-1.0.1/tests/test-streaming.py +95 -0
- blastdns-1.0.1/uv.lock +576 -0
|
@@ -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 }}
|