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 name: CI
on: [push, pull_request] 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: jobs:
build: build:
strategy: strategy:
@ -201,16 +207,54 @@ jobs:
nimble install -y --depsOnly nimble install -y --depsOnly
nimble test 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 - name: Setup Python version
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: pypy-2.7 python-version: pypy-2.7
- name: Setup and run Autobahn test suite. - name: Setup Autobahn.
# we switch to linux because
# kill $(pidof server) not working on macos
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
run: | run: |
sudo apt-get install -y python-dev sudo apt-get install -y python-dev
pip install virtualenv pip install virtualenv
@ -218,51 +262,83 @@ jobs:
virtualenv --python=/usr/bin/python2 autobahn virtualenv --python=/usr/bin/python2 autobahn
source autobahn/bin/activate source autobahn/bin/activate
pip install autobahntestsuite pip install autobahntestsuite
cd nim-websock
nimble install -y --depsOnly
- name: Generate index.html
if: matrix.websock == 'ws'
run: |
cd nim-websock cd nim-websock
mkdir autobahn/reports mkdir autobahn/reports
sed -i "s/COMMIT_SHA_SHORT/${GITHUB_SHA::7}/g" autobahn/index.md sed -i "s/COMMIT_SHA_SHORT/${GITHUB_SHA::7}/g" autobahn/index.md
sed -i "s/COMMIT_SHA/$GITHUB_SHA/g" autobahn/index.md sed -i "s/COMMIT_SHA/$GITHUB_SHA/g" autobahn/index.md
markdown2 autobahn/index.md > autobahn/reports/index.html markdown2 autobahn/index.md > autobahn/reports/index.html
nim c -d:release examples/server.nim - name: Run Autobahn test suite.
examples/server & run: |
server1=$! 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 cd autobahn
examples/tls_server & wstest --mode fuzzingclient --spec fuzzingclient.json
server2=$! ;;
wsc)
cd nim-websock
nim c -d:tls -d:release -o:examples/tls_server examples/server.nim
examples/tls_server &
server=$!
cd autobahn cd autobahn
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json & wstest --mode fuzzingclient --spec fuzzingclient_tls.json
server3=$! ;;
wss)
cd nim-websock/autobahn
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json &
server=$!
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver_tls.json & cd ..
server4=$! 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 & cd ..
client1=$! nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client
examples/autobahn_tlsclient
;;
esac
wstest --mode fuzzingclient --spec fuzzingclient_tls.json & kill $server
client2=$!
cd .. - name: Upload Autobahn result
nim c -d:release examples/autobahn_client uses: actions/upload-artifact@v2
examples/autobahn_client & with:
client3=$! name: autobahn-report
path: ./nim-websock/autobahn/reports
nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client deploy-test:
examples/autobahn_tlsclient & if: github.event_name == 'push'
client4=$! name: "Deplay Autobahn results"
needs: autobahn-test
runs-on: ubuntu-latest
steps:
wait $client1 $client2 $client3 $client4 - name: Download Autobahn reports
kill $server1 uses: actions/download-artifact@v2
kill $server2 with:
kill $server3 name: autobahn-report
kill $server4 path: ./autobahn_reports
- name: Deploy autobahn report. - name: Deploy autobahn report.
if: runner.os == 'linux' && matrix.target.cpu == 'amd64' && github.event_name == 'push'
uses: peaceiris/actions-gh-pages@v3 uses: peaceiris/actions-gh-pages@v3
with: with:
personal_token: ${{ secrets.GITHUB_TOKEN }} personal_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./nim-websock/autobahn/reports publish_dir: ./autobahn_reports