Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/2-FEATURE_REQUEST.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ body:
label: "Description"
value: |
Provide details related to the new feature.
render: bash
validations:
required: true
- type: markdown
Expand Down
21 changes: 21 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Summary

Provide a brief description of the changes in this pull request.

## How to Test

* ...

## Checklist

- [ ] My code follows the project's coding standards
- [ ] I have performed a self-review of my own code
- [ ] I have made corresponding changes to the documentation
- [ ] I have added tests that prove my fix is effective or that my feature works

## Related

List any related issues or submodule PRs that need to be completed:
* ...

Closes #123.
15 changes: 0 additions & 15 deletions .github/PULL_REQUEST_TEMPLATE/issue.md

This file was deleted.

36 changes: 31 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
build-simulith:
runs-on: ubuntu-latest
container:
image: tryspaceorg/tryspace-lab:0.0.0
image: tryspaceorg/tryspace-lab:1.0.0
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -36,7 +36,7 @@ jobs:
build-fsw:
runs-on: ubuntu-latest
container:
image: tryspaceorg/tryspace-lab:0.0.0
image: tryspaceorg/tryspace-lab:1.0.0
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -47,13 +47,15 @@ jobs:
run: |
cd cfg
python3 tryspace-orchestrator.py
export MISSION=$(python3 -c "import yaml; print(yaml.safe_load(open('active.yaml'))['mission'])")
export SPACECRAFT=$(python3 -c "import yaml; print(yaml.safe_load(open('active.yaml'))['spacecraft'])")
cd ../fsw
make build-fsw
MISSION=$MISSION SPACECRAFT=$SPACECRAFT make build-fsw

build-test:
runs-on: ubuntu-latest
container:
image: tryspaceorg/tryspace-lab:0.0.0
image: tryspaceorg/tryspace-lab:1.0.0
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -64,10 +66,34 @@ jobs:
run: |
cd cfg
python3 tryspace-orchestrator.py
export MISSION=$(python3 -c "import yaml; print(yaml.safe_load(open('active.yaml'))['mission'])")
export SPACECRAFT=$(python3 -c "import yaml; print(yaml.safe_load(open('active.yaml'))['spacecraft'])")
cd ../fsw
make build-test
MISSION=$MISSION SPACECRAFT=$SPACECRAFT make build-test
- name: Upload to Codecov
uses: codecov/codecov-action@v5
with:
verbose: true
recurse_submodules: true

build-cli:
runs-on: ubuntu-latest
container:
image: tryspaceorg/tryspace-lab:1.0.0
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
- name: Build CLI
run: |
cd cfg
python3 tryspace-orchestrator.py
cd ..
for dir in $(pwd)/comp/*/cli ; do
if [ -f "$dir/Makefile" ]; then
echo "Building CLI component in $dir"
make -C "$dir" build-cli || { echo "Failed building $dir"; exit 1; }
fi
done
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.vscode
build
cfg/active.yaml
cfg/build.yaml
cfg/build.yaml
cfg/cli-compose.yaml
cfg/lab-compose.yaml
16 changes: 16 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,19 @@
path = atlas
url = https://github.com/TrySpaceOrg/TrySpaceOrg.github.io.git
branch = main
[submodule "comp/eps"]
path = comp/eps
url = https://github.com/TrySpaceOrg/tryspace-comp-eps.git
branch = main
[submodule "comp/radio"]
path = comp/radio
url = https://github.com/TrySpaceOrg/tryspace-comp-radio.git
branch = main
[submodule "comp/cryptolib"]
path = comp/cryptolib
url = https://github.com/TrySpaceOrg/tryspace-ext-cryptolib.git
branch = dev
[submodule "comp/adcs"]
path = comp/adcs
url = https://github.com/TrySpaceOrg/tryspace-comp-adcs.git
branch = main
90 changes: 63 additions & 27 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
# Makefile for TrySpace Lab development
.PHONY: build clean clean-cli clean-fsw clean-gsw clean-sim cfg cli container debug fsw gsw help sim start stop uninstall
.PHONY: build clean clean-cache clean-cli clean-fsw clean-gsw clean-sim cfg cli cli-start container debug fsw gsw help mold sim start stop uninstall

# Build image name
export BUILD_IMAGE ?= tryspaceorg/tryspace-lab:0.0.0
export BUILD_IMAGE ?= tryspaceorg/tryspace-lab:1.0.0

# Common paths
CFG_DIR := $(CURDIR)/cfg

# Read spacecraft from active.yaml for unified build directory structure
SPACECRAFT := $(shell grep '^spacecraft:' $(CFG_DIR)/active.yaml 2>/dev/null | sed 's/spacecraft: *//' | tr -d ' ')
MISSION := $(shell grep '^mission:' $(CFG_DIR)/active.yaml 2>/dev/null | sed 's/mission: *//' | tr -d ' ')
ifneq ($(SPACECRAFT),)
ifneq ($(MISSION),)
export BUILDDIR_MISSION := $(CURDIR)/build/$(MISSION)/
export BUILDDIR_BASE := $(BUILDDIR_MISSION)/$(SPACECRAFT)
export BUILDDIR_SIM := $(BUILDDIR_BASE)/sim
export BUILDDIR_FSW := $(BUILDDIR_BASE)/fsw
export BUILDDIR_GSW := $(BUILDDIR_BASE)/gsw
export BUILDDIR_COMP := $(BUILDDIR_BASE)/comp
endif
endif

