status-im/status-go

View on GitHub
_assets/ci/Jenkinsfile

Summary

Maintainability
Test Coverage
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.8.10'

pipeline {
  agent { label 'linux' }

  parameters {
    string(
      name: 'BRANCH',
      defaultValue: 'develop',
      description: 'Name of branch to build.'
    )
    booleanParam(
      name: 'RELEASE',
      defaultValue: false,
      description: 'Enable to create a new release on GitHub and DigitalOcean Space.',
    )
  }

  options {
    /* Prevent Jenkins jobs from running forever */
    timeout(time: 40, unit: 'MINUTES')
    disableConcurrentBuilds()
    /* Go requires a certain directory structure */
    checkoutToSubdirectory('src/github.com/status-im/status-go')
    /* manage how many builds we keep */
    buildDiscarder(logRotator(
      numToKeepStr: '5',
      daysToKeepStr: '30',
      artifactNumToKeepStr: '1',
    ))
  }

  environment {
    REPO   = "${env.WORKSPACE}/src/github.com/status-im/status-go"
    GOPATH = "${env.WORKSPACE}"
    PATH   = "/usr/local/go/bin:${env.PATH}:${env.GOPATH}/bin"
    /* This will override the var in Makefile */
    RELEASE_DIR = "${env.WORKSPACE}/pkg"
  }

  stages {
    stage('Build') {
      parallel {
        stage('iOS') { steps { script {
          ios = jenkins.Build('status-go/platforms/ios')
        } } }
        stage('Android') { steps { script {
          android = jenkins.Build('status-go/platforms/android')
        } } }
        stage('Linux') { steps { script {
          linux = jenkins.Build('status-go/platforms/linux')
        } } }
        stage('Docker') { steps { script {
          dock = jenkins.Build('status-go/platforms/docker')
        } } }
      } // parallel
    } // stage(Build)

    stage('Archive') {
      steps { script {
        sh "rm -fr ${env.RELEASE_DIR}"
        sh "mkdir ${env.RELEASE_DIR}"
        [ios, android, linux].each { platformBuild ->
          jenkins.copyArts(platformBuild)
        }
        dir(env.RELEASE_DIR) {
          /* generate sha256 checksums for upload */
          sh 'sha256sum * | tee checksum.sha256'
          archiveArtifacts('*')
        }
      } }
    } // stage(Archive)

    stage('Release') {
      when { expression { params.RELEASE == true } }
      steps { script {
        dir (env.REPO) { version = utils.getVersion() }
        github.publishReleaseFiles(
          repo: 'status-go',
          version: version,
          desc: ':warning: Fill me in!',
       )
      } }
    } // stage(Release)
  } // stages

  post {
    always { dir(env.REPO) {
      sh 'make clean-release'
    } }
  }
}