Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
cdf2706
initial soak testing, setup and soak
moisesmata Jun 25, 2025
5d664c7
Merged into one workflow file, need to consolidate RPI jobs into one job
moisesmata Jun 25, 2025
ce69629
First version of full soak test, change in workflow structure
moisesmata Jun 25, 2025
a66a409
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jun 30, 2025
4659664
Initial refactoring into two workflow files
moisesmata Jun 30, 2025
08d380f
Merge branch 'soak-testing/initial' of https://github.com/moisesmata/…
moisesmata Jun 30, 2025
1ca1891
Setup and soak test workflows implemented
moisesmata Jun 30, 2025
0820019
Merge branch 'devel' into soak-testing/initial
moisesmata Jun 30, 2025
6c45689
Update metadata
moisesmata Jun 30, 2025
f51b7c7
Merge branch 'soak-testing/initial' of https://github.com/moisesmata/…
moisesmata Jun 30, 2025
f1d65a9
Update ext-aarch64-linux-led-blinker-soak-setup.yml
moisesmata Jun 30, 2025
8607c97
Update ext-aarch64-linux-led-blinker-soak-test.yml
moisesmata Jun 30, 2025
687c139
Added if statement to soak setup stop existing service
moisesmata Jun 30, 2025
00cc2c5
fix build artifact path
moisesmata Jun 30, 2025
290c983
fix to build artifacts prep
moisesmata Jun 30, 2025
5033b73
list artifacts debug step
moisesmata Jun 30, 2025
b8a7709
list artifacts debug step
moisesmata Jun 30, 2025
c16b5b0
remove debug
moisesmata Jun 30, 2025
d50beee
Ref and GDS command changes
moisesmata Jun 30, 2025
b13bea3
Ref and GDS command changes
moisesmata Jun 30, 2025
d132a85
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 1, 2025
5875403
added fprime-gds as a system service started within setup workflow
moisesmata Jul 1, 2025
bef3970
Merge branch 'soak-testing/initial' of https://github.com/moisesmata/…
moisesmata Jul 1, 2025
2641773
Fix formatting, service files
moisesmata Jul 1, 2025
9ecbd85
Print systemctl status upon service fail to start
moisesmata Jul 1, 2025
56876e2
fix system service file format in bash script
moisesmata Jul 1, 2025
fb75a7b
Fix gds exec start command in service file
moisesmata Jul 1, 2025
1fb3619
Setup modifications
moisesmata Jul 1, 2025
cb7783b
service file modifications
moisesmata Jul 1, 2025
1619813
added framing selection to gds execstart
moisesmata Jul 1, 2025
c16581d
formatting fix
moisesmata Jul 1, 2025
1e353ce
longer wait period between both services starting
moisesmata Jul 1, 2025
3cb0765
Fix ip address in execstart
moisesmata Jul 1, 2025
fecf63e
added sleep in soak test workflow
moisesmata Jul 1, 2025
4c99c9a
Change tcp/ip arguments for services
moisesmata Jul 1, 2025
3bff2cd
restructure soak setup, remove restart behavior for services
moisesmata Jul 1, 2025
4dbe96a
root permission, when running fprime-gds
moisesmata Jul 1, 2025
21bc713
Take away ip client, for gds execstart
moisesmata Jul 1, 2025
599da48
fixed to make a venv and use most current fprime-gds
moisesmata Jul 1, 2025
a9c8e71
add more logging when serivice fails
moisesmata Jul 1, 2025
4b36b76
More systemctl logging, restructure of venv, only in soak setup
moisesmata Jul 1, 2025
f5a0e7c
fix pip install syntax
moisesmata Jul 1, 2025
0cde669
Fix artifacts prep
moisesmata Jul 1, 2025
a9ef9cd
fix order
moisesmata Jul 1, 2025
02ff19f
fix pip requirements path
moisesmata Jul 1, 2025
d66294d
back to how it was, but with venv
moisesmata Jul 1, 2025
72a4e21
requirements.txt path
moisesmata Jul 1, 2025
cf23547
fixed arm64 tag for runner
moisesmata Jul 2, 2025
db35f98
change install binary path
moisesmata Jul 2, 2025
37824d3
more debugging with ls
moisesmata Jul 2, 2025
c9cab94
fix to requirements file overrding build artifacts
moisesmata Jul 2, 2025
68d0177
reorder service startup sequence
moisesmata Jul 2, 2025
438cc21
take off cron scheduling for testing purposes
moisesmata Jul 2, 2025
dd573ac
fix syntax
moisesmata Jul 2, 2025
5a5c8d2
enable gui for gds
moisesmata Jul 2, 2025
aea7b40
switched to consisten env variables
moisesmata Jul 2, 2025
21cb757
make logging simpler
moisesmata Jul 2, 2025
4e296c1
fixed env variable reference
moisesmata Jul 2, 2025
d1b8fe1
don't delete all logs, for debugging
moisesmata Jul 2, 2025
f966b03
comment out check service status for testing.
moisesmata Jul 2, 2025
c6f650e
updated service names, better service checking structure.
moisesmata Jul 2, 2025
4f873a8
Ensure binary is executable
moisesmata Jul 2, 2025
e9e7716
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 8, 2025
886458b
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 18, 2025
c49e808
Soak Test Workflows for SoakTestDeployment
moisesmata Jul 18, 2025
a470b32
Change to fetch moisesmata/main , not devel
moisesmata Jul 18, 2025
b62d526
Update soak test to do monitoring of events and telemetry from ComLogs
moisesmata Jul 21, 2025
b531ac7
Fix format
moisesmata Jul 21, 2025
ac19609
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 22, 2025
98cff11
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 22, 2025
d0161ff
placeholder soak test
moisesmata Jul 23, 2025
dbcd549
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 23, 2025
a031be1
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 24, 2025
71f2b8e
Update metadata
moisesmata Jul 24, 2025
5054533
Remove exact copy soak test
moisesmata Jul 25, 2025
3931438
Merge branch 'devel' into soak-testing/initial
moisesmata Jul 30, 2025
bd49c84
Switch to ledblinker-soak
moisesmata Jul 30, 2025
96619de
Update metadata
moisesmata Jul 30, 2025
6017b8d
Merge branch 'nasa:devel' into soak-testing/initial
moisesmata Jul 30, 2025
8e06b8d
fix soak monitor path
moisesmata Jul 30, 2025
47baf39
Monitoring Update
moisesmata Jul 30, 2025
671915e
Fix Dual Logging Systems
moisesmata Jul 30, 2025
e3f9904
Modify soak-test
moisesmata Jul 30, 2025
02d5f28
Used the correct moisesmata/fprime-workshop-led-blinker branch
moisesmata Aug 1, 2025
b42aac1
Soak test refactor
moisesmata Aug 1, 2025
14b2b00
Update soak monitor
moisesmata Aug 1, 2025
9b3f6eb
Fix exists check
moisesmata Aug 1, 2025
fb65188
Remove Json monitor
moisesmata Aug 1, 2025
4b78347
Update DataHandlers
moisesmata Aug 1, 2025
7f2aea8
Fix indentation
moisesmata Aug 1, 2025
b536d84
check fix
moisesmata Aug 1, 2025
8c34400
Fix logs/comlogs
moisesmata Aug 1, 2025
5cfedc1
streamline test yaml
moisesmata Aug 1, 2025
5fb5f22
Remove job dependency
moisesmata Aug 1, 2025
71e2fe2
kill process and add dependency
moisesmata Aug 1, 2025
e3504f1
fix
moisesmata Aug 1, 2025
2de94e6
update Soak
moisesmata Aug 2, 2025
810527f
add framing selection
moisesmata Aug 2, 2025
25261f9
Correct Framing in GDS
moisesmata Aug 2, 2025
d3be20a
Temporary Debug
moisesmata Aug 2, 2025
eb57d52
More temp debug
moisesmata Aug 2, 2025
1f28660
Use Comlog config
moisesmata Aug 2, 2025
1099c69
Fix soak monitor
moisesmata Aug 2, 2025
eafca06
Fix service files
moisesmata Aug 2, 2025
eec4c03
Made it generalizable to different service user names
moisesmata Aug 3, 2025
b0f056c
Enable Schedule
moisesmata Aug 3, 2025
72f2830
Remove scheduling
moisesmata Aug 14, 2025
6e6e916
Remove Schedule
moisesmata Aug 14, 2025
ce8a6dd
Interim fix for channel collector
moisesmata Aug 15, 2025
cf8608d
:wMerge branch 'soak-testing/initial' of https://github.com/moisesmat…
moisesmata Aug 15, 2025
1a03c9a
Update alert system system, add support for channel analysis
moisesmata Aug 15, 2025
5d4cde6
Simplification to Logging
moisesmata Aug 15, 2025
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
6 changes: 6 additions & 0 deletions .github/actions/spelling/expect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ jenkins
jenkinsci
Joaquim
jobrestrictions
journalctl
jpl
jplffs
jre
Expand All @@ -354,6 +355,7 @@ lammertbies
LASTLOG
LBLOCK
LCHILD
ledblinker
leisher
lestarch
lflag
Expand Down Expand Up @@ -399,6 +401,7 @@ mman
MMAPALLOCATOR
MML
modbus
moisesmata
MOVEFILE
msc
mscfile
Expand All @@ -411,6 +414,7 @@ multitool
mutexattr
Mutexed
mycompany
MYSUBTOPOLOGYINSTANCE
nasafprime
nbits
ncsl
Expand Down Expand Up @@ -508,6 +512,7 @@ projectnumber
propget
propput
protothreading
psutil
ptbool
ptf
pthread
Expand Down Expand Up @@ -686,6 +691,7 @@ UNEXP
unistd
UNITTESTASSERT
unittests
uplinker
useconds
usecs
valgrind
Expand Down
207 changes: 207 additions & 0 deletions .github/workflows/ext-aarch64-linux-led-blinker-soak-setup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
# Cross-compile https://github.com/moisesmata/fprime-workshop-led-blinker (add/comLogger-instance branch) as system service on AArch64 Linux
# Builds on release publication, stops old service, starts new service
#
# This workflow sets up two types of logging:
# 1. GDS logs: Text-based logs from fprime-gds → /opt/ledblinker-soak/logs/
# 2. ComLogger logs: Binary .com files from ComLogger component → /opt/ledblinker-soak/ComLoggerFiles/
#
name: "Soak Test Setup AArch64 Linux: External Repo LedBlinker"