# Commands
build: cfg
$(MAKE) sim
Expand All @@ -18,17 +32,18 @@ cfg: container

clean:
$(MAKE) stop
@if docker image inspect $(BUILD_IMAGE):latest >/dev/null 2>&1; then \
$(MAKE) clean-cli; \
$(MAKE) clean-fsw; \
@if docker image inspect $(BUILD_IMAGE) >/dev/null 2>&1; then \
rm -rf $(BUILDDIR_MISSION); \
$(MAKE) clean-gsw; \
$(MAKE) clean-sim; \
docker volume ls -q --filter "name=gsw-data" | xargs -r docker volume rm \
docker volume ls -q --filter "name=simulith_ipc" | xargs -r docker volume rm \
docker volume ls -q --filter "name=gsw-data" | xargs -r docker volume rm; \
docker volume ls -q --filter "name=simulith_ipc" | xargs -r docker volume rm; \
else \
echo "Docker image $(BUILD_IMAGE) does not exist. Skipping clean subcommands."; \
fi
rm -f $(CFG_DIR)/active.yaml $(CFG_DIR)/build.yaml

clean-cache:
docker builder prune -f
docker volume rm -f gsw-data simulith_ipc || true

clean-cli:
@for dir in $(CURDIR)/comp/*/cli ; do \
Expand All @@ -44,7 +59,7 @@ clean-gsw:
cd gsw && $(MAKE) clean

clean-sim:
@for dir in $(CURDIR)/comp/* ; do \
@for dir in $(CURDIR)/comp/*/sim ; do \
if [ -d "$$dir" ] && [ -f "$$dir/Makefile" ]; then \
$(MAKE) -C "$$dir" clean; \
fi; \
Expand All @@ -55,11 +70,13 @@ cli: cfg
$(MAKE) container
@for dir in $(CURDIR)/comp/*/cli ; do \
if [ -f "$$dir/Makefile" ]; then \
$(MAKE) -C "$$dir" runtime; \
comp_name=$$(basename $$(dirname "$$dir")); \
$(MAKE) -C "$$dir" runtime BUILDDIR=$(BUILDDIR_COMP)/$$comp_name/cli; \
fi; \
done
cd $(CURDIR)/simulith && $(MAKE) director && $(MAKE) server
docker compose -f ./cfg/cli-compose.yml up

cli-start: cfg
docker compose -f ./cfg/cli-compose.yaml up

container: cfg/Dockerfile.base
@command -v docker >/dev/null 2>&1 || { echo "Error: docker is not installed or not in PATH."; exit 1; }
Expand All @@ -69,18 +86,30 @@ debug: cfg
docker run --rm -it -v $(CURDIR):$(CURDIR) --name "tryspace_fsw_debug" -w $(CURDIR) --user $(shell id -u):$(shell id -g) --sysctl fs.mqueue.msg_max=10000 --ulimit rtprio=99 --cap-add=sys_nice $(BUILD_IMAGE) /bin/bash

fsw: cfg
cd $(CURDIR)/fsw && $(MAKE) runtime
cd $(CURDIR)/fsw && $(MAKE) runtime BUILDDIR=$(BUILDDIR_FSW) SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION)

gsw: cfg
cd $(CURDIR)/gsw && $(MAKE) runtime
cd $(CURDIR)/comp/cryptolib && $(MAKE) tryspace SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION)
cd $(CURDIR)/gsw && $(MAKE) runtime BUILDDIR=$(BUILDDIR_GSW) SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION)

mold:
@if [ "$(COMP)" = "" ]; then \
echo "Error: COMP parameter is required"; \
echo "Usage: make mold COMP=<name>"; \
echo "Example: make mold COMP=my_sensor"; \
exit 1; \
fi
python3 $(CFG_DIR)/tryspace-comp-mold.py "$(COMP)"

help:
@echo "Usage: make <target>"
@echo "Targets:"
@echo " build - Build the full runtime environment"
@echo " cfg - Run orchestrator to configure environment"
@echo " cli - Build CLI and start CLI services"
@echo " clean - Remove build artifacts and stop services"
@echo " cli - Build CLI components"
@echo " cli-start - Start CLI compose"
@echo " clean - Remove build artifacts and stop compose"
@echo " clean-cache - Clean Docker build cache (frees significant disk space)"
@echo " clean-cli - Clean CLI components"
@echo " clean-fsw - Clean FSW components"
@echo " clean-gsw - Clean GSW components"
Expand All @@ -89,32 +118,39 @@ help:
@echo " debug - Start a debug shell in the container"
@echo " fsw - Build FSW"
@echo " gsw - Build GSW"
@echo " mold - Create new component from demo template (Usage: make mold COMP=<name>)"
@echo " sim - Build Simulith and component simulators"
@echo " start - Start lab services"
@echo " stop - Stop lab and CLI services, clean up Docker images"
@echo " start - Start lab compose"
@echo " stop - Stop lab and CLI compose, clean up Docker images"
@echo " uninstall - Remove containers, images, volumes, and networks"

sim: cfg
cd $(CURDIR)/simulith && $(MAKE) build BUILDDIR=$(BUILDDIR_SIM) SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION)
@for dir in $(CURDIR)/comp/*/sim ; do \
if [ -d "$$dir" ] && [ -f "$$dir/Makefile" ]; then \
echo "Building component in $$dir"; \
$(MAKE) -C "$$dir" runtime; \
comp_name=$$(basename $$(dirname "$$dir")); \
$(MAKE) -C "$$dir" build BUILDDIR=$(BUILDDIR_COMP)/$$comp_name/sim; \
fi; \
done
cd $(CURDIR)/simulith && $(MAKE) director && $(MAKE) server
cd $(CURDIR)/simulith && $(MAKE) director BUILDDIR=$(BUILDDIR_SIM) BUILDDIR_COMP=$(BUILDDIR_COMP) SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION) && $(MAKE) server BUILDDIR=$(BUILDDIR_SIM) BUILDDIR_COMP=$(BUILDDIR_COMP) SPACECRAFT=$(SPACECRAFT) MISSION=$(MISSION)

