eqty-sdk 2.3.1rc1__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.
Files changed (219) hide show
  1. eqty_sdk-2.3.1rc1/.claude/settings.local.json +10 -0
  2. eqty_sdk-2.3.1rc1/.envrc +11 -0
  3. eqty_sdk-2.3.1rc1/.github/workflows/build-import-test-images.yml +60 -0
  4. eqty_sdk-2.3.1rc1/.github/workflows/ci.yml +201 -0
  5. eqty_sdk-2.3.1rc1/.github/workflows/code-scan.yaml +80 -0
  6. eqty_sdk-2.3.1rc1/.github/workflows/docs.yml +63 -0
  7. eqty_sdk-2.3.1rc1/.github/workflows/import-tests.yml +244 -0
  8. eqty_sdk-2.3.1rc1/.github/workflows/release.yml +462 -0
  9. eqty_sdk-2.3.1rc1/.github/workflows/test-release.yml +220 -0
  10. eqty_sdk-2.3.1rc1/.gitignore +60 -0
  11. eqty_sdk-2.3.1rc1/.pre-commit-config.yaml +59 -0
  12. eqty_sdk-2.3.1rc1/.python-version +1 -0
  13. eqty_sdk-2.3.1rc1/.rgignore +1 -0
  14. eqty_sdk-2.3.1rc1/.trivyignore +7 -0
  15. eqty_sdk-2.3.1rc1/Cargo.lock +10520 -0
  16. eqty_sdk-2.3.1rc1/Cargo.toml +39 -0
  17. eqty_sdk-2.3.1rc1/Justfile +99 -0
  18. eqty_sdk-2.3.1rc1/LICENSE +201 -0
  19. eqty_sdk-2.3.1rc1/PKG-INFO +146 -0
  20. eqty_sdk-2.3.1rc1/README.md +125 -0
  21. eqty_sdk-2.3.1rc1/clippy.toml +1 -0
  22. eqty_sdk-2.3.1rc1/docs/api/assets.md +174 -0
  23. eqty_sdk-2.3.1rc1/docs/api/cid.md +11 -0
  24. eqty_sdk-2.3.1rc1/docs/api/compute.md +11 -0
  25. eqty_sdk-2.3.1rc1/docs/api/context.md +15 -0
  26. eqty_sdk-2.3.1rc1/docs/api/declaration.md +5 -0
  27. eqty_sdk-2.3.1rc1/docs/api/did.md +11 -0
  28. eqty_sdk-2.3.1rc1/docs/api/global-functions.md +27 -0
  29. eqty_sdk-2.3.1rc1/docs/api/index.md +16 -0
  30. eqty_sdk-2.3.1rc1/docs/api/init-and-config.md +178 -0
  31. eqty_sdk-2.3.1rc1/docs/api/service.md +17 -0
  32. eqty_sdk-2.3.1rc1/docs/api/signer.md +50 -0
  33. eqty_sdk-2.3.1rc1/docs/api/statements.md +62 -0
  34. eqty_sdk-2.3.1rc1/docs/api/uuid.md +11 -0
  35. eqty_sdk-2.3.1rc1/docs/api/verification.md +59 -0
  36. eqty_sdk-2.3.1rc1/docs/examples/async-compute.md +14 -0
  37. eqty_sdk-2.3.1rc1/docs/examples/auth-service-signer.md +14 -0
  38. eqty_sdk-2.3.1rc1/docs/examples/basic-workflow.md +17 -0
  39. eqty_sdk-2.3.1rc1/docs/examples/context-linking.md +15 -0
  40. eqty_sdk-2.3.1rc1/docs/examples/custom-serialize.md +11 -0
  41. eqty_sdk-2.3.1rc1/docs/examples/index.md +15 -0
  42. eqty_sdk-2.3.1rc1/docs/examples/model-signing.md +20 -0
  43. eqty_sdk-2.3.1rc1/docs/examples/nested-contexts.md +29 -0
  44. eqty_sdk-2.3.1rc1/docs/examples/path-backed-assets.md +14 -0
  45. eqty_sdk-2.3.1rc1/docs/examples/service-registering.md +16 -0
  46. eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-linux-aarch64.txt +1 -0
  47. eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-linux-x86_64.txt +19 -0
  48. eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-musllinux-aarch64.txt +1 -0
  49. eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-musllinux-x86_64.txt +1 -0
  50. eqty_sdk-2.3.1rc1/docs/generated/built-in-asset-types.md +21 -0
  51. eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos-arm64.txt +1 -0
  52. eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos-x86_64.txt +1 -0
  53. eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos.txt +1 -0
  54. eqty_sdk-2.3.1rc1/docs/index.md +11 -0
  55. eqty_sdk-2.3.1rc1/docs/install/min-version.md +39 -0
  56. eqty_sdk-2.3.1rc1/docs/install/package-managers.md +46 -0
  57. eqty_sdk-2.3.1rc1/docs/install/source.md +52 -0
  58. eqty_sdk-2.3.1rc1/docs/javascripts/theme-toggle.js +43 -0
  59. eqty_sdk-2.3.1rc1/docs/quick-start.md +114 -0
  60. eqty_sdk-2.3.1rc1/docs/stylesheets/extra.css +498 -0
  61. eqty_sdk-2.3.1rc1/eqty_sdk/__init__.py +144 -0
  62. eqty_sdk-2.3.1rc1/eqty_sdk/__init__.pyi +120 -0
  63. eqty_sdk-2.3.1rc1/eqty_sdk/_rust.pyi +421 -0
  64. eqty_sdk-2.3.1rc1/eqty_sdk/asset/__init__.py +48 -0
  65. eqty_sdk-2.3.1rc1/eqty_sdk/asset/agent.py +7 -0
  66. eqty_sdk-2.3.1rc1/eqty_sdk/asset/asset.py +503 -0
  67. eqty_sdk-2.3.1rc1/eqty_sdk/asset/benchmark.py +13 -0
  68. eqty_sdk-2.3.1rc1/eqty_sdk/asset/binary.py +7 -0
  69. eqty_sdk-2.3.1rc1/eqty_sdk/asset/certificate.py +7 -0
  70. eqty_sdk-2.3.1rc1/eqty_sdk/asset/code.py +7 -0
  71. eqty_sdk-2.3.1rc1/eqty_sdk/asset/configuration.py +7 -0
  72. eqty_sdk-2.3.1rc1/eqty_sdk/asset/credential.py +7 -0
  73. eqty_sdk-2.3.1rc1/eqty_sdk/asset/custom.py +56 -0
  74. eqty_sdk-2.3.1rc1/eqty_sdk/asset/database.py +7 -0
  75. eqty_sdk-2.3.1rc1/eqty_sdk/asset/dataset.py +7 -0
  76. eqty_sdk-2.3.1rc1/eqty_sdk/asset/document.py +7 -0
  77. eqty_sdk-2.3.1rc1/eqty_sdk/asset/guardrail.py +7 -0
  78. eqty_sdk-2.3.1rc1/eqty_sdk/asset/media.py +7 -0
  79. eqty_sdk-2.3.1rc1/eqty_sdk/asset/model.py +27 -0
  80. eqty_sdk-2.3.1rc1/eqty_sdk/asset/prompt.py +7 -0
  81. eqty_sdk-2.3.1rc1/eqty_sdk/asset/reasoning.py +7 -0
  82. eqty_sdk-2.3.1rc1/eqty_sdk/asset/skill.py +7 -0
  83. eqty_sdk-2.3.1rc1/eqty_sdk/asset/system_prompt.py +7 -0
  84. eqty_sdk-2.3.1rc1/eqty_sdk/asset/token.py +7 -0
  85. eqty_sdk-2.3.1rc1/eqty_sdk/asset/tool.py +7 -0
  86. eqty_sdk-2.3.1rc1/eqty_sdk/compute/__init__.py +9 -0
  87. eqty_sdk-2.3.1rc1/eqty_sdk/compute/computation.py +190 -0
  88. eqty_sdk-2.3.1rc1/eqty_sdk/compute/compute.py +291 -0
  89. eqty_sdk-2.3.1rc1/eqty_sdk/compute/decorator.py +28 -0
  90. eqty_sdk-2.3.1rc1/eqty_sdk/context.py +31 -0
  91. eqty_sdk-2.3.1rc1/eqty_sdk/declaration.py +90 -0
  92. eqty_sdk-2.3.1rc1/eqty_sdk/errors.py +20 -0
  93. eqty_sdk-2.3.1rc1/eqty_sdk/metadata.py +71 -0
  94. eqty_sdk-2.3.1rc1/eqty_sdk/py.typed +0 -0
  95. eqty_sdk-2.3.1rc1/eqty_sdk/statements.py +117 -0
  96. eqty_sdk-2.3.1rc1/examples/async-compute.py +52 -0
  97. eqty_sdk-2.3.1rc1/examples/auth-service-signer.py +20 -0
  98. eqty_sdk-2.3.1rc1/examples/basic-workflow.py +39 -0
  99. eqty_sdk-2.3.1rc1/examples/context-linking.py +26 -0
  100. eqty_sdk-2.3.1rc1/examples/creating-the-model.py +39 -0
  101. eqty_sdk-2.3.1rc1/examples/custom-serialize.py +84 -0
  102. eqty_sdk-2.3.1rc1/examples/model-signing.py +20 -0
  103. eqty_sdk-2.3.1rc1/examples/path-backed-assets.py +24 -0
  104. eqty_sdk-2.3.1rc1/examples/quick-start.py +76 -0
  105. eqty_sdk-2.3.1rc1/examples/service-registering.py +34 -0
  106. eqty_sdk-2.3.1rc1/examples/using-the-model.py +39 -0
  107. eqty_sdk-2.3.1rc1/flake.lock +175 -0
  108. eqty_sdk-2.3.1rc1/flake.nix +58 -0
  109. eqty_sdk-2.3.1rc1/integration-tests/_basic_import.py +4 -0
  110. eqty_sdk-2.3.1rc1/integration-tests/_basic_test.py +110 -0
  111. eqty_sdk-2.3.1rc1/integration-tests/_example_manifests_test.py +183 -0
  112. eqty_sdk-2.3.1rc1/integration-tests/_install_and_run.sh +46 -0
  113. eqty_sdk-2.3.1rc1/integration-tests/_resolve_latest_github_version.py +34 -0
  114. eqty_sdk-2.3.1rc1/integration-tests/_sys_info.sh +19 -0
  115. eqty_sdk-2.3.1rc1/integration-tests/examples/basic-workflow.json +73 -0
  116. eqty_sdk-2.3.1rc1/integration-tests/examples/context-linking.customer-project.json +5 -0
  117. eqty_sdk-2.3.1rc1/integration-tests/examples/context-linking.daily-run-2026-03-25.json +38 -0
  118. eqty_sdk-2.3.1rc1/integration-tests/examples/creating-the-model.json +73 -0
  119. eqty_sdk-2.3.1rc1/integration-tests/examples/model-signing.json +35 -0
  120. eqty_sdk-2.3.1rc1/integration-tests/examples/path-backed-assets.json +5 -0
  121. eqty_sdk-2.3.1rc1/integration-tests/examples/using-the-model.json +51 -0
  122. eqty_sdk-2.3.1rc1/integration-tests/images/README.md +29 -0
  123. eqty_sdk-2.3.1rc1/integration-tests/images/alpine322-python312/Dockerfile +6 -0
  124. eqty_sdk-2.3.1rc1/integration-tests/images/centos7-python310/Dockerfile +40 -0
  125. eqty_sdk-2.3.1rc1/integration-tests/images/debian-bookworm-python311/Dockerfile +8 -0
  126. eqty_sdk-2.3.1rc1/integration-tests/images/ubi10-python312/Dockerfile +7 -0
  127. eqty_sdk-2.3.1rc1/integration-tests/images/ubi9-python311/Dockerfile +7 -0
  128. eqty_sdk-2.3.1rc1/integration-tests/images/ubuntu2204-python310/Dockerfile +8 -0
  129. eqty_sdk-2.3.1rc1/integration-tests/images/ubuntu2404-python312/Dockerfile +8 -0
  130. eqty_sdk-2.3.1rc1/integration-tests/install_and_run.sh +27 -0
  131. eqty_sdk-2.3.1rc1/integration-tests/install_and_run_native.sh +18 -0
  132. eqty_sdk-2.3.1rc1/manifests/keep +0 -0
  133. eqty_sdk-2.3.1rc1/mkdocs.yml +74 -0
  134. eqty_sdk-2.3.1rc1/poetry.lock +2399 -0
  135. eqty_sdk-2.3.1rc1/pyproject.toml +116 -0
  136. eqty_sdk-2.3.1rc1/rust-toolchain +1 -0
  137. eqty_sdk-2.3.1rc1/rustfmt.toml +6 -0
  138. eqty_sdk-2.3.1rc1/scripts/generate_auditwheel_report.py +57 -0
  139. eqty_sdk-2.3.1rc1/scripts/generate_stubs.py +1040 -0
  140. eqty_sdk-2.3.1rc1/scripts/manifest_diff.py +277 -0
  141. eqty_sdk-2.3.1rc1/src/cid.rs +79 -0
  142. eqty_sdk-2.3.1rc1/src/config.rs +514 -0
  143. eqty_sdk-2.3.1rc1/src/did.rs +125 -0
  144. eqty_sdk-2.3.1rc1/src/entity.rs +195 -0
  145. eqty_sdk-2.3.1rc1/src/indexer/mod.rs +411 -0
  146. eqty_sdk-2.3.1rc1/src/indexer/sqlite.rs +1154 -0
  147. eqty_sdk-2.3.1rc1/src/indexer/sqlite_tests.rs +876 -0
  148. eqty_sdk-2.3.1rc1/src/indexer/testdata/simple.json +108 -0
  149. eqty_sdk-2.3.1rc1/src/integrity_service/blobs.rs +149 -0
  150. eqty_sdk-2.3.1rc1/src/integrity_service/graph.rs +72 -0
  151. eqty_sdk-2.3.1rc1/src/integrity_service/statements.rs +168 -0
  152. eqty_sdk-2.3.1rc1/src/integrity_service.rs +165 -0
  153. eqty_sdk-2.3.1rc1/src/lib.rs +369 -0
  154. eqty_sdk-2.3.1rc1/src/signer.rs +468 -0
  155. eqty_sdk-2.3.1rc1/src/statements/association.rs +75 -0
  156. eqty_sdk-2.3.1rc1/src/statements/computation.rs +90 -0
  157. eqty_sdk-2.3.1rc1/src/statements/data.rs +42 -0
  158. eqty_sdk-2.3.1rc1/src/statements/did.rs +44 -0
  159. eqty_sdk-2.3.1rc1/src/statements/entity.rs +42 -0
  160. eqty_sdk-2.3.1rc1/src/statements/governance.rs +43 -0
  161. eqty_sdk-2.3.1rc1/src/statements/metadata.rs +65 -0
  162. eqty_sdk-2.3.1rc1/src/statements/mod.rs +57 -0
  163. eqty_sdk-2.3.1rc1/src/statements/model_signing.rs +74 -0
  164. eqty_sdk-2.3.1rc1/src/statements/storage.rs +51 -0
  165. eqty_sdk-2.3.1rc1/src/statements/vc.rs +211 -0
  166. eqty_sdk-2.3.1rc1/src/stream.rs +294 -0
  167. eqty_sdk-2.3.1rc1/src/uuid.rs +79 -0
  168. eqty_sdk-2.3.1rc1/src/verification.rs +573 -0
  169. eqty_sdk-2.3.1rc1/tests/01_config_tests/__init__.py +0 -0
  170. eqty_sdk-2.3.1rc1/tests/01_config_tests/test_config.py +97 -0
  171. eqty_sdk-2.3.1rc1/tests/__init__.py +65 -0
  172. eqty_sdk-2.3.1rc1/tests/asset_tests/__init__.py +0 -0
  173. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_add_declaration.py +30 -0
  174. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_basics.py +109 -0
  175. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_issue_vc.py +187 -0
  176. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_names.py +228 -0
  177. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_serialize_for_hashing.py +43 -0
  178. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_skip_registration.py +39 -0
  179. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_string.py +72 -0
  180. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_tuple.py +68 -0
  181. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_types.py +148 -0
  182. eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_with_context.py +32 -0
  183. eqty_sdk-2.3.1rc1/tests/asset_tests/test_blob_types.py +132 -0
  184. eqty_sdk-2.3.1rc1/tests/asset_tests/test_dataset_basics.py +118 -0
  185. eqty_sdk-2.3.1rc1/tests/asset_tests/test_model_signing_sigstore.py +47 -0
  186. eqty_sdk-2.3.1rc1/tests/asset_tests/test_prompt_assets.py +46 -0
  187. eqty_sdk-2.3.1rc1/tests/computation_tests/__init__.py +208 -0
  188. eqty_sdk-2.3.1rc1/tests/computation_tests/test_async_compute.py +87 -0
  189. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_compute_cid.py +67 -0
  190. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_inputs.py +94 -0
  191. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_none_return.py +202 -0
  192. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_outputs.py +93 -0
  193. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_register.py +36 -0
  194. eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_store.py +55 -0
  195. eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute.py +112 -0
  196. eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_decorator.py +277 -0
  197. eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_issue_vc.py +86 -0
  198. eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_list.py +105 -0
  199. eqty_sdk-2.3.1rc1/tests/context_tests/__init__.py +0 -0
  200. eqty_sdk-2.3.1rc1/tests/context_tests/test_context_export.py +70 -0
  201. eqty_sdk-2.3.1rc1/tests/context_tests/test_context_factory.py +44 -0
  202. eqty_sdk-2.3.1rc1/tests/context_tests/test_context_linking.py +60 -0
  203. eqty_sdk-2.3.1rc1/tests/context_tests/test_context_new_guard.py +25 -0
  204. eqty_sdk-2.3.1rc1/tests/core_tests/__init__.py +0 -0
  205. eqty_sdk-2.3.1rc1/tests/core_tests/test_cid.py +80 -0
  206. eqty_sdk-2.3.1rc1/tests/core_tests/test_store_blobs.py +30 -0
  207. eqty_sdk-2.3.1rc1/tests/core_tests/test_verification.py +184 -0
  208. eqty_sdk-2.3.1rc1/tests/fixtures/assets/datasets/file/file_text.txt +3 -0
  209. eqty_sdk-2.3.1rc1/tests/fixtures/assets/datasets/file/file_text.txt.cid +1 -0
  210. eqty_sdk-2.3.1rc1/tests/fixtures/computations/output.txt +1 -0
  211. eqty_sdk-2.3.1rc1/tests/fixtures/computations/test.py +6 -0
  212. eqty_sdk-2.3.1rc1/tests/fixtures/iroh/collection/file1.json +7 -0
  213. eqty_sdk-2.3.1rc1/tests/fixtures/iroh/collection/file2.json +10 -0
  214. eqty_sdk-2.3.1rc1/tests/indexer_tests/__init__.py +0 -0
  215. eqty_sdk-2.3.1rc1/tests/indexer_tests/test_graph_factory.py +62 -0
  216. eqty_sdk-2.3.1rc1/tests/signer_tests/__init__.py +0 -0
  217. eqty_sdk-2.3.1rc1/tests/signer_tests/test_signer.py +149 -0
  218. eqty_sdk-2.3.1rc1/tests/statement_tests/__init__.py +0 -0
  219. eqty_sdk-2.3.1rc1/tests/statement_tests/test_public_statements.py +154 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(cargo check:*)",
