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:
parent
7756dd1e77
commit
d60df8176d
|
@ -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
|
||||||
|
|
||||||
|
- 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
|
nim c -d:release examples/server.nim
|
||||||
examples/server &
|
examples/server &
|
||||||
server1=$!
|
server=$!
|
||||||
|
|
||||||
nim c -d:tls -d:release -o:examples/tls_server examples/server.nim
|
|
||||||
examples/tls_server &
|
|
||||||
server2=$!
|
|
||||||
|
|
||||||
cd autobahn
|
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 --mode fuzzingclient --spec fuzzingclient_tls.json
|
||||||
|
;;
|
||||||
|
wss)
|
||||||
|
cd nim-websock/autobahn
|
||||||
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json &
|
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver.json &
|
||||||
server3=$!
|
server=$!
|
||||||
|
|
||||||
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver_tls.json &
|
|
||||||
server4=$!
|
|
||||||
|
|
||||||
wstest --mode fuzzingclient --spec fuzzingclient.json &
|
|
||||||
client1=$!
|
|
||||||
|
|
||||||
wstest --mode fuzzingclient --spec fuzzingclient_tls.json &
|
|
||||||
client2=$!
|
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
nim c -d:release examples/autobahn_client
|
nim c -d:release examples/autobahn_client
|
||||||
examples/autobahn_client &
|
examples/autobahn_client
|
||||||
client3=$!
|
;;
|
||||||
|
wssc)
|
||||||
|
cd nim-websock/autobahn
|
||||||
|
wstest --webport=0 --mode fuzzingserver --spec fuzzingserver_tls.json &
|
||||||
|
server=$!
|
||||||
|
|
||||||
|
cd ..
|
||||||
nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client
|
nim c -d:tls -d:release -o:examples/autobahn_tlsclient examples/autobahn_client
|
||||||
examples/autobahn_tlsclient &
|
examples/autobahn_tlsclient
|
||||||
client4=$!
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
wait $client1 $client2 $client3 $client4
|
kill $server
|
||||||
kill $server1
|
|
||||||
kill $server2
|
- name: Upload Autobahn result
|
||||||
kill $server3
|
uses: actions/upload-artifact@v2
|
||||||
kill $server4
|
with:
|
||||||
|
name: autobahn-report
|
||||||
|
path: ./nim-websock/autobahn/reports
|
||||||
|
|
||||||
|
deploy-test:
|
||||||
|
if: github.event_name == 'push'
|
||||||
|
name: "Deplay Autobahn results"
|
||||||
|
needs: autobahn-test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Download Autobahn reports
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: autobahn-report
|
||||||
|
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
|
||||||
|
|
Loading…
Reference in New Issue