name: run example (sim only) # TODO: add custom runner

on:
  push:
    branches: [ '**' ]
  pull_request:
    branches: [ '**' ]
  schedule: [cron: "40 1 * * *"]

jobs:
  single-test:
    strategy:
      matrix:
        runs-on:
          - ubuntu-18.04
        image:
          - "baiduxlab/sgx-rust:1804-1.1.4"
          - "baiduxlab/sgx-rust:2004-1.1.4"
          - "baiduxlab/sgx-rust:centos8-1.1.4"
        single-sample:
          - "backtrace"
          - "crypto"
          - "file"
          - "hello-regex"
          - "hello-rust"
          - "hello-rust-vscode-debug"
          - "helloworld"
          - "http_req"
          - "kvdb-memdb"
          - "localattestation"
          - "logger"
          - "machine-learning"
          - "prost-protobuf"
          - "protobuf"
          - "sealeddata"
          - "secretsharing"
          - "serialize"
          - "sgx-cov"
          - "switchless"
          - "tcmalloc"
          - "thread"
          - "unit-test"
          - "wasmi"
          - "zlib-lazy-static-sample"
    runs-on: ${{ matrix.runs-on }}
    container: 
      image: ${{ matrix.image }}
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: 'true'
    - name: Set up Github Actions' $HOME
      run: |
        cp /root/.bashrc $HOME/.bashrc &&
        ln -sf /root/.rustup ~/.rustup &&
        ln -sf /root/.cargo ~/.cargo
    - name: Rust toolchains
      run: |
        . ~/.cargo/env && 
        rustc --version &&
        rustup --version &&
        cargo --version
      shell: bash
    - name: Run tests
      run: |
        . ~/.cargo/env && 
        . /opt/sgxsdk/environment && 
        export SGX_SDK_RUST=`git worktree list | head | cut -d ' ' -f 1` &&
        cd samplecode/${{ matrix.single-sample }} &&
        if [ "${{  matrix.single-sample }}" == "protobuf" ]; then cargo install protobuf-codegen --vers=2.8.1; fi
        SGX_MODE=SW make && 
        cd bin &&
        ./app
      shell: bash
  tls-test:
    strategy:
      matrix:
        runs-on:
          - ubuntu-18.04
        image:
          - "baiduxlab/sgx-rust:1804-1.1.4"
          - "baiduxlab/sgx-rust:2004-1.1.4"
          - "baiduxlab/sgx-rust:centos8-1.1.4"
    runs-on: ${{ matrix.runs-on }}
    container: 
      image: ${{ matrix.image }}
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: 'true'
    - name: Set up Github Actions' $HOME
      run: |
        cp /root/.bashrc $HOME/.bashrc &&
        ln -sf /root/.rustup ~/.rustup &&
        ln -sf /root/.cargo ~/.cargo &&
        yum install -y which expect || true
    - name: Rust toolchains
      run: |
        . ~/.cargo/env && 
        rustc --version &&
        rustup --version &&
        cargo --version
      shell: bash
    - name: Run tls sample
      run: |
        . ~/.cargo/env && 
        . /opt/sgxsdk/environment && 
        export SGX_MODE=SW
        SAVEIFS=$IFS
        CIDIR=$(pwd)/.github/workflows
        IFS=$(echo -en "\n\b")
        compiles=('make' 'XARGO_SGX=1 make')
        cd samplecode/tls
        for client in ${compiles[@]}
        do
            for server in ${compiles[@]}
            do
                cd tlsclient && eval ${client} && \
                cd ../tlsserver  && eval ${server} && \
                cd bin
                echo "Starting server"
                $CIDIR/tlsserver.expect &
                pid=$!
                sleep 1
                cd ../../tlsclient/bin
                echo "Starting client"
                $CIDIR/tlsclient.expect
                cliret=$?
                wait $pid
                svrret=$?
                if [ !  $cliret -eq 0 ] | [ ! $svrret -eq 0 ]; then
                    echo "TLS test fail"
                    exit 1
                fi
                echo "Testing passed"
                cd ../..
            done
        done
        IFS=$SAVEIFS
      shell: bash
  mio-test:
    strategy:
      matrix:
        runs-on:
          - ubuntu-18.04
        image:
          - "baiduxlab/sgx-rust:1804-1.1.4"
          - "baiduxlab/sgx-rust:2004-1.1.4"
          - "baiduxlab/sgx-rust:centos8-1.1.4"
    runs-on: ${{ matrix.runs-on }}
    container: 
      image: ${{ matrix.image }}
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: 'true'
    - name: Set up Github Actions' $HOME
      run: |
        cp /root/.bashrc $HOME/.bashrc &&
        ln -sf /root/.rustup ~/.rustup &&
        ln -sf /root/.cargo ~/.cargo &&
        yum install -y which expect || true
    - name: Rust toolchains
      run: |
        . ~/.cargo/env && 
        rustc --version &&
        rustup --version &&
        cargo --version
      shell: bash
    - name: Run tls sample
      run: |
        . ~/.cargo/env && 
        . /opt/sgxsdk/environment && 
        export SGX_MODE=SW
        SAVEIFS=$IFS
        CIDIR=$(pwd)/.github/workflows
        IFS=$(echo -en "\n\b")
        compiles=('make' 'XARGO_SGX=1 make')
        cd samplecode/mio
        for client in ${compiles[@]}
        do
            for server in ${compiles[@]}
            do
                cd client && eval ${client} && \
                cd ../server  && eval ${server} && \
                cd bin
                echo "Starting server"
                $CIDIR/mioserver.expect &
                pid=$!
                sleep 1
                cd ../../client/bin
                echo "Starting client"
                $CIDIR/mioclient.expect
                cliret=$?
                wait $pid
                svrret=$?
                if [ !  $cliret -eq 0 ] | [ ! $svrret -eq 0 ]; then
                    echo "mio test fail"
                    exit 1
                fi
                echo "Testing passed"
                cd ../..
            done
        done
        IFS=$SAVEIFS
      shell: bash
