-
Notifications
You must be signed in to change notification settings - Fork 225
119 lines (103 loc) · 3.92 KB
/
build-run-app.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
name: Build And Run
on:
workflow_call:
inputs:
# Optional inputs
app-name:
description: Application name, if different from repo name
type: string
required: false
default: ${{ github.event.repository.name }}
startup-string:
description: Startup string to confirm, default will use "<APP> Initialized."
type: string
required: false
default: ''
# Force bash to apply pipefail option so pipeline failures aren't masked
defaults:
run:
shell: bash
jobs:
# Checks for duplicate actions. Skips push actions if there is a matching or
# duplicate pull-request action.
checks-for-duplicates:
runs-on: ubuntu-latest
# Map a step output to a job output
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@master
with:
concurrent_skipping: 'same_content'
skip_after_successful_duplicate: 'true'
do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]'
build-and-run:
needs: checks-for-duplicates
if: ${{ needs.checks-for-duplicates.outputs.should_skip != 'true' || contains(github.ref, 'main') }}
name: Build and run app, confirm startup message
runs-on: ubuntu-20.04
steps:
- name: Set up environment variables
# Apps typically use lowercase targets and uppercase names, this logic is fragile but works
run: |
echo "APP_UPPER=$(echo ${{ inputs.app-name }} | sed 's/[a-z]/\U&/g')" >> $GITHUB_ENV
echo "APP_LOWER=$(echo ${{ inputs.app-name }} | sed 's/[A-Z]/\L&/g')" >> $GITHUB_ENV
- name: Set up start string for verification
run: |
if [[ "${{ inputs.startup-string }}" == '' ]]; then
echo "START_STRING=$APP_UPPER Initialized." >> $GITHUB_ENV
else
echo "START_STRING=${{ inputs.startup-string }}" >> $GITHUB_ENV
fi
- name: Checkout Bundle Main
uses: actions/checkout@v4
with:
submodules: true
repository: nasa/cFS
- name: Checkout Repo
uses: actions/checkout@v4
with:
path: apps/${{ env.APP_LOWER }}
- name: Copy Files
run: |
cp ./cfe/cmake/Makefile.sample Makefile
cp -r ./cfe/cmake/sample_defs sample_defs
- name: Add To Build
run: |
sed -i "/list(APPEND MISSION_GLOBAL_APPLIST/a list(APPEND MISSION_GLOBAL_APPLIST $APP_LOWER)" sample_defs/targets.cmake
- name: Add To Startup
run: |
sed -i "1i CFE_APP, $APP_LOWER, ${APP_UPPER}_AppMain, $APP_UPPER, 80, 16384, 0x0, 0;" sample_defs/cpu1_cfe_es_startup.scr
cat sample_defs/cpu1_cfe_es_startup.scr
- name: Make install
run: make SIMULATION=native BUILDTYPE=release OMIT_DEPRECATED=true install
- name: Run cFS
working-directory: ./build/exe/cpu1
run: |
./core-cpu1 > ../../../cFS_startup_cpu1.txt &
sleep 30
../host/cmdUtil --endian=LE --pktid=0x1806 --cmdcode=2 --half=0x0002
- name: Archive results
uses: actions/upload-artifact@v4
with:
name: cFS_startup_log
path: cFS_startup_cpu1.txt
- name: Confirm startup string
run: |
if [[ -z $(grep "$START_STRING" cFS_startup_cpu1.txt) ]]; then
echo "Startup verification string not found in log: $START_STRING"
echo ""
echo "Possible related event messages:"
grep "/$APP_UPPER " cFS_startup_cpu1.txt
exit -1
fi
- name: Check for cFS Warnings
if: success() || failure()
run: |
if [[ -n $(grep -i "warn\|err\|fail" cFS_startup_cpu1.txt) ]]; then
echo "cFS startup warn|err|fail:"
echo ""
grep -i 'warn\|err\|fail' cFS_startup_cpu1.txt
exit -1
fi