// Copyright 2019 Google LLC
//
// Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://llvm.org/LICENSE.txt
//
// 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.

pipeline {
    agent { label 'windows' }
    
    triggers {
        pollSCM 'H H/4 * * *'
    }

    // enable timestaps for getting execution times
    options { timestamps () }

    environment {
        MY_BUILD_ID = "${JOB_BASE_NAME}-${BUILD_NUMBER}"
        SCRIPT_DIR = "${WORKSPACE}/llvm-premerge-checks/scripts"
        RESULT_DIR = "${WORKSPACE}\\results"
        LLVM_DIR = "${WORKSPACE}\\llvm-project"
    }
    stages {
        stage("git checkout"){
            steps {
                echo "getting llvm-premerge-checks... "
                dir("llvm-premerge-checks")
                {
                    git url: 'https://github.com/google/llvm-premerge-checks.git'
                }
                echo "getting llvm-project... "
                dir("llvm-project")
                {
                    git url: 'https://github.com/llvm/llvm-project.git'
                }
                powershell "New-Item -ItemType Directory -Force -Path ${RESULT_DIR}"
            }            
        }
        stage('CMake') {
            steps {
                dir("${LLVM_DIR}"){
                    powershell "${SCRIPT_DIR}/run_cmake.ps1"
                }
            }
        }
        stage('ninja all') {
            steps {
                dir("${LLVM_DIR}"){
                    powershell "${SCRIPT_DIR}/run_ninja.ps1 all"
                }
            }
        }
        stage('ninja check-all') {
            steps {
                dir("${LLVM_DIR}"){
                    powershell "${SCRIPT_DIR}/run_ninja.ps1 check-all"
                }
            }
        }
    }
    post { 
        always { 
            echo "Logs uploaded to https://pantheon.corp.google.com/storage/browser/llvm-premerge-checks/results/${MY_BUILD_ID}."
            dir("${env.RESULT_DIR}") {
                // gather all result files in a folder, then upload everything to
                // Google Cloud Storage
                powershell """
                    # get the console log
                    Invoke-WebRequest -OutFile console-log.txt -uri "http://jenkins.local:8080/job/${JOB_BASE_NAME}/${BUILD_NUMBER}/consoleText" -ErrorAction "Continue"

                    Copy-Item "${LLVM_DIR}\\build\\CMakeCache.txt"
                    Copy-Item "${LLVM_DIR}\\build\\test-results.xml"
                    
                    # upload files
                    \$ErrorActionPreference = 'SilentlyContinue'
                    gsutil cp -Z *.* gs://llvm-premerge-checks/results/${MY_BUILD_ID}/
                """
            }
            // doesn't find junit results, not sure why...
            // junit "${LLVM_DIR}\\build\\test-results.xml"
        }
    } 

}