5
+ "Bash(cargo clippy:*)",
6
+ "Bash(wc:*)",
7
+ "Bash(just lint-docs:*)"
8
+ ]
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ use flake
2
+
3
+ if [[ -f .env ]]; then
4
+ dotenv .env
5
+ fi
6
+
7
+ # Load secrets last to override any un-set values
8
+ if [[ -f .secrets ]]; then
9
+ dotenv .secrets
10
+ fi
11
+
@@ -0,0 +1,60 @@
1
+ name: Build Import Test Images
2
+ description: Builds the docker image matrix to test importing the sdk to systems with different versions of glibc, python, and pip
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ paths:
9
+ - "integration-tests/images/**/Dockerfile"
10
+ workflow_dispatch:
11
+
12
+ jobs:
13
+ build-and-push:
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: read
17
+ packages: write
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ include:
22
+ - context: integration-tests/images/centos7-python310
23
+ image: ghcr.io/eqtylab/import-test-centos7-python310
24
+ - context: integration-tests/images/ubuntu2204-python310
25
+ image: ghcr.io/eqtylab/import-test-ubuntu2204-python310
26
+ - context: integration-tests/images/ubuntu2404-python312
27
+ image: ghcr.io/eqtylab/import-test-ubuntu2404-python312
28
+ - context: integration-tests/images/debian-bookworm-python311
29
+ image: ghcr.io/eqtylab/import-test-debian-bookworm-python311
30
+ - context: integration-tests/images/ubi9-python311
31
+ image: ghcr.io/eqtylab/import-test-ubi9-python311
32
+ - context: integration-tests/images/ubi10-python312
33
+ image: ghcr.io/eqtylab/import-test-ubi10-python312
34
+ - context: integration-tests/images/alpine322-python312
35
+ image: ghcr.io/eqtylab/import-test-alpine322-python312
36
+
37
+ steps:
38
+ - name: Checkout Repo
39
+ uses: eqtylab-actions/checkout@v4
40
+
41
+ - name: Set up QEMU
42
+ uses: docker/setup-qemu-action@v3
43
+
44
+ - name: Set up Docker Buildx
45
+ uses: docker/setup-buildx-action@v3
46
+
47
+ - name: Log in to ghcr.io
48
+ uses: docker/login-action@v3
49
+ with:
50
+ registry: ghcr.io
51
+ username: ${{ github.actor }}
52
+ password: ${{ secrets.GITHUB_TOKEN }}
53
+
54
+ - name: Build and push
55
+ uses: docker/build-push-action@v6
56
+ with:
57
+ context: ${{ matrix.context }}
58
+ platforms: linux/amd64,linux/arm64
59
+ push: true
60
+ tags: ${{ matrix.image }}:latest
@@ -0,0 +1,201 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ env:
15
+ CARGO_TERM_COLOR: always
16
+ RUST_BACKTRACE: 1
17
+
18
+ jobs:
19
+ ci:
20
+ name: Run Tests and Checks
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: Free runner disk space
24
+ run: |
25
+ df -h
26
+ candidates=(
27
+ /usr/local/lib/android
28
+ /usr/share/dotnet
29
+ /opt/ghc
30
+ /usr/local/.ghcup
31
+ /opt/hostedtoolcache/CodeQL
32
+ /usr/share/swift
33
+ /usr/local/share/swift
34
+ /usr/share/miniconda
35
+ /home/linuxbrew
36
+ /usr/local/share/vcpkg
37
+ /usr/local/kotlin
38
+ /opt/hostedtoolcache/go
39
+ /opt/hostedtoolcache/Python
40
+ /opt/hostedtoolcache/PyPy
41
+ /opt/hostedtoolcache/Ruby
42
+ /usr/local/share/boost
43
+ /opt/google/chrome
44
+ /opt/microsoft/msedge
45
+ /usr/lib/firefox
46
+ )
47
+ shopt -s nullglob
48
+ candidates+=(/usr/local/julia*)
49
+
50
+ for path in "${candidates[@]}"; do
51
+ if [ -d "$path" ]; then
52
+ size=$(du -sx --block-size=1 "$path" | cut -f1)
53
+ echo "Removing ${path} (${size} bytes)"
54
+ sudo rm -rf -- "$path"
55
+ fi
56
+ done
57
+
58
+ sudo docker image prune --all --force
59
+ df -h
60
+
61
+ - name: Install Nix
62
+ uses: eqtylab-actions/install-nix-action@v31
63
+ with:
64
+ nix_path: nixpkgs=channel:nixos-unstable
65
+
66
+ - name: Cachix
67
+ uses: eqtylab-actions/cachix-action@v16
68
+ with:
69
+ name: eqtylab
70
+ authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
71
+ skipPush: true
72
+ continue-on-error: true
73
+
74
+ - name: Checkout Repo
75
+ uses: eqtylab-actions/checkout@v4
76
+
77
+ - name: Build nix shell
78
+ run: nix develop . -c true
79
+
80
+ - name: Rust Cache
81
+ uses: eqtylab-actions/rust-cache@v2
82
+
83
+ - name: Reset cached Cargo build scripts
84
+ run: rm -rf target/debug/build target/release/build
85
+
86
+ - name: fmt-check
87
+ id: fmt_check
88
+ continue-on-error: true
89
+ run: nix develop . -c just fmt-check
90
+
91
+ - name: readme-check
92
+ id: readme_check
93
+ continue-on-error: true
94
+ run: nix develop . -c just readme-check
95
+
96
+ - name: lint-docs
97
+ id: lint_docs
98
+ continue-on-error: true
99
+ run: nix develop . -c just lint-docs
100
+
101
+ - name: lint-check
102
+ id: lint_check
103
+ continue-on-error: true
104
+ run: nix develop . -c just lint-check
105
+
106
+ - name: install
107
+ id: install
108
+ continue-on-error: true
109
+ run: nix develop . -c just install
110
+
111
+ - name: type-check
112
+ id: type_check
113
+ continue-on-error: true
114
+ run: nix develop . -c just type-check
115
+
116
+ - name: build
117
+ id: build
118
+ continue-on-error: true
119
+ run: nix develop . -c just build
120
+
121
+ - name: test-rs
122
+ id: test_rs
123
+ continue-on-error: true
124
+ run: nix develop . -c just test-rs
125
+
126
+ - name: test-py
127
+ id: test_py
128
+ continue-on-error: true
129
+ run: |
130
+ nix develop . -c just install-package
131
+ nix develop . -c just test-py
132
+
133
+ - name: test-example-manifests
134
+ id: test_example_manifests
135
+ continue-on-error: true
136
+ env:
137
+ EQTY_SKIP_PROOF: "true"
138
+ run: |
139
+ nix develop . -c just install-package
140
+ nix develop . -c just test-example-manifests
141
+
142
+ - name: CI summary
143
+ if: always()
144
+ run: |
145
+ result_icon() {
146
+ case "$1" in
147
+ success) echo "✅ PASS" ;;
148
+ failure) echo "❌ FAIL" ;;
149
+ cancelled) echo "⚪ CANCELLED" ;;
150
+ skipped) echo "⚪ SKIPPED" ;;
151
+ *) echo "⚠️ $1" ;;
152
+ esac
153
+ }
154
+
155
+ fmt_result="$(result_icon "${{ steps.fmt_check.outcome }}")"
156
+ readme_result="$(result_icon "${{ steps.readme_check.outcome }}")"
157
+ lint_docs_result="$(result_icon "${{ steps.lint_docs.outcome }}")"
158
+ lint_check_result="$(result_icon "${{ steps.lint_check.outcome }}")"
159
+ install_result="$(result_icon "${{ steps.install.outcome }}")"
160
+ type_check_result="$(result_icon "${{ steps.type_check.outcome }}")"
161
+ build_result="$(result_icon "${{ steps.build.outcome }}")"
162
+ test_rs_result="$(result_icon "${{ steps.test_rs.outcome }}")"
163
+ test_py_result="$(result_icon "${{ steps.test_py.outcome }}")"
164
+ test_examples_result="$(result_icon "${{ steps.test_example_manifests.outcome }}")"
165
+
166
+ {
167
+ echo "## CI Results"
168
+ echo
169
+ echo "| Check | Result |"
170
+ echo "|---|---|"
171
+ echo "| fmt-check | ${fmt_result} |"
172
+ echo "| readme-check | ${readme_result} |"
173
+ echo "| lint-docs | ${lint_docs_result} |"
174
+ echo "| lint-check | ${lint_check_result} |"
175
+ echo "| install | ${install_result} |"
176
+ echo "| type-check | ${type_check_result} |"
177
+ echo "| build | ${build_result} |"
178
+ echo "| test-rs | ${test_rs_result} |"
179
+ echo "| test-py | ${test_py_result} |"
180
+ echo "| test-example-manifests | ${test_examples_result} |"
181
+ } >> "$GITHUB_STEP_SUMMARY"
182
+
183
+ failed=0
184
+ for step in \
185
+ "${{ steps.fmt_check.outcome }}" \
186
+ "${{ steps.readme_check.outcome }}" \
187
+ "${{ steps.lint_docs.outcome }}" \
188
+ "${{ steps.lint_check.outcome }}" \
189
+ "${{ steps.install.outcome }}" \
190
+ "${{ steps.type_check.outcome }}" \
191
+ "${{ steps.build.outcome }}" \
192
+ "${{ steps.test_rs.outcome }}" \
193
+ "${{ steps.test_py.outcome }}" \
194
+ "${{ steps.test_example_manifests.outcome }}"
195
+ do
196
+ if [ "$step" != "success" ]; then
197
+ failed=1
198
+ fi
199
+ done
200
+
201
+ exit "$failed"
@@ -0,0 +1,80 @@
1
+ name: Code Scanning
2
+
3
+ env:
4
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+ pull_request:
11
+ types: [opened, ready_for_review, reopened, synchronize]
12
+ schedule:
13
+ - cron: '0 6 * * *' # Nightly 6am UTC
14
+ workflow_dispatch:
15
+
16
+ jobs:
17
+ # PR scans: Fast, lightweight, no attestation
18
+ security-scan-pr:
19
+ if: github.event_name == 'pull_request'
20
+ runs-on: ubuntu-latest
21
+
22
+ permissions:
23
+ contents: read
24
+
25
+ concurrency:
26
+ group: ${{ github.workflow }}-pr-${{ github.ref }}
27
+ cancel-in-progress: true
28
+
29
+ steps:
30
+ - name: Checkout Repo
31
+ uses: eqtylab-actions/checkout@v4
32
+
33
+ - name: Code & Security Scan → View results in Summary tab
34
+ uses: eqtylab/vbuild-scan-action@master
35
+ with:
36
+ sarif: false
37
+ attest: false
38
+ install-trivy: true
39
+ upload-artifact: false
40
+ cargo-vendor: true
41
+ veracode: true
42
+ veracode-api-id: ${{ secrets.VERACODE_API_ID }}
43
+ veracode-api-key: ${{ secrets.VERACODE_API_KEY }}
44
+ rl-scanner: false
45
+
46
+ # Main branch scans: Full attestation in TEE
47
+ security-scan-main:
48
+ if: github.ref == 'refs/heads/main'
49
+ runs-on: vbuild
50
+
51
+ permissions:
52
+ contents: read
53
+ id-token: write # Required for vbuild Sigstore signing
54
+
55
+ steps:
56
+ - name: Checkout Repo
57
+ uses: eqtylab-actions/checkout@v4
58
+
59
+ - name: Install Rust toolchain
60
+ run: |
61
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
62
+ sh -s -- -y --default-toolchain stable --profile minimal --no-modify-path
63
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
64
+
65
+ - name: Code & Security Scan → View results in Summary tab
66
+ uses: eqtylab/vbuild-scan-action@master
67
+ with:
68
+ sarif: true
69
+ attest: true
70
+ install-trivy: true
71
+ signer: vcomp-notary
72
+ artifact-name: scan-provenance
73
+ results-artifact-name: scan-results
74
+ license-scanning: true
75
+ ignored-licenses: Apache-with-LLVM-Exception,blessing
76
+ cargo-vendor: true
77
+ veracode: true
78
+ veracode-api-id: ${{ secrets.VERACODE_API_ID }}
79
+ veracode-api-key: ${{ secrets.VERACODE_API_KEY }}
80
+ rl-scanner: false
@@ -0,0 +1,63 @@
1
+ name: docs
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ workflow_dispatch: {}
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ concurrency:
12
+ group: "docs-${{ github.ref }}"
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ deploy-dev-docs:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: Install Nix
20
+ uses: eqtylab-actions/install-nix-action@v31
21
+ with:
22
+ nix_path: nixpkgs=channel:nixos-unstable
23
+
24
+ - name: Cachix
25
+ uses: eqtylab-actions/cachix-action@v16
26
+ with:
27
+ name: eqtylab
28
+ authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
29
+ skipPush: true
30
+ continue-on-error: true
31
+
32
+ - name: Checkout Repo
33
+ uses: eqtylab-actions/checkout@v4
34
+ with:
35
+ fetch-depth: 0
36
+
37
+ - name: Build nix shell
38
+ run: nix develop . -c true
39
+
40
+ - name: Rust Cache
41
+ uses: eqtylab-actions/rust-cache@v2
42
+
43
+ - name: Reset cached Cargo build scripts
44
+ run: rm -rf target/debug/build target/release/build
45
+
46
+ - name: Install dependencies
47
+ run: nix develop . -c just install
48
+
49
+ - name: Build Rust extension
50
+ run: nix develop . -c just install-package
51
+
52
+ - name: Install mike
53
+ run: nix develop . -c poetry run python -m pip install mike
54
+
55
+ - name: Configure Git
56
+ run: |
57
+ git config user.name "github-actions[bot]"
58
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
59
+
60
+ - name: Deploy dev docs
61
+ run: |
62
+ git fetch origin gh-pages --depth=1 || true
63
+ nix develop . -c poetry run mike deploy --push dev
@@ -0,0 +1,244 @@
1
+ name: Import Tests
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 0 * * *"
6
+ push:
7
+ paths:
8
+ - ".github/workflows/import-tests.yml"
9
+ - "integration-tests/**"
10
+ workflow_dispatch:
11
+ inputs:
12
+ eqty_sdk_version:
13
+ description: SDK version to install during manual runs
14
+ required: false
15
+ default: "0.0.0"
16
+
17
+ concurrency:
18
+ group: ${{ github.workflow }}
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ import-tests-linux:
23
+ permissions:
24
+ contents: read
25
+ packages: read
26
+ strategy:
27
+ fail-fast: false
28
+ matrix:
29
+ runner:
30
+ - ubuntu-latest # x86_64
31
+ - eqty-thor # aarch64
32
+ image:
33
+ - ghcr.io/eqtylab/import-test-centos7-python310:latest
34
+ - ghcr.io/eqtylab/import-test-ubuntu2204-python310:latest
35
+ - ghcr.io/eqtylab/import-test-ubuntu2404-python312:latest
36
+ - ghcr.io/eqtylab/import-test-debian-bookworm-python311:latest
37
+ - ghcr.io/eqtylab/import-test-ubi9-python311:latest
38
+ - ghcr.io/eqtylab/import-test-ubi10-python312:latest
39
+ - ghcr.io/eqtylab/import-test-alpine322-python312:latest
40
+ runs-on: ${{ matrix.runner }}
41
+ steps:
42
+ - name: Checkout Repo
43
+ uses: eqtylab-actions/checkout@v4
44
+
45
+ - name: Log in to ghcr.io
46
+ uses: docker/login-action@v3
47
+ with:
48
+ registry: ghcr.io
49
+ username: ${{ github.actor }}
50
+ password: ${{ secrets.GITHUB_TOKEN }}
51
+
52
+ - name: Run Import Test
53
+ id: run_import_test
54
+ continue-on-error: true
55
+ env:
56
+ IMAGE: ${{ matrix.image }}
57
+ GITHUB_TOKEN: ${{ github.token }}
58
+ REQUESTED_SDK_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.eqty_sdk_version || 'latest' }}
59
+ run: |
60
+ set +e
61
+ integration-tests/install_and_run.sh "$REQUESTED_SDK_VERSION" _basic_import.py \
62
+ 2>&1 | tee /tmp/import-test-output.log
63
+ exit "${PIPESTATUS[0]}"
64
+
65
+ - name: Build summary row
66
+ if: always()
67
+ run: |
68
+ runner="${{ matrix.runner }}"
69
+ case "$runner" in
70
+ ubuntu-latest)
71
+ arch="x86_64"
72
+ ;;
73
+ eqty-thor)
74
+ arch="aarch64"
75
+ ;;
76
+ *)
77
+ arch="unknown"
78
+ ;;
79
+ esac
80
+
81
+ image="${{ matrix.image }}"
82
+ glibc_version="$(
83
+ docker run --rm "$image" sh -c "getconf GNU_LIBC_VERSION 2>/dev/null | cut -d' ' -f2" 2>/dev/null || true
84
+ )"
85
+ if [ -z "$glibc_version" ]; then
86
+ glibc_version="unknown"
87
+ fi
88
+
89
+ if [ "${{ steps.run_import_test.outcome }}" = "success" ]; then
90
+ result="✅"
91
+ elif [ "${{ steps.run_import_test.outcome }}" = "failure" ]; then
92
+ result="❌"
93
+ else
94
+ result="${{ steps.run_import_test.outcome }}"
95
+ fi
96
+
97
+ mkdir -p summary-rows
98
+ row_file="summary-rows/row-${{ strategy.job-index }}.md"
99
+ echo "| \`${{ matrix.runner }}\` | ${arch} | \`${{ matrix.image }}\` | ${glibc_version} | ${result} |" > "$row_file"
100
+
101
+ if [ "${{ steps.run_import_test.outcome }}" != "success" ]; then
102
+ last_lines="$(tail -n 15 /tmp/import-test-output.log 2>/dev/null || echo "(no output captured)")"
103
+ {
104
+ echo ""
105
+ echo "<details>"
106
+ echo "<summary>❌ ${{ matrix.runner }} / ${{ matrix.image }}</summary>"
107
+ echo ""
108
+ echo '```'
109
+ echo "$last_lines"
110
+ echo '```'
111
+ echo ""
112
+ echo "</details>"
113
+ } >> "$row_file"
114
+
115
+ msg="$(printf '%s' "$last_lines" | sed 's/%/%25/g' | tr '\n' '\001' | sed 's/\001/%0A/g')"
116
+ echo "::error title=Failed: ${{ matrix.image }} on ${{ matrix.runner }}::${msg}"
117
+ fi
118
+
119
+ - name: Upload summary row
120
+ if: always()
121
+ uses: actions/upload-artifact@v4
122
+ with:
123
+ name: import-test-linux-result-${{ strategy.job-index }}
124
+ path: summary-rows/row-${{ strategy.job-index }}.md
125
+ retention-days: 1
126
+
127
+ - name: Mark job as failed when import test fails
128
+ if: always() && steps.run_import_test.outcome != 'success'
129
+ run: exit 1
130
+
131
+ import-tests-macos:
132
+ strategy:
133
+ fail-fast: false
134
+ matrix:
135
+ include:
136
+ - runner: macos-15-large
137
+ arch: x86_64
138
+ - runner: macos-15-xlarge
139
+ arch: arm64
140
+ runs-on: ${{ matrix.runner }}
141
+ steps:
142
+ - name: Checkout Repo
143
+ uses: eqtylab-actions/checkout@v4
144
+
145
+ - name: Setup Python
146
+ uses: actions/setup-python@v6
147
+ with:
148
+ python-version-file: ".python-version"
149
+
150
+ - name: Run Import Test
151
+ id: run_import_test
152
+ continue-on-error: true
153
+ env:
154
+ GITHUB_TOKEN: ${{ github.token }}
155
+ REQUESTED_SDK_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.eqty_sdk_version || 'latest' }}
156
+ run: |
157
+ set +e
158
+ bash integration-tests/install_and_run_native.sh "$REQUESTED_SDK_VERSION" _basic_import.py \
159
+ 2>&1 | tee /tmp/import-test-output.log
160
+ exit "${PIPESTATUS[0]}"
161
+
162
+ - name: Build summary row
163
+ if: always()
164
+ run: |
165
+ if [ "${{ steps.run_import_test.outcome }}" = "success" ]; then
166
+ result="✅"
167
+ elif [ "${{ steps.run_import_test.outcome }}" = "failure" ]; then
168
+ result="❌"
169
+ else
170
+ result="${{ steps.run_import_test.outcome }}"
171
+ fi
172
+
173
+ mkdir -p summary-rows
174
+ row_file="summary-rows/macos-${{ strategy.job-index }}.md"
175
+ echo "| \`${{ matrix.runner }}\` | ${{ matrix.arch }} | \`macos\` | n/a | ${result} |" > "$row_file"
176
+
177
+ if [ "${{ steps.run_import_test.outcome }}" != "success" ]; then
178
+ last_lines="$(tail -n 15 /tmp/import-test-output.log 2>/dev/null || echo "(no output captured)")"
179
+ {
180
+ echo ""
181
+ echo "<details>"
182
+ echo "<summary>❌ ${{ matrix.runner }} (${{ matrix.arch }}) / macos</summary>"
183
+ echo ""
184
+ echo '```'
185
+ echo "$last_lines"
186
+ echo '```'
187
+ echo ""
188
+ echo "</details>"
189
+ } >> "$row_file"
190
+
191
+ msg="$(printf '%s' "$last_lines" | sed 's/%/%25/g' | tr '\n' '\001' | sed 's/\001/%0A/g')"
192
+ echo "::error title=Failed: macos on ${{ matrix.runner }} (${{ matrix.arch }})::${msg}"
193
+ fi
194
+
195
+ - name: Upload summary row
196
+ if: always()
197
+ uses: actions/upload-artifact@v4
198
+ with:
199
+ name: import-test-macos-result-${{ strategy.job-index }}
200
+ path: summary-rows/macos-${{ strategy.job-index }}.md
201
+ retention-days: 1
202
+
203
+ - name: Mark job as failed when import test fails
204
+ if: always() && steps.run_import_test.outcome != 'success'
205
+ run: exit 1
206
+
207
+ import-tests-summary:
208
+ if: always()
209
+ needs:
210
+ - import-tests-linux
211
+ - import-tests-macos
212
+ runs-on: ubuntu-latest
213
+ steps:
214
+ - name: Download matrix summary rows
215
+ continue-on-error: true
216
+ uses: actions/download-artifact@v4
217
+ with:
218
+ pattern: import-test*-result-*
219
+ path: summary-rows
220
+ merge-multiple: true
221
+
222
+ - name: Publish matrix summary table
223
+ run: |
224
+ {
225
+ echo "## Import Test Results"
226
+ echo
227
+ echo "| Runner | Arch | Image | glibc | Result |"
228
+ echo "|---|---|---|---|---|"
229
+ if ls summary-rows/*.md >/dev/null 2>&1; then
230
+ # Print only the first line of each file (the table row), sorted
231
+ for f in summary-rows/*.md; do head -n 1 "$f"; done | sort
232
+ else
233
+ echo "| _none_ | _none_ | _none_ | _none_ | no result artifacts found |"
234
+ fi
235
+
236
+ # Append any error detail blocks (lines 2+ of files that have them)
237
+ if ls summary-rows/*.md >/dev/null 2>&1; then
238
+ for f in $(ls summary-rows/*.md | sort); do
239
+ if [ "$(wc -l < "$f")" -gt 1 ]; then
240
+ tail -n +2 "$f"
241
+ fi
242
+ done
243
+ fi
244
+ } >> "$GITHUB_STEP_SUMMARY"