Update CI to use Json dictionaries (#2806)

* Change CI to use Json dictionaries

* Bumping to gds/tools for alpha release of JSON dictionary

* Change Workflow RPI Dictionary to JSON

* Install requirements.txt on RPIs for integration tests

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
This commit is contained in:
Alex Mariano 2024-08-26 15:14:53 -07:00 committed by GitHub
parent fd117428d2
commit 4476828cb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 28 additions and 13 deletions

View File

@ -17,7 +17,7 @@ on:
- '.github/ISSUE_TEMPLATE/**' - '.github/ISSUE_TEMPLATE/**'
env: env:
RPI_TOOLCHAIN_DIR: /tmp/rpi-toolchain RPI_TOOLCHAIN_DIR: /tmp/rpi-toolchain
DICTIONARY_PATH: build-artifacts/raspberrypi/RPI/dict/RPITopologyAppDictionary.xml DICTIONARY_PATH: build-artifacts/raspberrypi/RPI/dict/RPITopologyDictionary.json
# A workflow run is made up of one or more jobs that can run sequentially or in parallel # A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs: jobs:
RPI: RPI:
@ -55,12 +55,23 @@ jobs:
runs-on: self-hosted runs-on: self-hosted
needs: RPI needs: RPI
steps: steps:
- uses: actions/checkout@v4
with:
sparse-checkout: 'requirements.txt'
- name: "Setup environment"
run: |
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
- name: RPI Build Download - name: RPI Build Download
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
name: rpi-build name: rpi-build
- name: RPI Integration Tests - name: RPI Integration Tests
run: chmod +x RPI/build-artifacts/raspberrypi/RPI/bin/RPI; /bin/bash ci/tests/RPI-Ints.bash run: |
chmod +x RPI/build-artifacts/raspberrypi/RPI/bin/RPI
. venv/bin/activate
/bin/bash ci/tests/RPI-Ints.bash
# Archive the outputs # Archive the outputs
- name: 'Archive Logs' - name: 'Archive Logs'
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3

View File

@ -70,11 +70,15 @@ jobs:
runs-on: self-hosted runs-on: self-hosted
needs: cross-compilation needs: cross-compilation
steps: steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
sparse-checkout: 'requirements.txt'
- name: "Setup environment" - name: "Setup environment"
run: | run: |
python -m venv venv python -m venv venv
. venv/bin/activate . venv/bin/activate
pip install fprime-gds pip install -r requirements.txt
- name: "Artifacts Download" - name: "Artifacts Download"
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
@ -86,7 +90,7 @@ jobs:
chmod +x ./build-artifacts/raspberrypi/LedBlinker/bin/LedBlinker chmod +x ./build-artifacts/raspberrypi/LedBlinker/bin/LedBlinker
fprime-gds --ip-client -d ./build-artifacts/raspberrypi/LedBlinker --logs ./ci-logs & fprime-gds --ip-client -d ./build-artifacts/raspberrypi/LedBlinker --logs ./ci-logs &
sleep 10 sleep 10
pytest --dictionary ./build-artifacts/raspberrypi/LedBlinker/dict/LedBlinkerTopologyAppDictionary.xml ./int/led_integration_tests.py pytest --dictionary ./build-artifacts/raspberrypi/LedBlinker/dict/LedBlinkerTopologyDictionary.json ./int/led_integration_tests.py
- name: 'Archive logs' - name: 'Archive logs'
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
if: always() if: always()

View File

@ -83,7 +83,7 @@ home network where the pi and the user's computer are connected to the same netw
``` ```
cd fprime/RPI cd fprime/RPI
fprime-gds -n --dictionary ./build-artifacts/raspberrypi/dict/RPITopologyAppDictionary.xml fprime-gds -n --dictionary ./build-artifacts/raspberrypi/dict/RPITopologyDictionary.json
``` ```
The ground station should now appear in the user's default browser. Should the user wish to terminate the ground system, return to that terminal The ground station should now appear in the user's default browser. Should the user wish to terminate the ground system, return to that terminal
and press CTRL-C to shut it down. Please allow it a few moments to finalize and exit. The user may then kill the browser tab displaying the GUI. and press CTRL-C to shut it down. Please allow it a few moments to finalize and exit. The user may then kill the browser tab displaying the GUI.

View File

@ -69,7 +69,7 @@ function integration_test_run {
mkdir -p "${LOG_DIR}/gds-logs" mkdir -p "${LOG_DIR}/gds-logs"
# Start the GDS layer and give it time to run # Start the GDS layer and give it time to run
echo "[INFO] Starting headless GDS layer" echo "[INFO] Starting headless GDS layer"
fprime-gds -n --dictionary "${ROOTDIR}/"*"/${BINARY}/dict/${BINARY}TopologyAppDictionary.xml" -g none -l "${LOG_DIR}/gds-logs" 1>${LOG_DIR}/gds-logs/fprime-gds.stdout.log 2>${LOG_DIR}/gds-logs/fprime-gds.stderr.log & fprime-gds -n --dictionary "${ROOTDIR}/"*"/${BINARY}/dict/${BINARY}TopologyDictionary.json" -g none -l "${LOG_DIR}/gds-logs" 1>${LOG_DIR}/gds-logs/fprime-gds.stdout.log 2>${LOG_DIR}/gds-logs/fprime-gds.stderr.log &
GDS_PID=$! GDS_PID=$!
# run the app with valgrind in the background # run the app with valgrind in the background
if command -v valgrind &> /dev/null if command -v valgrind &> /dev/null

View File

@ -152,12 +152,12 @@ Retrieval Options:
As mentioned, these CLI commands let you interact with the GDS through events and commands, and telemetry channels. As mentioned, these CLI commands let you interact with the GDS through events and commands, and telemetry channels.
Through a *project F´ dictionary* the CLI can understand what commands, events and telemetry channels are available. Through a *project F´ dictionary* the CLI can understand what commands, events and telemetry channels are available.
Every F´ project deployment will have a `*Dictionary.xml` file that's created when the project's deployment is built Every F´ project deployment will have a `*Dictionary.json` file that's created when the project's deployment is built
In the `Ref` example project, it'll be the `Ref/Top/RefTopologyAppDictionary.xml` file. By reading this file, the CLI In the `Ref` example project, it'll be the `Ref/Top/RefTopologyDictionary.json` file. By reading this file, the CLI
tool knows what to look for when it's reading or sending data to the GDS. If it doesn't know where the dictionary is, tool knows what to look for when it's reading or sending data to the GDS. If it doesn't know where the dictionary is,
then the CLI tool can't do much beyond printing out help messages. then the CLI tool can't do much beyond printing out help messages.
When you run one of the CLI commands, the tool will automatically look for files ending in `Dictionary.xml` in your When you run one of the CLI commands, the tool will automatically look for files ending in `Dictionary.json` in your
current working directory and use the first one it can find. This behavior is similar to how `fprime-gds` searches for current working directory and use the first one it can find. This behavior is similar to how `fprime-gds` searches for
dictionaries it uses to construct the browser GUI. If it can't find any dictionaries, it will print out an error message dictionaries it uses to construct the browser GUI. If it can't find any dictionaries, it will print out an error message
like this: like this:
@ -168,7 +168,7 @@ fprime-cli: error: No valid project dictionary found
Running commands from your project folder (e.g. inside `fprime/Ref`) should work to find a dictionary, but if you want Running commands from your project folder (e.g. inside `fprime/Ref`) should work to find a dictionary, but if you want
to run commands for a different deployment or project, you can specify the dictionary file exactly using the to run commands for a different deployment or project, you can specify the dictionary file exactly using the
`--dictionary` option with the file's path. `fprime-cli command-send --dictionary Ref/Top/RefTopologyAppDictionary.xml`. `--dictionary` option with the file's path. `fprime-cli command-send --dictionary Ref/Top/RefTopologyDictionary.json`.
### Using the Tools ### Using the Tools

View File

@ -37,7 +37,7 @@ Below is an example of how to run the sample example sequence with the Ref dicti
dictionary will not be generated. dictionary will not be generated.
``` ```
fprime-seqgen fprime/Gds/examples/simple_sequence.seq -d fprime/Ref/build-artifacts/*/dict/RefTopologyAppDictionary.xml fprime-seqgen fprime/Gds/examples/simple_sequence.seq -d fprime/Ref/build-artifacts/*/dict/RefTopologyDictionary.json
``` ```
Here the output file is not specified, so it will be a new file in the same directory as the sequence but ending with Here the output file is not specified, so it will be a new file in the same directory as the sequence but ending with

View File

@ -30,8 +30,8 @@ fprime-fpp-to-cpp==2.1.0
fprime-fpp-to-dict==2.1.0 fprime-fpp-to-dict==2.1.0
fprime-fpp-to-json==2.1.0 fprime-fpp-to-json==2.1.0
fprime-fpp-to-xml==2.1.0 fprime-fpp-to-xml==2.1.0
fprime-gds==3.4.3 fprime-gds==v3.4.4a2
fprime-tools==3.4.4 fprime-tools==v3.4.5a1
fprime-visual==1.0.2 fprime-visual==1.0.2
gcovr==6.0 gcovr==6.0
idna==3.4 idna==3.4