Run openssl quic interop testing #481
This file contains hidden or 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: "Run openssl quic interop testing" | |
| on: | |
| schedule: | |
| - cron: '40 02 * * *' | |
| workflow_dispatch: | |
| inputs: | |
| only_interop: | |
| type: boolean | |
| required: false | |
| default: false | |
| description: "Run only interop jobs (skip building/pushing containers)" | |
| permissions: {} | |
| jobs: | |
| update_quay_container: | |
| if: ${{ github.repository == 'openssl/openssl' && !inputs.only_interop }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| persist-credentials: false | |
| - name: "log in to quay.io" | |
| run: | | |
| docker login -u openssl-ci+machine -p ${{ secrets.QUAY_IO_PASSWORD }} quay.io | |
| - name: "Build container" | |
| run: | | |
| cd test/quic-openssl-docker/ | |
| docker build -t quay.io/openssl-ci/openssl-quic-interop:latest . | |
| - name: "Push to quay" | |
| run: | | |
| docker push quay.io/openssl-ci/openssl-quic-interop:latest | |
| update_msquic_quay_container: | |
| if: ${{ github.repository == 'openssl/openssl' && !inputs.only_interop }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| repository: microsoft/msquic | |
| ref: main | |
| submodules: recursive | |
| persist-credentials: false | |
| - name: "log in to quay.io" | |
| run: | | |
| docker login -u openssl-ci+machine -p ${{ secrets.QUAY_IO_PASSWORD }} quay.io | |
| - name: Patch qns.Dockerfile | |
| run: | | |
| sed -i 's/RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on ../RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on -DQUIC_TLS_LIB=openssl ../' ./scripts/qns.Dockerfile | |
| if grep -q "RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on -DQUIC_TLS_LIB=openssl .." ./scripts/qns.Dockerfile; then echo "Patched successfully"; else exit 1; fi | |
| - name: "Build container" | |
| run: | | |
| docker build -f ./scripts/qns.Dockerfile -t quay.io/openssl-ci/msquic-openssl:latest . | |
| - name: "Push to quay" | |
| run: | | |
| docker push quay.io/openssl-ci/msquic-openssl:latest | |
| run_quic_interop_openssl_client: | |
| if: ${{ !inputs.only_interop }} | |
| needs: [update_quay_container, update_msquic_quay_container] | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| tests: [http3, transfer, handshake, retry, chacha20, resumption, multiplexing, ipv6] | |
| servers: [quic-go, ngtcp2, mvfst, quiche, nginx, msquic, haproxy, msquic-openssl] | |
| exclude: | |
| - servers: msquic | |
| tests: retry | |
| - servers: msquic-openssl | |
| tests: retry | |
| fail-fast: false | |
| steps: &client_steps | |
| - uses: actions/checkout@v5 | |
| with: | |
| repository: 'quic-interop/quic-interop-runner' | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - name: Install python requirements | |
| run: | | |
| for i in {1..3}; do pip install -r requirements.txt && break; sleep 10; done | |
| - name: Add tshark repo | |
| run: | | |
| for i in {1..3}; do sudo add-apt-repository ppa:wireshark-dev/stable && break; sleep 10; done | |
| - name: Update apt repos | |
| run: | | |
| for i in {1..3}; do sudo apt-get update && break; sleep 10; done | |
| - name: Install tshark | |
| run: | | |
| for i in {1..3}; do sudo apt-get install -y tshark && break; sleep 10; done | |
| - name: Patch implementations file | |
| run: | | |
| jq '. + { | |
| "openssl": { image: "quay.io/openssl-ci/openssl-quic-interop" | |
| , url: "https://github.com/openssl/openssl" | |
| , role: "both" | |
| }, | |
| "msquic-openssl": { image: "quay.io/openssl-ci/msquic-openssl" | |
| , url: "https://github.com/microsoft/msquic" | |
| , role: "both" | |
| }}' ./implementations.json > ./implementations.tmp | |
| mv ./implementations.tmp implementations.json | |
| - name: Set up docker | |
| uses: docker/setup-docker-action@efe9e3891a4f7307e689f2100b33a155b900a608 # v4.5.0 | |
| with: | |
| version: "28.1.1" | |
| - name: Set up docker compose | |
| uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746 # v1.2.0 | |
| with: | |
| version: "v2.36.2" | |
| - name: Check docker version | |
| run: | | |
| docker version | |
| docker compose version | |
| - name: "Run interop with openssl client" | |
| run: | | |
| python3 ./run.py -c openssl -t ${{ matrix.tests }} -s ${{ matrix.servers }} --log-dir ./logs-client -d | |
| run_quic_interop_openssl_server: | |
| if: ${{ !inputs.only_interop }} | |
| needs: [update_quay_container, update_msquic_quay_container] | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| tests: [http3, transfer, handshake, retry, chacha20, resumption, amplificationlimit, ipv6] | |
| clients: [quic-go, ngtcp2, mvfst, quiche, msquic, openssl, chrome, msquic-openssl] | |
| exclude: | |
| - clients: mvfst | |
| tests: amplificationlimit | |
| fail-fast: false | |
| steps: &server_steps | |
| - uses: actions/checkout@v5 | |
| with: | |
| repository: 'quic-interop/quic-interop-runner' | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - name: Install python requirements | |
| run: | | |
| for i in {1..3}; do pip install -r requirements.txt && break; done | |
| - name: Add tshark repo | |
| run: | | |
| for i in {1..3}; do sudo add-apt-repository ppa:wireshark-dev/stable && break; done | |
| - name: Update apt repos | |
| run: | | |
| for i in {1..3}; do sudo apt-get update && break; done | |
| - name: Install tshark | |
| run: | | |
| for i in {1..3}; do sudo apt-get install -y tshark && break; done | |
| - name: Patch implementations file | |
| run: | | |
| jq '. + { | |
| "openssl": { image: "quay.io/openssl-ci/openssl-quic-interop" | |
| , url: "https://github.com/openssl/openssl" | |
| , role: "both" | |
| }, | |
| "msquic-openssl": { image: "quay.io/openssl-ci/msquic-openssl" | |
| , url: "https://github.com/microsoft/msquic" | |
| , role: "both" | |
| }}' ./implementations.json > ./implementations.tmp | |
| mv ./implementations.tmp implementations.json | |
| - name: Set up docker | |
| uses: docker/setup-docker-action@efe9e3891a4f7307e689f2100b33a155b900a608 # v4.5.0 | |
| with: | |
| version: "28.1.1" | |
| - name: Set up docker compose | |
| uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746 # v1.2.0 | |
| with: | |
| version: "v2.36.2" | |
| - name: Check docker version | |
| run: | | |
| docker version | |
| docker compose version | |
| - name: "Run interop with openssl server" | |
| run: | | |
| python3 ./run.py -s openssl -t "${{ matrix.tests }}" -c "${{ matrix.clients }}" --log-dir ./logs-server -d | |
| run_quic_interop_openssl_client_only: | |
| if: ${{ inputs.only_interop }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| tests: [http3, transfer, handshake, retry, chacha20, resumption, multiplexing, ipv6] | |
| servers: [quic-go, ngtcp2, mvfst, quiche, nginx, msquic, haproxy, msquic-openssl] | |
| exclude: | |
| - servers: msquic | |
| tests: retry | |
| - servers: msquic-openssl | |
| tests: retry | |
| fail-fast: false | |
| steps: *client_steps | |
| run_quic_interop_openssl_server_only: | |
| if: ${{ inputs.only_interop }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| tests: [http3, transfer, handshake, retry, chacha20, resumption, amplificationlimit, ipv6] | |
| clients: [quic-go, ngtcp2, mvfst, quiche, msquic, openssl, chrome, msquic-openssl] | |
| exclude: | |
| - clients: mvfst | |
| tests: amplificationlimit | |
| fail-fast: false | |
| steps: *server_steps |