#
# 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.
#

# This is a basic workflow to help you get started with Actions

name: conda

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
  pull_request:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build-pytest-package-ubuntu:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: install-conda-build
        run: conda install conda-build=3.20.4 anaconda-client
      - name: conda-config
        run: conda config --add channels conda-forge && conda config --add channels nusdbsystem && conda config --set anaconda_upload no
      - name: build-pytest
        run:  conda build tool/conda/singa --python 3.6
        env:
          TEST_COMMAND: pytest --cov=$PREFIX/lib/python3.7/site-packages/singa --cov-report=xml && codecov --flags singa-python
      - name: upload-package
        env: 
          ANACONDA_UPLOAD_TOKEN: ${{ secrets.ANACONDA_UPLOAD_TOKEN }}
        if: ${{ env.ANACONDA_UPLOAD_TOKEN }}
        run: /usr/share/miniconda/bin/anaconda -t $ANACONDA_UPLOAD_TOKEN upload -u nusdbsystem -l main /usr/share/miniconda/conda-bld/linux-64/singa-*.tar.bz2 --force
        # 


  build-pytest-package-macos:
    runs-on: macos-latest

    steps:
      - uses: actions/checkout@v1
      - name: set permission
        run: sudo chmod -R 777 /usr/local/miniconda 
        # && xcrun --show-sdk-path
      - name: install-conda-build
        run: conda install conda-build anaconda-client
      - name: conda-config
        run: conda config --add channels conda-forge && conda config --add channels nusdbsystem && conda config --set anaconda_upload no
      - name: build-pytest
        run:  conda build tool/conda/singa --python 3.6
        env:
          TEST_COMMAND: pytest --cov=$PREFIX/lib/python3.6/site-packages/singa --cov-report=xml && codecov --flags singa-python
      - name: upload-package
        env: 
          ANACONDA_UPLOAD_TOKEN: ${{ secrets.ANACONDA_UPLOAD_TOKEN }}
        if: ${{ env.ANACONDA_UPLOAD_TOKEN }}
        run: /usr/local/miniconda/bin/anaconda -t $ANACONDA_UPLOAD_TOKEN upload -u nusdbsystem -l main /usr/local/miniconda/conda-bld/osx-64/singa-*.tar.bz2 --force
