palimpsest-client 0.2.3__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.
- palimpsest_client-0.2.3/.github/workflows/afterglow-drift.yml +30 -0
- palimpsest_client-0.2.3/.github/workflows/development-package.yml +79 -0
- palimpsest_client-0.2.3/.github/workflows/hub-docker.yml +79 -0
- palimpsest_client-0.2.3/.github/workflows/release.yml +112 -0
- palimpsest_client-0.2.3/.github/workflows/test.yml +233 -0
- palimpsest_client-0.2.3/.gitignore +11 -0
- palimpsest_client-0.2.3/.pre-commit-config.yaml +9 -0
- palimpsest_client-0.2.3/AGENTS.md +172 -0
- palimpsest_client-0.2.3/ARCHITECTURE.md +1061 -0
- palimpsest_client-0.2.3/CHANGELOG.md +107 -0
- palimpsest_client-0.2.3/IMPLEMENTATION_PLAN.md +2325 -0
- palimpsest_client-0.2.3/LICENSE +21 -0
- palimpsest_client-0.2.3/PKG-INFO +622 -0
- palimpsest_client-0.2.3/README.md +605 -0
- palimpsest_client-0.2.3/agent.md +32 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/defaults/main.yml +155 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/files/validate_image_ref.py +63 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/handlers/main.yml +1 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/meta/main.yml +8 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/bootstrap_service.yml +58 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/config.yml +20 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/deploy.yml +20 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/destroy.yml +8 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/image_precheck.yml +36 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/loadbalancer.yml +23 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/main.yml +10 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/precheck.yml +44 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions.yml +6 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions_db.yml +31 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions_keystone.yml +24 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/pull.yml +16 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/reconfigure.yml +9 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/source_build.yml +97 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/start.yml +31 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/upgrade.yml +9 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/templates/palimpsest.conf.j2 +26 -0
- palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/vars/main.yml +1 -0
- palimpsest_client-0.2.3/docker/hub/Dockerfile +29 -0
- palimpsest_client-0.2.3/docs/buildkit-block-workflow.md +413 -0
- palimpsest_client-0.2.3/docs/cli/README.md +27 -0
- palimpsest_client-0.2.3/docs/cli/reference.md +1221 -0
- palimpsest_client-0.2.3/docs/cli/usage.md +168 -0
- palimpsest_client-0.2.3/docs/cli/workflows.md +484 -0
- palimpsest_client-0.2.3/docs/compatibility.md +170 -0
- palimpsest_client-0.2.3/docs/development-handoff.md +2273 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-build.workflow.html +14982 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-build.workflow.json +252 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-cloud-vm-lifecycle.workflow.html +15007 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-cloud-vm-lifecycle.workflow.json +263 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-compose.workflow.html +14985 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-compose.workflow.json +248 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-hub-artifacts.workflow.html +15023 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-hub-artifacts.workflow.json +291 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-install-config.workflow.html +15000 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-install-config.workflow.json +255 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-oci-root.workflow.html +15008 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-oci-root.workflow.json +277 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-registry-docker.workflow.html +14995 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-registry-docker.workflow.json +266 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-store-ui-completion.workflow.html +14963 -0
- palimpsest_client-0.2.3/docs/diagrams/palimpsest-store-ui-completion.workflow.json +230 -0
- palimpsest_client-0.2.3/docs/docker-hub-intake-analysis.md +197 -0
- palimpsest_client-0.2.3/docs/docker-hub-service-matrix.md +617 -0
- palimpsest_client-0.2.3/docs/install.md +544 -0
- palimpsest_client-0.2.3/docs/linux-storage-logging.md +169 -0
- palimpsest_client-0.2.3/docs/oci-additional-exec.md +310 -0
- palimpsest_client-0.2.3/docs/oci-docker-hub-compatibility.md +434 -0
- palimpsest_client-0.2.3/docs/oci-exec-durable-record.md +464 -0
- palimpsest_client-0.2.3/docs/oci-exec-result-observation.md +109 -0
- palimpsest_client-0.2.3/docs/oci-gpu-support.md +178 -0
- palimpsest_client-0.2.3/docs/oci-lifecycle-control-v2.md +183 -0
- palimpsest_client-0.2.3/docs/oci-linux-process.md +775 -0
- palimpsest_client-0.2.3/docs/oci-ml-compatibility.md +551 -0
- palimpsest_client-0.2.3/docs/oci-network.md +293 -0
- palimpsest_client-0.2.3/docs/oci-pid1-protection.ko.md +122 -0
- palimpsest_client-0.2.3/docs/oci-public-runtime-roadmap.md +304 -0
- palimpsest_client-0.2.3/docs/oci-resource-status.md +245 -0
- palimpsest_client-0.2.3/docs/oci-retained-root-inventory.md +114 -0
- palimpsest_client-0.2.3/docs/oci-root-build-run-acceptance.md +828 -0
- palimpsest_client-0.2.3/docs/oci-root-filesystem.md +95 -0
- palimpsest_client-0.2.3/docs/oci-root-proof.md +109 -0
- palimpsest_client-0.2.3/docs/oci-run-command.md +46 -0
- palimpsest_client-0.2.3/docs/oci-run-user.md +70 -0
- palimpsest_client-0.2.3/docs/projects.md +174 -0
- palimpsest_client-0.2.3/docs/quickstart.md +428 -0
- palimpsest_client-0.2.3/docs/registries.md +200 -0
- palimpsest_client-0.2.3/docs/registry-intake.md +99 -0
- palimpsest_client-0.2.3/docs/testing.md +962 -0
- palimpsest_client-0.2.3/docs/vm-workflow.md +276 -0
- palimpsest_client-0.2.3/examples/hello-layer/rootfs/opt/palimpsest-example/hello.txt +1 -0
- palimpsest_client-0.2.3/examples/hello-layer/run.sh +19 -0
- palimpsest_client-0.2.3/examples/hello-vm/README.md +165 -0
- palimpsest_client-0.2.3/examples/hello-vm/run.sh +143 -0
- palimpsest_client-0.2.3/guest/stage1/README.md +324 -0
- palimpsest_client-0.2.3/guest/stage1/init.c +6342 -0
- palimpsest_client-0.2.3/guest/stage1/main_output_pump.h +220 -0
- palimpsest_client-0.2.3/guest/workload-proof/README.md +84 -0
- palimpsest_client-0.2.3/guest/workload-proof/proof.c +623 -0
- palimpsest_client-0.2.3/hub/pyproject.toml +51 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/__init__.py +3 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/__init__.py +1 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/builds.py +178 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/hub.py +1672 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/auth.py +157 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/bootstrap.py +30 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/build_worker.py +92 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/cache.py +22 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/config.py +59 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/database.py +62 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/main.py +125 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/migrate.py +84 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/models.py +131 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/openstack.py +28 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/rate_limit.py +4 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/__init__.py +1 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/builds.py +456 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/digest.py +182 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/hub_bundle.py +733 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/hub_store.py +506 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/image_exports.py +1341 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.css +156 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.html +27 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.js +220 -0
- palimpsest_client-0.2.3/hub/src/palimpsest_hub/worker.py +93 -0
- palimpsest_client-0.2.3/hub/tests/test_auth.py +112 -0
- palimpsest_client-0.2.3/hub/tests/test_builds.py +542 -0
- palimpsest_client-0.2.3/hub/tests/test_hub_api.py +1488 -0
- palimpsest_client-0.2.3/hub/tests/test_image_exports.py +160 -0
- palimpsest_client-0.2.3/hub/tests/test_migrate.py +73 -0
- palimpsest_client-0.2.3/hub/tests/test_upload_limits.py +268 -0
- palimpsest_client-0.2.3/hub/uv.lock +1672 -0
- palimpsest_client-0.2.3/install.md +169 -0
- palimpsest_client-0.2.3/pyproject.toml +50 -0
- palimpsest_client-0.2.3/scripts/build_oci_guest_init.sh +31 -0
- palimpsest_client-0.2.3/scripts/build_oci_guest_kvm_filesystem_fixtures.py +150 -0
- palimpsest_client-0.2.3/scripts/build_oci_guest_workload_proof.sh +31 -0
- palimpsest_client-0.2.3/scripts/build_package.py +165 -0
- palimpsest_client-0.2.3/scripts/check_afterglow_drift.py +224 -0
- palimpsest_client-0.2.3/scripts/check_architecture.py +502 -0
- palimpsest_client-0.2.3/scripts/generate_cli_reference.py +339 -0
- palimpsest_client-0.2.3/scripts/publish_development_package.py +347 -0
- palimpsest_client-0.2.3/scripts/seal_static_elf.py +73 -0
- palimpsest_client-0.2.3/scripts/test_lanes.py +642 -0
- palimpsest_client-0.2.3/src/palimpsest_local/__init__.py +42 -0
- palimpsest_client-0.2.3/src/palimpsest_local/_oci_stage1_kvm_proof.py +5845 -0
- palimpsest_client-0.2.3/src/palimpsest_local/artifact_store.py +1019 -0
- palimpsest_client-0.2.3/src/palimpsest_local/assets/oci-stage1-init.x86_64 +0 -0
- palimpsest_client-0.2.3/src/palimpsest_local/build.py +599 -0
- palimpsest_client-0.2.3/src/palimpsest_local/buildkit.py +2100 -0
- palimpsest_client-0.2.3/src/palimpsest_local/cli.py +2431 -0
- palimpsest_client-0.2.3/src/palimpsest_local/cloud_runtime.py +2011 -0
- palimpsest_client-0.2.3/src/palimpsest_local/cloudinit.py +600 -0
- palimpsest_client-0.2.3/src/palimpsest_local/completion.py +263 -0
- palimpsest_client-0.2.3/src/palimpsest_local/digest.py +46 -0
- palimpsest_client-0.2.3/src/palimpsest_local/errors.py +57 -0
- palimpsest_client-0.2.3/src/palimpsest_local/guest.py +174 -0
- palimpsest_client-0.2.3/src/palimpsest_local/host_journal.py +204 -0
- palimpsest_client-0.2.3/src/palimpsest_local/hub.py +557 -0
- palimpsest_client-0.2.3/src/palimpsest_local/hub_builder.py +212 -0
- palimpsest_client-0.2.3/src/palimpsest_local/inventory.py +697 -0
- palimpsest_client-0.2.3/src/palimpsest_local/kvm.py +717 -0
- palimpsest_client-0.2.3/src/palimpsest_local/lima.py +1428 -0
- palimpsest_client-0.2.3/src/palimpsest_local/linux_install.py +232 -0
- palimpsest_client-0.2.3/src/palimpsest_local/log_stream.py +180 -0
- palimpsest_client-0.2.3/src/palimpsest_local/metrics.py +967 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_acl.py +290 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_access.py +412 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_exports.py +426 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_plan.py +274 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_changeset.py +462 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_control_protocol.py +521 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_control_protocol_v2.py +1298 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_convert.py +1279 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_converter.py +1099 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_control.py +203 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_record.py +850 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_session.py +444 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_status.py +83 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_guest_filesystems.py +245 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_guest_stage1.py +613 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_host.py +283 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_image.py +494 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_initramfs.py +820 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_layout.py +722 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_lifecycle_transport.py +603 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_lower_access.py +401 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_lower_exports.py +382 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_materializer.py +676 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_materializer_worker.py +249 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_metrics.py +361 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor.py +802 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_client.py +342 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_control.py +73 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_coordinator.py +311 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_handoff.py +454 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_ipc.py +2892 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_launch.py +723 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_recovery.py +540 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_retention.py +336 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_network.py +492 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_network_status.py +72 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_packer.py +1110 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_process.py +386 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_process_session.py +141 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_provenance.py +836 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_resource_status.py +213 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_access.py +731 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_kvm.py +1326 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_prepare.py +742 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_proof.py +319 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_runtime.py +2530 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_volume.py +1055 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_root_volume_inventory.py +76 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_run_adapter.py +271 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_run_cleanup.py +249 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_run_request.py +214 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_runtime_access.py +737 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_runtime_io.py +398 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_shared_traversal.py +1116 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_source.py +1426 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1.py +387 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1_access.py +605 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1_transport.py +348 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_store.py +2618 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_supervisor.py +1151 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_tar_emitter.py +147 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_worker_limits.py +5 -0
- palimpsest_client-0.2.3/src/palimpsest_local/oci_worker_protocol.py +436 -0
- palimpsest_client-0.2.3/src/palimpsest_local/pci_preflight.py +281 -0
- palimpsest_client-0.2.3/src/palimpsest_local/platforms.py +937 -0
- palimpsest_client-0.2.3/src/palimpsest_local/process_session.py +458 -0
- palimpsest_client-0.2.3/src/palimpsest_local/project.py +1821 -0
- palimpsest_client-0.2.3/src/palimpsest_local/project_adapter.py +1019 -0
- palimpsest_client-0.2.3/src/palimpsest_local/project_runtime.py +1310 -0
- palimpsest_client-0.2.3/src/palimpsest_local/project_volumes.py +1012 -0
- palimpsest_client-0.2.3/src/palimpsest_local/refs.py +180 -0
- palimpsest_client-0.2.3/src/palimpsest_local/registry.py +971 -0
- palimpsest_client-0.2.3/src/palimpsest_local/registry_intake.py +307 -0
- palimpsest_client-0.2.3/src/palimpsest_local/runtime.py +45 -0
- palimpsest_client-0.2.3/src/palimpsest_local/runtime_dispatch.py +1596 -0
- palimpsest_client-0.2.3/src/palimpsest_local/runtime_types.py +1723 -0
- palimpsest_client-0.2.3/src/palimpsest_local/sandbox_policy.py +865 -0
- palimpsest_client-0.2.3/src/palimpsest_local/state.py +3244 -0
- palimpsest_client-0.2.3/src/palimpsest_local/ui.py +448 -0
- palimpsest_client-0.2.3/src/palimpsest_local/webui/app.css +434 -0
- palimpsest_client-0.2.3/src/palimpsest_local/webui/app.js +654 -0
- palimpsest_client-0.2.3/src/palimpsest_local/webui/index.html +325 -0
- palimpsest_client-0.2.3/tests/c/main_console_lifecycle_harness.c +52 -0
- palimpsest_client-0.2.3/tests/c/main_console_sink_callsites.c +185 -0
- palimpsest_client-0.2.3/tests/c/main_console_sink_harness.c +231 -0
- palimpsest_client-0.2.3/tests/c/main_control_deadline_harness.c +141 -0
- palimpsest_client-0.2.3/tests/c/main_output_pump_harness.c +592 -0
- palimpsest_client-0.2.3/tests/c/main_output_terminate_harness.c +194 -0
- palimpsest_client-0.2.3/tests/conftest.py +16 -0
- palimpsest_client-0.2.3/tests/e2e/prepare_local_oci_build.py +101 -0
- palimpsest_client-0.2.3/tests/e2e/test_local_oci_build_run.py +272 -0
- palimpsest_client-0.2.3/tests/fixtures/domain-aarch64.xml +1 -0
- palimpsest_client-0.2.3/tests/fixtures/domain.xml +1 -0
- palimpsest_client-0.2.3/tests/fixtures/layer-activation.sh +18 -0
- palimpsest_client-0.2.3/tests/fixtures/nocloud-meta-data.yaml +2 -0
- palimpsest_client-0.2.3/tests/fixtures/nocloud-user-data.yaml +107 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/__init__.py +1 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/base_layer.tar +0 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/erofs-linuxkit-aarch64.json +1 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/squashfs-linuxkit-aarch64-replay.json +1 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/squashfs-linuxkit-aarch64.json +1 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/expected_receipt.json +187 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/fixture-manifest.json +18 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/generate_fixtures.py +615 -0
- palimpsest_client-0.2.3/tests/fixtures/oci-root/leaf_layer.tar +0 -0
- palimpsest_client-0.2.3/tests/fixtures/seed-argv.nul +0 -0
- palimpsest_client-0.2.3/tests/integration/test_buildkit_named_oci_context.py +301 -0
- palimpsest_client-0.2.3/tests/integration/test_oci_guest_stage1_binary.py +615 -0
- palimpsest_client-0.2.3/tests/kvm/README.md +160 -0
- palimpsest_client-0.2.3/tests/kvm/__init__.py +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/check_filesystem_fixtures.py +18 -0
- palimpsest_client-0.2.3/tests/kvm/assets/console-ofd-probe.c +79 -0
- palimpsest_client-0.2.3/tests/kvm/assets/dev-cover-probe.c +139 -0
- palimpsest_client-0.2.3/tests/kvm/assets/filesystem-fixtures.json +381 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower0/.__palimpsest_overlay_order_probe_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower0/layer.txt +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_oci_root_workload_proof_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_overlay_order_probe_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_workload_proof_v1 +0 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/etc/group +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/etc/passwd +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/layer.txt +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/proof/workdir/.__palimpsest_workdir_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_oci_root_workload_proof_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_overlay_order_probe_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_workload_proof_v1 +0 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/dev +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/etc/group +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/etc/passwd +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/layer.txt +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/proof/workdir/.__palimpsest_workdir_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_oci_root_workload_proof_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_overlay_order_probe_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_workload_proof_v1 +0 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/etc/group +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/etc/passwd +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/layer.txt +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/proc +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/proof/workdir/.__palimpsest_workdir_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_oci_root_workload_proof_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_overlay_order_probe_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_workload_proof_v1 +0 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/etc/group +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/etc/passwd +2 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/layer.txt +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/proof/workdir/.__palimpsest_workdir_v1 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/sys +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/lower0.squashfs.b64 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/lower1.squashfs.b64 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/public-cli-proof.c +64 -0
- palimpsest_client-0.2.3/tests/kvm/assets/root-ext4.raw.gz.b64 +298 -0
- palimpsest_client-0.2.3/tests/kvm/assets/stdio-fd-probe.c +205 -0
- palimpsest_client-0.2.3/tests/kvm/assets/transition-dev.squashfs.b64 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/transition-proc.squashfs.b64 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/transition-sys.squashfs.b64 +1 -0
- palimpsest_client-0.2.3/tests/kvm/assets/workload-proof.x86_64 +0 -0
- palimpsest_client-0.2.3/tests/kvm/oci_monitor_client_helper.py +34 -0
- palimpsest_client-0.2.3/tests/kvm/oci_monitor_launch_helper.py +606 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_console_ofd_live.py +248 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_dev_cover_live.py +234 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_docker_hub_cli_live.py +599 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_docker_hub_services_live.py +859 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_exec_cli_live.py +213 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_exec_live.py +188 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_exec_record_cli_live.py +261 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_guest_stage1_live.py +208 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_ml_cpu_live.py +706 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_network_live.py +619 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_public_cli_live.py +287 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_retained_root_cli_live.py +190 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_root_libvirt_live.py +5350 -0
- palimpsest_client-0.2.3/tests/kvm/test_oci_stdio_cli_live.py +337 -0
- palimpsest_client-0.2.3/tests/kvm/virsh_output.py +46 -0
- palimpsest_client-0.2.3/tests/oci_fs/__init__.py +1 -0
- palimpsest_client-0.2.3/tests/oci_fs/test_layer_filesystem.py +949 -0
- palimpsest_client-0.2.3/tests/test_kolla_assets.py +147 -0
- palimpsest_client-0.2.3/tests/test_kolla_palimpsest_image_ref.py +76 -0
- palimpsest_client-0.2.3/tests/test_kolla_role_contracts.py +162 -0
- palimpsest_client-0.2.3/tests/unit/test_afterglow_tracking.py +108 -0
- palimpsest_client-0.2.3/tests/unit/test_architecture_guard.py +334 -0
- palimpsest_client-0.2.3/tests/unit/test_build.py +459 -0
- palimpsest_client-0.2.3/tests/unit/test_buildkit.py +1771 -0
- palimpsest_client-0.2.3/tests/unit/test_cli_contract.py +2293 -0
- palimpsest_client-0.2.3/tests/unit/test_cli_project.py +400 -0
- palimpsest_client-0.2.3/tests/unit/test_cli_reference.py +237 -0
- palimpsest_client-0.2.3/tests/unit/test_cli_registry.py +535 -0
- palimpsest_client-0.2.3/tests/unit/test_cloud_runtime.py +2019 -0
- palimpsest_client-0.2.3/tests/unit/test_cloud_runtime_arch.py +25 -0
- palimpsest_client-0.2.3/tests/unit/test_cloudinit_guest.py +273 -0
- palimpsest_client-0.2.3/tests/unit/test_completion.py +346 -0
- palimpsest_client-0.2.3/tests/unit/test_development_package_workflow.py +82 -0
- palimpsest_client-0.2.3/tests/unit/test_host_journal.py +242 -0
- palimpsest_client-0.2.3/tests/unit/test_hub_builder.py +58 -0
- palimpsest_client-0.2.3/tests/unit/test_hub_contract.py +440 -0
- palimpsest_client-0.2.3/tests/unit/test_inventory.py +906 -0
- palimpsest_client-0.2.3/tests/unit/test_kvm_contract.py +1053 -0
- palimpsest_client-0.2.3/tests/unit/test_lima.py +1029 -0
- palimpsest_client-0.2.3/tests/unit/test_linux_install.py +141 -0
- palimpsest_client-0.2.3/tests/unit/test_log_stream.py +394 -0
- palimpsest_client-0.2.3/tests/unit/test_main_console_lifecycle.py +112 -0
- palimpsest_client-0.2.3/tests/unit/test_main_console_sink.py +182 -0
- palimpsest_client-0.2.3/tests/unit/test_main_console_sink_callsites.py +118 -0
- palimpsest_client-0.2.3/tests/unit/test_main_control_deadline.py +117 -0
- palimpsest_client-0.2.3/tests/unit/test_main_output_pipes.py +292 -0
- palimpsest_client-0.2.3/tests/unit/test_main_output_pump.py +48 -0
- palimpsest_client-0.2.3/tests/unit/test_main_output_terminate.py +55 -0
- palimpsest_client-0.2.3/tests/unit/test_metrics.py +1054 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_acl.py +323 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_boot_access.py +476 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_boot_access_launch.py +306 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_boot_exports.py +284 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_build_run_acceptance.py +255 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_changeset.py +199 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_console_ofd_live_contract.py +94 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_control_protocol.py +512 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_control_protocol_v2.py +1032 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_convert_security.py +441 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_converter_first_pass.py +1767 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_dev_cover_live_contract.py +27 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_docker_hub_cli_live_contract.py +252 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_docker_hub_services_live_contract.py +517 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_cli_live_contract.py +90 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_client.py +103 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_control.py +160 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_ipc.py +229 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_pipe_ownership.py +313 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_protocol.py +259 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_public_routing.py +107 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_record.py +1145 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_record_integration.py +855 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_record_live_helpers.py +59 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_session.py +580 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_exec_status.py +307 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_fs_fixtures.py +128 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_guest_exec.py +502 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_guest_filesystems.py +243 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_guest_stage1.py +298 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_guest_transition.py +308 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_host.py +550 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_image.py +535 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_initramfs.py +664 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_layout.py +302 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_lifecycle_transport.py +972 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_lower_access.py +239 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_lower_access_launch.py +225 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_lower_exports.py +185 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_metrics.py +307 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_ml_cpu_live_contract.py +407 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor.py +662 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_client.py +408 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_control.py +61 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_coordinator.py +349 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_handoff.py +430 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_ipc.py +960 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_ipc_journal.py +1516 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_launch.py +440 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_qualification_adapter.py +423 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_recovery.py +547 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_monitor_retention.py +462 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_network.py +222 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_network_live_contract.py +114 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_process.py +227 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_process_session.py +261 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_provenance.py +1022 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_public_cli.py +512 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_resource_status.py +271 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_root_access.py +306 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_root_access_lifecycle.py +305 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_root_proof.py +481 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_root_volume.py +374 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_root_volume_inventory.py +338 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_run_adapter.py +697 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_run_cleanup.py +250 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_run_request.py +295 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_runtime_access.py +576 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_runtime_access_launch.py +343 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_runtime_io.py +498 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_runtime_io_integration.py +237 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_shared_root_claim.py +53 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_shared_root_traversal.py +319 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_shared_traversal.py +642 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_shared_traversal_init.py +348 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_source.py +1353 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access.py +393 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access_launch.py +324 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access_shared.py +115 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_kvm_proof.py +2293 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_qualification.py +205 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stage1_transport.py +314 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_stdio_cli_live_contract.py +179 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_store.py +5590 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_store_handoff.py +398 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_supervisor.py +881 -0
- palimpsest_client-0.2.3/tests/unit/test_oci_worker_protocol.py +1258 -0
- palimpsest_client-0.2.3/tests/unit/test_packaging.py +82 -0
- palimpsest_client-0.2.3/tests/unit/test_pci_preflight.py +224 -0
- palimpsest_client-0.2.3/tests/unit/test_platforms.py +982 -0
- palimpsest_client-0.2.3/tests/unit/test_process_session.py +201 -0
- palimpsest_client-0.2.3/tests/unit/test_project.py +955 -0
- palimpsest_client-0.2.3/tests/unit/test_project_adapter.py +1838 -0
- palimpsest_client-0.2.3/tests/unit/test_project_runtime.py +764 -0
- palimpsest_client-0.2.3/tests/unit/test_project_volumes.py +510 -0
- palimpsest_client-0.2.3/tests/unit/test_publish_development_package.py +309 -0
- palimpsest_client-0.2.3/tests/unit/test_refs.py +75 -0
- palimpsest_client-0.2.3/tests/unit/test_registry.py +525 -0
- palimpsest_client-0.2.3/tests/unit/test_registry_intake.py +406 -0
- palimpsest_client-0.2.3/tests/unit/test_runtime_dispatch.py +3972 -0
- palimpsest_client-0.2.3/tests/unit/test_runtime_facade.py +353 -0
- palimpsest_client-0.2.3/tests/unit/test_sandbox_policy.py +787 -0
- palimpsest_client-0.2.3/tests/unit/test_state.py +1323 -0
- palimpsest_client-0.2.3/tests/unit/test_test_lanes.py +689 -0
- palimpsest_client-0.2.3/tests/unit/test_ui.py +825 -0
- palimpsest_client-0.2.3/tests/unit/test_workload_dev_aliases.py +278 -0
- palimpsest_client-0.2.3/tests/unit/test_workload_loopback.py +186 -0
- palimpsest_client-0.2.3/tests/unit/test_workload_network.py +392 -0
- palimpsest_client-0.2.3/tracking/afterglow-palimpsest.json +188 -0
- palimpsest_client-0.2.3/uv.lock +262 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: Afterglow Palimpsest Drift
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "17 3 * * *"
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
repository_dispatch:
|
|
8
|
+
types: [afterglow-palimpsest-contract-changed]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
verify-contract:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
repository: openstack-afterglow/openstack-afterglow
|
|
22
|
+
ref: main
|
|
23
|
+
path: afterglow
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.12"
|
|
28
|
+
|
|
29
|
+
- name: Verify tracked extraction contract
|
|
30
|
+
run: python scripts/check_afterglow_drift.py --upstream-root afterglow
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Development package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches:
|
|
7
|
+
- main
|
|
8
|
+
- dev
|
|
9
|
+
- codex/oci-root-phase1
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: development-package-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
verify:
|
|
20
|
+
name: Verify development package
|
|
21
|
+
if: >-
|
|
22
|
+
github.ref == 'refs/heads/main' ||
|
|
23
|
+
github.ref == 'refs/heads/dev' ||
|
|
24
|
+
github.ref == 'refs/heads/codex/oci-root-phase1'
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: astral-sh/setup-uv@v6
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
- run: uv sync --frozen --extra dev
|
|
32
|
+
- name: Check architecture freshness
|
|
33
|
+
run: python3 scripts/check_architecture.py
|
|
34
|
+
- name: Check generated CLI reference
|
|
35
|
+
run: uv run python scripts/generate_cli_reference.py --check
|
|
36
|
+
- name: Check test-lane manifest
|
|
37
|
+
run: uv run python scripts/test_lanes.py list --check
|
|
38
|
+
- name: Lint development-package contracts
|
|
39
|
+
run: uv run ruff check scripts/publish_development_package.py scripts/test_lanes.py tests/unit/test_development_package_workflow.py tests/unit/test_publish_development_package.py tests/unit/test_test_lanes.py
|
|
40
|
+
- name: Run relevant portable contracts
|
|
41
|
+
run: uv run python scripts/test_lanes.py run core-cli qualification
|
|
42
|
+
- name: Run development-package publication contracts
|
|
43
|
+
run: uv run pytest -q tests/unit/test_publish_development_package.py
|
|
44
|
+
- name: Build and smoke-test package artifacts
|
|
45
|
+
run: uv run python scripts/build_package.py --out-dir "$RUNNER_TEMP/palimpsest-dist"
|
|
46
|
+
- uses: actions/upload-artifact@v4
|
|
47
|
+
with:
|
|
48
|
+
name: development-distributions-${{ github.sha }}
|
|
49
|
+
path: ${{ runner.temp }}/palimpsest-dist/
|
|
50
|
+
if-no-files-found: error
|
|
51
|
+
|
|
52
|
+
publish:
|
|
53
|
+
name: Publish SHA-specific prerelease
|
|
54
|
+
needs: verify
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
permissions:
|
|
57
|
+
contents: write
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v4
|
|
60
|
+
- uses: actions/download-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: development-distributions-${{ github.sha }}
|
|
63
|
+
path: dist/
|
|
64
|
+
- name: Verify transferred checksums
|
|
65
|
+
working-directory: dist
|
|
66
|
+
run: |
|
|
67
|
+
test "$(find . -maxdepth 1 -type f | wc -l)" -eq 3
|
|
68
|
+
test "$(find . -maxdepth 1 -type f -name '*.whl' | wc -l)" -eq 1
|
|
69
|
+
test "$(find . -maxdepth 1 -type f -name '*.tar.gz' | wc -l)" -eq 1
|
|
70
|
+
test -f SHA256SUMS
|
|
71
|
+
sha256sum --check SHA256SUMS
|
|
72
|
+
- name: Publish or verify the SHA-specific prerelease
|
|
73
|
+
env:
|
|
74
|
+
GH_TOKEN: ${{ github.token }}
|
|
75
|
+
run: |
|
|
76
|
+
python3 scripts/publish_development_package.py \
|
|
77
|
+
--repository "${GITHUB_REPOSITORY}" \
|
|
78
|
+
--sha "${GITHUB_SHA}" \
|
|
79
|
+
--dist-dir dist
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Build and Push Palimpsest Hub
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main, dev]
|
|
8
|
+
tags: ["v*"]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
packages: write
|
|
14
|
+
|
|
15
|
+
env:
|
|
16
|
+
REGISTRY: ghcr.io
|
|
17
|
+
IMAGE_OWNER: ${{ github.repository_owner }}
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
name: Hub Unit Tests
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- uses: astral-sh/setup-uv@v6
|
|
26
|
+
with:
|
|
27
|
+
python-version: '3.12'
|
|
28
|
+
- name: Run Hub unit tests
|
|
29
|
+
run: |
|
|
30
|
+
cd hub
|
|
31
|
+
uv run --extra dev pytest tests/
|
|
32
|
+
build-and-push:
|
|
33
|
+
name: Build and push Hub images
|
|
34
|
+
needs: test
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
- uses: docker/setup-buildx-action@v3
|
|
39
|
+
- uses: docker/login-action@v3
|
|
40
|
+
with:
|
|
41
|
+
registry: ${{ env.REGISTRY }}
|
|
42
|
+
username: ${{ github.actor }}
|
|
43
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
44
|
+
- uses: docker/metadata-action@v5
|
|
45
|
+
id: api
|
|
46
|
+
with:
|
|
47
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_OWNER }}/palimpsest-hub-api
|
|
48
|
+
tags: |
|
|
49
|
+
type=raw,value=dev,enable=${{ github.ref == 'refs/heads/dev' }}
|
|
50
|
+
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
|
51
|
+
type=semver,pattern={{version}}
|
|
52
|
+
type=semver,pattern=v{{version}}
|
|
53
|
+
type=sha,prefix=sha-
|
|
54
|
+
- uses: docker/metadata-action@v5
|
|
55
|
+
id: worker
|
|
56
|
+
with:
|
|
57
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_OWNER }}/palimpsest-hub-worker
|
|
58
|
+
tags: |
|
|
59
|
+
type=raw,value=dev,enable=${{ github.ref == 'refs/heads/dev' }}
|
|
60
|
+
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
|
61
|
+
type=semver,pattern={{version}}
|
|
62
|
+
type=semver,pattern=v{{version}}
|
|
63
|
+
type=sha,prefix=sha-
|
|
64
|
+
- uses: docker/build-push-action@v5
|
|
65
|
+
with:
|
|
66
|
+
context: .
|
|
67
|
+
file: docker/hub/Dockerfile
|
|
68
|
+
target: palimpsest-hub-api
|
|
69
|
+
push: ${{ github.event_name != 'pull_request' }}
|
|
70
|
+
tags: ${{ steps.api.outputs.tags }}
|
|
71
|
+
labels: ${{ steps.api.outputs.labels }}
|
|
72
|
+
- uses: docker/build-push-action@v5
|
|
73
|
+
with:
|
|
74
|
+
context: .
|
|
75
|
+
file: docker/hub/Dockerfile
|
|
76
|
+
target: palimpsest-hub-worker
|
|
77
|
+
push: ${{ github.event_name != 'pull_request' }}
|
|
78
|
+
tags: ${{ steps.worker.outputs.tags }}
|
|
79
|
+
labels: ${{ steps.worker.outputs.labels }}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
id-token: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
verify:
|
|
13
|
+
name: Rebuild and verify release artifacts
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
- uses: astral-sh/setup-uv@v6
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- run: uv sync --frozen --extra dev
|
|
24
|
+
- run: uv run ruff check .
|
|
25
|
+
- run: uv run ruff format --check .
|
|
26
|
+
- run: uv run python -m pytest tests/unit tests/test_kolla_assets.py tests/test_kolla_palimpsest_image_ref.py tests/test_kolla_role_contracts.py -v
|
|
27
|
+
- name: Pin the offline x86_64 guest toolchain
|
|
28
|
+
run: docker pull --platform linux/amd64 docker.io/library/gcc@sha256:a689e29bc3adf4663ef9a141d23081252764d1319c63f591a027bd6fd676f4c1
|
|
29
|
+
- name: Reproduce and execute the packaged guest stage-1 ELF
|
|
30
|
+
run: uv run python -m pytest -m guest_stage1_binary tests/integration/test_oci_guest_stage1_binary.py -vv
|
|
31
|
+
- name: Reproduce the native-KVM workload proof ELF
|
|
32
|
+
run: |
|
|
33
|
+
scripts/build_oci_guest_workload_proof.sh "$RUNNER_TEMP/workload-proof-a.x86_64"
|
|
34
|
+
scripts/build_oci_guest_workload_proof.sh "$RUNNER_TEMP/workload-proof-b.x86_64"
|
|
35
|
+
cmp tests/kvm/assets/workload-proof.x86_64 "$RUNNER_TEMP/workload-proof-a.x86_64"
|
|
36
|
+
cmp "$RUNNER_TEMP/workload-proof-a.x86_64" "$RUNNER_TEMP/workload-proof-b.x86_64"
|
|
37
|
+
- name: Verify KVM filesystem and workload fixture bindings
|
|
38
|
+
run: uv run python tests/kvm/assets/check_filesystem_fixtures.py
|
|
39
|
+
- run: docker buildx create --name palimpsest-e2e --driver docker-container --driver-opt network=none --use --bootstrap
|
|
40
|
+
- name: Verify local OCI product build
|
|
41
|
+
env:
|
|
42
|
+
PALIMPSEST_BUILDKIT_E2E: "1"
|
|
43
|
+
PALIMPSEST_BUILDKIT_BUILDER: palimpsest-e2e
|
|
44
|
+
run: uv run python -m pytest tests/integration/test_buildkit_named_oci_context.py -vv
|
|
45
|
+
- name: Remove test builder
|
|
46
|
+
if: always()
|
|
47
|
+
run: docker buildx rm palimpsest-e2e || true
|
|
48
|
+
- run: uv build
|
|
49
|
+
- run: python -m zipfile -t dist/*.whl
|
|
50
|
+
- run: tar -tzf dist/*.tar.gz
|
|
51
|
+
- uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: distributions
|
|
54
|
+
path: dist/
|
|
55
|
+
if-no-files-found: error
|
|
56
|
+
|
|
57
|
+
kvm-proof:
|
|
58
|
+
name: Required KVM clean-host proof
|
|
59
|
+
if: vars.PALIMPSEST_KVM_ENABLED == 'true'
|
|
60
|
+
runs-on: [self-hosted, linux, x64, kvm]
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/checkout@v4
|
|
63
|
+
- uses: astral-sh/setup-uv@v6
|
|
64
|
+
- uses: actions/setup-python@v5
|
|
65
|
+
with:
|
|
66
|
+
python-version: "3.12"
|
|
67
|
+
- run: test -c /dev/kvm
|
|
68
|
+
- run: uv sync --frozen --extra dev
|
|
69
|
+
- name: Create private stage-1 evidence directory
|
|
70
|
+
run: install -d -m 0700 "$RUNNER_TEMP/stage1-kvm-evidence"
|
|
71
|
+
- name: Require retained root, root transition, PID 1 supervision, and rejection matrices
|
|
72
|
+
timeout-minutes: 45
|
|
73
|
+
env:
|
|
74
|
+
PALIMPSEST_REQUIRE_STAGE1_KVM: "1"
|
|
75
|
+
PALIMPSEST_KVM_EVIDENCE_DIR: ${{ runner.temp }}/stage1-kvm-evidence
|
|
76
|
+
run: uv run python -m pytest -m stage1_kvm tests/kvm -vv
|
|
77
|
+
- uses: actions/upload-artifact@v4
|
|
78
|
+
if: always()
|
|
79
|
+
with:
|
|
80
|
+
name: release-stage1-native-kvm-proof
|
|
81
|
+
path: ${{ runner.temp }}/stage1-kvm-evidence
|
|
82
|
+
if-no-files-found: error
|
|
83
|
+
|
|
84
|
+
publish:
|
|
85
|
+
name: Publish signed release
|
|
86
|
+
needs: [verify, kvm-proof]
|
|
87
|
+
if: needs.kvm-proof.result == 'success'
|
|
88
|
+
runs-on: ubuntu-latest
|
|
89
|
+
environment:
|
|
90
|
+
name: pypi
|
|
91
|
+
url: https://pypi.org/p/palimpsest-client
|
|
92
|
+
steps:
|
|
93
|
+
- uses: actions/download-artifact@v4
|
|
94
|
+
with:
|
|
95
|
+
name: distributions
|
|
96
|
+
path: dist/
|
|
97
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
98
|
+
|
|
99
|
+
github-release:
|
|
100
|
+
name: Create GitHub release
|
|
101
|
+
needs: publish
|
|
102
|
+
runs-on: ubuntu-latest
|
|
103
|
+
steps:
|
|
104
|
+
- uses: actions/checkout@v4
|
|
105
|
+
- uses: actions/download-artifact@v4
|
|
106
|
+
with:
|
|
107
|
+
name: distributions
|
|
108
|
+
path: dist/
|
|
109
|
+
- uses: softprops/action-gh-release@v2
|
|
110
|
+
with:
|
|
111
|
+
generate_release_notes: true
|
|
112
|
+
files: dist/*
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main, dev]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main, dev]
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
checks:
|
|
14
|
+
name: Lint, manifests, and package
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- name: Check architecture freshness
|
|
19
|
+
run: python3 scripts/check_architecture.py
|
|
20
|
+
- uses: astral-sh/setup-uv@v6
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
- run: uv sync --frozen --extra dev
|
|
24
|
+
- run: uv run python -c "import palimpsest_local; import palimpsest_local.cli"
|
|
25
|
+
- run: uv run python tests/fixtures/oci-root/generate_fixtures.py --check
|
|
26
|
+
- name: Check generated CLI reference
|
|
27
|
+
run: uv run python scripts/generate_cli_reference.py --check
|
|
28
|
+
- run: uv run ruff check .
|
|
29
|
+
- run: uv run ruff format --check .
|
|
30
|
+
- run: uv run python scripts/test_lanes.py list --check
|
|
31
|
+
- name: Build and smoke-test package artifacts
|
|
32
|
+
run: uv run python scripts/build_package.py --out-dir "$RUNNER_TEMP/palimpsest-dist"
|
|
33
|
+
- name: Smoke-test minimum supported Python
|
|
34
|
+
run: uv run --python 3.11 --no-dev palimpsest --version
|
|
35
|
+
|
|
36
|
+
portable-linux:
|
|
37
|
+
name: Portable Linux (${{ matrix.shard }}/6)
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
strategy:
|
|
40
|
+
fail-fast: false
|
|
41
|
+
matrix:
|
|
42
|
+
shard: [1, 2, 3, 4, 5, 6]
|
|
43
|
+
steps:
|
|
44
|
+
- uses: actions/checkout@v4
|
|
45
|
+
- uses: astral-sh/setup-uv@v6
|
|
46
|
+
- uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.12"
|
|
49
|
+
- run: uv sync --frozen --extra dev
|
|
50
|
+
- run: uv run python scripts/test_lanes.py run portable --shard ${{ matrix.shard }}/6
|
|
51
|
+
|
|
52
|
+
pure:
|
|
53
|
+
name: Pure contracts (Python 3.12)
|
|
54
|
+
if: always()
|
|
55
|
+
needs: [checks, portable-linux]
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
steps:
|
|
58
|
+
- name: Require every portable shard and package check
|
|
59
|
+
env:
|
|
60
|
+
CHECKS_RESULT: ${{ needs.checks.result }}
|
|
61
|
+
PORTABLE_RESULT: ${{ needs.portable-linux.result }}
|
|
62
|
+
run: test "$CHECKS_RESULT" = success && test "$PORTABLE_RESULT" = success
|
|
63
|
+
|
|
64
|
+
oci-fs-proof:
|
|
65
|
+
name: OCI filesystem proof (privileged Linux)
|
|
66
|
+
runs-on: ubuntu-24.04
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
- uses: astral-sh/setup-uv@v6
|
|
70
|
+
- uses: actions/setup-python@v5
|
|
71
|
+
with:
|
|
72
|
+
python-version: "3.12"
|
|
73
|
+
- run: sudo apt-get update
|
|
74
|
+
- run: sudo apt-get install --yes erofs-utils squashfs-tools
|
|
75
|
+
- run: uv sync --frozen --extra dev
|
|
76
|
+
- run: mkdir -m 0700 "$RUNNER_TEMP/oci-fs-evidence"
|
|
77
|
+
- run: mkdir -m 0700 "$RUNNER_TEMP/oci-fs-replay"
|
|
78
|
+
- name: Prove selected SquashFS and retain EROFS comparison failure
|
|
79
|
+
env:
|
|
80
|
+
PALIMPSEST_OCI_FS_EVIDENCE_DIR: ${{ runner.temp }}/oci-fs-evidence
|
|
81
|
+
PALIMPSEST_REQUIRE_OCI_FS: "1"
|
|
82
|
+
run: sudo --preserve-env=PALIMPSEST_OCI_FS_EVIDENCE_DIR,PALIMPSEST_REQUIRE_OCI_FS "$(command -v uv)" run python -m pytest -m oci_fs tests/oci_fs -vv
|
|
83
|
+
- name: Rebuild selected SquashFS in a separate process
|
|
84
|
+
env:
|
|
85
|
+
PALIMPSEST_OCI_FS_EVIDENCE_DIR: ${{ runner.temp }}/oci-fs-replay
|
|
86
|
+
PALIMPSEST_REQUIRE_OCI_FS: "1"
|
|
87
|
+
run: sudo --preserve-env=PALIMPSEST_OCI_FS_EVIDENCE_DIR,PALIMPSEST_REQUIRE_OCI_FS "$(command -v uv)" run python -m pytest -m oci_fs -k layer_filesystem_semantics tests/oci_fs -vv
|
|
88
|
+
- name: Require cross-process deterministic evidence
|
|
89
|
+
run: |
|
|
90
|
+
cmp "$RUNNER_TEMP/oci-fs-evidence/squashfs.json" "$RUNNER_TEMP/oci-fs-replay/squashfs.json"
|
|
91
|
+
cp "$RUNNER_TEMP/oci-fs-replay/squashfs.json" "$RUNNER_TEMP/oci-fs-evidence/squashfs-replay.json"
|
|
92
|
+
- name: Require both retained candidate results
|
|
93
|
+
run: test -s "$RUNNER_TEMP/oci-fs-evidence/squashfs.json" && test -s "$RUNNER_TEMP/oci-fs-evidence/squashfs-replay.json" && test -s "$RUNNER_TEMP/oci-fs-evidence/erofs.json"
|
|
94
|
+
- uses: actions/upload-artifact@v4
|
|
95
|
+
if: always()
|
|
96
|
+
with:
|
|
97
|
+
name: oci-filesystem-proof
|
|
98
|
+
path: ${{ runner.temp }}/oci-fs-evidence
|
|
99
|
+
if-no-files-found: error
|
|
100
|
+
|
|
101
|
+
local-oci-build:
|
|
102
|
+
name: Local OCI image product build
|
|
103
|
+
runs-on: ubuntu-24.04
|
|
104
|
+
steps:
|
|
105
|
+
- uses: actions/checkout@v4
|
|
106
|
+
- uses: astral-sh/setup-uv@v6
|
|
107
|
+
- uses: actions/setup-python@v5
|
|
108
|
+
with:
|
|
109
|
+
python-version: "3.12"
|
|
110
|
+
- run: uv sync --frozen --extra dev
|
|
111
|
+
- name: Create isolated network-none BuildKit builder
|
|
112
|
+
run: docker buildx create --name palimpsest-e2e --driver docker-container --driver-opt network=none --use --bootstrap
|
|
113
|
+
- name: Prove direct interoperability and Palimpsest product build
|
|
114
|
+
env:
|
|
115
|
+
PALIMPSEST_BUILDKIT_E2E: "1"
|
|
116
|
+
PALIMPSEST_BUILDKIT_BUILDER: palimpsest-e2e
|
|
117
|
+
run: uv run python -m pytest tests/integration/test_buildkit_named_oci_context.py -vv
|
|
118
|
+
- name: Remove test builder
|
|
119
|
+
if: always()
|
|
120
|
+
run: docker buildx rm palimpsest-e2e || true
|
|
121
|
+
|
|
122
|
+
guest-stage1-binary:
|
|
123
|
+
name: Guest stage-1 binary (Linux x86_64)
|
|
124
|
+
runs-on: ubuntu-24.04
|
|
125
|
+
steps:
|
|
126
|
+
- uses: actions/checkout@v4
|
|
127
|
+
- uses: astral-sh/setup-uv@v6
|
|
128
|
+
- uses: actions/setup-python@v5
|
|
129
|
+
with:
|
|
130
|
+
python-version: "3.12"
|
|
131
|
+
- run: uv sync --frozen --extra dev
|
|
132
|
+
- name: Pin the offline x86_64 build toolchain
|
|
133
|
+
run: docker pull --platform linux/amd64 docker.io/library/gcc@sha256:a689e29bc3adf4663ef9a141d23081252764d1319c63f591a027bd6fd676f4c1
|
|
134
|
+
- name: Execute and reproduce the packaged stage-1 ELF
|
|
135
|
+
run: uv run python -m pytest -m guest_stage1_binary tests/integration/test_oci_guest_stage1_binary.py -vv
|
|
136
|
+
- name: Reproduce the native-KVM workload proof ELF
|
|
137
|
+
run: |
|
|
138
|
+
scripts/build_oci_guest_workload_proof.sh "$RUNNER_TEMP/workload-proof-a.x86_64"
|
|
139
|
+
scripts/build_oci_guest_workload_proof.sh "$RUNNER_TEMP/workload-proof-b.x86_64"
|
|
140
|
+
cmp tests/kvm/assets/workload-proof.x86_64 "$RUNNER_TEMP/workload-proof-a.x86_64"
|
|
141
|
+
cmp "$RUNNER_TEMP/workload-proof-a.x86_64" "$RUNNER_TEMP/workload-proof-b.x86_64"
|
|
142
|
+
- name: Verify KVM filesystem and workload fixture bindings
|
|
143
|
+
run: uv run python tests/kvm/assets/check_filesystem_fixtures.py
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
portable-macos:
|
|
147
|
+
name: Portable macOS (${{ matrix.shard }}/4)
|
|
148
|
+
runs-on: macos-15
|
|
149
|
+
strategy:
|
|
150
|
+
fail-fast: false
|
|
151
|
+
matrix:
|
|
152
|
+
shard: [1, 2, 3, 4]
|
|
153
|
+
steps:
|
|
154
|
+
- uses: actions/checkout@v4
|
|
155
|
+
- uses: astral-sh/setup-uv@v6
|
|
156
|
+
- uses: actions/setup-python@v5
|
|
157
|
+
with:
|
|
158
|
+
python-version: "3.12"
|
|
159
|
+
- run: uv sync --frozen --extra dev
|
|
160
|
+
- run: uv run python -c "import palimpsest_local; import palimpsest_local.cli"
|
|
161
|
+
- run: uv run python scripts/test_lanes.py run portable --shard ${{ matrix.shard }}/4
|
|
162
|
+
|
|
163
|
+
unit-macos:
|
|
164
|
+
name: Unit tests (macOS 15)
|
|
165
|
+
if: always()
|
|
166
|
+
needs: [portable-macos]
|
|
167
|
+
runs-on: ubuntu-latest
|
|
168
|
+
steps:
|
|
169
|
+
- name: Require every macOS portable shard
|
|
170
|
+
env:
|
|
171
|
+
PORTABLE_RESULT: ${{ needs.portable-macos.result }}
|
|
172
|
+
run: test "$PORTABLE_RESULT" = success
|
|
173
|
+
hub:
|
|
174
|
+
name: Hub tests, lint, and build
|
|
175
|
+
runs-on: ubuntu-latest
|
|
176
|
+
defaults:
|
|
177
|
+
run:
|
|
178
|
+
working-directory: hub
|
|
179
|
+
steps:
|
|
180
|
+
- uses: actions/checkout@v4
|
|
181
|
+
- uses: astral-sh/setup-uv@v6
|
|
182
|
+
- uses: actions/setup-python@v5
|
|
183
|
+
with:
|
|
184
|
+
python-version: "3.12"
|
|
185
|
+
- run: uv sync --frozen --extra dev
|
|
186
|
+
- run: uv run python -c "from palimpsest_hub.main import app; assert app.title == 'Palimpsest Hub'"
|
|
187
|
+
- run: uv run ruff check .
|
|
188
|
+
- run: uv run ruff format --check .
|
|
189
|
+
- run: uv run pytest -v
|
|
190
|
+
- run: uv build
|
|
191
|
+
- run: python -m zipfile -t dist/*.whl
|
|
192
|
+
- run: tar -tzf dist/*.tar.gz
|
|
193
|
+
|
|
194
|
+
kvm:
|
|
195
|
+
name: Native KVM stage-1 proof
|
|
196
|
+
if: vars.PALIMPSEST_KVM_ENABLED == 'true'
|
|
197
|
+
runs-on: [self-hosted, linux, x64, kvm]
|
|
198
|
+
steps:
|
|
199
|
+
- uses: actions/checkout@v4
|
|
200
|
+
- uses: astral-sh/setup-uv@v6
|
|
201
|
+
- uses: actions/setup-python@v5
|
|
202
|
+
with:
|
|
203
|
+
python-version: "3.12"
|
|
204
|
+
- run: test -c /dev/kvm
|
|
205
|
+
- run: uv sync --frozen --extra dev
|
|
206
|
+
- name: Create private stage-1 evidence directory
|
|
207
|
+
run: install -d -m 0700 "$RUNNER_TEMP/stage1-kvm-evidence"
|
|
208
|
+
- name: Prove retained root, root transition, PID 1 supervision, and rejection matrices
|
|
209
|
+
timeout-minutes: 45
|
|
210
|
+
env:
|
|
211
|
+
PALIMPSEST_REQUIRE_STAGE1_KVM: "1"
|
|
212
|
+
PALIMPSEST_KVM_EVIDENCE_DIR: ${{ runner.temp }}/stage1-kvm-evidence
|
|
213
|
+
run: uv run python -m pytest -m stage1_kvm tests/kvm -vv
|
|
214
|
+
- uses: actions/upload-artifact@v4
|
|
215
|
+
if: always()
|
|
216
|
+
with:
|
|
217
|
+
name: stage1-native-kvm-proof
|
|
218
|
+
path: ${{ runner.temp }}/stage1-kvm-evidence
|
|
219
|
+
if-no-files-found: error
|
|
220
|
+
|
|
221
|
+
kvm-required:
|
|
222
|
+
name: Required native KVM proof
|
|
223
|
+
if: always()
|
|
224
|
+
needs: [kvm]
|
|
225
|
+
runs-on: ubuntu-24.04
|
|
226
|
+
steps:
|
|
227
|
+
- name: Refuse skipped or failed KVM qualification
|
|
228
|
+
env:
|
|
229
|
+
PALIMPSEST_KVM_ENABLED: ${{ vars.PALIMPSEST_KVM_ENABLED }}
|
|
230
|
+
PALIMPSEST_KVM_RESULT: ${{ needs.kvm.result }}
|
|
231
|
+
run: |
|
|
232
|
+
test "$PALIMPSEST_KVM_ENABLED" = "true"
|
|
233
|
+
test "$PALIMPSEST_KVM_RESULT" = "success"
|