Swarco ITC-2 #827
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |