#!/usr/bin/env groovy
pipeline {
    agent {label 'green-dragon-23'}
    parameters {
        string(name: 'GIT_REVISION', defaultValue: '*/master', description: 'Git revision to build')
        string(name: 'ARTIFACT', defaultValue: 'clang-stage1-RA/latest', description: 'Compiler artifact to use for building the project')
        string(name: 'BUILD_TYPE', defaultValue: 'Release', description: 'Default CMake build type; one of: Release, Debug, ...')
        string(name: 'CLEAN', defaultValue: "false", description: 'Whether or not to clean the build directory before building')
    }
    stages {
        stage('Checkout') {
            steps {
                timeout(30) {
                    dir('llvm-project') {
                        checkout([$class: 'GitSCM', branches: [[name: params.GIT_REVISION]], userRemoteConfigs: [[url: 'http://labmaster3.local/git/llvm-project.git']]])
                    }
                    dir('llvm-zorg') {
                        checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[url: 'http://labmaster3.local/git/llvm-zorg.git']]])
                    }
                }
            }
        }
        stage('Fetch') {
            steps {
              timeout(90) {
                  sh '''
                  python llvm-zorg/zorg/jenkins/monorepo_build.py fetch
                  '''
                }
            }
        }
        stage('Clang Build') {
            steps {
                timeout(90) {
                    sh '''
                    set -u
                    rm -rf build.properties

                    cd llvm-project
                    git tag -a -m "First Commit" first_commit 97724f18c79c7cc81ced24239eb5e883bf1398ef || true

                    git_desc=$(git describe --match "first_commit")

                    export GIT_DISTANCE=$(echo ${git_desc} | cut -f 2 -d "-")

                    sha=$(echo ${git_desc} | cut -f 3 -d "-")
                    export GIT_SHA=${sha:1}

                    cd -

                    export PATH=$PATH:/usr/bin:/usr/local/bin

                    python llvm-zorg/zorg/jenkins/monorepo_build.py cmake build \
                      --assertions \
                      --noupload \
                      --projects="clang;libcxx;libcxxabi" \
                      --cmake-flag="-DLLVM_INSTALL_UTILS=On" \
                      --cmake-flag="-DLLVM_INSTALL_TOOLCHAIN_ONLY=Off" \
                      --cmake-flag="-DLLVM_TARGETS_TO_BUILD=X86"
                    '''
                }
            }
        }
        stage('Ninja Standalone Build (build tree)') {
            steps {
                timeout(90) {
                    sh '''
                    set -u
                    rm -rf build.properties

                    cd llvm-project
                    git tag -a -m "First Commit" first_commit 97724f18c79c7cc81ced24239eb5e883bf1398ef || true

                    git_desc=$(git describe --match "first_commit")

                    export GIT_DISTANCE=$(echo ${git_desc} | cut -f 2 -d "-")

                    sha=$(echo ${git_desc} | cut -f 3 -d "-")
                    export GIT_SHA=${sha:1}

                    cd -

                    export PATH=$PATH:/usr/bin:/usr/local/bin
                    export LLDB_STANDALONE_TYPE="build-tree"

                    python $WORKSPACE/llvm-zorg/zorg/jenkins/monorepo_build.py lldb-cmake-standalone build \
                      --assertions \
                      --cmake-type=Release
                    '''
                }
            }
        }
        stage('Ninja Standalone Build (install tree)') {
            steps {
                timeout(90) {
                    sh '''
                    set -u
                    rm -rf build.properties

                    cd llvm-project
                    git tag -a -m "First Commit" first_commit 97724f18c79c7cc81ced24239eb5e883bf1398ef || true

                    git_desc=$(git describe --match "first_commit")

                    export GIT_DISTANCE=$(echo ${git_desc} | cut -f 2 -d "-")

                    sha=$(echo ${git_desc} | cut -f 3 -d "-")
                    export GIT_SHA=${sha:1}

                    cd -

                    export PATH=$PATH:/usr/bin:/usr/local/bin
                    export LLDB_STANDALONE_TYPE="install-tree"

                    python $WORKSPACE/llvm-zorg/zorg/jenkins/monorepo_build.py lldb-cmake-standalone build \
                      --assertions \
                      --cmake-type=Release
                    '''
                }
            }
        }
        stage('Xcode Standalone Build (build tree)') {
            steps {
                timeout(90) {
                    sh '''
                    set -u
                    rm -rf build.properties

                    cd llvm-project
                    git tag -a -m "First Commit" first_commit 97724f18c79c7cc81ced24239eb5e883bf1398ef || true

                    git_desc=$(git describe --match "first_commit")

                    export GIT_DISTANCE=$(echo ${git_desc} | cut -f 2 -d "-")

                    sha=$(echo ${git_desc} | cut -f 3 -d "-")
                    export GIT_SHA=${sha:1}

                    cd -

                    export PATH=$PATH:/usr/bin:/usr/local/bin

                    python $WORKSPACE/llvm-zorg/zorg/jenkins/monorepo_build.py lldb-cmake-xcode build \
                      --assertions \
                      --cmake-type=Release
                    '''
                }
            }
        }
        stage('Xcode Standalone Test (build tree)') {
            steps {
                timeout(30) {
                    sh '''
                    set -u
                    export PATH=$PATH:/usr/bin:/usr/local/bin

                    python $WORKSPACE/llvm-zorg/zorg/jenkins/monorepo_build.py lldb-cmake-xcode test \
                      --assertions \
                      --cmake-type=Release
                    '''
                }
            }
        }
    }
    post {
        changed {
            emailext subject: '$DEFAULT_SUBJECT',
                    presendScript: '$DEFAULT_PRESEND_SCRIPT',
                    postsendScript: '$DEFAULT_POSTSEND_SCRIPT',
                    recipientProviders: [
                            [$class: 'CulpritsRecipientProvider'],
                            [$class: 'DevelopersRecipientProvider'],
                            [$class: 'RequesterRecipientProvider'],
                    ],
                    replyTo: '$DEFAULT_REPLYTO',
                    to: '$DEFAULT_RECIPIENTS',
                    body:'$DEFAULT_CONTENT'
        }
    }
}
