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:1604-1.1.3"
          - "baiduxlab/sgx-rust:1804-1.1.3"
          - "baiduxlab/sgx-rust:2004-1.1.3"
          - "baiduxlab/sgx-rust:fedora31-1.1.3"
          - "baiduxlab/sgx-rust:centos8-1.1.3"
        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 }} &&
        cat ../../.github/workflows/dep_patch.txt >> ./enclave/Cargo.toml &&
        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:1604-1.1.3"
          - "baiduxlab/sgx-rust:1804-1.1.3"
          - "baiduxlab/sgx-rust:2004-1.1.3"
          - "baiduxlab/sgx-rust:fedora31-1.1.3"
          - "baiduxlab/sgx-rust:centos8-1.1.3"
    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
        cat ../../.github/workflows/dep_patch.txt >> tlsclient/enclave/Cargo.toml
        cat ../../.github/workflows/dep_patch.txt >> tlsserver/enclave/Cargo.toml
        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:1604-1.1.3"
          - "baiduxlab/sgx-rust:1804-1.1.3"
          - "baiduxlab/sgx-rust:2004-1.1.3"
          - "baiduxlab/sgx-rust:fedora31-1.1.3"
          - "baiduxlab/sgx-rust:centos8-1.1.3"
    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
        cat ../../.github/workflows/dep_patch.txt >> client/enclave/Cargo.toml
        cat ../../.github/workflows/dep_patch.txt >> server/enclave/Cargo.toml
        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
