-
Notifications
You must be signed in to change notification settings - Fork 1
162 lines (142 loc) · 6.25 KB
/
swarco_itc2.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
name: Swarco ITC-2
on:
pull_request:
types: [ labeled ]
schedule:
# schedule runs only on the default branch. time is in UTC.
# * is a special character in YAML so you have to quote this string.
# run every night at 3:45AM UTC.
- cron: '45 0 * * *'
jobs:
test:
if: ${{ github.event_name == 'schedule' || github.event.label.name == 'equipment' }}
runs-on: ubuntu-22.04
steps:
- name: Install prerequisites
run: |
sudo apt-get update
sudo apt-get -y install gcc-mingw-w64-i686 binfmt-support qemu-user-static xvfb xdotool ffmpeg jq
- name: Install wine32
run: |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
sudo dpkg --add-architecture i386
sudo apt-get update -qq
sudo apt-get install -yqq --allow-downgrades libc6:i386 libgcc-s1:i386 libstdc++6:i386 wine
- name: Checkout repo
uses: actions/checkout@v3
- name: Install Ruby and gems
uses: ruby/setup-ruby@v1
with:
bundler-cache: true # runs 'bundle install' and caches installed gems
- name: Download simulator
if: steps.cache-simulator.outputs.cache-hit != 'true'
run: |
mkdir bin
URL=$(curl 'https://ckdatabasews.icloud.com/database/1/com.apple.cloudkit/production/public/records/resolve' \
--data-raw '{"shortGUIDs":[{"value":"046MP_5CfrnFI72sUS-jIUQnQ"}]}' --compressed | jq -r '.results[0].rootRecord.fields.fileContent.value.downloadURL')
wget --quiet -O bin/simulator.exe "$URL"
URL=$(curl 'https://ckdatabasews.icloud.com/database/1/com.apple.cloudkit/production/public/records/resolve' \
--data-raw '{"shortGUIDs":[{"value":"0eehofH2tHgAKy3z_FHKO0zaw"}]}' --compressed | jq -r '.results[0].rootRecord.fields.fileContent.value.downloadURL')
wget --quiet -O bin/rootfs "$URL"
- name: Install simulator
run: |
echo "${{ secrets.ITC2_INSTALL }}" > install.sh
chmod +x install.sh
./install.sh
- name: Apply workaround
run: |
echo -e "#include <stdio.h>\nint main() {fflush(stdout);getchar();return 0;}" > itc.c
i686-w64-mingw32-gcc-win32 itc.c -o itc.exe
mv sim/lib/itc.exe sim/lib/itc-orig.exe
mv itc.exe sim/lib/itc.exe
- name: Install simulator. part 2
run: |
echo "${{ secrets.ITC2_RING }}" > ring
echo "${{ secrets.ITC2_INSTALL2 }}" > install2.sh
chmod +x install2.sh
./install2.sh
- name: Install TLC configuration
run: |
# copy tlc config
cp config/swarco_itc2/*.PTC2 sim
# copy rsmp config
mkdir -p itc_root/home/swarco/rsmp/config
sudo cp config/swarco_itc2/config.json itc_root/home/swarco/rsmp/config/
- name: Start simulator executable
timeout-minutes: 5
working-directory: sim
env:
DISPLAY: :0
run: |
Xvfb & # start display server
nohup wine simulator.exe *.PTC2 >/tmp/itc-sim.log 2>/tmp/itc-sim-2.log &
- name: Start screencast
run: nohup ffmpeg -y -r 5 -f x11grab -s 1280x1024 -i :0+nomouse -c:v libx264rgb -crf 15 -preset:v ultrafast -af aresample=async=1:first_pts=0 output.mkv &
- name: Wait until simulator executable has started
timeout-minutes: 5
run: |
while ! grep -q "File saved." /tmp/itc-sim.log; do sleep 1; done
sleep 1
while ! xdotool search --name "ITC"; do sleep 1; done
sleep 1
env:
DISPLAY: :0
- name: Start simulation
timeout-minutes: 5
run: xdotool search --name "ITC" key --clearmodifiers --delay 200 "ctrl+r"
env:
DISPLAY: :0
- name: Verify that simulation has started
timeout-minutes: 5
env:
LOG: /tmp/itc-sim-2.log
run: while ! grep -q "Start called." $LOG; do sleep 1; done
- name: Start main TLC executable
run: |
export LISTEN=`grep listen /tmp/itc-sim.log | sed 's/.*--listen 0.0.0.0://' | sed 's/ --config.*//'`
export TMP=`grep location /tmp/itc-sim.log | sed 's/.*itc2sim//' | sed 's/\\\itc.xml//' | sed 's/\r//'`
export SIMDIR=~/.wine/drive_c/users/$USER/Temp/itc2sim$TMP
cd ~/.wine/drive_c/users/$USER/Temp/itc2sim$TMP
sed -i '37d' itc.xml
sed -i '36 a\ <communication type="ethernet"><parameters remote-address="127.0.1.1:4000"/></communication>' itc.xml
cd -
cp sim/lib/*.exe $SIMDIR
cp sim/lib/*.dll $SIMDIR
cd ~/.wine/drive_c/users/$USER/Temp/itc2sim$TMP
nohup wine itc-orig.exe --listen 0.0.0.0:$LISTEN --config itc.xml --access itc-cmd-access.xml -v >/dev/null &
cd -
# Start rsmp service
sudo -b chroot itc_root/ /etc/init.d/user-appl-available.d/90_rsmp restart >/dev/null
- name: Wait for simulator to start
timeout-minutes: 5
run: |
LISTEN=`grep listen /tmp/itc-sim.log | sed 's/.*--listen 0.0.0.0://' | sed 's/ --config.*//'`
DATE=`date +%Y-%m-%d`
TIME=`date +%H-%M-%S`
LEVEL1="${{ secrets.ITC2_LEVEL1 }}"
# Set date in TLC
echo -e "LOGIN USER -l 1 $LEVEL1\nF102N1=$DATE\nF101N1=$TIME\nEXIT" | nc localhost $LISTEN
# Wait for simulator to start and completes startup sequence
until `echo -e "ITC\nEXIT" | nc localhost $LISTEN | grep -q -a "3-light"`; do echo Waiting...; sleep 5; done
- name: Run tests
run: bundle exec rspec --format Validator::Brief --format Validator::Details --out log/validation.log spec/site/tlc
env:
SITE_CONFIG: config/swarco_itc2.yaml
- name: Show detailed log
if: always()
run: cat log/validation.log
- name: Rename validation.log
if: always()
run: mv log/validation.log log/validation_itc2_$(date +%F_%H-%M-%S).log
- name: Upload validation.log
if: always()
uses: actions/upload-artifact@v3
with:
name: rspec validation
path: log/validation_itc2_*.log
- name: Upload screencast
if: always()
uses: actions/upload-artifact@v3
with:
name: screencast
path: output.mkv