// Copyright 2017-present Open Networking Foundation
//
// Licensed 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.

node ('olt-agent-onf') {
  timeout (time: 240) {
    try {
      dir ('openolt') {
        stage ('Pull latest code') {
          sh returnStdout: true, script: 'git pull'
        }
        stage ('Copy over SDK, BAL, patch files and DEB generators') {
          sh returnStdout: true, script: 'cp ../../build-files/SW-BCM68620_2_4_3_6.zip download'
          sh returnStdout: true, script: 'cp ../../build-files/sdk-all-6.5.7.tar.gz download'
          sh returnStdout: true, script: 'cp ../../build-files/ACCTON_BAL_2.4.3.6-V201710131639.patch download'
          sh returnStdout: true, script: 'cp ../../build-files/OPENOLT_BAL_2.4.3.6.patch download'
        }
        stage ('Build packages and libraries') {
          sh returnStdout: true, script: '/bin/bash -c make'
        }
        stage ('Create Debian file') {
          sh returnStdout: true, script: '/bin/bash -c "make deb"'
        }
        stage ('Publish executables and DEB package to web server') {
          sh returnStdout: true, script: 'sudo mkdir -p /var/www/voltha-bal/executables'
          sh returnStdout: true, script: 'sudo cp build/*.tar.gz /var/www/voltha-bal/executables/'
          sh returnStdout: true, script: 'sudo cp build/openolt /var/www/voltha-bal/executables/'
          sh returnStdout: true, script: 'sudo cp build/libgrpc++_reflection.so.1 /var/www/voltha-bal/executables/'
          sh returnStdout: true, script: 'sudo cp build/libgrpc++.so.1 /var/www/voltha-bal/executables/'
          sh returnStdout: true, script: 'sudo cp /usr/local/lib/libgrpc.so.6 /var/www/voltha-bal/executables/'
          sh returnStdout: true, script: 'sudo cp build/openolt.deb /var/www/voltha-bal'
        }
      }
      currentBuild.result = 'SUCCESS'
    } catch (err) {
      currentBuild.result = 'FAILURE'
      step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "${notificationEmail}", sendToIndividuals: false])
    } finally {
      echo "RESULT: ${currentBuild.result}"
    }
  }
}
