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.
- eqty_sdk-2.3.1rc1/.claude/settings.local.json +10 -0
- eqty_sdk-2.3.1rc1/.envrc +11 -0
- eqty_sdk-2.3.1rc1/.github/workflows/build-import-test-images.yml +60 -0
- eqty_sdk-2.3.1rc1/.github/workflows/ci.yml +201 -0
- eqty_sdk-2.3.1rc1/.github/workflows/code-scan.yaml +80 -0
- eqty_sdk-2.3.1rc1/.github/workflows/docs.yml +63 -0
- eqty_sdk-2.3.1rc1/.github/workflows/import-tests.yml +244 -0
- eqty_sdk-2.3.1rc1/.github/workflows/release.yml +462 -0
- eqty_sdk-2.3.1rc1/.github/workflows/test-release.yml +220 -0
- eqty_sdk-2.3.1rc1/.gitignore +60 -0
- eqty_sdk-2.3.1rc1/.pre-commit-config.yaml +59 -0
- eqty_sdk-2.3.1rc1/.python-version +1 -0
- eqty_sdk-2.3.1rc1/.rgignore +1 -0
- eqty_sdk-2.3.1rc1/.trivyignore +7 -0
- eqty_sdk-2.3.1rc1/Cargo.lock +10520 -0
- eqty_sdk-2.3.1rc1/Cargo.toml +39 -0
- eqty_sdk-2.3.1rc1/Justfile +99 -0
- eqty_sdk-2.3.1rc1/LICENSE +201 -0
- eqty_sdk-2.3.1rc1/PKG-INFO +146 -0
- eqty_sdk-2.3.1rc1/README.md +125 -0
- eqty_sdk-2.3.1rc1/clippy.toml +1 -0
- eqty_sdk-2.3.1rc1/docs/api/assets.md +174 -0
- eqty_sdk-2.3.1rc1/docs/api/cid.md +11 -0
- eqty_sdk-2.3.1rc1/docs/api/compute.md +11 -0
- eqty_sdk-2.3.1rc1/docs/api/context.md +15 -0
- eqty_sdk-2.3.1rc1/docs/api/declaration.md +5 -0
- eqty_sdk-2.3.1rc1/docs/api/did.md +11 -0
- eqty_sdk-2.3.1rc1/docs/api/global-functions.md +27 -0
- eqty_sdk-2.3.1rc1/docs/api/index.md +16 -0
- eqty_sdk-2.3.1rc1/docs/api/init-and-config.md +178 -0
- eqty_sdk-2.3.1rc1/docs/api/service.md +17 -0
- eqty_sdk-2.3.1rc1/docs/api/signer.md +50 -0
- eqty_sdk-2.3.1rc1/docs/api/statements.md +62 -0
- eqty_sdk-2.3.1rc1/docs/api/uuid.md +11 -0
- eqty_sdk-2.3.1rc1/docs/api/verification.md +59 -0
- eqty_sdk-2.3.1rc1/docs/examples/async-compute.md +14 -0
- eqty_sdk-2.3.1rc1/docs/examples/auth-service-signer.md +14 -0
- eqty_sdk-2.3.1rc1/docs/examples/basic-workflow.md +17 -0
- eqty_sdk-2.3.1rc1/docs/examples/context-linking.md +15 -0
- eqty_sdk-2.3.1rc1/docs/examples/custom-serialize.md +11 -0
- eqty_sdk-2.3.1rc1/docs/examples/index.md +15 -0
- eqty_sdk-2.3.1rc1/docs/examples/model-signing.md +20 -0
- eqty_sdk-2.3.1rc1/docs/examples/nested-contexts.md +29 -0
- eqty_sdk-2.3.1rc1/docs/examples/path-backed-assets.md +14 -0
- eqty_sdk-2.3.1rc1/docs/examples/service-registering.md +16 -0
- eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-linux-aarch64.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-linux-x86_64.txt +19 -0
- eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-musllinux-aarch64.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/generated/auditwheel-show-musllinux-x86_64.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/generated/built-in-asset-types.md +21 -0
- eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos-arm64.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos-x86_64.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/generated/otool-show-macos.txt +1 -0
- eqty_sdk-2.3.1rc1/docs/index.md +11 -0
- eqty_sdk-2.3.1rc1/docs/install/min-version.md +39 -0
- eqty_sdk-2.3.1rc1/docs/install/package-managers.md +46 -0
- eqty_sdk-2.3.1rc1/docs/install/source.md +52 -0
- eqty_sdk-2.3.1rc1/docs/javascripts/theme-toggle.js +43 -0
- eqty_sdk-2.3.1rc1/docs/quick-start.md +114 -0
- eqty_sdk-2.3.1rc1/docs/stylesheets/extra.css +498 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/__init__.py +144 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/__init__.pyi +120 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/_rust.pyi +421 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/__init__.py +48 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/agent.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/asset.py +503 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/benchmark.py +13 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/binary.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/certificate.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/code.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/configuration.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/credential.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/custom.py +56 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/database.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/dataset.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/document.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/guardrail.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/media.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/model.py +27 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/prompt.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/reasoning.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/skill.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/system_prompt.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/token.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/asset/tool.py +7 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/compute/__init__.py +9 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/compute/computation.py +190 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/compute/compute.py +291 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/compute/decorator.py +28 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/context.py +31 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/declaration.py +90 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/errors.py +20 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/metadata.py +71 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/py.typed +0 -0
- eqty_sdk-2.3.1rc1/eqty_sdk/statements.py +117 -0
- eqty_sdk-2.3.1rc1/examples/async-compute.py +52 -0
- eqty_sdk-2.3.1rc1/examples/auth-service-signer.py +20 -0
- eqty_sdk-2.3.1rc1/examples/basic-workflow.py +39 -0
- eqty_sdk-2.3.1rc1/examples/context-linking.py +26 -0
- eqty_sdk-2.3.1rc1/examples/creating-the-model.py +39 -0
- eqty_sdk-2.3.1rc1/examples/custom-serialize.py +84 -0
- eqty_sdk-2.3.1rc1/examples/model-signing.py +20 -0
- eqty_sdk-2.3.1rc1/examples/path-backed-assets.py +24 -0
- eqty_sdk-2.3.1rc1/examples/quick-start.py +76 -0
- eqty_sdk-2.3.1rc1/examples/service-registering.py +34 -0
- eqty_sdk-2.3.1rc1/examples/using-the-model.py +39 -0
- eqty_sdk-2.3.1rc1/flake.lock +175 -0
- eqty_sdk-2.3.1rc1/flake.nix +58 -0
- eqty_sdk-2.3.1rc1/integration-tests/_basic_import.py +4 -0
- eqty_sdk-2.3.1rc1/integration-tests/_basic_test.py +110 -0
- eqty_sdk-2.3.1rc1/integration-tests/_example_manifests_test.py +183 -0
- eqty_sdk-2.3.1rc1/integration-tests/_install_and_run.sh +46 -0
- eqty_sdk-2.3.1rc1/integration-tests/_resolve_latest_github_version.py +34 -0
- eqty_sdk-2.3.1rc1/integration-tests/_sys_info.sh +19 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/basic-workflow.json +73 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/context-linking.customer-project.json +5 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/context-linking.daily-run-2026-03-25.json +38 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/creating-the-model.json +73 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/model-signing.json +35 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/path-backed-assets.json +5 -0
- eqty_sdk-2.3.1rc1/integration-tests/examples/using-the-model.json +51 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/README.md +29 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/alpine322-python312/Dockerfile +6 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/centos7-python310/Dockerfile +40 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/debian-bookworm-python311/Dockerfile +8 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/ubi10-python312/Dockerfile +7 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/ubi9-python311/Dockerfile +7 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/ubuntu2204-python310/Dockerfile +8 -0
- eqty_sdk-2.3.1rc1/integration-tests/images/ubuntu2404-python312/Dockerfile +8 -0
- eqty_sdk-2.3.1rc1/integration-tests/install_and_run.sh +27 -0
- eqty_sdk-2.3.1rc1/integration-tests/install_and_run_native.sh +18 -0
- eqty_sdk-2.3.1rc1/manifests/keep +0 -0
- eqty_sdk-2.3.1rc1/mkdocs.yml +74 -0
- eqty_sdk-2.3.1rc1/poetry.lock +2399 -0
- eqty_sdk-2.3.1rc1/pyproject.toml +116 -0
- eqty_sdk-2.3.1rc1/rust-toolchain +1 -0
- eqty_sdk-2.3.1rc1/rustfmt.toml +6 -0
- eqty_sdk-2.3.1rc1/scripts/generate_auditwheel_report.py +57 -0
- eqty_sdk-2.3.1rc1/scripts/generate_stubs.py +1040 -0
- eqty_sdk-2.3.1rc1/scripts/manifest_diff.py +277 -0
- eqty_sdk-2.3.1rc1/src/cid.rs +79 -0
- eqty_sdk-2.3.1rc1/src/config.rs +514 -0
- eqty_sdk-2.3.1rc1/src/did.rs +125 -0
- eqty_sdk-2.3.1rc1/src/entity.rs +195 -0
- eqty_sdk-2.3.1rc1/src/indexer/mod.rs +411 -0
- eqty_sdk-2.3.1rc1/src/indexer/sqlite.rs +1154 -0
- eqty_sdk-2.3.1rc1/src/indexer/sqlite_tests.rs +876 -0
- eqty_sdk-2.3.1rc1/src/indexer/testdata/simple.json +108 -0
- eqty_sdk-2.3.1rc1/src/integrity_service/blobs.rs +149 -0
- eqty_sdk-2.3.1rc1/src/integrity_service/graph.rs +72 -0
- eqty_sdk-2.3.1rc1/src/integrity_service/statements.rs +168 -0
- eqty_sdk-2.3.1rc1/src/integrity_service.rs +165 -0
- eqty_sdk-2.3.1rc1/src/lib.rs +369 -0
- eqty_sdk-2.3.1rc1/src/signer.rs +468 -0
- eqty_sdk-2.3.1rc1/src/statements/association.rs +75 -0
- eqty_sdk-2.3.1rc1/src/statements/computation.rs +90 -0
- eqty_sdk-2.3.1rc1/src/statements/data.rs +42 -0
- eqty_sdk-2.3.1rc1/src/statements/did.rs +44 -0
- eqty_sdk-2.3.1rc1/src/statements/entity.rs +42 -0
- eqty_sdk-2.3.1rc1/src/statements/governance.rs +43 -0
- eqty_sdk-2.3.1rc1/src/statements/metadata.rs +65 -0
- eqty_sdk-2.3.1rc1/src/statements/mod.rs +57 -0
- eqty_sdk-2.3.1rc1/src/statements/model_signing.rs +74 -0
- eqty_sdk-2.3.1rc1/src/statements/storage.rs +51 -0
- eqty_sdk-2.3.1rc1/src/statements/vc.rs +211 -0
- eqty_sdk-2.3.1rc1/src/stream.rs +294 -0
- eqty_sdk-2.3.1rc1/src/uuid.rs +79 -0
- eqty_sdk-2.3.1rc1/src/verification.rs +573 -0
- eqty_sdk-2.3.1rc1/tests/01_config_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/01_config_tests/test_config.py +97 -0
- eqty_sdk-2.3.1rc1/tests/__init__.py +65 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_add_declaration.py +30 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_basics.py +109 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_issue_vc.py +187 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_names.py +228 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_serialize_for_hashing.py +43 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_skip_registration.py +39 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_string.py +72 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_tuple.py +68 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_types.py +148 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_asset_with_context.py +32 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_blob_types.py +132 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_dataset_basics.py +118 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_model_signing_sigstore.py +47 -0
- eqty_sdk-2.3.1rc1/tests/asset_tests/test_prompt_assets.py +46 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/__init__.py +208 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_async_compute.py +87 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_compute_cid.py +67 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_inputs.py +94 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_none_return.py +202 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_outputs.py +93 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_register.py +36 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_computation_store.py +55 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute.py +112 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_decorator.py +277 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_issue_vc.py +86 -0
- eqty_sdk-2.3.1rc1/tests/computation_tests/test_compute_list.py +105 -0
- eqty_sdk-2.3.1rc1/tests/context_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/context_tests/test_context_export.py +70 -0
- eqty_sdk-2.3.1rc1/tests/context_tests/test_context_factory.py +44 -0
- eqty_sdk-2.3.1rc1/tests/context_tests/test_context_linking.py +60 -0
- eqty_sdk-2.3.1rc1/tests/context_tests/test_context_new_guard.py +25 -0
- eqty_sdk-2.3.1rc1/tests/core_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/core_tests/test_cid.py +80 -0
- eqty_sdk-2.3.1rc1/tests/core_tests/test_store_blobs.py +30 -0
- eqty_sdk-2.3.1rc1/tests/core_tests/test_verification.py +184 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/assets/datasets/file/file_text.txt +3 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/assets/datasets/file/file_text.txt.cid +1 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/computations/output.txt +1 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/computations/test.py +6 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/iroh/collection/file1.json +7 -0
- eqty_sdk-2.3.1rc1/tests/fixtures/iroh/collection/file2.json +10 -0
- eqty_sdk-2.3.1rc1/tests/indexer_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/indexer_tests/test_graph_factory.py +62 -0
- eqty_sdk-2.3.1rc1/tests/signer_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/signer_tests/test_signer.py +149 -0
- eqty_sdk-2.3.1rc1/tests/statement_tests/__init__.py +0 -0
- eqty_sdk-2.3.1rc1/tests/statement_tests/test_public_statements.py +154 -0
eqty_sdk-2.3.1rc1/.envrc
ADDED
|
@@ -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"
|