neutrino-sql 0.1.5__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 @@
1
+ * @jvanbuel
@@ -0,0 +1,40 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ env:
9
+ CARGO_TERM_COLOR: always
10
+
11
+ jobs:
12
+ fmt:
13
+ name: Format
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
18
+ with:
19
+ components: rustfmt
20
+ - run: cargo fmt --all --check
21
+
22
+ clippy:
23
+ name: Clippy
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ - uses: dtolnay/rust-toolchain@stable
28
+ with:
29
+ components: clippy
30
+ - uses: Swatinem/rust-cache@v2
31
+ - run: cargo clippy --all-targets --all-features -- -D warnings
32
+
33
+ test:
34
+ name: Test
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: dtolnay/rust-toolchain@stable
39
+ - uses: Swatinem/rust-cache@v2
40
+ - run: cargo test --all-features
@@ -0,0 +1,196 @@
1
+ name: PyPI
2
+
3
+ # Builds platform wheels that ship the `neutrino` binary, so it can be
4
+ # installed with `uv tool install neutrino-sql` / `pipx install neutrino-sql`.
5
+ #
6
+ # Publishes on the same version tags that trigger the cargo-dist release
7
+ # workflow, so a release-plz tag ships crates.io, GitHub Releases, Homebrew
8
+ # and PyPI together. The wheel version is read from Cargo.toml, so nothing
9
+ # needs bumping here.
10
+ #
11
+ # Running this workflow manually builds everything and exercises the PyPI
12
+ # trusted-publishing OIDC exchange in --dry-run mode, without uploading. Use
13
+ # that to validate the publisher setup before the first real release. Only a
14
+ # version tag ever uploads.
15
+
16
+ on:
17
+ push:
18
+ tags:
19
+ - '**[0-9]+.[0-9]+.[0-9]+*'
20
+ # Verify the packaging still builds when it changes, without publishing.
21
+ pull_request:
22
+ paths:
23
+ - pyproject.toml
24
+ - .github/workflows/pypi.yml
25
+ workflow_dispatch:
26
+
27
+ permissions:
28
+ contents: read
29
+
30
+ env:
31
+ CARGO_TERM_COLOR: always
32
+
33
+ jobs:
34
+ linux:
35
+ name: Wheel (manylinux ${{ matrix.target }})
36
+ runs-on: ubuntu-22.04
37
+ strategy:
38
+ fail-fast: false
39
+ matrix:
40
+ target: [x86_64, aarch64]
41
+ steps:
42
+ - uses: actions/checkout@v6
43
+ - name: Build wheel
44
+ uses: PyO3/maturin-action@v1
45
+ env:
46
+ # `manylinux: auto` builds aarch64 in the manylinux2014-cross image,
47
+ # whose GCC 4.8.5 does not predefine __ARM_ARCH. ring 0.17's ARM
48
+ # assembly headers require it and hard-error without it. The variable
49
+ # is target-scoped, so it is inert on the x86_64 leg.
50
+ CFLAGS_aarch64_unknown_linux_gnu: "-D__ARM_ARCH=8"
51
+ with:
52
+ target: ${{ matrix.target }}
53
+ args: --release --out dist
54
+ manylinux: auto
55
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
56
+ - uses: actions/upload-artifact@v6
57
+ with:
58
+ name: wheels-manylinux-${{ matrix.target }}
59
+ path: dist
60
+
61
+ musllinux:
62
+ name: Wheel (musllinux ${{ matrix.target }})
63
+ runs-on: ubuntu-22.04
64
+ strategy:
65
+ fail-fast: false
66
+ matrix:
67
+ target: [x86_64, aarch64]
68
+ steps:
69
+ - uses: actions/checkout@v6
70
+ - name: Build wheel
71
+ uses: PyO3/maturin-action@v1
72
+ with:
73
+ target: ${{ matrix.target }}
74
+ args: --release --out dist
75
+ manylinux: musllinux_1_2
76
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
77
+ - uses: actions/upload-artifact@v6
78
+ with:
79
+ name: wheels-musllinux-${{ matrix.target }}
80
+ path: dist
81
+
82
+ macos:
83
+ name: Wheel (macOS ${{ matrix.target }})
84
+ runs-on: ${{ matrix.runner }}
85
+ strategy:
86
+ fail-fast: false
87
+ matrix:
88
+ include:
89
+ - runner: macos-latest
90
+ target: aarch64
91
+ - runner: macos-15-intel
92
+ target: x86_64
93
+ steps:
94
+ - uses: actions/checkout@v6
95
+ - name: Build wheel
96
+ uses: PyO3/maturin-action@v1
97
+ with:
98
+ target: ${{ matrix.target }}
99
+ args: --release --out dist
100
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
101
+ - uses: actions/upload-artifact@v6
102
+ with:
103
+ name: wheels-macos-${{ matrix.target }}
104
+ path: dist
105
+
106
+ windows:
107
+ name: Wheel (Windows x64)
108
+ runs-on: windows-latest
109
+ steps:
110
+ - uses: actions/checkout@v6
111
+ - name: Build wheel
112
+ uses: PyO3/maturin-action@v1
113
+ with:
114
+ target: x64
115
+ args: --release --out dist
116
+ sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
117
+ - uses: actions/upload-artifact@v6
118
+ with:
119
+ name: wheels-windows-x64
120
+ path: dist
121
+
122
+ sdist:
123
+ name: Source distribution
124
+ runs-on: ubuntu-latest
125
+ steps:
126
+ - uses: actions/checkout@v6
127
+ - name: Build sdist
128
+ uses: PyO3/maturin-action@v1
129
+ with:
130
+ command: sdist
131
+ args: --out dist
132
+ - uses: actions/upload-artifact@v6
133
+ with:
134
+ name: wheels-sdist
135
+ path: dist
136
+
137
+ smoke-test:
138
+ name: Smoke test (${{ matrix.os }})
139
+ needs: [linux, macos, windows]
140
+ runs-on: ${{ matrix.os }}
141
+ strategy:
142
+ fail-fast: false
143
+ matrix:
144
+ os: [ubuntu-latest, macos-latest, windows-latest]
145
+ env:
146
+ UV_TOOL_BIN_DIR: ${{ github.workspace }}/tool-bin
147
+ steps:
148
+ - uses: actions/download-artifact@v7
149
+ with:
150
+ pattern: wheels-*
151
+ merge-multiple: true
152
+ path: dist
153
+ - uses: astral-sh/setup-uv@v7
154
+ - name: Install from the built wheel and run it
155
+ shell: bash
156
+ # --no-build asserts a matching wheel exists for this platform rather
157
+ # than silently falling back to compiling the sdist.
158
+ run: |
159
+ uv tool install --no-index --no-build --find-links dist neutrino-sql
160
+ "${UV_TOOL_BIN_DIR}/neutrino" --version
161
+
162
+ publish:
163
+ name: Publish to PyPI
164
+ needs: [linux, musllinux, macos, windows, sdist, smoke-test]
165
+ # Tags upload for real; a manual run only dry-runs (see the step below).
166
+ if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
167
+ runs-on: ubuntu-latest
168
+ environment:
169
+ name: pypi
170
+ url: https://pypi.org/p/neutrino-sql
171
+ permissions:
172
+ contents: read
173
+ # Required for PyPI Trusted Publishing (OIDC). No API token needed.
174
+ id-token: write
175
+ steps:
176
+ - uses: actions/download-artifact@v7
177
+ with:
178
+ pattern: wheels-*
179
+ merge-multiple: true
180
+ path: dist
181
+ - uses: astral-sh/setup-uv@v7
182
+ - name: Publish
183
+ # `--trusted-publishing always` fails loudly if the OIDC exchange is
184
+ # not configured, rather than silently falling back to looking for a
185
+ # token. `--check-url` makes a re-run skip already-uploaded files.
186
+ #
187
+ # A manual run adds --dry-run, which still performs the full OIDC
188
+ # exchange but uploads nothing, so the publisher setup can be verified
189
+ # without burning a version number. Uploads are therefore reachable
190
+ # only from a version tag.
191
+ run: >-
192
+ uv publish
193
+ --trusted-publishing always
194
+ --check-url https://pypi.org/simple/neutrino-sql/
195
+ ${{ github.event_name == 'workflow_dispatch' && '--dry-run' || '' }}
196
+ 'dist/*'
@@ -0,0 +1,26 @@
1
+ name: Continuous Deployment
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ release-plz:
10
+ name: Release-plz
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout repository
14
+ uses: actions/checkout@v4
15
+ with:
16
+ fetch-depth: 0
17
+ token: ${{ secrets.RELEASE_PLZ_TOKEN }}
18
+
19
+ - name: Install Rust toolchain
20
+ uses: dtolnay/rust-toolchain@stable
21
+
22
+ - name: Run release-plz
23
+ uses: release-plz/action@v0.5
24
+ env:
25
+ GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}
26
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
@@ -0,0 +1,343 @@
1
+ # This file was autogenerated by dist: https://axodotdev.github.io/cargo-dist
2
+ #
3
+ # Copyright 2022-2024, axodotdev
4
+ # SPDX-License-Identifier: MIT or Apache-2.0
5
+ #
6
+ # CI that:
7
+ #
8
+ # * checks for a Git Tag that looks like a release
9
+ # * builds artifacts with dist (archives, installers, hashes)
10
+ # * uploads those artifacts to temporary workflow zip
11
+ # * on success, uploads the artifacts to a GitHub Release
12
+ #
13
+ # Note that the GitHub Release will be created with a generated
14
+ # title/body based on your changelogs.
15
+
16
+ name: Release
17
+ permissions:
18
+ "contents": "write"
19
+
20
+ # This task will run whenever you push a git tag that looks like a version
21
+ # like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc.
22
+ # Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where
23
+ # PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION
24
+ # must be a Cargo-style SemVer Version (must have at least major.minor.patch).
25
+ #
26
+ # If PACKAGE_NAME is specified, then the announcement will be for that
27
+ # package (erroring out if it doesn't have the given version or isn't dist-able).
28
+ #
29
+ # If PACKAGE_NAME isn't specified, then the announcement will be for all
30
+ # (dist-able) packages in the workspace with that version (this mode is
31
+ # intended for workspaces with only one dist-able package, or with all dist-able
32
+ # packages versioned/released in lockstep).
33
+ #
34
+ # If you push multiple tags at once, separate instances of this workflow will
35
+ # spin up, creating an independent announcement for each one. However, GitHub
36
+ # will hard limit this to 3 tags per commit, as it will assume more tags is a
37
+ # mistake.
38
+ #
39
+ # If there's a prerelease-style suffix to the version, then the release(s)
40
+ # will be marked as a prerelease.
41
+ on:
42
+ pull_request:
43
+ push:
44
+ tags:
45
+ - '**[0-9]+.[0-9]+.[0-9]+*'
46
+
47
+ jobs:
48
+ # Run 'dist plan' (or host) to determine what tasks we need to do
49
+ plan:
50
+ runs-on: "ubuntu-22.04"
51
+ outputs:
52
+ val: ${{ steps.plan.outputs.manifest }}
53
+ tag: ${{ !github.event.pull_request && github.ref_name || '' }}
54
+ tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }}
55
+ publishing: ${{ !github.event.pull_request }}
56
+ env:
57
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58
+ steps:
59
+ - uses: actions/checkout@v6
60
+ with:
61
+ persist-credentials: false
62
+ submodules: recursive
63
+ - name: Install dist
64
+ # we specify bash to get pipefail; it guards against the `curl` command
65
+ # failing. otherwise `sh` won't catch that `curl` returned non-0
66
+ shell: bash
67
+ run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh"
68
+ - name: Cache dist
69
+ uses: actions/upload-artifact@v6
70
+ with:
71
+ name: cargo-dist-cache
72
+ path: ~/.cargo/bin/dist
73
+ # sure would be cool if github gave us proper conditionals...
74
+ # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible
75
+ # functionality based on whether this is a pull_request, and whether it's from a fork.
76
+ # (PRs run on the *source* but secrets are usually on the *target* -- that's *good*
77
+ # but also really annoying to build CI around when it needs secrets to work right.)
78
+ - id: plan
79
+ run: |
80
+ dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json
81
+ echo "dist ran successfully"
82
+ cat plan-dist-manifest.json
83
+ echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT"
84
+ - name: "Upload dist-manifest.json"
85
+ uses: actions/upload-artifact@v6
86
+ with:
87
+ name: artifacts-plan-dist-manifest
88
+ path: plan-dist-manifest.json
89
+
90
+ # Build and packages all the platform-specific things
91
+ build-local-artifacts:
92
+ name: build-local-artifacts (${{ join(matrix.targets, ', ') }})
93
+ # Let the initial task tell us to not run (currently very blunt)
94
+ needs:
95
+ - plan
96
+ if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }}
97
+ strategy:
98
+ fail-fast: false
99
+ # Target platforms/runners are computed by dist in create-release.
100
+ # Each member of the matrix has the following arguments:
101
+ #
102
+ # - runner: the github runner
103
+ # - dist-args: cli flags to pass to dist
104
+ # - install-dist: expression to run to install dist on the runner
105
+ #
106
+ # Typically there will be:
107
+ # - 1 "global" task that builds universal installers
108
+ # - N "local" tasks that build each platform's binaries and platform-specific installers
109
+ matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}
110
+ runs-on: ${{ matrix.runner }}
111
+ container: ${{ matrix.container && matrix.container.image || null }}
112
+ env:
113
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
114
+ BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json
115
+ steps:
116
+ - name: enable windows longpaths
117
+ run: |
118
+ git config --global core.longpaths true
119
+ - uses: actions/checkout@v6
120
+ with:
121
+ persist-credentials: false
122
+ submodules: recursive
123
+ - name: Install Rust non-interactively if not already installed
124
+ if: ${{ matrix.container }}
125
+ run: |
126
+ if ! command -v cargo > /dev/null 2>&1; then
127
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
128
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
129
+ fi
130
+ - name: Install dist
131
+ run: ${{ matrix.install_dist.run }}
132
+ # Get the dist-manifest
133
+ - name: Fetch local artifacts
134
+ uses: actions/download-artifact@v7
135
+ with:
136
+ pattern: artifacts-*
137
+ path: target/distrib/
138
+ merge-multiple: true
139
+ - name: Install dependencies
140
+ run: |
141
+ ${{ matrix.packages_install }}
142
+ - name: Build artifacts
143
+ run: |
144
+ # Actually do builds and make zips and whatnot
145
+ dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
146
+ echo "dist ran successfully"
147
+ - id: cargo-dist
148
+ name: Post-build
149
+ # We force bash here just because github makes it really hard to get values up
150
+ # to "real" actions without writing to env-vars, and writing to env-vars has
151
+ # inconsistent syntax between shell and powershell.
152
+ shell: bash
153
+ run: |
154
+ # Parse out what we just built and upload it to scratch storage
155
+ echo "paths<<EOF" >> "$GITHUB_OUTPUT"
156
+ dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT"
157
+ echo "EOF" >> "$GITHUB_OUTPUT"
158
+
159
+ cp dist-manifest.json "$BUILD_MANIFEST_NAME"
160
+ - name: "Upload artifacts"
161
+ uses: actions/upload-artifact@v6
162
+ with:
163
+ name: artifacts-build-local-${{ join(matrix.targets, '_') }}
164
+ path: |
165
+ ${{ steps.cargo-dist.outputs.paths }}
166
+ ${{ env.BUILD_MANIFEST_NAME }}
167
+
168
+ # Build and package all the platform-agnostic(ish) things
169
+ build-global-artifacts:
170
+ needs:
171
+ - plan
172
+ - build-local-artifacts
173
+ runs-on: "ubuntu-22.04"
174
+ env:
175
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
176
+ BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
177
+ steps:
178
+ - uses: actions/checkout@v6
179
+ with:
180
+ persist-credentials: false
181
+ submodules: recursive
182
+ - name: Install cached dist
183
+ uses: actions/download-artifact@v7
184
+ with:
185
+ name: cargo-dist-cache
186
+ path: ~/.cargo/bin/
187
+ - run: chmod +x ~/.cargo/bin/dist
188
+ # Get all the local artifacts for the global tasks to use (for e.g. checksums)
189
+ - name: Fetch local artifacts
190
+ uses: actions/download-artifact@v7
191
+ with:
192
+ pattern: artifacts-*
193
+ path: target/distrib/
194
+ merge-multiple: true
195
+ - id: cargo-dist
196
+ shell: bash
197
+ run: |
198
+ dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
199
+ echo "dist ran successfully"
200
+
201
+ # Parse out what we just built and upload it to scratch storage
202
+ echo "paths<<EOF" >> "$GITHUB_OUTPUT"
203
+ jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT"
204
+ echo "EOF" >> "$GITHUB_OUTPUT"
205
+
206
+ cp dist-manifest.json "$BUILD_MANIFEST_NAME"
207
+ - name: "Upload artifacts"
208
+ uses: actions/upload-artifact@v6
209
+ with:
210
+ name: artifacts-build-global
211
+ path: |
212
+ ${{ steps.cargo-dist.outputs.paths }}
213
+ ${{ env.BUILD_MANIFEST_NAME }}
214
+ # Determines if we should publish/announce
215
+ host:
216
+ needs:
217
+ - plan
218
+ - build-local-artifacts
219
+ - build-global-artifacts
220
+ # Only run if we're "publishing", and only if plan, local and global didn't fail (skipped is fine)
221
+ if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }}
222
+ env:
223
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
224
+ runs-on: "ubuntu-22.04"
225
+ outputs:
226
+ val: ${{ steps.host.outputs.manifest }}
227
+ steps:
228
+ - uses: actions/checkout@v6
229
+ with:
230
+ persist-credentials: false
231
+ submodules: recursive
232
+ - name: Install cached dist
233
+ uses: actions/download-artifact@v7
234
+ with:
235
+ name: cargo-dist-cache
236
+ path: ~/.cargo/bin/
237
+ - run: chmod +x ~/.cargo/bin/dist
238
+ # Fetch artifacts from scratch-storage
239
+ - name: Fetch artifacts
240
+ uses: actions/download-artifact@v7
241
+ with:
242
+ pattern: artifacts-*
243
+ path: target/distrib/
244
+ merge-multiple: true
245
+ - id: host
246
+ shell: bash
247
+ run: |
248
+ dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json
249
+ echo "artifacts uploaded and released successfully"
250
+ cat dist-manifest.json
251
+ echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
252
+ - name: "Upload dist-manifest.json"
253
+ uses: actions/upload-artifact@v6
254
+ with:
255
+ # Overwrite the previous copy
256
+ name: artifacts-dist-manifest
257
+ path: dist-manifest.json
258
+ # Create a GitHub Release while uploading all files to it
259
+ - name: "Download GitHub Artifacts"
260
+ uses: actions/download-artifact@v7
261
+ with:
262
+ pattern: artifacts-*
263
+ path: artifacts
264
+ merge-multiple: true
265
+ - name: Cleanup
266
+ run: |
267
+ # Remove the granular manifests
268
+ rm -f artifacts/*-dist-manifest.json
269
+ - name: Create GitHub Release
270
+ env:
271
+ PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}"
272
+ ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}"
273
+ ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}"
274
+ RELEASE_COMMIT: "${{ github.sha }}"
275
+ run: |
276
+ # Write and read notes from a file to avoid quoting breaking things
277
+ echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt
278
+
279
+ gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/*
280
+
281
+ publish-homebrew-formula:
282
+ needs:
283
+ - plan
284
+ - host
285
+ runs-on: "ubuntu-22.04"
286
+ env:
287
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
288
+ PLAN: ${{ needs.plan.outputs.val }}
289
+ GITHUB_USER: "axo bot"
290
+ GITHUB_EMAIL: "admin+bot@axo.dev"
291
+ if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
292
+ steps:
293
+ - uses: actions/checkout@v6
294
+ with:
295
+ persist-credentials: true
296
+ repository: "lightconelabs/homebrew-tap"
297
+ token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
298
+ # So we have access to the formula
299
+ - name: Fetch homebrew formulae
300
+ uses: actions/download-artifact@v7
301
+ with:
302
+ pattern: artifacts-*
303
+ path: Formula/
304
+ merge-multiple: true
305
+ # This is extra complex because you can make your Formula name not match your app name
306
+ # so we need to find releases with a *.rb file, and publish with that filename.
307
+ - name: Commit formula files
308
+ run: |
309
+ git config --global user.name "${GITHUB_USER}"
310
+ git config --global user.email "${GITHUB_EMAIL}"
311
+
312
+ for release in $(echo "$PLAN" | jq --compact-output '.releases[] | select([.artifacts[] | endswith(".rb")] | any)'); do
313
+ filename=$(echo "$release" | jq '.artifacts[] | select(endswith(".rb"))' --raw-output)
314
+ name=$(echo "$filename" | sed "s/\.rb$//")
315
+ version=$(echo "$release" | jq .app_version --raw-output)
316
+
317
+ export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH"
318
+ brew update
319
+ # We avoid reformatting user-provided data such as the app description and homepage.
320
+ brew style --except-cops FormulaAudit/Homepage,FormulaAudit/Desc,FormulaAuditStrict --fix "Formula/${filename}" || true
321
+
322
+ git add "Formula/${filename}"
323
+ git commit -m "${name} ${version}"
324
+ done
325
+ git push
326
+
327
+ announce:
328
+ needs:
329
+ - plan
330
+ - host
331
+ - publish-homebrew-formula
332
+ # use "always() && ..." to allow us to wait for all publish jobs while
333
+ # still allowing individual publish jobs to skip themselves (for prereleases).
334
+ # "host" however must run to completion, no skipping allowed!
335
+ if: ${{ always() && needs.host.result == 'success' && (needs.publish-homebrew-formula.result == 'skipped' || needs.publish-homebrew-formula.result == 'success') }}
336
+ runs-on: "ubuntu-22.04"
337
+ env:
338
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
339
+ steps:
340
+ - uses: actions/checkout@v6
341
+ with:
342
+ persist-credentials: false
343
+ submodules: recursive
@@ -0,0 +1,7 @@
1
+ target
2
+ .DS_Store
3
+
4
+ # Python packaging (maturin / uv)
5
+ dist
6
+ .venv
7
+ uv.lock
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/AndrejOrsula/pre-commit-cargo
3
+ rev: 0.4.0
4
+ hooks:
5
+ - id: cargo-fmt
6
+ - id: cargo-clippy
7
+ args: ["--all-targets", "--all-features", "--", "-D", "warnings"]
@@ -0,0 +1,57 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+ ## [0.1.5] - 2026-08-30
10
+
11
+ ### 🚀 Features
12
+
13
+ - Publish neutrino to PyPI as `neutrino-sql`
14
+
15
+ ### 🐛 Bug Fixes
16
+
17
+ - *(security)* Autofix 3rd party Github Actions should be pinned
18
+ - *(ci)* Define __ARM_ARCH for the manylinux aarch64 wheel build
19
+
20
+ ### 📚 Documentation
21
+
22
+ - Drop the name-collision aside from the install instructions
23
+ - Tighten the uv install note
24
+ - Drop the pipx note from the install section
25
+ - Cut the runtime-dependency aside from the install section
26
+
27
+ ### ⚙️ Miscellaneous Tasks
28
+
29
+ - Publish to PyPI with `uv publish` instead of the pypa action
30
+ - Let a manual run dry-run the PyPI trusted-publishing exchange
31
+ ## [0.1.4] - 2026-08-24
32
+
33
+ ### ⚙️ Miscellaneous Tasks
34
+
35
+ - Update Cargo.lock dependencies
36
+ ## [0.1.3] - 2026-07-22
37
+
38
+ ### ⚙️ Miscellaneous Tasks
39
+
40
+ - Update readme
41
+ - Fix typo readme
42
+ ## [0.1.2] - 2026-03-09
43
+
44
+ ### 🚀 Features
45
+
46
+ - Add output to csv functionality
47
+ ## [0.1.1] - 2026-03-02
48
+
49
+ ### ⚙️ Miscellaneous Tasks
50
+
51
+ - Release v0.1.1
52
+ ## [0.1.0] - 2026-03-02
53
+
54
+ ### 🚀 Features
55
+
56
+ - Add automation
57
+ - Add automation