restructure CI jobs to parallelise autobahn test (#70)

previously we are using bash to run parallel autobahn test.
now we leverage CI jobs to run parallel tests.

with the inclusion of compression extension,
the autobahn test suite took significant time
to pass. move it to manually triggered CI
as it cannot make the main CI to fail anyway.

we only run basic autobahn tests in regular CI.
This commit is contained in:
andri lim 2021-07-19 23:15:52 +07:00 committed by GitHub
parent 7756dd1e77
commit d60df8176d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 110 additions and 34 deletions

View File

@ -1,6 +1,12 @@
name: CI
on: [push, pull_request]
# we dont run compression extension
# in regular CI because it is a
# time consuming operation.
# we delegate it to manually triggered CI
# and only run base autobahn tests here.
jobs:
build:
strategy:
@ -201,16 +207,54 @@ jobs:
nimble install -y --depsOnly
nimble test
autobahn-test:
if: github.event_name == 'push'
name: "Autobahn test suite"
runs-on: ubuntu-20.04
strategy:
fail-fast: false
max-parallel: 20
matrix:
websock: [ws, wsc, wss, wssc]
steps:
- name: Checkout nim-websock
uses: actions/checkout@v2
with:
path: nim-websock
submodules: true
- name: Get latest nimbus-build-system commit hash
id: versions
shell: bash
run: |
getHash() {
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
}
nbsHash=$(getHash status-im/nimbus-build-system)
echo "::set-output name=nimbus_build_system::$nbsHash"
- name: Restore prebuilt Nim from cache
id: nim-cache
uses: actions/cache@v2
with:
path: NimBinaries
key: 'NimBinaries-${{ steps.versions.outputs.nimbus_build_system }}'
- name: Build Nim and associated tools
shell: bash
run: |
curl -O -L -s -S https://raw.githubusercontent.com/status-im/nimbus-build-system/master/scripts/build_nim.sh
env MAKE="make -j2" ARCH_OVERRIDE=x64 CC=gcc bash build_nim.sh nim csources dist/nimble NimBinaries
echo '${{ github.workspace }}/nim/bin' >> $GITHUB_PATH
- name: Setup Python version
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
uses: actions/setup-python@v2
with:
python-version: pypy-2.7
- name: Setup and run Autobahn test suite.
# we switch to linux because
# kill $(pidof server) not working on macos
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
- name: Setup Autobahn.
run: |
sudo apt-get install -y python-dev
pip install virtualenv
@ -218,51 +262,83 @@ jobs:
virtualenv --python=/usr/bin/python2 autobahn
source autobahn/bin/activate
pip install autobahntestsuite
cd nim-websock
nimble install -y --depsOnly
- name: Generate index.html
if: matrix.websock == 'ws'
run: |
cd nim-websock
mkdir autobahn/reports
sed -i "s/COMMIT_SHA_SHORT/${GITHUB_SHA::7}/g" autobahn/index.md
sed -i "s/COMMIT_SHA/$GITHUB_SHA/g" autobahn/index.md
markdown2 autobahn/index.md > autobahn/reports/index.html
nim c -d:release examples/server.nim
examples/server &
server1=$!
- name: Run Autobahn test suite.
run: |
source autobahn/bin/activate
case '${{ matrix.websock }}' in
ws)
cd nim-websock
nim c -d:release examples/server.nim
examples/server &
server=$!
nim c -d:tls -d:release -o:examples/tls_server examples/server.nim
examples/tls_server &
server2=$!
cd autobahn
wstest --mode fuzzingclient --spec fuzzingclient.json
;;
wsc)
cd nim-websock
nim c -d:tls -d:release -o:examples/tls_server examples/server.nim
examples/tls_server &
server=$!
cd autobahn
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json &
server3=$!
cd autobahn
wstest --mode fuzzingclient --spec fuzzingclient_tls.json
;;
wss)
cd nim-websock/autobahn
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json &
server=$!
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver_tls.json &
server4=$!
cd ..
nim c -d:release examples/autobahn_client
examples/autobahn_client
;;
wssc)
cd nim-websock/autobahn
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver_tls.json &
server=$!
wstest --mode fuzzingclient --spec fuzzingclient.json &
client1=$!
cd ..
nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client
examples/autobahn_tlsclient
;;
esac
wstest --mode fuzzingclient --spec fuzzingclient_tls.json &
client2=$!
kill $server
cd ..
nim c -d:release examples/autobahn_client
examples/autobahn_client &
client3=$!
- name: Upload Autobahn result
uses: actions/upload-artifact@v2
with:
name: autobahn-report
path: ./nim-websock/autobahn/reports
nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client
examples/autobahn_tlsclient &
client4=$!
deploy-test:
if: github.event_name == 'push'
name: "Deplay Autobahn results"
needs: autobahn-test
runs-on: ubuntu-latest
steps:
wait $client1 $client2 $client3 $client4
kill $server1
kill $server2
kill $server3
kill $server4
- name: Download Autobahn reports
uses: actions/download-artifact@v2
with:
name: autobahn-report
path: ./autobahn_reports
- name: Deploy autobahn report.
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./nim-websock/autobahn/reports
publish_dir: ./autobahn_reports