start: cfg
docker compose -f ./cfg/lab-compose.yml up
docker compose -f ./cfg/lab-compose.yaml up

stop:
docker compose -f ./cfg/cli-compose.yml down
docker compose -f ./cfg/lab-compose.yml down
docker compose -f ./cfg/cli-compose.yaml down --remove-orphans
docker compose -f ./cfg/lab-compose.yaml down --remove-orphans
docker images -f "dangling=true" -q | xargs -r docker rmi
@echo ""
@echo "To cleanup Docker build cache, run: make clean-cache"
@echo "To cleanup everything Docker, run: docker system prune -a"

uninstall: clean
uninstall: clean clean-cache
rm -f $(CFG_DIR)/active.yaml $(CFG_DIR)/build.yaml
docker ps -a --filter "name=tryspace-" -q | xargs -r docker rm -f
docker images "tryspace-*" -q | xargs -r docker rmi
docker volume ls -q --filter "name=gsw-data" | xargs -r docker volume rm
docker images "tryspace-*" -q | xargs -r docker rmi -f
docker volume ls -q --filter "name=gsw-data" | xargs -r docker volume rm -f
docker volume ls -q --filter "name=simulith_ipc" | xargs -r docker volume rm
docker network ls -q --filter "name=tryspace-net" | xargs -r docker network rm
docker network ls -q --filter "name=cfg_tryspace-net" | xargs -r docker network rm
Expand Down
2 changes: 1 addition & 1 deletion atlas
Submodule atlas updated 80 files
+0 −7 README.md
+13 −12 docs/about.md
+5 −0 docs/assets/css/custom.css
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081103.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081134.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081427.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081445.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081536.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081541.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081625.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081740.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081910.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081920.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 081942.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 082038.png
+ docs/assets/manual/getting-started/Screenshot 2025-09-10 082050.png
+ docs/assets/manual/installation/Screenshot 2025-09-10 083345.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151310.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151319.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151351.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151354.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151405.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151420.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151449.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151503.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151510.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151539.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151600.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151644.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151736.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151741.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151820.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151831.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151834.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151850.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151904.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151933.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 151955.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152012.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152034.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152101.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152230.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152359.png
+ docs/assets/scenarios/commissioning/Screenshot 2025-09-15 152505.png
+2 −0 docs/contact.md
+0 −4 docs/developer-documentation/architecture-overview.md
+6 −0 docs/drm/ait-plan.md
+145 −0 docs/drm/concept-of-operations.md
+6 −0 docs/drm/interface-control-document.md
+6 −0 docs/drm/mission-requirements.md
+6 −0 docs/drm/operations-plan.md
+0 −3 docs/examples-and-tutorials/basic-simulation.md
+8 −6 docs/index.md
+103 −0 docs/manual/core-concepts/architecture.md
+6 −0 docs/manual/core-concepts/development-workflow.md
+6 −0 docs/manual/core-concepts/flight-software.md
+6 −0 docs/manual/core-concepts/ground-software.md
+6 −0 docs/manual/core-concepts/simulations.md
+75 −0 docs/manual/core-concepts/space-systems.md
+8 −6 docs/manual/handbook/faq.md
+68 −0 docs/manual/handbook/getting-started.md
+28 −0 docs/manual/handbook/installation.md
+6 −0 docs/manual/how-to/component-mold.md
+0 −0 docs/manual/how-to/configuration.md
+6 −0 docs/manual/how-to/demo-component.md
+6 −0 docs/manual/how-to/docker.md
+12 −10 docs/manual/technical-reference/building.md
+0 −0 docs/manual/technical-reference/cleanup.md
+6 −0 docs/manual/technical-reference/compilation.md
+6 −0 docs/manual/technical-reference/debugging.md
+6 −0 docs/manual/technical-reference/testing.md
+6 −0 docs/manual/technical-reference/time.md
+195 −0 docs/scenarios/commissioning.md
+6 −0 docs/scenarios/fdir.md
+6 −0 docs/scenarios/nominal-operations.md
+14 −0 docs/scenarios/overview.md
+6 −0 docs/scenarios/security-incident-response.md
+0 −44 docs/user-guides/getting-started.md
+0 −20 docs/user-guides/installation.md
+44 −11 mkdocs.yml
5 changes: 4 additions & 1 deletion cfg/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Assumes build using `make container` from top level of tryspace-lab repository
#
# docker push tryspaceorg/tryspace-lab:0.0.0
# docker push tryspaceorg/tryspace-lab:1.0.0
#

