sassy-rs 0.1.0__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,2 @@
1
+ [build]
2
+ rustflags = ["-C", "target-cpu=native"]
@@ -0,0 +1,102 @@
1
+ name: Build and publish sassy-rs wheels
2
+
3
+ # Just run for each new v tag we see pushed
4
+ on:
5
+ push:
6
+ tags:
7
+ - 'v*'
8
+
9
+ jobs:
10
+ build:
11
+ strategy:
12
+ matrix:
13
+ include:
14
+ # We only do x86_64
15
+ - os: ubuntu-latest
16
+ target: x86_64-unknown-linux-gnu
17
+ - os: windows-latest
18
+ target: x86_64-pc-windows-msvc
19
+ - os: macos-latest
20
+ target: x86_64-apple-darwin
21
+ runs-on: ${{ matrix.os }}
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ # Build a single ABI3 wheel (cp38-abi3) that works on every Python ≥3.8
27
+ - name: Set up Python (ABI-stable build)
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: '3.8'
31
+
32
+ - name: Install build dependencies
33
+ run: pip install "packaging>=24.2"
34
+
35
+ - name: Install Rust nightly
36
+ uses: dtolnay/rust-toolchain@nightly
37
+ with:
38
+ targets: ${{ matrix.target }}
39
+ override: true
40
+
41
+ - name: Build wheel
42
+ uses: PyO3/maturin-action@v1
43
+ with:
44
+ args: --release --features python --out dist --target ${{ matrix.target }}
45
+ sccache: 'true'
46
+ manylinux: auto
47
+ env:
48
+ # Produce a single cp38-abi3 wheel that is usable on all later versions
49
+ PYO3_USE_ABI3_FORWARD_COMPATIBILITY: 1
50
+
51
+ - name: Upload wheel
52
+ uses: actions/upload-artifact@v4
53
+ with:
54
+ name: wheel-${{ matrix.target }}
55
+ path: dist/*
56
+
57
+ # Build source distribution once on Linux
58
+ # maybe we can just skip this step, we dont really need the source on pypi
59
+ sdist:
60
+ runs-on: ubuntu-latest
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - name: Set up Python
64
+ uses: actions/setup-python@v5
65
+ with:
66
+ python-version: '3.8'
67
+ - name: Install build dependencies
68
+ run: pip install "packaging>=24.2"
69
+ - name: Build sdist
70
+ uses: PyO3/maturin-action@v1
71
+ with:
72
+ command: sdist
73
+ args: --out dist
74
+ - uses: actions/upload-artifact@v4
75
+ with:
76
+ name: sdist
77
+ path: dist/*
78
+
79
+ publish:
80
+ needs: [build, sdist]
81
+ runs-on: ubuntu-latest
82
+ environment: pypi
83
+ permissions:
84
+ id-token: write # For trusted publishing
85
+
86
+ steps:
87
+ - name: Download built artifacts
88
+ uses: actions/download-artifact@v4
89
+ with:
90
+ path: dist
91
+ merge-multiple: true
92
+
93
+ - run: ls -R dist
94
+
95
+ - name: Install upload dependencies
96
+ run: pip install --upgrade "packaging>=24.2" twine
97
+
98
+ - name: Publish to PyPI
99
+ env:
100
+ TWINE_USERNAME: __token__
101
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
102
+ run: twine upload --skip-existing dist/*
@@ -0,0 +1,291 @@
1
+ # This file was autogenerated by dist: https://opensource.axo.dev/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-20.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@v4
60
+ with:
61
+ submodules: recursive
62
+ - name: Install dist
63
+ # we specify bash to get pipefail; it guards against the `curl` command
64
+ # failing. otherwise `sh` won't catch that `curl` returned non-0
65
+ shell: bash
66
+ run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.28.0/cargo-dist-installer.sh | sh"
67
+ - name: Cache dist
68
+ uses: actions/upload-artifact@v4
69
+ with:
70
+ name: cargo-dist-cache
71
+ path: ~/.cargo/bin/dist
72
+ # sure would be cool if github gave us proper conditionals...
73
+ # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible
74
+ # functionality based on whether this is a pull_request, and whether it's from a fork.
75
+ # (PRs run on the *source* but secrets are usually on the *target* -- that's *good*
76
+ # but also really annoying to build CI around when it needs secrets to work right.)
77
+ - id: plan
78
+ run: |
79
+ dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json
80
+ echo "dist ran successfully"
81
+ cat plan-dist-manifest.json
82
+ echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT"
83
+ - name: "Upload dist-manifest.json"
84
+ uses: actions/upload-artifact@v4
85
+ with:
86
+ name: artifacts-plan-dist-manifest
87
+ path: plan-dist-manifest.json
88
+
89
+ # Build and packages all the platform-specific things
90
+ build-local-artifacts:
91
+ name: build-local-artifacts (${{ join(matrix.targets, ', ') }})
92
+ # Let the initial task tell us to not run (currently very blunt)
93
+ needs:
94
+ - plan
95
+ 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') }}
96
+ strategy:
97
+ fail-fast: false
98
+ # Target platforms/runners are computed by dist in create-release.
99
+ # Each member of the matrix has the following arguments:
100
+ #
101
+ # - runner: the github runner
102
+ # - dist-args: cli flags to pass to dist
103
+ # - install-dist: expression to run to install dist on the runner
104
+ #
105
+ # Typically there will be:
106
+ # - 1 "global" task that builds universal installers
107
+ # - N "local" tasks that build each platform's binaries and platform-specific installers
108
+ matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }}
109
+ runs-on: ${{ matrix.runner }}
110
+ container: ${{ matrix.container && matrix.container.image || null }}
111
+ env:
112
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113
+ BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json
114
+ steps:
115
+ - name: enable windows longpaths
116
+ run: |
117
+ git config --global core.longpaths true
118
+ - uses: actions/checkout@v4
119
+ with:
120
+ submodules: recursive
121
+ - name: Install Rust non-interactively if not already installed
122
+ if: ${{ matrix.container }}
123
+ run: |
124
+ if ! command -v cargo > /dev/null 2>&1; then
125
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
126
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
127
+ fi
128
+ - name: Install dist
129
+ run: ${{ matrix.install_dist.run }}
130
+ # Get the dist-manifest
131
+ - name: Fetch local artifacts
132
+ uses: actions/download-artifact@v4
133
+ with:
134
+ pattern: artifacts-*
135
+ path: target/distrib/
136
+ merge-multiple: true
137
+ - name: Install dependencies
138
+ run: |
139
+ ${{ matrix.packages_install }}
140
+ - name: Build artifacts
141
+ run: |
142
+ # Actually do builds and make zips and whatnot
143
+ dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json
144
+ echo "dist ran successfully"
145
+ - id: cargo-dist
146
+ name: Post-build
147
+ # We force bash here just because github makes it really hard to get values up
148
+ # to "real" actions without writing to env-vars, and writing to env-vars has
149
+ # inconsistent syntax between shell and powershell.
150
+ shell: bash
151
+ run: |
152
+ # Parse out what we just built and upload it to scratch storage
153
+ echo "paths<<EOF" >> "$GITHUB_OUTPUT"
154
+ dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT"
155
+ echo "EOF" >> "$GITHUB_OUTPUT"
156
+
157
+ cp dist-manifest.json "$BUILD_MANIFEST_NAME"
158
+ - name: "Upload artifacts"
159
+ uses: actions/upload-artifact@v4
160
+ with:
161
+ name: artifacts-build-local-${{ join(matrix.targets, '_') }}
162
+ path: |
163
+ ${{ steps.cargo-dist.outputs.paths }}
164
+ ${{ env.BUILD_MANIFEST_NAME }}
165
+
166
+ # Build and package all the platform-agnostic(ish) things
167
+ build-global-artifacts:
168
+ needs:
169
+ - plan
170
+ - build-local-artifacts
171
+ runs-on: "ubuntu-20.04"
172
+ env:
173
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
174
+ BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json
175
+ steps:
176
+ - uses: actions/checkout@v4
177
+ with:
178
+ submodules: recursive
179
+ - name: Install cached dist
180
+ uses: actions/download-artifact@v4
181
+ with:
182
+ name: cargo-dist-cache
183
+ path: ~/.cargo/bin/
184
+ - run: chmod +x ~/.cargo/bin/dist
185
+ # Get all the local artifacts for the global tasks to use (for e.g. checksums)
186
+ - name: Fetch local artifacts
187
+ uses: actions/download-artifact@v4
188
+ with:
189
+ pattern: artifacts-*
190
+ path: target/distrib/
191
+ merge-multiple: true
192
+ - id: cargo-dist
193
+ shell: bash
194
+ run: |
195
+ dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json
196
+ echo "dist ran successfully"
197
+
198
+ # Parse out what we just built and upload it to scratch storage
199
+ echo "paths<<EOF" >> "$GITHUB_OUTPUT"
200
+ jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT"
201
+ echo "EOF" >> "$GITHUB_OUTPUT"
202
+
203
+ cp dist-manifest.json "$BUILD_MANIFEST_NAME"
204
+ - name: "Upload artifacts"
205
+ uses: actions/upload-artifact@v4
206
+ with:
207
+ name: artifacts-build-global
208
+ path: |
209
+ ${{ steps.cargo-dist.outputs.paths }}
210
+ ${{ env.BUILD_MANIFEST_NAME }}
211
+ # Determines if we should publish/announce
212
+ host:
213
+ needs:
214
+ - plan
215
+ - build-local-artifacts
216
+ - build-global-artifacts
217
+ # Only run if we're "publishing", and only if local and global didn't fail (skipped is fine)
218
+ if: ${{ always() && 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') }}
219
+ env:
220
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
221
+ runs-on: "ubuntu-20.04"
222
+ outputs:
223
+ val: ${{ steps.host.outputs.manifest }}
224
+ steps:
225
+ - uses: actions/checkout@v4
226
+ with:
227
+ submodules: recursive
228
+ - name: Install cached dist
229
+ uses: actions/download-artifact@v4
230
+ with:
231
+ name: cargo-dist-cache
232
+ path: ~/.cargo/bin/
233
+ - run: chmod +x ~/.cargo/bin/dist
234
+ # Fetch artifacts from scratch-storage
235
+ - name: Fetch artifacts
236
+ uses: actions/download-artifact@v4
237
+ with:
238
+ pattern: artifacts-*
239
+ path: target/distrib/
240
+ merge-multiple: true
241
+ - id: host
242
+ shell: bash
243
+ run: |
244
+ dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json
245
+ echo "artifacts uploaded and released successfully"
246
+ cat dist-manifest.json
247
+ echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT"
248
+ - name: "Upload dist-manifest.json"
249
+ uses: actions/upload-artifact@v4
250
+ with:
251
+ # Overwrite the previous copy
252
+ name: artifacts-dist-manifest
253
+ path: dist-manifest.json
254
+ # Create a GitHub Release while uploading all files to it
255
+ - name: "Download GitHub Artifacts"
256
+ uses: actions/download-artifact@v4
257
+ with:
258
+ pattern: artifacts-*
259
+ path: artifacts
260
+ merge-multiple: true
261
+ - name: Cleanup
262
+ run: |
263
+ # Remove the granular manifests
264
+ rm -f artifacts/*-dist-manifest.json
265
+ - name: Create GitHub Release
266
+ env:
267
+ PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}"
268
+ ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}"
269
+ ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}"
270
+ RELEASE_COMMIT: "${{ github.sha }}"
271
+ run: |
272
+ # Write and read notes from a file to avoid quoting breaking things
273
+ echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt
274
+
275
+ gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/*
276
+
277
+ announce:
278
+ needs:
279
+ - plan
280
+ - host
281
+ # use "always() && ..." to allow us to wait for all publish jobs while
282
+ # still allowing individual publish jobs to skip themselves (for prereleases).
283
+ # "host" however must run to completion, no skipping allowed!
284
+ if: ${{ always() && needs.host.result == 'success' }}
285
+ runs-on: "ubuntu-20.04"
286
+ env:
287
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
288
+ steps:
289
+ - uses: actions/checkout@v4
290
+ with:
291
+ submodules: recursive
@@ -0,0 +1,10 @@
1
+ /target
2
+ /perf.data*
3
+ /flame*
4
+ /examples/crispr
5
+ /data
6
+ *.ipynb
7
+ *.png
8
+ __pycache__
9
+ *.so
10
+ c/sassy_example