rigyard 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. rigyard-1.0.0/.github/workflows/ci.yml +87 -0
  2. rigyard-1.0.0/.github/workflows/publish.yml +107 -0
  3. rigyard-1.0.0/.gitignore +12 -0
  4. rigyard-1.0.0/CHANGELOG.md +75 -0
  5. rigyard-1.0.0/CONTRIBUTING.md +43 -0
  6. rigyard-1.0.0/LICENSE +22 -0
  7. rigyard-1.0.0/PKG-INFO +188 -0
  8. rigyard-1.0.0/README.md +156 -0
  9. rigyard-1.0.0/docs/architecture.md +3 -0
  10. rigyard-1.0.0/docs/builds.md +3 -0
  11. rigyard-1.0.0/docs/cli-menu.md +3 -0
  12. rigyard-1.0.0/docs/configuration/index.md +104 -0
  13. rigyard-1.0.0/docs/configuration/manifest.md +134 -0
  14. rigyard-1.0.0/docs/configuration/runtime-values.md +210 -0
  15. rigyard-1.0.0/docs/configuration/templates.md +161 -0
  16. rigyard-1.0.0/docs/containers.md +3 -0
  17. rigyard-1.0.0/docs/development/architecture.md +91 -0
  18. rigyard-1.0.0/docs/development/releasing.md +83 -0
  19. rigyard-1.0.0/docs/features/builds.md +86 -0
  20. rigyard-1.0.0/docs/features/containers.md +181 -0
  21. rigyard-1.0.0/docs/features/images.md +146 -0
  22. rigyard-1.0.0/docs/features/scenarios.md +279 -0
  23. rigyard-1.0.0/docs/features/tasks.md +94 -0
  24. rigyard-1.0.0/docs/features/tests.md +88 -0
  25. rigyard-1.0.0/docs/getting-started.md +80 -0
  26. rigyard-1.0.0/docs/index.md +34 -0
  27. rigyard-1.0.0/docs/installation.md +75 -0
  28. rigyard-1.0.0/docs/reference/cli.md +119 -0
  29. rigyard-1.0.0/docs/reference/configuration-schema.md +197 -0
  30. rigyard-1.0.0/docs/reference/exit-codes.md +11 -0
  31. rigyard-1.0.0/docs/scenarios.md +3 -0
  32. rigyard-1.0.0/examples/README.md +17 -0
  33. rigyard-1.0.0/examples/minimal/README.md +13 -0
  34. rigyard-1.0.0/examples/minimal/config/containers.yaml +10 -0
  35. rigyard-1.0.0/examples/minimal/config/tasks.yaml +12 -0
  36. rigyard-1.0.0/examples/minimal/rigyard.yaml +9 -0
  37. rigyard-1.0.0/examples/minimal/scripts/hello.sh +4 -0
  38. rigyard-1.0.0/examples/robot-development/README.md +38 -0
  39. rigyard-1.0.0/examples/robot-development/branding/logo.txt +7 -0
  40. rigyard-1.0.0/examples/robot-development/config/builds.yaml +22 -0
  41. rigyard-1.0.0/examples/robot-development/config/containers.yaml +82 -0
  42. rigyard-1.0.0/examples/robot-development/config/images.yaml +34 -0
  43. rigyard-1.0.0/examples/robot-development/config/scenarios.yaml +76 -0
  44. rigyard-1.0.0/examples/robot-development/config/tasks.yaml +30 -0
  45. rigyard-1.0.0/examples/robot-development/config/tests.yaml +22 -0
  46. rigyard-1.0.0/examples/robot-development/deploy/compose.development.yaml +7 -0
  47. rigyard-1.0.0/examples/robot-development/docker/layers/10-system.Dockerfile +3 -0
  48. rigyard-1.0.0/examples/robot-development/docker/layers/20-application.Dockerfile +3 -0
  49. rigyard-1.0.0/examples/robot-development/rigyard.yaml +30 -0
  50. rigyard-1.0.0/examples/robot-development/scripts/build-native.sh +5 -0
  51. rigyard-1.0.0/examples/robot-development/scripts/cross/prepare-sysroot.sh +8 -0
  52. rigyard-1.0.0/examples/robot-development/scripts/cross/rigyard.cmake.in +9 -0
  53. rigyard-1.0.0/examples/robot-development/scripts/cross/verify-rigyard.sh +5 -0
  54. rigyard-1.0.0/examples/robot-development/scripts/scenarios/application.sh +4 -0
  55. rigyard-1.0.0/examples/robot-development/scripts/scenarios/drivers.sh +4 -0
  56. rigyard-1.0.0/examples/robot-development/scripts/scenarios/navigation.sh +4 -0
  57. rigyard-1.0.0/examples/robot-development/scripts/tasks/clean.sh +4 -0
  58. rigyard-1.0.0/examples/robot-development/scripts/tasks/diagnose.sh +4 -0
  59. rigyard-1.0.0/examples/robot-development/scripts/tests/run-unit.sh +4 -0
  60. rigyard-1.0.0/examples/robot-development/scripts/tests/show-unit-results.sh +4 -0
  61. rigyard-1.0.0/pyproject.toml +78 -0
  62. rigyard-1.0.0/scripts/activate.sh +39 -0
  63. rigyard-1.0.0/scripts/bootstrap.sh +150 -0
  64. rigyard-1.0.0/scripts/verify_distributions.py +61 -0
  65. rigyard-1.0.0/src/rigyard/__init__.py +19 -0
  66. rigyard-1.0.0/src/rigyard/__main__.py +3 -0
  67. rigyard-1.0.0/src/rigyard/application/__init__.py +30 -0
  68. rigyard-1.0.0/src/rigyard/application/builds.py +60 -0
  69. rigyard-1.0.0/src/rigyard/application/containers.py +63 -0
  70. rigyard-1.0.0/src/rigyard/application/definitions.py +29 -0
  71. rigyard-1.0.0/src/rigyard/application/images.py +61 -0
  72. rigyard-1.0.0/src/rigyard/application/parameters.py +301 -0
  73. rigyard-1.0.0/src/rigyard/application/project.py +77 -0
  74. rigyard-1.0.0/src/rigyard/application/requests.py +70 -0
  75. rigyard-1.0.0/src/rigyard/application/resolution.py +56 -0
  76. rigyard-1.0.0/src/rigyard/application/scenarios.py +492 -0
  77. rigyard-1.0.0/src/rigyard/application/tasks.py +57 -0
  78. rigyard-1.0.0/src/rigyard/application/tests.py +58 -0
  79. rigyard-1.0.0/src/rigyard/builds/__init__.py +5 -0
  80. rigyard-1.0.0/src/rigyard/builds/backend.py +13 -0
  81. rigyard-1.0.0/src/rigyard/builds/models.py +55 -0
  82. rigyard-1.0.0/src/rigyard/builds/planner.py +25 -0
  83. rigyard-1.0.0/src/rigyard/cli/__init__.py +5 -0
  84. rigyard-1.0.0/src/rigyard/cli/branding.py +8 -0
  85. rigyard-1.0.0/src/rigyard/cli/build_output.py +11 -0
  86. rigyard-1.0.0/src/rigyard/cli/command_output.py +49 -0
  87. rigyard-1.0.0/src/rigyard/cli/commands/__init__.py +1 -0
  88. rigyard-1.0.0/src/rigyard/cli/commands/builds.py +53 -0
  89. rigyard-1.0.0/src/rigyard/cli/commands/containers.py +74 -0
  90. rigyard-1.0.0/src/rigyard/cli/commands/images.py +53 -0
  91. rigyard-1.0.0/src/rigyard/cli/commands/parameters.py +91 -0
  92. rigyard-1.0.0/src/rigyard/cli/commands/scenarios.py +181 -0
  93. rigyard-1.0.0/src/rigyard/cli/commands/tasks.py +55 -0
  94. rigyard-1.0.0/src/rigyard/cli/commands/tests.py +68 -0
  95. rigyard-1.0.0/src/rigyard/cli/commands/workspace.py +124 -0
  96. rigyard-1.0.0/src/rigyard/cli/common.py +89 -0
  97. rigyard-1.0.0/src/rigyard/cli/container_output.py +73 -0
  98. rigyard-1.0.0/src/rigyard/cli/main.py +117 -0
  99. rigyard-1.0.0/src/rigyard/cli/menu/__init__.py +6 -0
  100. rigyard-1.0.0/src/rigyard/cli/menu/app.py +477 -0
  101. rigyard-1.0.0/src/rigyard/cli/menu/catalog.py +71 -0
  102. rigyard-1.0.0/src/rigyard/cli/menu/model.py +24 -0
  103. rigyard-1.0.0/src/rigyard/cli/menu/prompt.py +83 -0
  104. rigyard-1.0.0/src/rigyard/cli/menu/session.py +22 -0
  105. rigyard-1.0.0/src/rigyard/cli/scenario_output.py +84 -0
  106. rigyard-1.0.0/src/rigyard/cli/style.py +128 -0
  107. rigyard-1.0.0/src/rigyard/cli/task_output.py +11 -0
  108. rigyard-1.0.0/src/rigyard/cli/test_output.py +14 -0
  109. rigyard-1.0.0/src/rigyard/config/__init__.py +34 -0
  110. rigyard-1.0.0/src/rigyard/config/catalog.py +89 -0
  111. rigyard-1.0.0/src/rigyard/config/loader.py +303 -0
  112. rigyard-1.0.0/src/rigyard/config/models.py +356 -0
  113. rigyard-1.0.0/src/rigyard/container_commands/__init__.py +11 -0
  114. rigyard-1.0.0/src/rigyard/container_commands/models.py +108 -0
  115. rigyard-1.0.0/src/rigyard/container_commands/planner.py +37 -0
  116. rigyard-1.0.0/src/rigyard/containers/__init__.py +1 -0
  117. rigyard-1.0.0/src/rigyard/containers/backend.py +20 -0
  118. rigyard-1.0.0/src/rigyard/containers/models.py +221 -0
  119. rigyard-1.0.0/src/rigyard/containers/planner.py +212 -0
  120. rigyard-1.0.0/src/rigyard/containers/service.py +17 -0
  121. rigyard-1.0.0/src/rigyard/errors.py +148 -0
  122. rigyard-1.0.0/src/rigyard/execution/__init__.py +15 -0
  123. rigyard-1.0.0/src/rigyard/execution/docker_exec.py +175 -0
  124. rigyard-1.0.0/src/rigyard/execution/runner.py +60 -0
  125. rigyard-1.0.0/src/rigyard/execution/tty.py +5 -0
  126. rigyard-1.0.0/src/rigyard/images/__init__.py +6 -0
  127. rigyard-1.0.0/src/rigyard/images/backend.py +19 -0
  128. rigyard-1.0.0/src/rigyard/images/models.py +181 -0
  129. rigyard-1.0.0/src/rigyard/images/planner.py +159 -0
  130. rigyard-1.0.0/src/rigyard/images/service.py +26 -0
  131. rigyard-1.0.0/src/rigyard/immutable.py +40 -0
  132. rigyard-1.0.0/src/rigyard/parameters/__init__.py +26 -0
  133. rigyard-1.0.0/src/rigyard/parameters/context.py +50 -0
  134. rigyard-1.0.0/src/rigyard/parameters/models.py +99 -0
  135. rigyard-1.0.0/src/rigyard/parameters/prompt.py +134 -0
  136. rigyard-1.0.0/src/rigyard/parameters/resolver.py +313 -0
  137. rigyard-1.0.0/src/rigyard/parameters/sources.py +55 -0
  138. rigyard-1.0.0/src/rigyard/parameters/templates.py +313 -0
  139. rigyard-1.0.0/src/rigyard/providers/__init__.py +1 -0
  140. rigyard-1.0.0/src/rigyard/providers/docker/__init__.py +23 -0
  141. rigyard-1.0.0/src/rigyard/providers/docker/build_backend.py +28 -0
  142. rigyard-1.0.0/src/rigyard/providers/docker/container_backend.py +206 -0
  143. rigyard-1.0.0/src/rigyard/providers/docker/containers.py +54 -0
  144. rigyard-1.0.0/src/rigyard/providers/docker/dockerfile.py +5 -0
  145. rigyard-1.0.0/src/rigyard/providers/docker/exec_backend.py +116 -0
  146. rigyard-1.0.0/src/rigyard/providers/docker/image_backend.py +70 -0
  147. rigyard-1.0.0/src/rigyard/providers/docker/images.py +71 -0
  148. rigyard-1.0.0/src/rigyard/providers/docker/sources.py +19 -0
  149. rigyard-1.0.0/src/rigyard/providers/docker/task_backend.py +29 -0
  150. rigyard-1.0.0/src/rigyard/providers/docker/test_backend.py +29 -0
  151. rigyard-1.0.0/src/rigyard/scenarios/__init__.py +22 -0
  152. rigyard-1.0.0/src/rigyard/scenarios/assembly.py +24 -0
  153. rigyard-1.0.0/src/rigyard/scenarios/executor.py +347 -0
  154. rigyard-1.0.0/src/rigyard/scenarios/identity.py +38 -0
  155. rigyard-1.0.0/src/rigyard/scenarios/lifecycle.py +171 -0
  156. rigyard-1.0.0/src/rigyard/scenarios/models.py +384 -0
  157. rigyard-1.0.0/src/rigyard/scenarios/planner.py +258 -0
  158. rigyard-1.0.0/src/rigyard/scenarios/ports.py +87 -0
  159. rigyard-1.0.0/src/rigyard/scenarios/process.py +131 -0
  160. rigyard-1.0.0/src/rigyard/scenarios/records.py +136 -0
  161. rigyard-1.0.0/src/rigyard/scenarios/runtime.py +95 -0
  162. rigyard-1.0.0/src/rigyard/scenarios/service.py +136 -0
  163. rigyard-1.0.0/src/rigyard/scenarios/tmux.py +193 -0
  164. rigyard-1.0.0/src/rigyard/tasks/__init__.py +5 -0
  165. rigyard-1.0.0/src/rigyard/tasks/backend.py +13 -0
  166. rigyard-1.0.0/src/rigyard/tasks/models.py +75 -0
  167. rigyard-1.0.0/src/rigyard/tasks/planner.py +21 -0
  168. rigyard-1.0.0/src/rigyard/tests/__init__.py +21 -0
  169. rigyard-1.0.0/src/rigyard/tests/backend.py +13 -0
  170. rigyard-1.0.0/src/rigyard/tests/models.py +74 -0
  171. rigyard-1.0.0/src/rigyard/tests/planner.py +28 -0
  172. rigyard-1.0.0/src/rigyard/version.py +3 -0
  173. rigyard-1.0.0/src/rigyard/workspace.py +359 -0
  174. rigyard-1.0.0/tests/conftest.py +10 -0
  175. rigyard-1.0.0/tests/integration/project/Dockerfile.fragment +1 -0
  176. rigyard-1.0.0/tests/integration/project/compose.yaml +5 -0
  177. rigyard-1.0.0/tests/integration/project/config/builds.yaml +5 -0
  178. rigyard-1.0.0/tests/integration/project/config/containers.yaml +6 -0
  179. rigyard-1.0.0/tests/integration/project/config/images.yaml +6 -0
  180. rigyard-1.0.0/tests/integration/project/config/scenarios.yaml +27 -0
  181. rigyard-1.0.0/tests/integration/project/config/tasks.yaml +4 -0
  182. rigyard-1.0.0/tests/integration/project/config/tests.yaml +8 -0
  183. rigyard-1.0.0/tests/integration/project/rigyard.yaml +10 -0
  184. rigyard-1.0.0/tests/integration/project/scripts/ok.sh +1 -0
  185. rigyard-1.0.0/tests/integration/smoke.sh +64 -0
  186. rigyard-1.0.0/tests/test_branding.py +129 -0
  187. rigyard-1.0.0/tests/test_builds.py +555 -0
  188. rigyard-1.0.0/tests/test_cli.py +248 -0
  189. rigyard-1.0.0/tests/test_container_lifecycle.py +226 -0
  190. rigyard-1.0.0/tests/test_container_sources.py +70 -0
  191. rigyard-1.0.0/tests/test_containers.py +344 -0
  192. rigyard-1.0.0/tests/test_definition_catalog.py +52 -0
  193. rigyard-1.0.0/tests/test_docker_backend.py +103 -0
  194. rigyard-1.0.0/tests/test_examples.py +27 -0
  195. rigyard-1.0.0/tests/test_image_config.py +116 -0
  196. rigyard-1.0.0/tests/test_image_planner.py +171 -0
  197. rigyard-1.0.0/tests/test_image_service.py +96 -0
  198. rigyard-1.0.0/tests/test_image_sources.py +72 -0
  199. rigyard-1.0.0/tests/test_immutable_models.py +81 -0
  200. rigyard-1.0.0/tests/test_loader.py +270 -0
  201. rigyard-1.0.0/tests/test_menu.py +300 -0
  202. rigyard-1.0.0/tests/test_project_context.py +161 -0
  203. rigyard-1.0.0/tests/test_runtime_values.py +502 -0
  204. rigyard-1.0.0/tests/test_scenario_records.py +129 -0
  205. rigyard-1.0.0/tests/test_scenarios.py +2142 -0
  206. rigyard-1.0.0/tests/test_shell_setup.py +153 -0
  207. rigyard-1.0.0/tests/test_style.py +69 -0
  208. rigyard-1.0.0/tests/test_tasks.py +315 -0
  209. rigyard-1.0.0/tests/test_templates.py +571 -0
  210. rigyard-1.0.0/tests/test_tests.py +291 -0
  211. rigyard-1.0.0/tests/test_workspace.py +505 -0
