trigger: none
pr: none
schedules:
- cron: 0 16 * * *
  branches:
    include: [ master ]

variables:
  worker: remote_nni-ci-gpu-04-w

# variables set on VSO: (for security concern)
#   manager_ip
#   worker_ip
#   worker_port
#   worker_password

jobs:
- job: remote_linux2windows
  pool: NNI CI EAST US REMOTE CLI
  timeoutInMinutes: 120

  steps:
  - script: |
      export NNI_RELEASE=999.$(date -u +%Y%m%d%H%M%S)
      echo "##vso[task.setvariable variable=PATH]${PATH}:${HOME}/.local/bin"
      echo "##vso[task.setvariable variable=NNI_RELEASE]${NNI_RELEASE}"
      echo "Working directory: ${PWD}"
      echo "NNI version: ${NNI_RELEASE}"
      echo "Build ID: $(Build.BuildId)"
      python3 -m pip install --upgrade pip setuptools
      python3 setup.py clean --all
    displayName: Prepare on Linux manager

  - task: CopyFilesOverSSH@0
    inputs:
      sshEndpoint: $(worker)
      targetFolder: /tmp/nnitest/$(Build.BuildId)
      overwrite: true
    displayName: Copy source files to Windows worker
    timeoutInMinutes: 10

  - task: SSH@0
    inputs:
      sshEndpoint: $(worker)
      runOptions: commands
      commands: |
        conda activate l2w & python -m pip install --upgrade pip setuptools
        conda activate l2w & python /tmp/nnitest/$(Build.BuildId)/test/vso_tools/install_nni.py $(NNI_RELEASE)
      failOnStdErr: false
    displayName: Install NNI on Windows worker

  - script: |
      set -e
      python3 setup.py build_ts
      python3 setup.py bdist_wheel -p manylinux1_x86_64
      python3 -m pip install dist/nni-${NNI_RELEASE}-py3-none-manylinux1_x86_64.whl[SMAC,BOHB]
    displayName: Install NNI on Linux manager

  - script: |
      set -e
      cd examples/tuners/customized_tuner
      python3 setup.py develop --user
      nnictl algo register --meta meta_file.yml
    displayName: Install customized tuner

  - script: |
      set -e
      cd test
      python3 training_service/nnitest/generate_ts_config.py \
          --ts remote \
          --remote_user AzureUser \
          --remote_host $(worker_ip) \
          --remote_port $(worker_port) \
          --remote_pwd $(worker_password) \
          --nni_manager_ip $(manager_ip)
      python3 training_service/nnitest/run_tests.py --config training_service/config/integration_tests.yml --ts remote
    displayName: Integration test

  - task: SSH@0
    inputs:
      sshEndpoint: $(worker)
      runOptions: commands
      commands: rm -rf /tmp/nnitest/$(Build.BuildId)
    condition: always()
    displayName: Clean up on Windows worker
