# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: CI
on: [push, pull_request, workflow_dispatch]
defaults:
  run:
    shell: bash

jobs:
  format:
    runs-on: ubuntu-20.04
    container: teaclave/teaclave-build-ubuntu-2004-sgx-2.17.1:0.2.0
    steps:
      - uses: actions/checkout@v3
      - name: Setting up $HOME
        run: |
          cp /root/.bashrc $HOME/.bashrc &&
          ln -sf /root/.rustup ~/.rustup &&
          ln -sf /root/.cargo ~/.cargo &&
          git config --global --add safe.directory /__w/incubator-teaclave/incubator-teaclave
      - name: Checking code format
        run: |
          . /root/.cargo/env &&
          . /opt/sgxsdk/environment &&
          mkdir -p build && cd build &&
          cmake -DRUSTFLAGS="-D warnings" -DTEST_MODE=ON .. &&
          make check
  lint:
    runs-on: ubuntu-20.04
    container: teaclave/teaclave-build-ubuntu-2004-sgx-2.17.1:0.2.0
    steps:
      - uses: actions/checkout@v3
      - name: Setting up $HOME
        run: |
          cp /root/.bashrc $HOME/.bashrc &&
          ln -sf /root/.rustup ~/.rustup &&
          ln -sf /root/.cargo ~/.cargo &&
          git config --global --add safe.directory /__w/incubator-teaclave/incubator-teaclave
      - name: Code linting with Clippy
        run: |
          . /opt/sgxsdk/environment &&
          . /root/.cargo/env &&
          mkdir -p build && cd build &&
          cmake -DCMAKE_BUILD_TYPE=Release -DRUSTFLAGS="-D warnings" -DTEST_MODE=ON .. &&
          CLP=1 make -j
  license:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - name: Check License Header
        uses: apache/skywalking-eyes@v0.4.0
