strands-shell 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.
- strands_shell-0.1.0/.cargo/config.toml +4 -0
- strands_shell-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +111 -0
- strands_shell-0.1.0/.github/ISSUE_TEMPLATE/config.yml +12 -0
- strands_shell-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +54 -0
- strands_shell-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +41 -0
- strands_shell-0.1.0/.github/actions/stamp-version/action.yml +62 -0
- strands_shell-0.1.0/.github/dependabot.yml +89 -0
- strands_shell-0.1.0/.github/workflows/ci.yml +148 -0
- strands_shell-0.1.0/.github/workflows/pr-title.yml +36 -0
- strands_shell-0.1.0/.github/workflows/release.yml +458 -0
- strands_shell-0.1.0/.gitignore +24 -0
- strands_shell-0.1.0/AGENTS.md +167 -0
- strands_shell-0.1.0/CODE_OF_CONDUCT.md +4 -0
- strands_shell-0.1.0/COMMANDS.md +133 -0
- strands_shell-0.1.0/CONTRIBUTING.md +217 -0
- strands_shell-0.1.0/Cargo.lock +2421 -0
- strands_shell-0.1.0/Cargo.toml +77 -0
- strands_shell-0.1.0/LICENSE +175 -0
- strands_shell-0.1.0/NOTICE +1 -0
- strands_shell-0.1.0/PKG-INFO +256 -0
- strands_shell-0.1.0/README.md +239 -0
- strands_shell-0.1.0/SECURITY.md +92 -0
- strands_shell-0.1.0/build.rs +87 -0
- strands_shell-0.1.0/index.d.ts +100 -0
- strands_shell-0.1.0/index.js +218 -0
- strands_shell-0.1.0/package.json +44 -0
- strands_shell-0.1.0/pyproject.toml +34 -0
- strands_shell-0.1.0/python/strands_shell/__init__.py +281 -0
- strands_shell-0.1.0/scripts/build-wasm.sh +78 -0
- strands_shell-0.1.0/src/builtins/alias.rs +59 -0
- strands_shell-0.1.0/src/builtins/cd.rs +51 -0
- strands_shell-0.1.0/src/builtins/colon.rs +21 -0
- strands_shell-0.1.0/src/builtins/echo.rs +81 -0
- strands_shell-0.1.0/src/builtins/export.rs +49 -0
- strands_shell-0.1.0/src/builtins/find.rs +551 -0
- strands_shell-0.1.0/src/builtins/getopts.rs +174 -0
- strands_shell-0.1.0/src/builtins/hash.rs +73 -0
- strands_shell-0.1.0/src/builtins/local.rs +22 -0
- strands_shell-0.1.0/src/builtins/lua.rs +1214 -0
- strands_shell-0.1.0/src/builtins/mod.rs +65 -0
- strands_shell-0.1.0/src/builtins/printf.rs +212 -0
- strands_shell-0.1.0/src/builtins/pwd.rs +36 -0
- strands_shell-0.1.0/src/builtins/read.rs +112 -0
- strands_shell-0.1.0/src/builtins/set.rs +57 -0
- strands_shell-0.1.0/src/builtins/shift.rs +24 -0
- strands_shell-0.1.0/src/builtins/test.rs +222 -0
- strands_shell-0.1.0/src/builtins/trap.rs +26 -0
- strands_shell-0.1.0/src/builtins/type_cmd.rs +56 -0
- strands_shell-0.1.0/src/builtins/umask.rs +27 -0
- strands_shell-0.1.0/src/builtins/unset.rs +31 -0
- strands_shell-0.1.0/src/builtins/wait.rs +26 -0
- strands_shell-0.1.0/src/builtins/xargs.rs +126 -0
- strands_shell-0.1.0/src/cli.rs +147 -0
- strands_shell-0.1.0/src/commands/basename.rs +36 -0
- strands_shell-0.1.0/src/commands/cat.rs +64 -0
- strands_shell-0.1.0/src/commands/chmod.rs +105 -0
- strands_shell-0.1.0/src/commands/cp.rs +83 -0
- strands_shell-0.1.0/src/commands/curl.rs +351 -0
- strands_shell-0.1.0/src/commands/cut.rs +110 -0
- strands_shell-0.1.0/src/commands/date.rs +131 -0
- strands_shell-0.1.0/src/commands/dirname.rs +30 -0
- strands_shell-0.1.0/src/commands/echo.rs +24 -0
- strands_shell-0.1.0/src/commands/env.rs +31 -0
- strands_shell-0.1.0/src/commands/false.rs +6 -0
- strands_shell-0.1.0/src/commands/grep.rs +412 -0
- strands_shell-0.1.0/src/commands/head.rs +43 -0
- strands_shell-0.1.0/src/commands/jq.rs +258 -0
- strands_shell-0.1.0/src/commands/ln.rs +37 -0
- strands_shell-0.1.0/src/commands/ls.rs +246 -0
- strands_shell-0.1.0/src/commands/mkdir.rs +52 -0
- strands_shell-0.1.0/src/commands/mktemp.rs +80 -0
- strands_shell-0.1.0/src/commands/mod.rs +118 -0
- strands_shell-0.1.0/src/commands/mv.rs +42 -0
- strands_shell-0.1.0/src/commands/pwd.rs +23 -0
- strands_shell-0.1.0/src/commands/readlink.rs +26 -0
- strands_shell-0.1.0/src/commands/rm.rs +79 -0
- strands_shell-0.1.0/src/commands/rmdir.rs +28 -0
- strands_shell-0.1.0/src/commands/sed.rs +694 -0
- strands_shell-0.1.0/src/commands/sleep.rs +44 -0
- strands_shell-0.1.0/src/commands/sort.rs +219 -0
- strands_shell-0.1.0/src/commands/tail.rs +80 -0
- strands_shell-0.1.0/src/commands/tee.rs +50 -0
- strands_shell-0.1.0/src/commands/touch.rs +39 -0
- strands_shell-0.1.0/src/commands/tr.rs +155 -0
- strands_shell-0.1.0/src/commands/true.rs +6 -0
- strands_shell-0.1.0/src/commands/uniq.rs +133 -0
- strands_shell-0.1.0/src/commands/wc.rs +127 -0
- strands_shell-0.1.0/src/exec.rs +2959 -0
- strands_shell-0.1.0/src/io.rs +183 -0
- strands_shell-0.1.0/src/js.rs +531 -0
- strands_shell-0.1.0/src/lib.rs +168 -0
- strands_shell-0.1.0/src/main.rs +4 -0
- strands_shell-0.1.0/src/mcp.rs +456 -0
- strands_shell-0.1.0/src/mcp_client.rs +207 -0
- strands_shell-0.1.0/src/os.rs +931 -0
- strands_shell-0.1.0/src/parser.rs +1957 -0
- strands_shell-0.1.0/src/prelude.rs +11 -0
- strands_shell-0.1.0/src/python.rs +441 -0
- strands_shell-0.1.0/src/shell.rs +1079 -0
- strands_shell-0.1.0/src/vfs.rs +887 -0
- strands_shell-0.1.0/src/vfs_config.rs +278 -0
- strands_shell-0.1.0/src/vfs_kernel.rs +1532 -0
- strands_shell-0.1.0/src/wasm_main.rs +144 -0
- strands_shell-0.1.0/strands-shell-macros/Cargo.toml +16 -0
- strands_shell-0.1.0/strands-shell-macros/src/lib.rs +51 -0
- strands_shell-0.1.0/tests/curl_integration.rs +657 -0
- strands_shell-0.1.0/tests/js/test_bindings.mjs +396 -0
- strands_shell-0.1.0/tests/js/test_builder.mjs +110 -0
- strands_shell-0.1.0/tests/lua_integration.rs +1373 -0
- strands_shell-0.1.0/tests/mcp_integration.rs +725 -0
- strands_shell-0.1.0/tests/python/test_bindings.py +268 -0
- strands_shell-0.1.0/tests/python/test_builder.py +107 -0
- strands_shell-0.1.0/tests/shell_integration.rs +7602 -0
- strands_shell-0.1.0/tests/ts/api.types.ts +70 -0
- strands_shell-0.1.0/tests/vfs_unit.rs +1135 -0
- strands_shell-0.1.0/tsconfig.json +14 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug in Strands Shell
|
|
3
|
+
title: "[BUG] "
|
|
4
|
+
labels: ["triage"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for taking the time to fill out this bug report for Strands Shell!
|
|
11
|
+
- type: checkboxes
|
|
12
|
+
id: "checks"
|
|
13
|
+
attributes:
|
|
14
|
+
label: "Checks"
|
|
15
|
+
options:
|
|
16
|
+
- label: "I have updated to the latest minor and patch version of Strands Shell"
|
|
17
|
+
required: true
|
|
18
|
+
- label: "I have checked the documentation and this is not expected behavior"
|
|
19
|
+
required: true
|
|
20
|
+
- label: "I have searched [./issues](./issues?q=) and there are no duplicates of my issue"
|
|
21
|
+
required: true
|
|
22
|
+
- type: dropdown
|
|
23
|
+
id: binding
|
|
24
|
+
attributes:
|
|
25
|
+
label: Binding
|
|
26
|
+
description: Which Strands Shell binding are you using?
|
|
27
|
+
options:
|
|
28
|
+
- Python
|
|
29
|
+
- Node.js
|
|
30
|
+
- Rust
|
|
31
|
+
- WASM
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: input
|
|
35
|
+
id: shell-version
|
|
36
|
+
attributes:
|
|
37
|
+
label: Strands Shell Version
|
|
38
|
+
description: Which version of Strands Shell are you using?
|
|
39
|
+
placeholder: e.g., 0.1.0
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
- type: input
|
|
43
|
+
id: runtime-version
|
|
44
|
+
attributes:
|
|
45
|
+
label: Language Runtime Version
|
|
46
|
+
description: Which version of Python, Node.js, Rust, or your WASM runtime are you using?
|
|
47
|
+
placeholder: e.g., Python 3.12.4, Node.js 20.17.0, Rust 1.79.0, or wasmtime 23.0.0
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
- type: input
|
|
51
|
+
id: os
|
|
52
|
+
attributes:
|
|
53
|
+
label: Operating System
|
|
54
|
+
description: Which operating system and architecture are you using?
|
|
55
|
+
placeholder: e.g., macOS 14.5 (arm64) or Ubuntu 22.04 (x86_64)
|
|
56
|
+
validations:
|
|
57
|
+
required: true
|
|
58
|
+
- type: dropdown
|
|
59
|
+
id: installation-method
|
|
60
|
+
attributes:
|
|
61
|
+
label: Installation Method
|
|
62
|
+
description: How did you install Strands Shell?
|
|
63
|
+
options:
|
|
64
|
+
- pip (strands-shell)
|
|
65
|
+
- npm (@strands-agents/shell)
|
|
66
|
+
- cargo (strands-shell)
|
|
67
|
+
- built from source
|
|
68
|
+
- other
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
- type: textarea
|
|
72
|
+
id: steps-to-reproduce
|
|
73
|
+
attributes:
|
|
74
|
+
label: Steps to Reproduce
|
|
75
|
+
description: Detailed steps to reproduce the behavior
|
|
76
|
+
placeholder: |
|
|
77
|
+
1. Code Snippet (Minimal reproducible example)
|
|
78
|
+
2. Install Strands Shell using...
|
|
79
|
+
3. Run the command...
|
|
80
|
+
4. See error...
|
|
81
|
+
validations:
|
|
82
|
+
required: true
|
|
83
|
+
- type: textarea
|
|
84
|
+
id: expected-behavior
|
|
85
|
+
attributes:
|
|
86
|
+
label: Expected Behavior
|
|
87
|
+
description: A clear description of what you expected to happen
|
|
88
|
+
validations:
|
|
89
|
+
required: true
|
|
90
|
+
- type: textarea
|
|
91
|
+
id: actual-behavior
|
|
92
|
+
attributes:
|
|
93
|
+
label: Actual Behavior
|
|
94
|
+
description: What actually happened
|
|
95
|
+
validations:
|
|
96
|
+
required: true
|
|
97
|
+
- type: textarea
|
|
98
|
+
id: additional-context
|
|
99
|
+
attributes:
|
|
100
|
+
label: Additional Context
|
|
101
|
+
description: Any other relevant information, logs, screenshots, etc.
|
|
102
|
+
- type: textarea
|
|
103
|
+
id: possible-solution
|
|
104
|
+
attributes:
|
|
105
|
+
label: Possible Solution
|
|
106
|
+
description: Optional - If you have suggestions on how to fix the bug
|
|
107
|
+
- type: input
|
|
108
|
+
id: related-issues
|
|
109
|
+
attributes:
|
|
110
|
+
label: Related Issues
|
|
111
|
+
description: Optional - Link to related issues if applicable
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Strands Agents Support
|
|
4
|
+
# Only one repo has Discussions enabled; point users there.
|
|
5
|
+
url: https://github.com/strands-agents/sdk-python/discussions
|
|
6
|
+
about: Please ask and answer questions here
|
|
7
|
+
- name: Strands Agents Community
|
|
8
|
+
url: https://discord.gg/strands
|
|
9
|
+
about: Chat with the Strands team and community on Discord
|
|
10
|
+
- name: Strands Agents Documentation
|
|
11
|
+
url: https://strandsagents.com
|
|
12
|
+
about: Visit our documentation for help
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest a new feature or enhancement for Strands Shell
|
|
3
|
+
title: "[FEATURE] "
|
|
4
|
+
labels: ["triage"]
|
|
5
|
+
assignees: []
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Thanks for suggesting a new feature for Strands Shell!
|
|
11
|
+
- type: dropdown
|
|
12
|
+
id: binding
|
|
13
|
+
attributes:
|
|
14
|
+
label: Binding
|
|
15
|
+
description: Which Strands Shell binding is this feature for?
|
|
16
|
+
options:
|
|
17
|
+
- Python
|
|
18
|
+
- Node.js
|
|
19
|
+
- Rust
|
|
20
|
+
- WASM
|
|
21
|
+
- Shell core / Not binding-specific
|
|
22
|
+
validations:
|
|
23
|
+
required: true
|
|
24
|
+
- type: textarea
|
|
25
|
+
id: problem-statement
|
|
26
|
+
attributes:
|
|
27
|
+
label: Problem Statement
|
|
28
|
+
description: Describe the problem you're trying to solve. What is currently difficult or impossible to do?
|
|
29
|
+
placeholder: I would like Strands Shell to...
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: proposed-solution
|
|
34
|
+
attributes:
|
|
35
|
+
label: Proposed Solution
|
|
36
|
+
description: Optional - Describe your proposed solution in detail. How would this feature work?
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: use-case
|
|
39
|
+
attributes:
|
|
40
|
+
label: Use Case
|
|
41
|
+
description: Provide specific use cases for the feature. How would people use it?
|
|
42
|
+
placeholder: This would help with...
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
- type: textarea
|
|
46
|
+
id: alternatives-solutions
|
|
47
|
+
attributes:
|
|
48
|
+
label: Alternatives Solutions
|
|
49
|
+
description: Optional - Have you considered alternative approaches? What are their pros and cons?
|
|
50
|
+
- type: textarea
|
|
51
|
+
id: additional-context
|
|
52
|
+
attributes:
|
|
53
|
+
label: Additional Context
|
|
54
|
+
description: Include any other context, screenshots, code examples, or references that might help understand the feature request.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
<!-- Provide a detailed description of the changes in this PR -->
|
|
3
|
+
|
|
4
|
+
## Related Issues
|
|
5
|
+
|
|
6
|
+
<!-- Link to related issues using #issue-number format -->
|
|
7
|
+
|
|
8
|
+
## Documentation PR
|
|
9
|
+
|
|
10
|
+
<!-- Link to any related documentation PR -->
|
|
11
|
+
|
|
12
|
+
## Type of Change
|
|
13
|
+
|
|
14
|
+
<!-- Choose one of the following types of changes, delete the rest -->
|
|
15
|
+
|
|
16
|
+
Bug fix
|
|
17
|
+
New feature
|
|
18
|
+
Breaking change
|
|
19
|
+
Documentation update
|
|
20
|
+
Other (please describe):
|
|
21
|
+
|
|
22
|
+
## Testing
|
|
23
|
+
|
|
24
|
+
How have you tested the change? Verify that the changes do not break functionality or introduce new warnings.
|
|
25
|
+
|
|
26
|
+
- [ ] I ran the relevant test suites for the bindings I touched (`cargo test --workspace --all-targets`, `pytest tests/python`, `npm test`)
|
|
27
|
+
- [ ] If I touched Rust, I ran `cargo fmt` and `cargo clippy`
|
|
28
|
+
|
|
29
|
+
## Checklist
|
|
30
|
+
- [ ] I have read the CONTRIBUTING document
|
|
31
|
+
- [ ] I have reviewed and understand every line of code in this PR, including any generated by AI tools, and I can explain why it works
|
|
32
|
+
- [ ] My change is focused and reasonably small; I have split unrelated work into separate PRs
|
|
33
|
+
- [ ] I have added any necessary tests that prove my fix is effective or my feature works
|
|
34
|
+
- [ ] I have updated the documentation accordingly
|
|
35
|
+
- [ ] I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
|
|
36
|
+
- [ ] My changes generate no new warnings
|
|
37
|
+
- [ ] Any dependent changes have been merged and published
|
|
38
|
+
|
|
39
|
+
----
|
|
40
|
+
|
|
41
|
+
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Stamp version
|
|
2
|
+
description: >-
|
|
3
|
+
Write the release version (derived from the git tag) into the package
|
|
4
|
+
manifests. The git tag is the single source of truth for the version; the
|
|
5
|
+
committed manifests carry a 0.0.0 placeholder and never hold a real version.
|
|
6
|
+
This action stamps the tag's version into Cargo.toml, pyproject.toml, and
|
|
7
|
+
package.json right after checkout, before the build tools (maturin / napi)
|
|
8
|
+
read them. Run it in every job that builds, packs, or publishes.
|
|
9
|
+
|
|
10
|
+
# ── Why stamp at all (vs. committing the version) ───────────────────────────
|
|
11
|
+
# Committing a concrete version in three manifests means three things to bump
|
|
12
|
+
# in lockstep on every release, and they silently drift. Deriving from the tag
|
|
13
|
+
# keeps one source of truth and makes "cut a vX.Y.Z tag" the entire release
|
|
14
|
+
# action. (See the `version` job in release.yml, which parses + validates the
|
|
15
|
+
# tag and passes it here.)
|
|
16
|
+
#
|
|
17
|
+
# ── Why a tiny perl edit and not a dedicated tool ───────────────────────────
|
|
18
|
+
# - Cargo has no built-in "version from git tag". The official option is
|
|
19
|
+
# `cargo set-version` from the `cargo-edit` crate, but that means a
|
|
20
|
+
# `cargo install cargo-edit` step (network + ~30-60s) in every build job just
|
|
21
|
+
# to rewrite one line. The crate is not published to crates.io (we release to
|
|
22
|
+
# PyPI + npm only), so Cargo.toml's version exists solely to feed maturin's
|
|
23
|
+
# wheel metadata — not worth an extra toolchain dependency.
|
|
24
|
+
# - The perl one-liner rewrites ONLY the first top-level `version = "..."` line
|
|
25
|
+
# (the [package] / [project] version). Dependency and path-dep versions
|
|
26
|
+
# (e.g. napi = { version = "3" }, the strands-shell-macros path dep) appear
|
|
27
|
+
# later and are left untouched. perl -i ships on both Linux and macOS GitHub
|
|
28
|
+
# runners, so it works across the whole build matrix.
|
|
29
|
+
# - package.json uses npm's own `npm version` command (the official mechanism,
|
|
30
|
+
# matching the strands-agents golden path), not a regex.
|
|
31
|
+
|
|
32
|
+
inputs:
|
|
33
|
+
version:
|
|
34
|
+
description: The version to stamp (no leading "v"), e.g. 0.2.0
|
|
35
|
+
required: true
|
|
36
|
+
|
|
37
|
+
runs:
|
|
38
|
+
using: composite
|
|
39
|
+
steps:
|
|
40
|
+
- name: Stamp version into manifests
|
|
41
|
+
shell: bash
|
|
42
|
+
env:
|
|
43
|
+
V: ${{ inputs.version }}
|
|
44
|
+
run: |
|
|
45
|
+
set -euo pipefail
|
|
46
|
+
# Rewrite the first `version = "..."` in each TOML (the package version).
|
|
47
|
+
perl -i -pe 'if (!$done && /^version\s*=\s*"/) { s/"[^"]*"/"$ENV{V}"/; $done=1 }' Cargo.toml
|
|
48
|
+
perl -i -pe 'if (!$done && /^version\s*=\s*"/) { s/"[^"]*"/"$ENV{V}"/; $done=1 }' pyproject.toml
|
|
49
|
+
echo "Stamped version $V:"
|
|
50
|
+
echo " Cargo.toml=$(grep -m1 '^version' Cargo.toml)"
|
|
51
|
+
echo " pyproject.toml=$(grep -m1 '^version' pyproject.toml)"
|
|
52
|
+
# package.json via npm's official version command. This is only needed by
|
|
53
|
+
# the Node jobs; the Python build jobs (python-wheels/sdist) set up Python
|
|
54
|
+
# but not Node — and python-wheels runs in a manylinux container with no
|
|
55
|
+
# npm — so guard on npm being available and skip otherwise.
|
|
56
|
+
if command -v npm >/dev/null 2>&1; then
|
|
57
|
+
# --allow-same-version so re-runs against an already-stamped tree pass.
|
|
58
|
+
npm version "$V" --no-git-tag-version --allow-same-version >/dev/null
|
|
59
|
+
echo " package.json=$(node -p "require('./package.json').version")"
|
|
60
|
+
else
|
|
61
|
+
echo " package.json=skipped (npm not available — Python-only job)"
|
|
62
|
+
fi
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "cargo"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "daily"
|
|
7
|
+
open-pull-requests-limit: 100
|
|
8
|
+
labels:
|
|
9
|
+
- "dependencies"
|
|
10
|
+
- "rust"
|
|
11
|
+
commit-message:
|
|
12
|
+
prefix: "ci(rust)"
|
|
13
|
+
cooldown:
|
|
14
|
+
default-days: 5
|
|
15
|
+
semver-major-days: 30
|
|
16
|
+
semver-minor-days: 7
|
|
17
|
+
semver-patch-days: 3
|
|
18
|
+
groups:
|
|
19
|
+
development-dependencies:
|
|
20
|
+
dependency-type: "development"
|
|
21
|
+
applies-to: version-updates
|
|
22
|
+
production-minor:
|
|
23
|
+
dependency-type: "production"
|
|
24
|
+
applies-to: version-updates
|
|
25
|
+
update-types:
|
|
26
|
+
- "minor"
|
|
27
|
+
- "patch"
|
|
28
|
+
- package-ecosystem: "pip"
|
|
29
|
+
directory: "/"
|
|
30
|
+
schedule:
|
|
31
|
+
interval: "daily"
|
|
32
|
+
open-pull-requests-limit: 100
|
|
33
|
+
labels:
|
|
34
|
+
- "dependencies"
|
|
35
|
+
- "python"
|
|
36
|
+
commit-message:
|
|
37
|
+
prefix: "ci(python)"
|
|
38
|
+
cooldown:
|
|
39
|
+
default-days: 5
|
|
40
|
+
semver-major-days: 30
|
|
41
|
+
semver-minor-days: 7
|
|
42
|
+
semver-patch-days: 3
|
|
43
|
+
groups:
|
|
44
|
+
dev-dependencies:
|
|
45
|
+
patterns:
|
|
46
|
+
- "pytest"
|
|
47
|
+
- "maturin"
|
|
48
|
+
- package-ecosystem: "npm"
|
|
49
|
+
directory: "/"
|
|
50
|
+
schedule:
|
|
51
|
+
interval: "daily"
|
|
52
|
+
open-pull-requests-limit: 100
|
|
53
|
+
labels:
|
|
54
|
+
- "dependencies"
|
|
55
|
+
- "node"
|
|
56
|
+
commit-message:
|
|
57
|
+
prefix: "ci(node)"
|
|
58
|
+
cooldown:
|
|
59
|
+
default-days: 5
|
|
60
|
+
semver-major-days: 30
|
|
61
|
+
semver-minor-days: 7
|
|
62
|
+
semver-patch-days: 3
|
|
63
|
+
groups:
|
|
64
|
+
development-dependencies:
|
|
65
|
+
dependency-type: "development"
|
|
66
|
+
applies-to: version-updates
|
|
67
|
+
production-minor:
|
|
68
|
+
dependency-type: "production"
|
|
69
|
+
applies-to: version-updates
|
|
70
|
+
update-types:
|
|
71
|
+
- "minor"
|
|
72
|
+
- "patch"
|
|
73
|
+
- package-ecosystem: "github-actions"
|
|
74
|
+
directory: "/"
|
|
75
|
+
schedule:
|
|
76
|
+
interval: "daily"
|
|
77
|
+
open-pull-requests-limit: 100
|
|
78
|
+
commit-message:
|
|
79
|
+
prefix: ci
|
|
80
|
+
cooldown:
|
|
81
|
+
default-days: 5
|
|
82
|
+
semver-major-days: 30
|
|
83
|
+
semver-minor-days: 7
|
|
84
|
+
semver-patch-days: 3
|
|
85
|
+
groups:
|
|
86
|
+
actions:
|
|
87
|
+
patterns:
|
|
88
|
+
- "*"
|
|
89
|
+
applies-to: version-updates
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
types: [opened, synchronize, reopened, ready_for_review]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
rust:
|
|
15
|
+
name: Rust (${{ matrix.os }})
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
os: [ubuntu-latest, macos-latest]
|
|
20
|
+
runs-on: ${{ matrix.os }}
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v6
|
|
23
|
+
|
|
24
|
+
- name: Install Rust toolchain
|
|
25
|
+
uses: dtolnay/rust-toolchain@stable
|
|
26
|
+
|
|
27
|
+
- name: Cache cargo
|
|
28
|
+
uses: Swatinem/rust-cache@v2
|
|
29
|
+
|
|
30
|
+
- name: cargo test
|
|
31
|
+
run: cargo test --workspace --all-targets
|
|
32
|
+
|
|
33
|
+
- name: cargo doc
|
|
34
|
+
env:
|
|
35
|
+
RUSTDOCFLAGS: -D warnings
|
|
36
|
+
run: cargo doc --workspace --no-deps
|
|
37
|
+
|
|
38
|
+
# cargo fmt and cargo clippy are intentionally not gated here yet —
|
|
39
|
+
# see the cleanup follow-up. Add them back once the repo is clean.
|
|
40
|
+
|
|
41
|
+
python:
|
|
42
|
+
name: Python (${{ matrix.os }}, ${{ matrix.python }})
|
|
43
|
+
strategy:
|
|
44
|
+
fail-fast: false
|
|
45
|
+
matrix:
|
|
46
|
+
os: [ubuntu-latest, macos-latest]
|
|
47
|
+
python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
48
|
+
runs-on: ${{ matrix.os }}
|
|
49
|
+
steps:
|
|
50
|
+
- uses: actions/checkout@v6
|
|
51
|
+
|
|
52
|
+
- name: Install Rust toolchain
|
|
53
|
+
uses: dtolnay/rust-toolchain@stable
|
|
54
|
+
|
|
55
|
+
- name: Cache cargo
|
|
56
|
+
uses: Swatinem/rust-cache@v2
|
|
57
|
+
with:
|
|
58
|
+
key: py-${{ matrix.os }}-${{ matrix.python }}
|
|
59
|
+
|
|
60
|
+
- name: Set up Python
|
|
61
|
+
uses: actions/setup-python@v6
|
|
62
|
+
with:
|
|
63
|
+
python-version: ${{ matrix.python }}
|
|
64
|
+
|
|
65
|
+
- name: Create virtualenv
|
|
66
|
+
run: python -m venv .venv
|
|
67
|
+
|
|
68
|
+
- name: Install build deps
|
|
69
|
+
run: .venv/bin/pip install maturin pytest
|
|
70
|
+
|
|
71
|
+
- name: Build and install wheel
|
|
72
|
+
run: .venv/bin/maturin develop --release
|
|
73
|
+
|
|
74
|
+
- name: pytest
|
|
75
|
+
run: .venv/bin/pytest tests/python -v
|
|
76
|
+
|
|
77
|
+
audit:
|
|
78
|
+
name: Security audit
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
steps:
|
|
81
|
+
- uses: actions/checkout@v6
|
|
82
|
+
|
|
83
|
+
- name: Install Rust toolchain
|
|
84
|
+
uses: dtolnay/rust-toolchain@stable
|
|
85
|
+
|
|
86
|
+
- name: Cache cargo
|
|
87
|
+
uses: Swatinem/rust-cache@v2
|
|
88
|
+
with:
|
|
89
|
+
key: audit
|
|
90
|
+
|
|
91
|
+
- name: cargo install cargo-audit
|
|
92
|
+
run: cargo install --locked cargo-audit
|
|
93
|
+
|
|
94
|
+
- name: cargo audit
|
|
95
|
+
# Surfaces RustSec advisories in CI output. Not a hard gate yet —
|
|
96
|
+
# transitive deps via reqwest/rustls carry advisories we haven't
|
|
97
|
+
# triaged. Flip continue-on-error off once the dep tree is clean.
|
|
98
|
+
run: cargo audit
|
|
99
|
+
continue-on-error: true
|
|
100
|
+
|
|
101
|
+
- name: Set up Node.js
|
|
102
|
+
uses: actions/setup-node@v6
|
|
103
|
+
with:
|
|
104
|
+
node-version: "20"
|
|
105
|
+
|
|
106
|
+
- name: npm audit (production)
|
|
107
|
+
# package-lock.json is gitignored, so generate an ephemeral lockfile
|
|
108
|
+
# for the audit (npm audit requires one).
|
|
109
|
+
run: |
|
|
110
|
+
npm install --package-lock-only
|
|
111
|
+
npm audit --omit=dev
|
|
112
|
+
|
|
113
|
+
node:
|
|
114
|
+
name: Node.js (${{ matrix.os }}, Node ${{ matrix.node }})
|
|
115
|
+
strategy:
|
|
116
|
+
fail-fast: false
|
|
117
|
+
matrix:
|
|
118
|
+
os: [ubuntu-latest, macos-latest]
|
|
119
|
+
node: ["20", "22", "24"]
|
|
120
|
+
runs-on: ${{ matrix.os }}
|
|
121
|
+
steps:
|
|
122
|
+
- uses: actions/checkout@v6
|
|
123
|
+
|
|
124
|
+
- name: Install Rust toolchain
|
|
125
|
+
uses: dtolnay/rust-toolchain@stable
|
|
126
|
+
|
|
127
|
+
- name: Cache cargo
|
|
128
|
+
uses: Swatinem/rust-cache@v2
|
|
129
|
+
with:
|
|
130
|
+
key: node-${{ matrix.os }}-${{ matrix.node }}
|
|
131
|
+
|
|
132
|
+
- name: Set up Node.js
|
|
133
|
+
uses: actions/setup-node@v6
|
|
134
|
+
with:
|
|
135
|
+
node-version: ${{ matrix.node }}
|
|
136
|
+
|
|
137
|
+
- name: npm install
|
|
138
|
+
# package-lock.json is gitignored, so `npm ci` can't run; use install.
|
|
139
|
+
run: npm install
|
|
140
|
+
|
|
141
|
+
- name: napi build
|
|
142
|
+
run: npm run build:debug
|
|
143
|
+
|
|
144
|
+
- name: tsc typecheck (public .d.ts surface)
|
|
145
|
+
run: npm run typecheck
|
|
146
|
+
|
|
147
|
+
- name: npm test
|
|
148
|
+
run: npm test
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: PR Title Conventional Commits
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
types: [opened, edited, synchronize, reopened]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
validate-pr-title:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
pull-requests: read
|
|
13
|
+
steps:
|
|
14
|
+
- name: Check PR title follows conventional commits
|
|
15
|
+
uses: amannn/action-semantic-pull-request@v6
|
|
16
|
+
env:
|
|
17
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
18
|
+
with:
|
|
19
|
+
types: |
|
|
20
|
+
feat
|
|
21
|
+
fix
|
|
22
|
+
docs
|
|
23
|
+
refactor
|
|
24
|
+
perf
|
|
25
|
+
test
|
|
26
|
+
build
|
|
27
|
+
ci
|
|
28
|
+
chore
|
|
29
|
+
revert
|
|
30
|
+
requireScope: false
|
|
31
|
+
subjectPattern: ^[a-z].+$
|
|
32
|
+
subjectPatternError: |
|
|
33
|
+
The subject "{subject}" must start with a lowercase letter.
|
|
34
|
+
ignoreLabels: |
|
|
35
|
+
bot
|
|
36
|
+
dependencies
|