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.
- rigyard-1.0.0/.github/workflows/ci.yml +87 -0
- rigyard-1.0.0/.github/workflows/publish.yml +107 -0
- rigyard-1.0.0/.gitignore +12 -0
- rigyard-1.0.0/CHANGELOG.md +75 -0
- rigyard-1.0.0/CONTRIBUTING.md +43 -0
- rigyard-1.0.0/LICENSE +22 -0
- rigyard-1.0.0/PKG-INFO +188 -0
- rigyard-1.0.0/README.md +156 -0
- rigyard-1.0.0/docs/architecture.md +3 -0
- rigyard-1.0.0/docs/builds.md +3 -0
- rigyard-1.0.0/docs/cli-menu.md +3 -0
- rigyard-1.0.0/docs/configuration/index.md +104 -0
- rigyard-1.0.0/docs/configuration/manifest.md +134 -0
- rigyard-1.0.0/docs/configuration/runtime-values.md +210 -0
- rigyard-1.0.0/docs/configuration/templates.md +161 -0
- rigyard-1.0.0/docs/containers.md +3 -0
- rigyard-1.0.0/docs/development/architecture.md +91 -0
- rigyard-1.0.0/docs/development/releasing.md +83 -0
- rigyard-1.0.0/docs/features/builds.md +86 -0
- rigyard-1.0.0/docs/features/containers.md +181 -0
- rigyard-1.0.0/docs/features/images.md +146 -0
- rigyard-1.0.0/docs/features/scenarios.md +279 -0
- rigyard-1.0.0/docs/features/tasks.md +94 -0
- rigyard-1.0.0/docs/features/tests.md +88 -0
- rigyard-1.0.0/docs/getting-started.md +80 -0
- rigyard-1.0.0/docs/index.md +34 -0
- rigyard-1.0.0/docs/installation.md +75 -0
- rigyard-1.0.0/docs/reference/cli.md +119 -0
- rigyard-1.0.0/docs/reference/configuration-schema.md +197 -0
- rigyard-1.0.0/docs/reference/exit-codes.md +11 -0
- rigyard-1.0.0/docs/scenarios.md +3 -0
- rigyard-1.0.0/examples/README.md +17 -0
- rigyard-1.0.0/examples/minimal/README.md +13 -0
- rigyard-1.0.0/examples/minimal/config/containers.yaml +10 -0
- rigyard-1.0.0/examples/minimal/config/tasks.yaml +12 -0
- rigyard-1.0.0/examples/minimal/rigyard.yaml +9 -0
- rigyard-1.0.0/examples/minimal/scripts/hello.sh +4 -0
- rigyard-1.0.0/examples/robot-development/README.md +38 -0
- rigyard-1.0.0/examples/robot-development/branding/logo.txt +7 -0
- rigyard-1.0.0/examples/robot-development/config/builds.yaml +22 -0
- rigyard-1.0.0/examples/robot-development/config/containers.yaml +82 -0
- rigyard-1.0.0/examples/robot-development/config/images.yaml +34 -0
- rigyard-1.0.0/examples/robot-development/config/scenarios.yaml +76 -0
- rigyard-1.0.0/examples/robot-development/config/tasks.yaml +30 -0
- rigyard-1.0.0/examples/robot-development/config/tests.yaml +22 -0
- rigyard-1.0.0/examples/robot-development/deploy/compose.development.yaml +7 -0
- rigyard-1.0.0/examples/robot-development/docker/layers/10-system.Dockerfile +3 -0
- rigyard-1.0.0/examples/robot-development/docker/layers/20-application.Dockerfile +3 -0
- rigyard-1.0.0/examples/robot-development/rigyard.yaml +30 -0
- rigyard-1.0.0/examples/robot-development/scripts/build-native.sh +5 -0
- rigyard-1.0.0/examples/robot-development/scripts/cross/prepare-sysroot.sh +8 -0
- rigyard-1.0.0/examples/robot-development/scripts/cross/rigyard.cmake.in +9 -0
- rigyard-1.0.0/examples/robot-development/scripts/cross/verify-rigyard.sh +5 -0
- rigyard-1.0.0/examples/robot-development/scripts/scenarios/application.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/scenarios/drivers.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/scenarios/navigation.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/tasks/clean.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/tasks/diagnose.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/tests/run-unit.sh +4 -0
- rigyard-1.0.0/examples/robot-development/scripts/tests/show-unit-results.sh +4 -0
- rigyard-1.0.0/pyproject.toml +78 -0
- rigyard-1.0.0/scripts/activate.sh +39 -0
- rigyard-1.0.0/scripts/bootstrap.sh +150 -0
- rigyard-1.0.0/scripts/verify_distributions.py +61 -0
- rigyard-1.0.0/src/rigyard/__init__.py +19 -0
- rigyard-1.0.0/src/rigyard/__main__.py +3 -0
- rigyard-1.0.0/src/rigyard/application/__init__.py +30 -0
- rigyard-1.0.0/src/rigyard/application/builds.py +60 -0
- rigyard-1.0.0/src/rigyard/application/containers.py +63 -0
- rigyard-1.0.0/src/rigyard/application/definitions.py +29 -0
- rigyard-1.0.0/src/rigyard/application/images.py +61 -0
- rigyard-1.0.0/src/rigyard/application/parameters.py +301 -0
- rigyard-1.0.0/src/rigyard/application/project.py +77 -0
- rigyard-1.0.0/src/rigyard/application/requests.py +70 -0
- rigyard-1.0.0/src/rigyard/application/resolution.py +56 -0
- rigyard-1.0.0/src/rigyard/application/scenarios.py +492 -0
- rigyard-1.0.0/src/rigyard/application/tasks.py +57 -0
- rigyard-1.0.0/src/rigyard/application/tests.py +58 -0
- rigyard-1.0.0/src/rigyard/builds/__init__.py +5 -0
- rigyard-1.0.0/src/rigyard/builds/backend.py +13 -0
- rigyard-1.0.0/src/rigyard/builds/models.py +55 -0
- rigyard-1.0.0/src/rigyard/builds/planner.py +25 -0
- rigyard-1.0.0/src/rigyard/cli/__init__.py +5 -0
- rigyard-1.0.0/src/rigyard/cli/branding.py +8 -0
- rigyard-1.0.0/src/rigyard/cli/build_output.py +11 -0
- rigyard-1.0.0/src/rigyard/cli/command_output.py +49 -0
- rigyard-1.0.0/src/rigyard/cli/commands/__init__.py +1 -0
- rigyard-1.0.0/src/rigyard/cli/commands/builds.py +53 -0
- rigyard-1.0.0/src/rigyard/cli/commands/containers.py +74 -0
- rigyard-1.0.0/src/rigyard/cli/commands/images.py +53 -0
- rigyard-1.0.0/src/rigyard/cli/commands/parameters.py +91 -0
- rigyard-1.0.0/src/rigyard/cli/commands/scenarios.py +181 -0
- rigyard-1.0.0/src/rigyard/cli/commands/tasks.py +55 -0
- rigyard-1.0.0/src/rigyard/cli/commands/tests.py +68 -0
- rigyard-1.0.0/src/rigyard/cli/commands/workspace.py +124 -0
- rigyard-1.0.0/src/rigyard/cli/common.py +89 -0
- rigyard-1.0.0/src/rigyard/cli/container_output.py +73 -0
- rigyard-1.0.0/src/rigyard/cli/main.py +117 -0
- rigyard-1.0.0/src/rigyard/cli/menu/__init__.py +6 -0
- rigyard-1.0.0/src/rigyard/cli/menu/app.py +477 -0
- rigyard-1.0.0/src/rigyard/cli/menu/catalog.py +71 -0
- rigyard-1.0.0/src/rigyard/cli/menu/model.py +24 -0
- rigyard-1.0.0/src/rigyard/cli/menu/prompt.py +83 -0
- rigyard-1.0.0/src/rigyard/cli/menu/session.py +22 -0
- rigyard-1.0.0/src/rigyard/cli/scenario_output.py +84 -0
- rigyard-1.0.0/src/rigyard/cli/style.py +128 -0
- rigyard-1.0.0/src/rigyard/cli/task_output.py +11 -0
- rigyard-1.0.0/src/rigyard/cli/test_output.py +14 -0
- rigyard-1.0.0/src/rigyard/config/__init__.py +34 -0
- rigyard-1.0.0/src/rigyard/config/catalog.py +89 -0
- rigyard-1.0.0/src/rigyard/config/loader.py +303 -0
- rigyard-1.0.0/src/rigyard/config/models.py +356 -0
- rigyard-1.0.0/src/rigyard/container_commands/__init__.py +11 -0
- rigyard-1.0.0/src/rigyard/container_commands/models.py +108 -0
- rigyard-1.0.0/src/rigyard/container_commands/planner.py +37 -0
- rigyard-1.0.0/src/rigyard/containers/__init__.py +1 -0
- rigyard-1.0.0/src/rigyard/containers/backend.py +20 -0
- rigyard-1.0.0/src/rigyard/containers/models.py +221 -0
- rigyard-1.0.0/src/rigyard/containers/planner.py +212 -0
- rigyard-1.0.0/src/rigyard/containers/service.py +17 -0
- rigyard-1.0.0/src/rigyard/errors.py +148 -0
- rigyard-1.0.0/src/rigyard/execution/__init__.py +15 -0
- rigyard-1.0.0/src/rigyard/execution/docker_exec.py +175 -0
- rigyard-1.0.0/src/rigyard/execution/runner.py +60 -0
- rigyard-1.0.0/src/rigyard/execution/tty.py +5 -0
- rigyard-1.0.0/src/rigyard/images/__init__.py +6 -0
- rigyard-1.0.0/src/rigyard/images/backend.py +19 -0
- rigyard-1.0.0/src/rigyard/images/models.py +181 -0
- rigyard-1.0.0/src/rigyard/images/planner.py +159 -0
- rigyard-1.0.0/src/rigyard/images/service.py +26 -0
- rigyard-1.0.0/src/rigyard/immutable.py +40 -0
- rigyard-1.0.0/src/rigyard/parameters/__init__.py +26 -0
- rigyard-1.0.0/src/rigyard/parameters/context.py +50 -0
- rigyard-1.0.0/src/rigyard/parameters/models.py +99 -0
- rigyard-1.0.0/src/rigyard/parameters/prompt.py +134 -0
- rigyard-1.0.0/src/rigyard/parameters/resolver.py +313 -0
- rigyard-1.0.0/src/rigyard/parameters/sources.py +55 -0
- rigyard-1.0.0/src/rigyard/parameters/templates.py +313 -0
- rigyard-1.0.0/src/rigyard/providers/__init__.py +1 -0
- rigyard-1.0.0/src/rigyard/providers/docker/__init__.py +23 -0
- rigyard-1.0.0/src/rigyard/providers/docker/build_backend.py +28 -0
- rigyard-1.0.0/src/rigyard/providers/docker/container_backend.py +206 -0
- rigyard-1.0.0/src/rigyard/providers/docker/containers.py +54 -0
- rigyard-1.0.0/src/rigyard/providers/docker/dockerfile.py +5 -0
- rigyard-1.0.0/src/rigyard/providers/docker/exec_backend.py +116 -0
- rigyard-1.0.0/src/rigyard/providers/docker/image_backend.py +70 -0
- rigyard-1.0.0/src/rigyard/providers/docker/images.py +71 -0
- rigyard-1.0.0/src/rigyard/providers/docker/sources.py +19 -0
- rigyard-1.0.0/src/rigyard/providers/docker/task_backend.py +29 -0
- rigyard-1.0.0/src/rigyard/providers/docker/test_backend.py +29 -0
- rigyard-1.0.0/src/rigyard/scenarios/__init__.py +22 -0
- rigyard-1.0.0/src/rigyard/scenarios/assembly.py +24 -0
- rigyard-1.0.0/src/rigyard/scenarios/executor.py +347 -0
- rigyard-1.0.0/src/rigyard/scenarios/identity.py +38 -0
- rigyard-1.0.0/src/rigyard/scenarios/lifecycle.py +171 -0
- rigyard-1.0.0/src/rigyard/scenarios/models.py +384 -0
- rigyard-1.0.0/src/rigyard/scenarios/planner.py +258 -0
- rigyard-1.0.0/src/rigyard/scenarios/ports.py +87 -0
- rigyard-1.0.0/src/rigyard/scenarios/process.py +131 -0
- rigyard-1.0.0/src/rigyard/scenarios/records.py +136 -0
- rigyard-1.0.0/src/rigyard/scenarios/runtime.py +95 -0
- rigyard-1.0.0/src/rigyard/scenarios/service.py +136 -0
- rigyard-1.0.0/src/rigyard/scenarios/tmux.py +193 -0
- rigyard-1.0.0/src/rigyard/tasks/__init__.py +5 -0
- rigyard-1.0.0/src/rigyard/tasks/backend.py +13 -0
- rigyard-1.0.0/src/rigyard/tasks/models.py +75 -0
- rigyard-1.0.0/src/rigyard/tasks/planner.py +21 -0
- rigyard-1.0.0/src/rigyard/tests/__init__.py +21 -0
- rigyard-1.0.0/src/rigyard/tests/backend.py +13 -0
- rigyard-1.0.0/src/rigyard/tests/models.py +74 -0
- rigyard-1.0.0/src/rigyard/tests/planner.py +28 -0
- rigyard-1.0.0/src/rigyard/version.py +3 -0
- rigyard-1.0.0/src/rigyard/workspace.py +359 -0
- rigyard-1.0.0/tests/conftest.py +10 -0
- rigyard-1.0.0/tests/integration/project/Dockerfile.fragment +1 -0
- rigyard-1.0.0/tests/integration/project/compose.yaml +5 -0
- rigyard-1.0.0/tests/integration/project/config/builds.yaml +5 -0
- rigyard-1.0.0/tests/integration/project/config/containers.yaml +6 -0
- rigyard-1.0.0/tests/integration/project/config/images.yaml +6 -0
- rigyard-1.0.0/tests/integration/project/config/scenarios.yaml +27 -0
- rigyard-1.0.0/tests/integration/project/config/tasks.yaml +4 -0
- rigyard-1.0.0/tests/integration/project/config/tests.yaml +8 -0
- rigyard-1.0.0/tests/integration/project/rigyard.yaml +10 -0
- rigyard-1.0.0/tests/integration/project/scripts/ok.sh +1 -0
- rigyard-1.0.0/tests/integration/smoke.sh +64 -0
- rigyard-1.0.0/tests/test_branding.py +129 -0
- rigyard-1.0.0/tests/test_builds.py +555 -0
- rigyard-1.0.0/tests/test_cli.py +248 -0
- rigyard-1.0.0/tests/test_container_lifecycle.py +226 -0
- rigyard-1.0.0/tests/test_container_sources.py +70 -0
- rigyard-1.0.0/tests/test_containers.py +344 -0
- rigyard-1.0.0/tests/test_definition_catalog.py +52 -0
- rigyard-1.0.0/tests/test_docker_backend.py +103 -0
- rigyard-1.0.0/tests/test_examples.py +27 -0
- rigyard-1.0.0/tests/test_image_config.py +116 -0
- rigyard-1.0.0/tests/test_image_planner.py +171 -0
- rigyard-1.0.0/tests/test_image_service.py +96 -0
- rigyard-1.0.0/tests/test_image_sources.py +72 -0
- rigyard-1.0.0/tests/test_immutable_models.py +81 -0
- rigyard-1.0.0/tests/test_loader.py +270 -0
- rigyard-1.0.0/tests/test_menu.py +300 -0
- rigyard-1.0.0/tests/test_project_context.py +161 -0
- rigyard-1.0.0/tests/test_runtime_values.py +502 -0
- rigyard-1.0.0/tests/test_scenario_records.py +129 -0
- rigyard-1.0.0/tests/test_scenarios.py +2142 -0
- rigyard-1.0.0/tests/test_shell_setup.py +153 -0
- rigyard-1.0.0/tests/test_style.py +69 -0
- rigyard-1.0.0/tests/test_tasks.py +315 -0
- rigyard-1.0.0/tests/test_templates.py +571 -0
- rigyard-1.0.0/tests/test_tests.py +291 -0
- 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
|
rigyard-1.0.0/.gitignore
ADDED
|
@@ -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.
|