on:
release:
types: [published]
workflow_dispatch:
inputs:
service_user:
description: "Linux user to run services as (default: fprime)"
required: false
default: fprime

# New releases cancel running deployments
concurrency:
group: ${{ github.workflow }}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May want to have a group per release number (again via github.event)

cancel-in-progress: true

env:
AARCH64_TOOLCHAIN_DIR: /tmp/aarch64-toolchain
AARCH64_TOOLCHAIN_URL: https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
FSW_SERVICE_NAME: ledblinker-soak-fsw
GDS_SERVICE_NAME: ledblinker-soak-gds
INSTALL_DIR: /opt/ledblinker-soak
SERVICE_USER: ${{ github.event.inputs.service_user || 'fprime' }}

jobs:
cross-compilation:
name: "Cross Compilation"
runs-on: ubuntu-22.04
steps:
- name: "Checkout target repository"
uses: actions/checkout@v4
with:
submodules: false
repository: moisesmata/fprime-workshop-led-blinker
ref: add/comLogger-instance
- name: "Overlay current F´ revision"
uses: actions/checkout@v4
with:
submodules: true
path: ./fprime
fetch-depth: 0
- uses: ./fprime/.github/actions/setup
with:
location: ./fprime
- name: "Download and Setup AArch64 Linux Toolchain"
run: |
mkdir -p ${AARCH64_TOOLCHAIN_DIR}
wget -q ${AARCH64_TOOLCHAIN_URL}
tar -xf $(basename ${AARCH64_TOOLCHAIN_URL}) -C ${AARCH64_TOOLCHAIN_DIR} --strip-components 1
echo "${AARCH64_TOOLCHAIN_DIR}/bin" >> $GITHUB_PATH
- name: "Generate AArch64 Linux Build Cache"
run: |
fprime-util generate aarch64-linux
- name: "Build AArch64 Linux"
run: |
fprime-util build aarch64-linux
- name: "Prepare artifacts"
run: |
mkdir -p aarch64-linux-artifacts-soak
cp -r ./build-artifacts aarch64-linux-artifacts-soak
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could make aarch64-linux-artifacts-soak a variable and again parameterize with release number aarch64-linux-artifacts-soak-v4.0.0