@@ -0,0 +1,87 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
17
+ steps:
18
+ - uses: actions/checkout@v7
19
+ - uses: actions/setup-python@v7
20
+ with:
21
+ python-version: ${{ matrix.python-version }}
22
+ - run: python -m pip install -e '.[dev]'
23
+ - run: pytest --cov=rigyard --cov-report=term-missing --cov-fail-under=90
24
+ - run: ruff check .
25
+ - run: ruff format --check .
26
+
27
+ typecheck:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v7
31
+ - uses: actions/setup-python@v7
32
+ with:
33
+ python-version: "3.13"
34
+ - run: python -m pip install -e '.[dev]'
35
+ - run: mypy src/rigyard
36
+ - run: pyright src/rigyard
37
+
38
+ package:
39
+ runs-on: ubuntu-latest
40
+ steps:
41
+ - uses: actions/checkout@v7
42
+ - uses: actions/setup-python@v7
43
+ with:
44
+ python-version: "3.13"
45
+ - run: python -m pip install build twine
46
+ - run: python -m build
47
+ - run: python -m twine check --strict dist/*
48
+ - run: python scripts/verify_distributions.py dist
49
+ - run: |
50
+ for format in wheel sdist; do
51
+ python -m venv "$RUNNER_TEMP/rigyard-$format"
52
+ artifact=(dist/*.whl)
53
+ if [[ "$format" == sdist ]]; then
54
+ artifact=(dist/*.tar.gz)
55
+ fi
56
+ "$RUNNER_TEMP/rigyard-$format/bin/python" -m pip install "${artifact[0]}"
57
+ (
58
+ cd "$RUNNER_TEMP"
59
+ "$RUNNER_TEMP/rigyard-$format/bin/rigyard" --version
60
+ "$RUNNER_TEMP/rigyard-$format/bin/rigyard" --help >/dev/null
61
+ "$RUNNER_TEMP/rigyard-$format/bin/rigyard" \
62
+ --config "$GITHUB_WORKSPACE/examples/minimal/rigyard.yaml" validate
63
+ )
64
+ done
65
+ shell: bash
66
+ - uses: actions/upload-artifact@v5
67
+ with:
68
+ name: python-distributions
69
+ path: dist/
70
+ if-no-files-found: error
71
+
72
+ docker-smoke:
73
+ needs: package
74
+ runs-on: ubuntu-latest
75
+ steps:
76
+ - uses: actions/checkout@v7
77
+ - uses: actions/setup-python@v7
78
+ with:
79
+ python-version: "3.12"
80
+ - uses: actions/download-artifact@v6
81
+ with:
82
+ name: python-distributions
83
+ path: dist/
84
+ - run: python -m pip install dist/*.whl
85
+ - run: sudo apt-get update && sudo apt-get install -y tmux
86
+ - run: docker info && docker compose version && tmux -V
87
+ - run: bash tests/integration/smoke.sh
@@ -0,0 +1,107 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ concurrency:
11
+ group: pypi-${{ github.event.release.tag_name }}
12
+ cancel-in-progress: false
13
+
14
+ jobs:
15
+ verify:
16
+ runs-on: ubuntu-latest
17
+ strategy:
18
+ fail-fast: false
19
+ matrix:
20
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+ with:
24
+ ref: ${{ github.event.release.tag_name }}
25
+ persist-credentials: false
26
+ - uses: actions/setup-python@v7
27
+ with:
28
+ python-version: ${{ matrix.python-version }}
29
+ - run: python -m pip install -e '.[dev]'
30
+ - run: pytest --cov=rigyard --cov-report=term-missing --cov-fail-under=90
31
+ - run: ruff check . && ruff format --check .
32
+ - if: matrix.python-version == '3.12'
33
+ run: mypy src/rigyard && pyright src/rigyard
34
+
35
+ build:
36
+ needs: verify
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - uses: actions/checkout@v7
40
+ with:
41
+ ref: ${{ github.event.release.tag_name }}
42
+ fetch-depth: 0
43
+ persist-credentials: false
44
+ - uses: actions/setup-python@v7
45
+ with:
46
+ python-version: "3.12"
47
+ - name: Ensure this Release comes from main
48
+ run: |
49
+ git fetch origin main
50
+ git merge-base --is-ancestor HEAD origin/main
51
+ - run: python -m pip install build twine
52
+ - run: python -m build
53
+ - run: python -m twine check --strict dist/*
54
+ - name: Verify distribution contents and Release version
55
+ env:
56
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
57
+ run: python scripts/verify_distributions.py dist --tag "$RELEASE_TAG"
58
+ - name: Install and validate the release wheel
59
+ run: |
60
+ python -m venv "$RUNNER_TEMP/rigyard-release"
61
+ "$RUNNER_TEMP/rigyard-release/bin/python" -m pip install dist/*.whl
62
+ (
63
+ cd "$RUNNER_TEMP"
64
+ "$RUNNER_TEMP/rigyard-release/bin/rigyard" --version
65
+ "$RUNNER_TEMP/rigyard-release/bin/rigyard" \
66
+ --config "$GITHUB_WORKSPACE/examples/minimal/rigyard.yaml" validate
67
+ )
68
+ - uses: actions/upload-artifact@v5
69
+ with:
70
+ name: python-distributions
71
+ path: dist/
72
+ if-no-files-found: error
73
+
74
+ docker-smoke:
75
+ needs: build
76
+ runs-on: ubuntu-latest
77
+ steps:
78
+ - uses: actions/checkout@v7
79
+ with:
80
+ ref: ${{ github.event.release.tag_name }}
81
+ persist-credentials: false
82
+ - uses: actions/setup-python@v7
83
+ with:
84
+ python-version: "3.12"
85
+ - uses: actions/download-artifact@v6
86
+ with:
87
+ name: python-distributions
88
+ path: dist/
89
+ - run: python -m pip install dist/*.whl
90
+ - run: sudo apt-get update && sudo apt-get install -y tmux
91
+ - run: docker info && docker compose version && tmux -V
92
+ - run: bash tests/integration/smoke.sh
93
+
94
+ publish:
95
+ needs: docker-smoke
96
+ runs-on: ubuntu-latest
97
+ environment:
98
+ name: pypi
99
+ url: https://pypi.org/project/rigyard/
100
+ permissions:
101
+ id-token: write
102
+ steps:
103
+ - uses: actions/download-artifact@v6
104
+ with:
105
+ name: python-distributions
106
+ path: dist/
107
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,12 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .coverage
7
+ htmlcov/
8
+ .venv/
9
+ dist/
10
+ build/
11
+
12
+ .rigyard/runs/
@@ -0,0 +1,75 @@
1
+ # Changelog
2
+
3
+ This file records notable user-facing changes. Releases use semantic versioning and group entries under Added, Changed, Fixed, and Breaking Changes.
4
+
5
+ ## Unreleased
6
+
7
+ ## 1.0.0 - 2026-09-25
8
+
9
+ ### Added
10
+
11
+ - A Bash bootstrap script that installs uv and a managed Python environment, plus a script to activate it in new shells.
12
+ - A GitHub Release workflow that verifies distributions and publishes to PyPI through trusted publishing.
13
+ - Source-qualified definition catalog and `inspect/resolve --source` for ambiguous resources.
14
+ - Private, atomic scenario run records for controlling the original runtime after configuration changes.
15
+ - Injectable scenario runtime ports and separate startup/control plan models.
16
+
17
+ - Structured user documentation for configuration, templates, runtime values, and core features.
18
+ - Python-environment command aliases through `rigyard init --alias NAME`.
19
+ - User-defined test run and result-reporting commands through `rigyard test run` and
20
+ `rigyard test report`.
21
+ - Constrained project-specific container tasks through `rigyard task run` and the fixed
22
+ configuration-driven Tasks menu.
23
+ - Manifest-configured workspace command aliases with CLI override and opt-out controls.
24
+ - Terminal logos loaded from external UTF-8 files through templated paths.
25
+ - Safe, project-aware alias removal through `rigyard alias remove`.
26
+ - Prompt-local `${INPUT}` composition and explicit list append semantics for runtime values.
27
+ - Image build network modes, per-layer overrides, and an atomic interactive host-proxy group.
28
+ - Source-aware `${SOURCE_DIR}` and `${SOURCE_FILE}` templates, plus `${RIGYARD_FILE}` for the
29
+ absolute root manifest path.
30
+
31
+ ### Changed
32
+
33
+ - Workspace command aliases discover the closest workspace in the current or parent directories at execution time.
34
+ - Configuration models and request overrides now freeze nested collections; serialization returns ordinary values.
35
+ - Build, test, and task use cases invoke their backends directly instead of forwarding through empty services.
36
+
37
+ - Generated tmux sessions, Compose projects, and pane metadata now use the `rigyard` prefix.
38
+ - CI now covers Python 3.10 through 3.13, enforces test coverage, and validates built wheel and
39
+ source-distribution artifacts.
40
+ - Package metadata now reads its version exclusively from `src/rigyard/version.py`.
41
+ - Complete Compose scene starts now remove the previous project containers and orphans before
42
+ recreating them; partial instance starts remain incremental.
43
+ - Build, test, and custom-task commands now start stopped target containers by default, with
44
+ `start_container: false` available for strict lifecycle ownership.
45
+ - Reduced the README to a PyPI-friendly overview and quick start.
46
+ - Split repository examples into a minimal introduction and a full robot-development reference.
47
+ - Standardized all project documentation and internal comments on English.
48
+ - Renamed the project, distribution, Python package, CLI, configuration contract, workspace state,
49
+ generated identifiers, examples, and documentation from Toolchain to Rigyard.
50
+
51
+ ### Fixed
52
+
53
+ - Interrupting build, test, and task commands stops their processes inside the container.
54
+ - Workspace configuration resolution follows the nearest manifest instead of retaining stale initialization state.
55
+ - Explicit overrides for prompts in a selected secondary source with a duplicate resource name.
56
+ - Scenario instance selection no longer resolves prompts belonging to unselected or disabled instances.
57
+ - `scene status --instance` now restricts the queried windows.
58
+ - String boolean enable values are validated instead of interpreted by Python truthiness.
59
+
60
+
61
+ ### Breaking changes
62
+
63
+ - Generated scenario runtime names now include both the source file and profile, using the same identity for tmux and Compose. Stop/remove legacy runtime resources with the previous version before upgrading.
64
+ - Project-wide parameter inspection/resolution now rejects duplicate names unless `--source` selects a source.
65
+ - Internal build/test/task forwarding service modules have been removed; use application use cases or backend protocols.
66
+
67
+ - The command is now `rigyard`, the default manifest is `rigyard.yaml`, and workspace state lives
68
+ in `.rigyard/context.yaml`.
69
+ - `${TOOLCHAIN_ROOT}` is now `${RIGYARD_ROOT}`, and `TOOL_PARAM_*` overrides are now
70
+ `RIGYARD_PARAM_*`.
71
+ - The import package and distribution name are now `rigyard`.
72
+ - Removed compatibility fallbacks for assembled configurations without source provenance,
73
+ schema version 2 migration guidance, and the old Docker runner import path.
74
+ - Removed the ineffective scenario `replace` profile field and `--replace` CLI option;
75
+ scenario starts always replace matching tmux state.
@@ -0,0 +1,43 @@
1
+ # Contributing
2
+
3
+ ## Development environment
4
+
5
+ The project requires Python 3.10 or newer. The recommended setup uses uv:
6
+
7
+ ```bash
8
+ uv sync --extra dev
9
+ ```
10
+
11
+ Alternatively, use a standard virtual environment:
12
+
13
+ ```bash
14
+ python3 -m venv .venv
15
+ source .venv/bin/activate
16
+ python -m pip install -e '.[dev]'
17
+ ```
18
+
19
+ ## Checks
20
+
21
+ Run these checks before submitting a change:
22
+
23
+ ```bash
24
+ python -m ruff check .
25
+ python -m ruff format --check .
26
+ python -m mypy src/rigyard
27
+ python -m pyright src/rigyard
28
+ python -m pytest
29
+ python -m pip install build twine
30
+ python -m build
31
+ python -m twine check dist/*
32
+ ```
33
+
34
+ Documentation examples must match the current schema and CLI. When changing configuration models, defaults, or command arguments, update `docs/reference/configuration-schema.md`, the relevant feature guide, and the example configuration.
35
+
36
+ ## Code boundaries
37
+
38
+ - `config` loads manifest and source files and reports source locations.
39
+ - `parameters` resolves runtime values and string templates.
40
+ - `images`, `containers`, `builds`, and `scenarios` create immutable plans before invoking an executor.
41
+ - The CLI and interactive menu share application use cases.
42
+
43
+ See the [architecture guide](docs/development/architecture.md) for more detail.
rigyard-1.0.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 zz990099
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
rigyard-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,188 @@
1
+ Metadata-Version: 2.5
2
+ Name: rigyard
3
+ Version: 1.0.0
4
+ Summary: A configuration-driven CLI for containerized development workflows
5
+ Project-URL: Documentation, https://github.com/zz990099/Rigyard/tree/main/docs
6
+ Project-URL: Issues, https://github.com/zz990099/Rigyard/issues
7
+ Project-URL: Repository, https://github.com/zz990099/Rigyard
8
+ Author: zz990099
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Build Tools
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: pydantic<3,>=2.6
23
+ Requires-Dist: pyyaml<7,>=6.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: mypy<2,>=1.11; extra == 'dev'
26
+ Requires-Dist: pyright<2,>=1.1; extra == 'dev'
27
+ Requires-Dist: pytest-cov<7,>=5; extra == 'dev'
28
+ Requires-Dist: pytest<9,>=8; extra == 'dev'
29
+ Requires-Dist: ruff<1,>=0.6; extra == 'dev'
30
+ Requires-Dist: types-pyyaml<7,>=6.0; extra == 'dev'
31
+ Description-Content-Type: text/markdown
32
+
33
+ # Rigyard
34
+
35
+ Rigyard is a configuration-driven CLI for containerized robotics development. A single project manifest organizes layered image builds, development containers, project builds and tests inside containers, project-specific tasks, and multi-process debugging scenarios managed by tmux.
36
+
37
+ ## Features
38
+
39
+ - Build layered images from ordered Dockerfile fragments.
40
+ - Create reproducible development containers and run lifecycle hooks.
41
+ - Run project build scripts inside existing containers, starting stopped containers when allowed.
42
+ - Run user-defined test and test-result commands with the same configurable start behavior.
43
+ - Expose constrained project-specific container tasks through the CLI and interactive menu.
44
+ - Start tmux debugging scenarios in existing containers or Docker Compose services.
45
+ - Reuse configuration with global variables, string templates, and interactive runtime values.
46
+ - Use the same application behavior through direct commands or a branded one-shot interactive menu.
47
+
48
+ ## Requirements
49
+
50
+ - Linux and Bash for the setup script; it installs Python 3.12 and Rigyard using uv
51
+ - Docker for container operations; Compose scenarios require Docker Compose v2
52
+ - Scenario support requires tmux on the host and an interactive shell in each target container
53
+
54
+ ## Installation
55
+
56
+ Clone the repository, run the host setup, and activate the shared Rigyard environment:
57
+
58
+ ```bash
59
+ git clone https://github.com/zz990099/Rigyard.git
60
+ cd Rigyard
61
+ bash scripts/bootstrap.sh
62
+ source scripts/activate.sh
63
+ rigyard --version
64
+ ```
65
+
66
+ The script installs uv if needed and creates a Python environment without requiring Conda or a
67
+ preinstalled Python. Source `scripts/activate.sh` in each new terminal. Docker, Compose, and tmux
68
+ are checked but installed separately when needed. See [installation and requirements](https://github.com/zz990099/Rigyard/blob/main/docs/installation.md)
69
+ for setup details, manual Conda installation, and troubleshooting. See the
70
+ [contribution guide](https://github.com/zz990099/Rigyard/blob/main/CONTRIBUTING.md) for development checks.
71
+
72
+ For a CLI-only installation without a repository checkout, use
73
+ `uv tool install --python 3.12 rigyard`. The Bash setup and activation scripts above belong to
74
+ the checkout.
75
+
76
+ ## Quick start
77
+
78
+ By default, Rigyard reads `rigyard.yaml` from the current directory:
79
+
80
+ ```yaml
81
+ version: 3
82
+
83
+ metadata:
84
+ name: robot-development
85
+
86
+ workspace:
87
+ command_alias: robot
88
+
89
+ variables:
90
+ PROJECT_ROOT: ${RIGYARD_ROOT}
91
+ BRANDING_ROOT: ${PROJECT_ROOT}/branding
92
+ CONTAINER_WORKSPACE_ROOT: /workspace
93
+
94
+ branding:
95
+ logo_file: ${BRANDING_ROOT}/logo.txt
96
+
97
+ sources:
98
+ images: [config/images.yaml]
99
+ containers: [config/containers.yaml]
100
+ builds: [config/builds.yaml]
101
+ tests: [config/tests.yaml]
102
+ tasks: [config/tasks.yaml]
103
+ scenarios: [config/scenarios.yaml]
104
+ ```
105
+
106
+ Validate the configuration and run configured operations:
107
+
108
+ ```bash
109
+ rigyard validate
110
+ rigyard image build development
111
+ rigyard container create development
112
+ rigyard build native
113
+ rigyard test run unit
114
+ rigyard test report unit
115
+ rigyard task run clean
116
+ rigyard scene start robot-system development
117
+ ```
118
+
119
+ Run `rigyard` without a subcommand to open the one-shot interactive menu:
120
+
121
+ ```bash
122
+ rigyard
123
+ ```
124
+
125
+ With the built-in logo and the example sources configured, the menu looks like this (colours omitted):
126
+
127
+ ```text
128
+ $ rigyard
129
+ ██████╗ ██╗ ██████╗ ██╗ ██╗ █████╗ ██████╗ ██████╗
130
+ ██╔══██╗██║██╔════╝ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
131
+ ██████╔╝██║██║ ███╗ ╚████╔╝ ███████║██████╔╝██║ ██║
132
+ ██╔══██╗██║██║ ██║ ╚██╔╝ ██╔══██║██╔══██╗██║ ██║
133
+ ██║ ██║██║╚██████╔╝ ██║ ██║ ██║██║ ██║██████╔╝
134
+ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝
135
+
136
+ Project: robot-development
137
+ Configuration: /workspace/robot-development/rigyard.yaml
138
+
139
+ 1) Build image
140
+ 2) Create container
141
+ 3) Build project
142
+ 4) Scene…
143
+ 5) Test…
144
+ 6) Tasks…
145
+ 0) Exit
146
+ Select [0-6]:
147
+ ```
148
+
149
+ Custom terminal logos can be inline or loaded from a templated path; see the [root manifest guide](https://github.com/zz990099/Rigyard/blob/main/docs/configuration/manifest.md#terminal-logo).
150
+
151
+ When the manifest lives elsewhere, pass it explicitly or bind the current workspace:
152
+
153
+ ```bash
154
+ rigyard --config path/to/rigyard.yaml validate
155
+ rigyard init -f path/to/rigyard.yaml
156
+ robot build native
157
+ ```
158
+
159
+ Configured aliases are installed in the active Conda or virtual environment. They are generic
160
+ commands that discover the nearest current-or-parent workspace at runtime, so the same alias can be
161
+ shared by multiple workspaces. They can be removed with `rigyard alias remove`.
162
+
163
+ ## Documentation
164
+
165
+ - [Getting started](https://github.com/zz990099/Rigyard/blob/main/docs/getting-started.md)
166
+ - [Installation and requirements](https://github.com/zz990099/Rigyard/blob/main/docs/installation.md)
167
+ - [Configuration overview](https://github.com/zz990099/Rigyard/blob/main/docs/configuration/index.md)
168
+ - [Global variables and string templates](https://github.com/zz990099/Rigyard/blob/main/docs/configuration/templates.md)
169
+ - [Runtime values](https://github.com/zz990099/Rigyard/blob/main/docs/configuration/runtime-values.md)
170
+ - [Images](https://github.com/zz990099/Rigyard/blob/main/docs/features/images.md)
171
+ - [Containers](https://github.com/zz990099/Rigyard/blob/main/docs/features/containers.md)
172
+ - [Project builds](https://github.com/zz990099/Rigyard/blob/main/docs/features/builds.md)
173
+ - [Tests](https://github.com/zz990099/Rigyard/blob/main/docs/features/tests.md)
174
+ - [Custom tasks](https://github.com/zz990099/Rigyard/blob/main/docs/features/tasks.md)
175
+ - [Scenarios](https://github.com/zz990099/Rigyard/blob/main/docs/features/scenarios.md)
176
+ - [CLI reference](https://github.com/zz990099/Rigyard/blob/main/docs/reference/cli.md)
177
+ - [Configuration schema reference](https://github.com/zz990099/Rigyard/blob/main/docs/reference/configuration-schema.md)
178
+ - [Exit codes](https://github.com/zz990099/Rigyard/blob/main/docs/reference/exit-codes.md)
179
+
180
+ Start with the [`minimal`](https://github.com/zz990099/Rigyard/tree/main/examples/minimal) example or browse the complete [`robot-development`](https://github.com/zz990099/Rigyard/tree/main/examples/robot-development) reference project.
181
+
182
+ ## License
183
+
184
+ [MIT](https://github.com/zz990099/Rigyard/blob/main/LICENSE)
185
+
186
+ ---
187
+
188
+ Powered by **Codex** — AI-assisted development and documentation.