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
8 changes: 6 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,10 @@ 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
Expand All @@ -64,8 +66,10 @@ 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:
Expand Down
34 changes: 24 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ export BUILD_IMAGE ?= tryspaceorg/tryspace-lab:0.0.1
# 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 @@ -19,10 +33,8 @@ cfg: container
clean:
$(MAKE) stop
@if docker image inspect $(BUILD_IMAGE) >/dev/null 2>&1; then \
$(MAKE) clean-cli; \
$(MAKE) clean-fsw; \
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; \
else \
Expand Down Expand Up @@ -58,7 +70,8 @@ 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

Expand All @@ -73,11 +86,11 @@ 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)/comp/cryptolib && $(MAKE) tryspace
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 \
Expand Down Expand Up @@ -112,14 +125,15 @@ help:
@echo " uninstall - Remove containers, images, volumes, and networks"

sim: cfg
cd $(CURDIR)/simulith && $(MAKE) build
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" build; \
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.yaml up
Expand Down
13 changes: 13 additions & 0 deletions cfg/drm/drm.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
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"
Expand Down
25 changes: 25 additions & 0 deletions cfg/drm/spacecraft/flatsat.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
spacecraft_name: "flatsat"
spacecraft_id: 0
components:
- name: "demo"
- name: "eps"
- name: "radio"

# Specific configuration
demo:
string: "/dev/usart_1"
handle: 1
baudrate_hz: 115200
ms_timeout: 250

eps:
i2c_bus_id: 0
i2c_device_addr: 0x1E
i2c_speed: 400000
ms_timeout: 250

radio:
spi_bus: 0
spi_cs: 0
gpio_power_pin: 8
gpio_interrupt_pin: 9
32 changes: 32 additions & 0 deletions cfg/drm/spacecraft/sat-1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
spacecraft_name: "sat-1"
spacecraft_id: 1
components:
- name: "adcs"
- name: "demo"
- name: "eps"
- name: "radio"

# Specific configuration
adcs:
string: "/dev/usart_2"
handle: 2
baudrate_hz: 115200
ms_timeout: 250

demo:
string: "/dev/usart_5"
handle: 5
baudrate_hz: 115200
ms_timeout: 250

eps:
i2c_bus_id: 0
i2c_device_addr: 0x1E
i2c_speed: 400000
ms_timeout: 250

radio:
spi_bus: 1
spi_cs: 0
gpio_power_pin: 10
gpio_interrupt_pin: 11
25 changes: 25 additions & 0 deletions cfg/drm/spacecraft/sat-2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
spacecraft_name: "sat-2"
spacecraft_id: 2
components:
- name: "adcs"
- name: "eps"
- name: "radio"

# Specific configuration
adcs:
string: "/dev/usart_3"
handle: 3
baudrate_hz: 115200
ms_timeout: 250

eps:
i2c_bus_id: 0
i2c_device_addr: 0x1F
i2c_speed: 400000
ms_timeout: 250

radio:
spi_bus: 1
spi_cs: 1
gpio_power_pin: 12
gpio_interrupt_pin: 13
48 changes: 24 additions & 24 deletions cfg/lab-compose.j2
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# lab-compose.j2
# Jinja2 template for lab-compose.yaml with SIMULITH_LOG_MODE
# Jinja2 template for lab-compose.yaml with spacecraft-specific images
services:
tryspace-gsw:
image: tryspace-gsw:latest
container_name: tryspace-gsw
image: tryspace-gsw-{{ mission | default('default') }}:{{ mission | default('default') }}-{{ spacecraft | default('latest') }}
container_name: tryspace-gsw-{{ mission | default('default') }}
networks:
- tryspace-net
- tryspace-net-{{ spacecraft | default('default') }}
attach: false
ports:
- "8090:8090"
volumes:
- gsw-data:/app/yamcs-data
- gsw-data_{{ mission | default('default') }}:/app/yamcs-data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8090"]
interval: 30s
Expand All @@ -21,10 +21,10 @@ services:
mem_limit: 1g

tryspace-server:
image: tryspace-server:latest
container_name: tryspace-server
image: tryspace-server-{{ mission | default('default') }}:{{ spacecraft | default('latest') }}
container_name: tryspace-server-{{ spacecraft | default('default') }}
networks:
- tryspace-net
- tryspace-net-{{ spacecraft | default('default') }}
stdin_open: true
tty: true
environment:
Expand All @@ -34,16 +34,16 @@ services:
cpus: "4.0"
mem_limit: 2g
volumes:
- simulith_ipc:/tmp
- simulith_ipc_{{ spacecraft | default('default') }}:/tmp
tmpfs:
- /dev/shm:noexec,nosuid,size=1g
privileged: false

tryspace-director:
image: tryspace-director:latest
container_name: tryspace-director
image: tryspace-director-{{ mission | default('default') }}:{{ spacecraft | default('latest') }}
container_name: tryspace-director-{{ spacecraft | default('default') }}
networks:
- tryspace-net
- tryspace-net-{{ spacecraft | default('default') }}
stdin_open: true
tty: true
depends_on:
Expand All @@ -54,15 +54,15 @@ services:
cpus: "1.0"
mem_limit: 512m
volumes:
- simulith_ipc:/tmp
- simulith_ipc_{{ spacecraft | default('default') }}:/tmp
tmpfs:
- /dev/shm:noexec,nosuid,size=100m

tryspace-cryptolib:
image: tryspace-cryptolib:latest
container_name: tryspace-cryptolib
image: tryspace-cryptolib-{{ mission | default('default') }}:{{ spacecraft | default('latest') }}
container_name: tryspace-cryptolib-{{ spacecraft | default('default') }}
networks:
- tryspace-net
- tryspace-net-{{ spacecraft | default('default') }}
stdin_open: true
tty: true
depends_on:
Expand All @@ -71,15 +71,15 @@ services:
cpus: "1.0"
mem_limit: 512m
volumes:
- simulith_ipc:/tmp
- simulith_ipc_{{ spacecraft | default('default') }}:/tmp
tmpfs:
- /dev/shm:noexec,nosuid,size=100m

tryspace-fsw:
image: tryspace-fsw:latest
container_name: tryspace-fsw
image: tryspace-fsw-{{ mission | default('default') }}:{{ spacecraft | default('latest') }}
container_name: tryspace-fsw-{{ spacecraft | default('default') }}
networks:
- tryspace-net
- tryspace-net-{{ spacecraft | default('default') }}
stdin_open: true
tty: true
depends_on:
Expand All @@ -97,17 +97,17 @@ services:
cpus: "4.0"
mem_limit: 2g
volumes:
- simulith_ipc:/tmp
- simulith_ipc_{{ spacecraft | default('default') }}:/tmp
tmpfs:
- /dev/shm:noexec,nosuid,size=1g
privileged: false

networks:
tryspace-net:
tryspace-net-{{ spacecraft | default('default') }}:
driver: bridge

volumes:
simulith_ipc:
simulith_ipc_{{ spacecraft | default('default') }}:
driver: local
gsw-data:
gsw-data_{{ mission | default('default') }}:
driver: local
4 changes: 3 additions & 1 deletion cfg/tryspace-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ build:
missions:
- name: "drm"
config_file: "drm/drm.yaml"
spacecraft:
- name: "sat-1"
components:
- name: "demo"
- name: "eps"
- name: "radio"
cli:
- name: "demo"
Loading