cp -r Components/Led/test/int aarch64-linux-artifacts-soak
# Copy monitoring script from F' repo workflows
if [ -f "./fprime/.github/workflows/soak_monitor.py" ]; then
cp ./fprime/.github/workflows/soak_monitor.py aarch64-linux-artifacts-soak/soak_monitor.py
fi
- name: 'Archive Build Artifacts'
uses: actions/upload-artifact@v4
with:
name: aarch64-linux-artifacts-soak
path: aarch64-linux-artifacts-soak
retention-days: 5

deploy-service:
name: "Deploy as System Service"
runs-on: [self-hosted, ARM64]
needs: cross-compilation
steps:
- name: "Stop existing services if running"
run: |
echo "Stopping existing services if they exist..."
# Stop and disable services, || true to avoid errors

sudo systemctl stop ${FSW_SERVICE_NAME} || true
sudo systemctl disable ${FSW_SERVICE_NAME} || true
sudo systemctl stop ${GDS_SERVICE_NAME} || true
sudo systemctl disable ${GDS_SERVICE_NAME} || true

- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
sparse-checkout: 'requirements.txt'
sparse-checkout-cone-mode: false

- name: "Setup F´ Python Environment"
run: |
echo "Setting up F´ Python virtual environment..."
sudo mkdir -p ${INSTALL_DIR}/venv
sudo python3 -m venv ${INSTALL_DIR}/venv

