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.
Files changed (482) hide show
  1. palimpsest_client-0.2.3/.github/workflows/afterglow-drift.yml +30 -0
  2. palimpsest_client-0.2.3/.github/workflows/development-package.yml +79 -0
  3. palimpsest_client-0.2.3/.github/workflows/hub-docker.yml +79 -0
  4. palimpsest_client-0.2.3/.github/workflows/release.yml +112 -0
  5. palimpsest_client-0.2.3/.github/workflows/test.yml +233 -0
  6. palimpsest_client-0.2.3/.gitignore +11 -0
  7. palimpsest_client-0.2.3/.pre-commit-config.yaml +9 -0
  8. palimpsest_client-0.2.3/AGENTS.md +172 -0
  9. palimpsest_client-0.2.3/ARCHITECTURE.md +1061 -0
  10. palimpsest_client-0.2.3/CHANGELOG.md +107 -0
  11. palimpsest_client-0.2.3/IMPLEMENTATION_PLAN.md +2325 -0
  12. palimpsest_client-0.2.3/LICENSE +21 -0
  13. palimpsest_client-0.2.3/PKG-INFO +622 -0
  14. palimpsest_client-0.2.3/README.md +605 -0
  15. palimpsest_client-0.2.3/agent.md +32 -0
  16. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/defaults/main.yml +155 -0
  17. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/files/validate_image_ref.py +63 -0
  18. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/handlers/main.yml +1 -0
  19. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/meta/main.yml +8 -0
  20. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/bootstrap_service.yml +58 -0
  21. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/config.yml +20 -0
  22. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/deploy.yml +20 -0
  23. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/destroy.yml +8 -0
  24. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/image_precheck.yml +36 -0
  25. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/loadbalancer.yml +23 -0
  26. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/main.yml +10 -0
  27. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/precheck.yml +44 -0
  28. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions.yml +6 -0
  29. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions_db.yml +31 -0
  30. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/preconditions_keystone.yml +24 -0
  31. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/pull.yml +16 -0
  32. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/reconfigure.yml +9 -0
  33. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/source_build.yml +97 -0
  34. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/start.yml +31 -0
  35. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/tasks/upgrade.yml +9 -0
  36. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/templates/palimpsest.conf.j2 +26 -0
  37. palimpsest_client-0.2.3/deploy/kolla/ansible/roles/palimpsest/vars/main.yml +1 -0
  38. palimpsest_client-0.2.3/docker/hub/Dockerfile +29 -0
  39. palimpsest_client-0.2.3/docs/buildkit-block-workflow.md +413 -0
  40. palimpsest_client-0.2.3/docs/cli/README.md +27 -0
  41. palimpsest_client-0.2.3/docs/cli/reference.md +1221 -0
  42. palimpsest_client-0.2.3/docs/cli/usage.md +168 -0
  43. palimpsest_client-0.2.3/docs/cli/workflows.md +484 -0
  44. palimpsest_client-0.2.3/docs/compatibility.md +170 -0
  45. palimpsest_client-0.2.3/docs/development-handoff.md +2273 -0
  46. palimpsest_client-0.2.3/docs/diagrams/palimpsest-build.workflow.html +14982 -0
  47. palimpsest_client-0.2.3/docs/diagrams/palimpsest-build.workflow.json +252 -0
  48. palimpsest_client-0.2.3/docs/diagrams/palimpsest-cloud-vm-lifecycle.workflow.html +15007 -0
  49. palimpsest_client-0.2.3/docs/diagrams/palimpsest-cloud-vm-lifecycle.workflow.json +263 -0
  50. palimpsest_client-0.2.3/docs/diagrams/palimpsest-compose.workflow.html +14985 -0
  51. palimpsest_client-0.2.3/docs/diagrams/palimpsest-compose.workflow.json +248 -0
  52. palimpsest_client-0.2.3/docs/diagrams/palimpsest-hub-artifacts.workflow.html +15023 -0
  53. palimpsest_client-0.2.3/docs/diagrams/palimpsest-hub-artifacts.workflow.json +291 -0
  54. palimpsest_client-0.2.3/docs/diagrams/palimpsest-install-config.workflow.html +15000 -0
  55. palimpsest_client-0.2.3/docs/diagrams/palimpsest-install-config.workflow.json +255 -0
  56. palimpsest_client-0.2.3/docs/diagrams/palimpsest-oci-root.workflow.html +15008 -0
  57. palimpsest_client-0.2.3/docs/diagrams/palimpsest-oci-root.workflow.json +277 -0
  58. palimpsest_client-0.2.3/docs/diagrams/palimpsest-registry-docker.workflow.html +14995 -0
  59. palimpsest_client-0.2.3/docs/diagrams/palimpsest-registry-docker.workflow.json +266 -0
  60. palimpsest_client-0.2.3/docs/diagrams/palimpsest-store-ui-completion.workflow.html +14963 -0
  61. palimpsest_client-0.2.3/docs/diagrams/palimpsest-store-ui-completion.workflow.json +230 -0
  62. palimpsest_client-0.2.3/docs/docker-hub-intake-analysis.md +197 -0
  63. palimpsest_client-0.2.3/docs/docker-hub-service-matrix.md +617 -0
  64. palimpsest_client-0.2.3/docs/install.md +544 -0
  65. palimpsest_client-0.2.3/docs/linux-storage-logging.md +169 -0
  66. palimpsest_client-0.2.3/docs/oci-additional-exec.md +310 -0
  67. palimpsest_client-0.2.3/docs/oci-docker-hub-compatibility.md +434 -0
  68. palimpsest_client-0.2.3/docs/oci-exec-durable-record.md +464 -0
  69. palimpsest_client-0.2.3/docs/oci-exec-result-observation.md +109 -0
  70. palimpsest_client-0.2.3/docs/oci-gpu-support.md +178 -0
  71. palimpsest_client-0.2.3/docs/oci-lifecycle-control-v2.md +183 -0
  72. palimpsest_client-0.2.3/docs/oci-linux-process.md +775 -0
  73. palimpsest_client-0.2.3/docs/oci-ml-compatibility.md +551 -0
  74. palimpsest_client-0.2.3/docs/oci-network.md +293 -0
  75. palimpsest_client-0.2.3/docs/oci-pid1-protection.ko.md +122 -0
  76. palimpsest_client-0.2.3/docs/oci-public-runtime-roadmap.md +304 -0
  77. palimpsest_client-0.2.3/docs/oci-resource-status.md +245 -0
  78. palimpsest_client-0.2.3/docs/oci-retained-root-inventory.md +114 -0
  79. palimpsest_client-0.2.3/docs/oci-root-build-run-acceptance.md +828 -0
  80. palimpsest_client-0.2.3/docs/oci-root-filesystem.md +95 -0
  81. palimpsest_client-0.2.3/docs/oci-root-proof.md +109 -0
  82. palimpsest_client-0.2.3/docs/oci-run-command.md +46 -0
  83. palimpsest_client-0.2.3/docs/oci-run-user.md +70 -0
  84. palimpsest_client-0.2.3/docs/projects.md +174 -0
  85. palimpsest_client-0.2.3/docs/quickstart.md +428 -0
  86. palimpsest_client-0.2.3/docs/registries.md +200 -0
  87. palimpsest_client-0.2.3/docs/registry-intake.md +99 -0
  88. palimpsest_client-0.2.3/docs/testing.md +962 -0
  89. palimpsest_client-0.2.3/docs/vm-workflow.md +276 -0
  90. palimpsest_client-0.2.3/examples/hello-layer/rootfs/opt/palimpsest-example/hello.txt +1 -0
  91. palimpsest_client-0.2.3/examples/hello-layer/run.sh +19 -0
  92. palimpsest_client-0.2.3/examples/hello-vm/README.md +165 -0
  93. palimpsest_client-0.2.3/examples/hello-vm/run.sh +143 -0
  94. palimpsest_client-0.2.3/guest/stage1/README.md +324 -0
  95. palimpsest_client-0.2.3/guest/stage1/init.c +6342 -0
  96. palimpsest_client-0.2.3/guest/stage1/main_output_pump.h +220 -0
  97. palimpsest_client-0.2.3/guest/workload-proof/README.md +84 -0
  98. palimpsest_client-0.2.3/guest/workload-proof/proof.c +623 -0
  99. palimpsest_client-0.2.3/hub/pyproject.toml +51 -0
  100. palimpsest_client-0.2.3/hub/src/palimpsest_hub/__init__.py +3 -0
  101. palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/__init__.py +1 -0
  102. palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/builds.py +178 -0
  103. palimpsest_client-0.2.3/hub/src/palimpsest_hub/api/hub.py +1672 -0
  104. palimpsest_client-0.2.3/hub/src/palimpsest_hub/auth.py +157 -0
  105. palimpsest_client-0.2.3/hub/src/palimpsest_hub/bootstrap.py +30 -0
  106. palimpsest_client-0.2.3/hub/src/palimpsest_hub/build_worker.py +92 -0
  107. palimpsest_client-0.2.3/hub/src/palimpsest_hub/cache.py +22 -0
  108. palimpsest_client-0.2.3/hub/src/palimpsest_hub/config.py +59 -0
  109. palimpsest_client-0.2.3/hub/src/palimpsest_hub/database.py +62 -0
  110. palimpsest_client-0.2.3/hub/src/palimpsest_hub/main.py +125 -0
  111. palimpsest_client-0.2.3/hub/src/palimpsest_hub/migrate.py +84 -0
  112. palimpsest_client-0.2.3/hub/src/palimpsest_hub/models.py +131 -0
  113. palimpsest_client-0.2.3/hub/src/palimpsest_hub/openstack.py +28 -0
  114. palimpsest_client-0.2.3/hub/src/palimpsest_hub/rate_limit.py +4 -0
  115. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/__init__.py +1 -0
  116. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/builds.py +456 -0
  117. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/digest.py +182 -0
  118. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/hub_bundle.py +733 -0
  119. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/hub_store.py +506 -0
  120. palimpsest_client-0.2.3/hub/src/palimpsest_hub/services/image_exports.py +1341 -0
  121. palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.css +156 -0
  122. palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.html +27 -0
  123. palimpsest_client-0.2.3/hub/src/palimpsest_hub/static/hub.js +220 -0
  124. palimpsest_client-0.2.3/hub/src/palimpsest_hub/worker.py +93 -0
  125. palimpsest_client-0.2.3/hub/tests/test_auth.py +112 -0
  126. palimpsest_client-0.2.3/hub/tests/test_builds.py +542 -0
  127. palimpsest_client-0.2.3/hub/tests/test_hub_api.py +1488 -0
  128. palimpsest_client-0.2.3/hub/tests/test_image_exports.py +160 -0
  129. palimpsest_client-0.2.3/hub/tests/test_migrate.py +73 -0
  130. palimpsest_client-0.2.3/hub/tests/test_upload_limits.py +268 -0
  131. palimpsest_client-0.2.3/hub/uv.lock +1672 -0
  132. palimpsest_client-0.2.3/install.md +169 -0
  133. palimpsest_client-0.2.3/pyproject.toml +50 -0
  134. palimpsest_client-0.2.3/scripts/build_oci_guest_init.sh +31 -0
  135. palimpsest_client-0.2.3/scripts/build_oci_guest_kvm_filesystem_fixtures.py +150 -0
  136. palimpsest_client-0.2.3/scripts/build_oci_guest_workload_proof.sh +31 -0
  137. palimpsest_client-0.2.3/scripts/build_package.py +165 -0
  138. palimpsest_client-0.2.3/scripts/check_afterglow_drift.py +224 -0
  139. palimpsest_client-0.2.3/scripts/check_architecture.py +502 -0
  140. palimpsest_client-0.2.3/scripts/generate_cli_reference.py +339 -0
  141. palimpsest_client-0.2.3/scripts/publish_development_package.py +347 -0
  142. palimpsest_client-0.2.3/scripts/seal_static_elf.py +73 -0
  143. palimpsest_client-0.2.3/scripts/test_lanes.py +642 -0
  144. palimpsest_client-0.2.3/src/palimpsest_local/__init__.py +42 -0
  145. palimpsest_client-0.2.3/src/palimpsest_local/_oci_stage1_kvm_proof.py +5845 -0
  146. palimpsest_client-0.2.3/src/palimpsest_local/artifact_store.py +1019 -0
  147. palimpsest_client-0.2.3/src/palimpsest_local/assets/oci-stage1-init.x86_64 +0 -0
  148. palimpsest_client-0.2.3/src/palimpsest_local/build.py +599 -0
  149. palimpsest_client-0.2.3/src/palimpsest_local/buildkit.py +2100 -0
  150. palimpsest_client-0.2.3/src/palimpsest_local/cli.py +2431 -0
  151. palimpsest_client-0.2.3/src/palimpsest_local/cloud_runtime.py +2011 -0
  152. palimpsest_client-0.2.3/src/palimpsest_local/cloudinit.py +600 -0
  153. palimpsest_client-0.2.3/src/palimpsest_local/completion.py +263 -0
  154. palimpsest_client-0.2.3/src/palimpsest_local/digest.py +46 -0
  155. palimpsest_client-0.2.3/src/palimpsest_local/errors.py +57 -0
  156. palimpsest_client-0.2.3/src/palimpsest_local/guest.py +174 -0
  157. palimpsest_client-0.2.3/src/palimpsest_local/host_journal.py +204 -0
  158. palimpsest_client-0.2.3/src/palimpsest_local/hub.py +557 -0
  159. palimpsest_client-0.2.3/src/palimpsest_local/hub_builder.py +212 -0
  160. palimpsest_client-0.2.3/src/palimpsest_local/inventory.py +697 -0
  161. palimpsest_client-0.2.3/src/palimpsest_local/kvm.py +717 -0
  162. palimpsest_client-0.2.3/src/palimpsest_local/lima.py +1428 -0
  163. palimpsest_client-0.2.3/src/palimpsest_local/linux_install.py +232 -0
  164. palimpsest_client-0.2.3/src/palimpsest_local/log_stream.py +180 -0
  165. palimpsest_client-0.2.3/src/palimpsest_local/metrics.py +967 -0
  166. palimpsest_client-0.2.3/src/palimpsest_local/oci_acl.py +290 -0
  167. palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_access.py +412 -0
  168. palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_exports.py +426 -0
  169. palimpsest_client-0.2.3/src/palimpsest_local/oci_boot_plan.py +274 -0
  170. palimpsest_client-0.2.3/src/palimpsest_local/oci_changeset.py +462 -0
  171. palimpsest_client-0.2.3/src/palimpsest_local/oci_control_protocol.py +521 -0
  172. palimpsest_client-0.2.3/src/palimpsest_local/oci_control_protocol_v2.py +1298 -0
  173. palimpsest_client-0.2.3/src/palimpsest_local/oci_convert.py +1279 -0
  174. palimpsest_client-0.2.3/src/palimpsest_local/oci_converter.py +1099 -0
  175. palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_control.py +203 -0
  176. palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_record.py +850 -0
  177. palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_session.py +444 -0
  178. palimpsest_client-0.2.3/src/palimpsest_local/oci_exec_status.py +83 -0
  179. palimpsest_client-0.2.3/src/palimpsest_local/oci_guest_filesystems.py +245 -0
  180. palimpsest_client-0.2.3/src/palimpsest_local/oci_guest_stage1.py +613 -0
  181. palimpsest_client-0.2.3/src/palimpsest_local/oci_host.py +283 -0
  182. palimpsest_client-0.2.3/src/palimpsest_local/oci_image.py +494 -0
  183. palimpsest_client-0.2.3/src/palimpsest_local/oci_initramfs.py +820 -0
  184. palimpsest_client-0.2.3/src/palimpsest_local/oci_layout.py +722 -0
  185. palimpsest_client-0.2.3/src/palimpsest_local/oci_lifecycle_transport.py +603 -0
  186. palimpsest_client-0.2.3/src/palimpsest_local/oci_lower_access.py +401 -0
  187. palimpsest_client-0.2.3/src/palimpsest_local/oci_lower_exports.py +382 -0
  188. palimpsest_client-0.2.3/src/palimpsest_local/oci_materializer.py +676 -0
  189. palimpsest_client-0.2.3/src/palimpsest_local/oci_materializer_worker.py +249 -0
  190. palimpsest_client-0.2.3/src/palimpsest_local/oci_metrics.py +361 -0
  191. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor.py +802 -0
  192. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_client.py +342 -0
  193. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_control.py +73 -0
  194. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_coordinator.py +311 -0
  195. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_handoff.py +454 -0
  196. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_ipc.py +2892 -0
  197. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_launch.py +723 -0
  198. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_recovery.py +540 -0
  199. palimpsest_client-0.2.3/src/palimpsest_local/oci_monitor_retention.py +336 -0
  200. palimpsest_client-0.2.3/src/palimpsest_local/oci_network.py +492 -0
  201. palimpsest_client-0.2.3/src/palimpsest_local/oci_network_status.py +72 -0
  202. palimpsest_client-0.2.3/src/palimpsest_local/oci_packer.py +1110 -0
  203. palimpsest_client-0.2.3/src/palimpsest_local/oci_process.py +386 -0
  204. palimpsest_client-0.2.3/src/palimpsest_local/oci_process_session.py +141 -0
  205. palimpsest_client-0.2.3/src/palimpsest_local/oci_provenance.py +836 -0
  206. palimpsest_client-0.2.3/src/palimpsest_local/oci_resource_status.py +213 -0
  207. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_access.py +731 -0
  208. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_kvm.py +1326 -0
  209. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_prepare.py +742 -0
  210. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_proof.py +319 -0
  211. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_runtime.py +2530 -0
  212. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_volume.py +1055 -0
  213. palimpsest_client-0.2.3/src/palimpsest_local/oci_root_volume_inventory.py +76 -0
  214. palimpsest_client-0.2.3/src/palimpsest_local/oci_run_adapter.py +271 -0
  215. palimpsest_client-0.2.3/src/palimpsest_local/oci_run_cleanup.py +249 -0
  216. palimpsest_client-0.2.3/src/palimpsest_local/oci_run_request.py +214 -0
  217. palimpsest_client-0.2.3/src/palimpsest_local/oci_runtime_access.py +737 -0
  218. palimpsest_client-0.2.3/src/palimpsest_local/oci_runtime_io.py +398 -0
  219. palimpsest_client-0.2.3/src/palimpsest_local/oci_shared_traversal.py +1116 -0
  220. palimpsest_client-0.2.3/src/palimpsest_local/oci_source.py +1426 -0
  221. palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1.py +387 -0
  222. palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1_access.py +605 -0
  223. palimpsest_client-0.2.3/src/palimpsest_local/oci_stage1_transport.py +348 -0
  224. palimpsest_client-0.2.3/src/palimpsest_local/oci_store.py +2618 -0
  225. palimpsest_client-0.2.3/src/palimpsest_local/oci_supervisor.py +1151 -0
  226. palimpsest_client-0.2.3/src/palimpsest_local/oci_tar_emitter.py +147 -0
  227. palimpsest_client-0.2.3/src/palimpsest_local/oci_worker_limits.py +5 -0
  228. palimpsest_client-0.2.3/src/palimpsest_local/oci_worker_protocol.py +436 -0
  229. palimpsest_client-0.2.3/src/palimpsest_local/pci_preflight.py +281 -0
  230. palimpsest_client-0.2.3/src/palimpsest_local/platforms.py +937 -0
  231. palimpsest_client-0.2.3/src/palimpsest_local/process_session.py +458 -0
  232. palimpsest_client-0.2.3/src/palimpsest_local/project.py +1821 -0
  233. palimpsest_client-0.2.3/src/palimpsest_local/project_adapter.py +1019 -0
  234. palimpsest_client-0.2.3/src/palimpsest_local/project_runtime.py +1310 -0
  235. palimpsest_client-0.2.3/src/palimpsest_local/project_volumes.py +1012 -0
  236. palimpsest_client-0.2.3/src/palimpsest_local/refs.py +180 -0
  237. palimpsest_client-0.2.3/src/palimpsest_local/registry.py +971 -0
  238. palimpsest_client-0.2.3/src/palimpsest_local/registry_intake.py +307 -0
  239. palimpsest_client-0.2.3/src/palimpsest_local/runtime.py +45 -0
  240. palimpsest_client-0.2.3/src/palimpsest_local/runtime_dispatch.py +1596 -0
  241. palimpsest_client-0.2.3/src/palimpsest_local/runtime_types.py +1723 -0
  242. palimpsest_client-0.2.3/src/palimpsest_local/sandbox_policy.py +865 -0
  243. palimpsest_client-0.2.3/src/palimpsest_local/state.py +3244 -0
  244. palimpsest_client-0.2.3/src/palimpsest_local/ui.py +448 -0
  245. palimpsest_client-0.2.3/src/palimpsest_local/webui/app.css +434 -0
  246. palimpsest_client-0.2.3/src/palimpsest_local/webui/app.js +654 -0
  247. palimpsest_client-0.2.3/src/palimpsest_local/webui/index.html +325 -0
  248. palimpsest_client-0.2.3/tests/c/main_console_lifecycle_harness.c +52 -0
  249. palimpsest_client-0.2.3/tests/c/main_console_sink_callsites.c +185 -0
  250. palimpsest_client-0.2.3/tests/c/main_console_sink_harness.c +231 -0
  251. palimpsest_client-0.2.3/tests/c/main_control_deadline_harness.c +141 -0
  252. palimpsest_client-0.2.3/tests/c/main_output_pump_harness.c +592 -0
  253. palimpsest_client-0.2.3/tests/c/main_output_terminate_harness.c +194 -0
  254. palimpsest_client-0.2.3/tests/conftest.py +16 -0
  255. palimpsest_client-0.2.3/tests/e2e/prepare_local_oci_build.py +101 -0
  256. palimpsest_client-0.2.3/tests/e2e/test_local_oci_build_run.py +272 -0
  257. palimpsest_client-0.2.3/tests/fixtures/domain-aarch64.xml +1 -0
  258. palimpsest_client-0.2.3/tests/fixtures/domain.xml +1 -0
  259. palimpsest_client-0.2.3/tests/fixtures/layer-activation.sh +18 -0
  260. palimpsest_client-0.2.3/tests/fixtures/nocloud-meta-data.yaml +2 -0
  261. palimpsest_client-0.2.3/tests/fixtures/nocloud-user-data.yaml +107 -0
  262. palimpsest_client-0.2.3/tests/fixtures/oci-root/__init__.py +1 -0
  263. palimpsest_client-0.2.3/tests/fixtures/oci-root/base_layer.tar +0 -0
  264. palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/erofs-linuxkit-aarch64.json +1 -0
  265. palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/squashfs-linuxkit-aarch64-replay.json +1 -0
  266. palimpsest_client-0.2.3/tests/fixtures/oci-root/evidence/squashfs-linuxkit-aarch64.json +1 -0
  267. palimpsest_client-0.2.3/tests/fixtures/oci-root/expected_receipt.json +187 -0
  268. palimpsest_client-0.2.3/tests/fixtures/oci-root/fixture-manifest.json +18 -0
  269. palimpsest_client-0.2.3/tests/fixtures/oci-root/generate_fixtures.py +615 -0
  270. palimpsest_client-0.2.3/tests/fixtures/oci-root/leaf_layer.tar +0 -0
  271. palimpsest_client-0.2.3/tests/fixtures/seed-argv.nul +0 -0
  272. palimpsest_client-0.2.3/tests/integration/test_buildkit_named_oci_context.py +301 -0
  273. palimpsest_client-0.2.3/tests/integration/test_oci_guest_stage1_binary.py +615 -0
  274. palimpsest_client-0.2.3/tests/kvm/README.md +160 -0
  275. palimpsest_client-0.2.3/tests/kvm/__init__.py +1 -0
  276. palimpsest_client-0.2.3/tests/kvm/assets/check_filesystem_fixtures.py +18 -0
  277. palimpsest_client-0.2.3/tests/kvm/assets/console-ofd-probe.c +79 -0
  278. palimpsest_client-0.2.3/tests/kvm/assets/dev-cover-probe.c +139 -0
  279. palimpsest_client-0.2.3/tests/kvm/assets/filesystem-fixtures.json +381 -0
  280. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower0/.__palimpsest_overlay_order_probe_v1 +1 -0
  281. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower0/layer.txt +1 -0
  282. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_oci_root_workload_proof_v1 +1 -0
  283. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_overlay_order_probe_v1 +1 -0
  284. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/.__palimpsest_workload_proof_v1 +0 -0
  285. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/etc/group +2 -0
  286. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/etc/passwd +2 -0
  287. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/layer.txt +1 -0
  288. palimpsest_client-0.2.3/tests/kvm/assets/inputs/lower1/proof/workdir/.__palimpsest_workdir_v1 +1 -0
  289. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_oci_root_workload_proof_v1 +1 -0
  290. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_overlay_order_probe_v1 +1 -0
  291. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/.__palimpsest_workload_proof_v1 +0 -0
  292. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/dev +1 -0
  293. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/etc/group +2 -0
  294. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/etc/passwd +2 -0
  295. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/layer.txt +1 -0
  296. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-dev/proof/workdir/.__palimpsest_workdir_v1 +1 -0
  297. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_oci_root_workload_proof_v1 +1 -0
  298. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_overlay_order_probe_v1 +1 -0
  299. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/.__palimpsest_workload_proof_v1 +0 -0
  300. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/etc/group +2 -0
  301. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/etc/passwd +2 -0
  302. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/layer.txt +1 -0
  303. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/proc +1 -0
  304. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-proc/proof/workdir/.__palimpsest_workdir_v1 +1 -0
  305. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_oci_root_workload_proof_v1 +1 -0
  306. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_overlay_order_probe_v1 +1 -0
  307. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/.__palimpsest_workload_proof_v1 +0 -0
  308. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/etc/group +2 -0
  309. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/etc/passwd +2 -0
  310. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/layer.txt +1 -0
  311. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/proof/workdir/.__palimpsest_workdir_v1 +1 -0
  312. palimpsest_client-0.2.3/tests/kvm/assets/inputs/transition-sys/sys +1 -0
  313. palimpsest_client-0.2.3/tests/kvm/assets/lower0.squashfs.b64 +1 -0
  314. palimpsest_client-0.2.3/tests/kvm/assets/lower1.squashfs.b64 +1 -0
  315. palimpsest_client-0.2.3/tests/kvm/assets/public-cli-proof.c +64 -0
  316. palimpsest_client-0.2.3/tests/kvm/assets/root-ext4.raw.gz.b64 +298 -0
  317. palimpsest_client-0.2.3/tests/kvm/assets/stdio-fd-probe.c +205 -0
  318. palimpsest_client-0.2.3/tests/kvm/assets/transition-dev.squashfs.b64 +1 -0
  319. palimpsest_client-0.2.3/tests/kvm/assets/transition-proc.squashfs.b64 +1 -0
  320. palimpsest_client-0.2.3/tests/kvm/assets/transition-sys.squashfs.b64 +1 -0
  321. palimpsest_client-0.2.3/tests/kvm/assets/workload-proof.x86_64 +0 -0
  322. palimpsest_client-0.2.3/tests/kvm/oci_monitor_client_helper.py +34 -0
  323. palimpsest_client-0.2.3/tests/kvm/oci_monitor_launch_helper.py +606 -0
  324. palimpsest_client-0.2.3/tests/kvm/test_oci_console_ofd_live.py +248 -0
  325. palimpsest_client-0.2.3/tests/kvm/test_oci_dev_cover_live.py +234 -0
  326. palimpsest_client-0.2.3/tests/kvm/test_oci_docker_hub_cli_live.py +599 -0
  327. palimpsest_client-0.2.3/tests/kvm/test_oci_docker_hub_services_live.py +859 -0
  328. palimpsest_client-0.2.3/tests/kvm/test_oci_exec_cli_live.py +213 -0
  329. palimpsest_client-0.2.3/tests/kvm/test_oci_exec_live.py +188 -0
  330. palimpsest_client-0.2.3/tests/kvm/test_oci_exec_record_cli_live.py +261 -0
  331. palimpsest_client-0.2.3/tests/kvm/test_oci_guest_stage1_live.py +208 -0
  332. palimpsest_client-0.2.3/tests/kvm/test_oci_ml_cpu_live.py +706 -0
  333. palimpsest_client-0.2.3/tests/kvm/test_oci_network_live.py +619 -0
  334. palimpsest_client-0.2.3/tests/kvm/test_oci_public_cli_live.py +287 -0
  335. palimpsest_client-0.2.3/tests/kvm/test_oci_retained_root_cli_live.py +190 -0
  336. palimpsest_client-0.2.3/tests/kvm/test_oci_root_libvirt_live.py +5350 -0
  337. palimpsest_client-0.2.3/tests/kvm/test_oci_stdio_cli_live.py +337 -0
  338. palimpsest_client-0.2.3/tests/kvm/virsh_output.py +46 -0
  339. palimpsest_client-0.2.3/tests/oci_fs/__init__.py +1 -0
  340. palimpsest_client-0.2.3/tests/oci_fs/test_layer_filesystem.py +949 -0
  341. palimpsest_client-0.2.3/tests/test_kolla_assets.py +147 -0
  342. palimpsest_client-0.2.3/tests/test_kolla_palimpsest_image_ref.py +76 -0
  343. palimpsest_client-0.2.3/tests/test_kolla_role_contracts.py +162 -0
  344. palimpsest_client-0.2.3/tests/unit/test_afterglow_tracking.py +108 -0
  345. palimpsest_client-0.2.3/tests/unit/test_architecture_guard.py +334 -0
  346. palimpsest_client-0.2.3/tests/unit/test_build.py +459 -0
  347. palimpsest_client-0.2.3/tests/unit/test_buildkit.py +1771 -0
  348. palimpsest_client-0.2.3/tests/unit/test_cli_contract.py +2293 -0
  349. palimpsest_client-0.2.3/tests/unit/test_cli_project.py +400 -0
  350. palimpsest_client-0.2.3/tests/unit/test_cli_reference.py +237 -0
  351. palimpsest_client-0.2.3/tests/unit/test_cli_registry.py +535 -0
  352. palimpsest_client-0.2.3/tests/unit/test_cloud_runtime.py +2019 -0
  353. palimpsest_client-0.2.3/tests/unit/test_cloud_runtime_arch.py +25 -0
  354. palimpsest_client-0.2.3/tests/unit/test_cloudinit_guest.py +273 -0
  355. palimpsest_client-0.2.3/tests/unit/test_completion.py +346 -0
  356. palimpsest_client-0.2.3/tests/unit/test_development_package_workflow.py +82 -0
  357. palimpsest_client-0.2.3/tests/unit/test_host_journal.py +242 -0
  358. palimpsest_client-0.2.3/tests/unit/test_hub_builder.py +58 -0
  359. palimpsest_client-0.2.3/tests/unit/test_hub_contract.py +440 -0
  360. palimpsest_client-0.2.3/tests/unit/test_inventory.py +906 -0
  361. palimpsest_client-0.2.3/tests/unit/test_kvm_contract.py +1053 -0
  362. palimpsest_client-0.2.3/tests/unit/test_lima.py +1029 -0
  363. palimpsest_client-0.2.3/tests/unit/test_linux_install.py +141 -0
  364. palimpsest_client-0.2.3/tests/unit/test_log_stream.py +394 -0
  365. palimpsest_client-0.2.3/tests/unit/test_main_console_lifecycle.py +112 -0
  366. palimpsest_client-0.2.3/tests/unit/test_main_console_sink.py +182 -0
  367. palimpsest_client-0.2.3/tests/unit/test_main_console_sink_callsites.py +118 -0
  368. palimpsest_client-0.2.3/tests/unit/test_main_control_deadline.py +117 -0
  369. palimpsest_client-0.2.3/tests/unit/test_main_output_pipes.py +292 -0
  370. palimpsest_client-0.2.3/tests/unit/test_main_output_pump.py +48 -0
  371. palimpsest_client-0.2.3/tests/unit/test_main_output_terminate.py +55 -0
  372. palimpsest_client-0.2.3/tests/unit/test_metrics.py +1054 -0
  373. palimpsest_client-0.2.3/tests/unit/test_oci_acl.py +323 -0
  374. palimpsest_client-0.2.3/tests/unit/test_oci_boot_access.py +476 -0
  375. palimpsest_client-0.2.3/tests/unit/test_oci_boot_access_launch.py +306 -0
  376. palimpsest_client-0.2.3/tests/unit/test_oci_boot_exports.py +284 -0
  377. palimpsest_client-0.2.3/tests/unit/test_oci_build_run_acceptance.py +255 -0
  378. palimpsest_client-0.2.3/tests/unit/test_oci_changeset.py +199 -0
  379. palimpsest_client-0.2.3/tests/unit/test_oci_console_ofd_live_contract.py +94 -0
  380. palimpsest_client-0.2.3/tests/unit/test_oci_control_protocol.py +512 -0
  381. palimpsest_client-0.2.3/tests/unit/test_oci_control_protocol_v2.py +1032 -0
  382. palimpsest_client-0.2.3/tests/unit/test_oci_convert_security.py +441 -0
  383. palimpsest_client-0.2.3/tests/unit/test_oci_converter_first_pass.py +1767 -0
  384. palimpsest_client-0.2.3/tests/unit/test_oci_dev_cover_live_contract.py +27 -0
  385. palimpsest_client-0.2.3/tests/unit/test_oci_docker_hub_cli_live_contract.py +252 -0
  386. palimpsest_client-0.2.3/tests/unit/test_oci_docker_hub_services_live_contract.py +517 -0
  387. palimpsest_client-0.2.3/tests/unit/test_oci_exec_cli_live_contract.py +90 -0
  388. palimpsest_client-0.2.3/tests/unit/test_oci_exec_client.py +103 -0
  389. palimpsest_client-0.2.3/tests/unit/test_oci_exec_control.py +160 -0
  390. palimpsest_client-0.2.3/tests/unit/test_oci_exec_ipc.py +229 -0
  391. palimpsest_client-0.2.3/tests/unit/test_oci_exec_pipe_ownership.py +313 -0
  392. palimpsest_client-0.2.3/tests/unit/test_oci_exec_protocol.py +259 -0
  393. palimpsest_client-0.2.3/tests/unit/test_oci_exec_public_routing.py +107 -0
  394. palimpsest_client-0.2.3/tests/unit/test_oci_exec_record.py +1145 -0
  395. palimpsest_client-0.2.3/tests/unit/test_oci_exec_record_integration.py +855 -0
  396. palimpsest_client-0.2.3/tests/unit/test_oci_exec_record_live_helpers.py +59 -0
  397. palimpsest_client-0.2.3/tests/unit/test_oci_exec_session.py +580 -0
  398. palimpsest_client-0.2.3/tests/unit/test_oci_exec_status.py +307 -0
  399. palimpsest_client-0.2.3/tests/unit/test_oci_fs_fixtures.py +128 -0
  400. palimpsest_client-0.2.3/tests/unit/test_oci_guest_exec.py +502 -0
  401. palimpsest_client-0.2.3/tests/unit/test_oci_guest_filesystems.py +243 -0
  402. palimpsest_client-0.2.3/tests/unit/test_oci_guest_stage1.py +298 -0
  403. palimpsest_client-0.2.3/tests/unit/test_oci_guest_transition.py +308 -0
  404. palimpsest_client-0.2.3/tests/unit/test_oci_host.py +550 -0
  405. palimpsest_client-0.2.3/tests/unit/test_oci_image.py +535 -0
  406. palimpsest_client-0.2.3/tests/unit/test_oci_initramfs.py +664 -0
  407. palimpsest_client-0.2.3/tests/unit/test_oci_layout.py +302 -0
  408. palimpsest_client-0.2.3/tests/unit/test_oci_lifecycle_transport.py +972 -0
  409. palimpsest_client-0.2.3/tests/unit/test_oci_lower_access.py +239 -0
  410. palimpsest_client-0.2.3/tests/unit/test_oci_lower_access_launch.py +225 -0
  411. palimpsest_client-0.2.3/tests/unit/test_oci_lower_exports.py +185 -0
  412. palimpsest_client-0.2.3/tests/unit/test_oci_metrics.py +307 -0
  413. palimpsest_client-0.2.3/tests/unit/test_oci_ml_cpu_live_contract.py +407 -0
  414. palimpsest_client-0.2.3/tests/unit/test_oci_monitor.py +662 -0
  415. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_client.py +408 -0
  416. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_control.py +61 -0
  417. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_coordinator.py +349 -0
  418. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_handoff.py +430 -0
  419. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_ipc.py +960 -0
  420. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_ipc_journal.py +1516 -0
  421. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_launch.py +440 -0
  422. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_qualification_adapter.py +423 -0
  423. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_recovery.py +547 -0
  424. palimpsest_client-0.2.3/tests/unit/test_oci_monitor_retention.py +462 -0
  425. palimpsest_client-0.2.3/tests/unit/test_oci_network.py +222 -0
  426. palimpsest_client-0.2.3/tests/unit/test_oci_network_live_contract.py +114 -0
  427. palimpsest_client-0.2.3/tests/unit/test_oci_process.py +227 -0
  428. palimpsest_client-0.2.3/tests/unit/test_oci_process_session.py +261 -0
  429. palimpsest_client-0.2.3/tests/unit/test_oci_provenance.py +1022 -0
  430. palimpsest_client-0.2.3/tests/unit/test_oci_public_cli.py +512 -0
  431. palimpsest_client-0.2.3/tests/unit/test_oci_resource_status.py +271 -0
  432. palimpsest_client-0.2.3/tests/unit/test_oci_root_access.py +306 -0
  433. palimpsest_client-0.2.3/tests/unit/test_oci_root_access_lifecycle.py +305 -0
  434. palimpsest_client-0.2.3/tests/unit/test_oci_root_proof.py +481 -0
  435. palimpsest_client-0.2.3/tests/unit/test_oci_root_volume.py +374 -0
  436. palimpsest_client-0.2.3/tests/unit/test_oci_root_volume_inventory.py +338 -0
  437. palimpsest_client-0.2.3/tests/unit/test_oci_run_adapter.py +697 -0
  438. palimpsest_client-0.2.3/tests/unit/test_oci_run_cleanup.py +250 -0
  439. palimpsest_client-0.2.3/tests/unit/test_oci_run_request.py +295 -0
  440. palimpsest_client-0.2.3/tests/unit/test_oci_runtime_access.py +576 -0
  441. palimpsest_client-0.2.3/tests/unit/test_oci_runtime_access_launch.py +343 -0
  442. palimpsest_client-0.2.3/tests/unit/test_oci_runtime_io.py +498 -0
  443. palimpsest_client-0.2.3/tests/unit/test_oci_runtime_io_integration.py +237 -0
  444. palimpsest_client-0.2.3/tests/unit/test_oci_shared_root_claim.py +53 -0
  445. palimpsest_client-0.2.3/tests/unit/test_oci_shared_root_traversal.py +319 -0
  446. palimpsest_client-0.2.3/tests/unit/test_oci_shared_traversal.py +642 -0
  447. palimpsest_client-0.2.3/tests/unit/test_oci_shared_traversal_init.py +348 -0
  448. palimpsest_client-0.2.3/tests/unit/test_oci_source.py +1353 -0
  449. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access.py +393 -0
  450. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access_launch.py +324 -0
  451. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_access_shared.py +115 -0
  452. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_kvm_proof.py +2293 -0
  453. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_qualification.py +205 -0
  454. palimpsest_client-0.2.3/tests/unit/test_oci_stage1_transport.py +314 -0
  455. palimpsest_client-0.2.3/tests/unit/test_oci_stdio_cli_live_contract.py +179 -0
  456. palimpsest_client-0.2.3/tests/unit/test_oci_store.py +5590 -0
  457. palimpsest_client-0.2.3/tests/unit/test_oci_store_handoff.py +398 -0
  458. palimpsest_client-0.2.3/tests/unit/test_oci_supervisor.py +881 -0
  459. palimpsest_client-0.2.3/tests/unit/test_oci_worker_protocol.py +1258 -0
  460. palimpsest_client-0.2.3/tests/unit/test_packaging.py +82 -0
  461. palimpsest_client-0.2.3/tests/unit/test_pci_preflight.py +224 -0
  462. palimpsest_client-0.2.3/tests/unit/test_platforms.py +982 -0
  463. palimpsest_client-0.2.3/tests/unit/test_process_session.py +201 -0
  464. palimpsest_client-0.2.3/tests/unit/test_project.py +955 -0
  465. palimpsest_client-0.2.3/tests/unit/test_project_adapter.py +1838 -0
  466. palimpsest_client-0.2.3/tests/unit/test_project_runtime.py +764 -0
  467. palimpsest_client-0.2.3/tests/unit/test_project_volumes.py +510 -0
  468. palimpsest_client-0.2.3/tests/unit/test_publish_development_package.py +309 -0
  469. palimpsest_client-0.2.3/tests/unit/test_refs.py +75 -0
  470. palimpsest_client-0.2.3/tests/unit/test_registry.py +525 -0
  471. palimpsest_client-0.2.3/tests/unit/test_registry_intake.py +406 -0
  472. palimpsest_client-0.2.3/tests/unit/test_runtime_dispatch.py +3972 -0
  473. palimpsest_client-0.2.3/tests/unit/test_runtime_facade.py +353 -0
  474. palimpsest_client-0.2.3/tests/unit/test_sandbox_policy.py +787 -0
  475. palimpsest_client-0.2.3/tests/unit/test_state.py +1323 -0
  476. palimpsest_client-0.2.3/tests/unit/test_test_lanes.py +689 -0
  477. palimpsest_client-0.2.3/tests/unit/test_ui.py +825 -0
  478. palimpsest_client-0.2.3/tests/unit/test_workload_dev_aliases.py +278 -0
  479. palimpsest_client-0.2.3/tests/unit/test_workload_loopback.py +186 -0
  480. palimpsest_client-0.2.3/tests/unit/test_workload_network.py +392 -0
  481. palimpsest_client-0.2.3/tracking/afterglow-palimpsest.json +188 -0
  482. 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"
@@ -0,0 +1,11 @@
1
+ .DS_Store
2
+ .venv/
3
+ __pycache__/
4
+ *.pyc
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .omc/
8
+ dist/
9
+ build/
10
+ *.egg-info/
11
+ .gstack/
@@ -0,0 +1,9 @@
1
+ repos:
2
+ - repo: local
3
+ hooks:
4
+ - id: architecture
5
+ name: architecture freshness check
6
+ entry: python3 scripts/check_architecture.py --staged
7
+ language: system
8
+ always_run: true
9
+ pass_filenames: false