FROM debian:bookworm-slim@sha256:6ac2c08566499cc2415926653cf2ed7c3aedac445675a013cc09469c9e118fdd
Expand All @@ -17,9 +17,12 @@ RUN apt-get update && \
cmake \
curl \
gcovr \
gdb \
git \
gpg \
lcov \
libcurl4-openssl-dev \
libgcrypt20-dev \
libsocketcan-dev \
libzmq3-dev \
pkg-config \
Expand Down
14 changes: 5 additions & 9 deletions cfg/cli-compose.yml → cfg/cli-compose.j2
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
# Start
# docker compose -f cli-compose.yml up
# View specific containers
# docker attach tryspace-comp-demo-cli
# docker attach tryspace-sim
# docker attach tryspace-director
# Jinja2 template for dynamic CLI Compose file
# Usage: Render with orchestrator using active CLI component
services:
tryspace-sim:
image: tryspace-server:latest
Expand Down Expand Up @@ -40,9 +36,9 @@ services:
tmpfs:
- /dev/shm:noexec,nosuid,size=100m

tryspace-comp-demo-cli:
image: tryspace-comp-demo-cli:latest
container_name: tryspace-comp-demo-cli
tryspace-comp-{{ cli_component }}-cli:
image: tryspace-comp-{{ cli_component }}-cli:latest
container_name: tryspace-comp-{{ cli_component }}-cli
networks:
- tryspace-net
stdin_open: true
Expand Down
20 changes: 18 additions & 2 deletions cfg/drm/drm.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
mission_name: "drm"

# Spacecraft configurations
spacecraft:
- name: "flatsat"
config_file: "drm/spacecraft/flatsat.yaml"
- name: "sat-1"
config_file: "drm/spacecraft/sat-1.yaml"
- name: "sat-2"
config_file: "drm/spacecraft/sat-2.yaml"

# Fallback components if no spacecraft selected
components:
- name: "adcs"
- name: "demo"
- name: "eps"
- name: "radio"

# Scenarios for mission operations
scenarios:
- name: "nominal"
config_file: "drm/scenarios/drm-nominal.yaml"
- name: "flight"
config_file: "drm/scenarios/drm-flight.yaml"
- name: "debug"
config_file: "drm/scenarios/drm-debug.yaml"
3 changes: 3 additions & 0 deletions cfg/drm/scenarios/drm-debug.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
scenario_name: "debug"
overrides:
debug: true
3 changes: 0 additions & 3 deletions cfg/drm/scenarios/drm-flight.yaml

This file was deleted.

Loading