# Activate virtual environment and install F´ requirements
sudo ${INSTALL_DIR}/venv/bin/pip install --upgrade pip
sudo ${INSTALL_DIR}/venv/bin/pip install -r requirements.txt

# Install additional packages needed for soak testing
sudo ${INSTALL_DIR}/venv/bin/pip install psutil

- name: "Artifacts Download"
uses: actions/download-artifact@v4
with:
name: aarch64-linux-artifacts-soak

- name: "Install new binary"
run: |
echo "Installing new binary to ${INSTALL_DIR}..."
sudo mkdir -p ${INSTALL_DIR}/bin
sudo mkdir -p ${INSTALL_DIR}/dict
sudo mkdir -p ${INSTALL_DIR}/test
sudo mkdir -p ${INSTALL_DIR}/logs
sudo mkdir -p ${INSTALL_DIR}/ComLoggerFiles
sudo mkdir -p ${INSTALL_DIR}/monitoring

# Copy binary, dict, and test files
sudo cp ./build-artifacts/aarch64-linux/LedBlinker/bin/LedBlinker ${INSTALL_DIR}/bin/
sudo cp -r ./build-artifacts/aarch64-linux/LedBlinker/dict/* ${INSTALL_DIR}/dict/
sudo cp -r ./int/* ${INSTALL_DIR}/test/

# Copy monitoring script if it exists
if [ -f "./soak_monitor.py" ]; then
sudo cp ./soak_monitor.py ${INSTALL_DIR}/monitoring/
sudo chmod +x ${INSTALL_DIR}/monitoring/soak_monitor.py
fi

# Clean ComLogger files directory to start fresh monitoring
echo "Cleaning ComLogger files directory for fresh monitoring session..."
sudo rm -rf ${INSTALL_DIR}/ComLoggerFiles/*

# Make binary executable
sudo chmod +x ${INSTALL_DIR}/bin/LedBlinker

# Set ownership, so service can access files
sudo chown -R ${SERVICE_USER}:${SERVICE_USER} ${INSTALL_DIR}

- name: "Create systemd service file"
run: |
echo "Creating systemd service file for LedBlinker..."
sudo tee /etc/systemd/system/${FSW_SERVICE_NAME}.service > /dev/null << EOF
[Unit]
Description=F' LED Blinker Application, system service meant for soak testing
After=network.target

[Service]
Type=simple
User=${SERVICE_USER}
WorkingDirectory=${INSTALL_DIR}
ExecStart=${INSTALL_DIR}/bin/LedBlinker -a 0.0.0.0 -p 50000
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

echo "Creating systemd service file for GDS..."
sudo tee /etc/systemd/system/${GDS_SERVICE_NAME}.service > /dev/null << EOF
[Unit]
Description=F' GDS for LED Blinker soak testing
After=network.target ${FSW_SERVICE_NAME}.service

[Service]
Type=simple
User=${SERVICE_USER}
WorkingDirectory=${INSTALL_DIR}
ExecStart=${INSTALL_DIR}/venv/bin/fprime-gds --ip-client --ip-address 127.0.0.1 --ip-port 50000 -d ${INSTALL_DIR} -n --logs ${INSTALL_DIR}/logs --framing-selection fprime
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

- name: "Start and enable services"
run: |
echo "Starting and enabling services..."
sudo systemctl daemon-reload

# start and enable gds service
sudo systemctl enable ${GDS_SERVICE_NAME}
sudo systemctl start ${GDS_SERVICE_NAME}

# start and enable binary
sudo systemctl start ${FSW_SERVICE_NAME}
sudo systemctl enable ${FSW_SERVICE_NAME}

echo "Waiting for services to stabilize..."
sleep 5 # Wait for services to stabilize

echo "Checking final service status..."
sudo systemctl status ${FSW_SERVICE_NAME} --no-pager -l -n 50
sudo systemctl status ${GDS_SERVICE_NAME} --no-pager -l -n 150
91 changes: 91 additions & 0 deletions .github/workflows/ext-aarch64-linux-led-blinker-soak-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Scheduled testing of LED blinker system service every 30 minutes
# Analyzes ComLogger logs and runs integration tests
#
# This workflow analyzes ComLogger logs: Binary .com files from ComLogger component
# and runs integration tests
#
# Note: The "Artifact not found: ledblinker-monitoring-state" error is expected on the first run
# and is handled with continue-on-error: true
#
name: "Soak Test AArch64 Linux: External Repo LedBlinker"

on:
#schedule:
# Run every 30 minutes
#- cron: '*/15 * * * *'
# Allow manual triggering for testing
workflow_dispatch:

