pipeline {
    agent {
      label 'puppet'
    }

    post {
        always {
            deleteDir() /* clean up our workspace */
        }
        success {
            updateGitlabCommitStatus state: 'success'
        }
        failure {
            updateGitlabCommitStatus state: 'failed'
            step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: 'support@confdroid.com', sendToIndividuals: true])
        }
    }

    options {
          gitLabConnection('sourcecode.confdroid.com')
    }

    stages {

      stage('pull master') {
        steps {
          sshagent(['edd05eb6-26b5-4c7b-a5cc-ea2ab899f4fa']) {
            sh '''git config user.name "Jenkins Server"
                  git config user.email jenkins@confdroid.com
                  git pull origin master
                  git checkout -b jenkins '''
        }
      }
    }

      stage('puppet parser') {
        steps {
          sh '''for file in $(find . -iname \'*.pp\'); do
            /opt/puppetlabs/bin/puppet parser validate --color false --render-as s --modulepath=modules $file || exit 1;
            done;'''
          }
        }

      stage('check templates') {
        steps{
          sh '''for file in $(find . -iname \'*.erb\');
            do erb -P -x -T "-" $file | ruby -c || exit 1;
            done;'''
        }
      }

      stage('puppet-lint') {
        steps {
          sh '''find . -iname *.pp -exec /usr/local/rvm/gems/ruby-2.5.0/wrappers/puppet-lint \\
            --no-class_inherits_from_params_class-check \\
            --no-variable_scope-check \\
            --no-80chars-check \\
            --no-arrow_alignment-check \\
            --no-autoloader_layout-check \\
            --no-140chars-check \\
            --log-format "%{path}:%{line}:%{check}:%{KIND}:%{message}" {} \\;
            '''
          recordIssues aggregatingResults: true, tool: puppetLint()
          }
        }

      stage('SonarScan') {
         steps {
             sh '''
             /opt/sonar-scanner/bin/sonar-scanner \
              -Dsonar.projectKey=alloy_cd \
              -Dsonar.sources=. \
              -Dsonar.host.url=https://sonarqube.confdroid.com \
              -Dsonar.token=squ_af3fb66bbbcccf239ffe9393a5e70874f054be7a
              '''
             }
          }

      stage('create Puppet documentation') {
        steps {
          sh '/opt/puppetlabs/bin/puppet strings'
        }
      }

      stage('update repo') {
        steps {
          sshagent(['edd05eb6-26b5-4c7b-a5cc-ea2ab899f4fa']) {
            sh '''git config user.name "Jenkins Server"
                  git config user.email jenkins@confdroid.com
                  echo `git add -A && git commit -am "recommit for updates in build $BUILD_NUMBER"`
                  git push origin HEAD:master'''
        }
      }
    }
  }
}