Move CI to GitHub Actions (#321) #4
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: ngtcp2 | |
on: | |
push: | |
branches: [ 'main' ] | |
paths: ['.github/workflows/ngtcp2.yml', 'ngtcp2/**'] | |
pull_request: | |
branches: [ 'main' ] | |
paths: ['.github/workflows/ngtcp2.yml', 'ngtcp2/**'] | |
workflow_call: | |
inputs: | |
build_main: | |
description: "Build using liboqs and oqsprovider main branches" | |
required: false | |
default: false | |
type: boolean | |
release_tag: | |
description: "Which docker tag to push to" | |
required: false | |
type: string | |
workflow_dispatch: | |
inputs: | |
build_main: | |
description: "Build using liboqs and oqsprovider main branches" | |
required: false | |
default: false | |
type: boolean | |
release_tag: | |
description: "Which docker tag to push to" | |
required: false | |
type: string | |
env: | |
build-args: | | |
LIBOQS_TAG=main | |
OQSPROVIDER_TAG=main | |
push: ${{ github.repository == 'open-quantum-safe/oqs-demos' && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && inputs.build_main != 'true' }} | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- arch: x86_64 | |
runner: ubuntu-latest | |
- arch: arm64 | |
runner: oqs-arm64 | |
runs-on: ${{ matrix.runner }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/login-action@v3 | |
if: env.push == 'true' | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build the server Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
load: true | |
context: ngtcp2 | |
file: ngtcp2/Dockerfile-server | |
build-args: | | |
MAKE_DEFINES=-j4 | |
${{ (inputs.build_main == 'true') && env.build-args || null }} | |
tags: oqs-ngtcp2-server | |
- name: Build the client Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
load: true | |
context: ngtcp2 | |
file: ngtcp2/Dockerfile-client | |
build-args: | | |
MAKE_DEFINES=-j4 | |
${{ (inputs.build_main == 'true') && env.build-args || null }} | |
tags: oqs-ngtcp2-client | |
- name: Test ngtcp2 using local docker network | |
run: | | |
docker network create ngtcp2-test && | |
docker run --network ngtcp2-test --detach --name oqs-ngtcp2server oqs-ngtcp2-server && | |
docker run --network ngtcp2-test --name oqs-ngtcp2client oqs-ngtcp2-client sh -c 'qtlsclient --exit-on-first-stream-close --groups kyber512 oqs-ngtcp2server 6000' && | |
docker logs oqs-ngtcp2client 2>&1 | grep "QUIC handshake has been confirmed" | |
- name: Push server Docker image to registries | |
if: env.push == 'true' | |
uses: docker/build-push-action@v6 | |
with: | |
push: true | |
context: ngtcp2 | |
file: ngtcp2/Dockerfile-server | |
build-args: | | |
MAKE_DEFINES=-j4 | |
${{ (inputs.build_main == 'true') && env.build-args || null }} | |
tags: | | |
ghcr.io/${{ github.repository_owner }}/ngtcp2-server:${{ inputs.release_tag || 'latest' }}-${{ matrix.arch }} | |
openquantumsafe/ngtcp2-server:${{ inputs.release_tag || 'latest' }}-${{ matrix.arch }} | |
- name: Push client Docker image to registries | |
if: env.push == 'true' | |
uses: docker/build-push-action@v6 | |
with: | |
push: true | |
context: ngtcp2 | |
file: ngtcp2/Dockerfile-client | |
build-args: | | |
MAKE_DEFINES=-j4 | |
${{ (inputs.build_main == 'true') && env.build-args || null }} | |
tags: | | |
ghcr.io/${{ github.repository_owner }}/ngtcp2-client:${{ inputs.release_tag || 'latest' }}-${{ matrix.arch }} | |
openquantumsafe/ngtcp2-client:${{ inputs.release_tag || 'latest' }}-${{ matrix.arch }} | |
push: | |
if: ${{ github.repository == 'open-quantum-safe/oqs-demos' && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && inputs.build_main != 'true' }} | |
needs: build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: ./.github/workflows/manifest | |
with: | |
image_name: ngtcp2-server | |
release_tag: ${{ inputs.release_tag || 'latest' }} | |
- uses: ./.github/workflows/manifest | |
with: | |
image_name: ngtcp2-client | |
release_tag: ${{ inputs.release_tag || 'latest' }} |