env:
FSW_SERVICE_NAME: ledblinker-soak-fsw
GDS_SERVICE_NAME: ledblinker-soak-gds
INSTALL_DIR: /opt/ledblinker-soak

jobs:
soak-monitoring:
name: "Soak Log Analysis"
runs-on: [self-hosted, ARM64]
steps:

- name: "Run soak monitoring"
run: |
# Use the virtual environment created during setup
. ${INSTALL_DIR}/venv/bin/activate

TEST_TIMESTAMP=$(date +%Y%m%d_%H%M%S)

echo "=== Soak monitoring started at $(date) (${TEST_TIMESTAMP}) ==="

# Run the soak monitor
cd ${INSTALL_DIR}/monitoring
python3 soak_monitor.py \
--dictionary ${INSTALL_DIR}/dict/LedBlinkerTopologyDictionary.json \
--com-logs ${INSTALL_DIR}/ComLoggerFiles \



integration-test:
name: "Integration Test"
runs-on: [self-hosted, ARM64]
needs: soak-monitoring
steps:

- name: "Check service status"
run: |
echo "=== CHECKING SERVICES FOR INTEGRATION TEST ==="
echo "Checking if ${FSW_SERVICE_NAME} service is running..."
if sudo systemctl is-active --quiet ${FSW_SERVICE_NAME}; then
echo "✅ Service ${FSW_SERVICE_NAME} is running"
else
echo "❌ Service ${FSW_SERVICE_NAME} is not running"
sudo systemctl status ${FSW_SERVICE_NAME} --no-pager -l
echo "Recent FSW service logs:"
sudo journalctl -u ${FSW_SERVICE_NAME} --no-pager -n 20
exit 1
fi

echo "Checking if ${GDS_SERVICE_NAME} service is running..."
if sudo systemctl is-active --quiet ${GDS_SERVICE_NAME}; then
echo "✅ Service ${GDS_SERVICE_NAME} is running"
else
echo "❌ Service ${GDS_SERVICE_NAME} is not running"
sudo systemctl status ${GDS_SERVICE_NAME} --no-pager -l
echo "Recent GDS service logs:"
sudo journalctl -u ${GDS_SERVICE_NAME} --no-pager -n 20
exit 1
fi

- name: "Run integration tests"
run: |
# Use the virtual environment created during setup
. ${INSTALL_DIR}/venv/bin/activate

TEST_TIMESTAMP=$(date +%Y%m%d_%H%M%S)

echo "=== Integration test started at $(date) (${TEST_TIMESTAMP}) ==="

# Run the integration test
echo "Running integration tests..."
pytest --dictionary ${INSTALL_DIR}/dict/LedBlinkerTopologyDictionary.json ${INSTALL_DIR}/test/led_integration_tests.py

echo "=== Integration test completed at $(date) (${TEST_TIMESTAMP}) ==="
Loading
Loading