ci/steps.groovy
author Jan Vrany <jan.vrany@labware.com>
Wed, 03 Nov 2021 22:09:33 +0000
changeset 321 c868ba75e2da
parent 317 a85c0bcfea43
child 328 8d869177607c
permissions -rw-r--r--
Rakefiles: improve (fix) Mercurial config reading on Windows This commit improves reading of mercurial config on Windows by reading all files and directories as documented in `hg help config` and also read TortoiseHg's specific `<install-dir>/defaultrc`. This fixes CI when using recent(ish) TortoiseHg.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
/*
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 * Jenkins Pipeline definitions for Smalltalk/X jv-branch
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
 *
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
     4
 * Following stepss are defined here:
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
 *
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 *  * `build()` - compiles and tests all supported configurations
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
 *    No artifacts are archived
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
 *
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
     9
 *  * `integration()` - like `build()` steps, then all test pass on all
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
    10
 *    configurations, archive artifacts and push staged changes to opstream
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
    11
 *    (if approvec by the user)
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
 */
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    14
import com.cloudbees.plugins.credentials.CredentialsProvider;
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    15
import com.cloudbees.plugins.credentials.common.StandardUsernameCredentials;
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    16
import com.cloudbees.jenkins.plugins.sshcredentials.SSHUserPrivateKey;
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    18
/**
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    19
 * Supported configurations. To overwrite, do:
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    20
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    21
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    22
 *     steps = load "steps.groovy"
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    23
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    24
 *     steps.configurations = [ 'BUILD_TARGET': 'mips-sgi-irix' ]
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    25
 *     ...
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    26
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    27
 * Default value: see below.
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
 */
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
configurations = [
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
    30
    'BUILD_TARGET': ['i686-pc-mingw32' , 'x86_64-w64-mingw32', 'i686-pc-linux-gnu', 'x86_64-pc-linux-gnu' ]
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
]
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
317
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    33
/** Repository (forest) to build. To overwrite do:
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    34
 *
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    35
 *     ...
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    36
 *     steps = load "steps.groovy"
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    37
 *     ...
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    38
 *     steps.repo = "https://swing.fit.cvut.cz/hg/stx-goodies-builder-rake"
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    39
 *     ...
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    40
 *
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    41
 * Default value (if not set):
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    42
 * For normal jobs this is the value of 'Repository' field from SCM configuration.
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    43
 *
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    44
 * Due to Jenkins internals, the fallback to use SCM configuration must be done
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    45
 * by 'user' of this variable (i.e., use `repo != null ? repo : scm.getSource())
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    46
 */
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    47
repo = null; // null means `scm.getSource()`
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    48
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    49
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    50
/** Branch to build. To overwrite do:
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    51
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    52
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    53
 *     steps = load "steps.groovy"
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    54
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    55
 *     steps.branch = "issue-123"
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    56
 *     ...
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    57
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    58
 * Default value:
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    59
 * For multibranch jobs, this is the value of BRANCH_NAME environment variable.
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    60
 * For normal jobs this is the value of 'Branch' field from SCM configuration.
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    61
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    62
 * Due to Jenkins internals, the fallback to use SCM configuration must be done
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    63
 * by 'user' of this variable (i.e., use `branch != null ? branch : scm.getBranch())
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    64
 */
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    65
branch = env.BRANCH_NAME
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    66
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    67
/**
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    68
 * Workspace to use. To overwrite do:
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    69
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    70
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    71
 *     steps = load "steps.groovy"
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    72
 *     ...
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    73
 *     steps.workspace = "some-other-job"
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    74
 *     ...
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    75
 *
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    76
 * Default value:
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    77
 * Name of current job.
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    78
 */
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
    79
workspace = env.JOB_NAME
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
/*
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    82
 * "Default" steps:
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
 */
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
def build() {
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    85
    stage ( "Build" ) {
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    86
        matrix ( configurations ) {
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
    87
            stage ( "Checkout - {${env.BUILD_TARGET}} " ) {
317
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    88
                credentials_to_use = 'none'
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    89
                try {
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    90
                    credentials_to_use =  scm.getCredentialsId()
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    91
                } catch(Exception e) {
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    92
                    // Nothing, use 'none'
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    93
                }
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    94
                sshagent(credentials: [credentials_to_use], ignoreMissing: true) {
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    95
                	repo_to_use = repo != null ? repo : scm.getSource()
223
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
    96
                    branch_to_use = branch != null ? branch : scm.getBranch()
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
    97
                    sh  """
221
a0f64acd117d CI: renamed `Jenkinsfile.rb` to `build.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
    98
                        if [ -f build.rb ]; then
317
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
    99
                            hg pull  --ssh "ssh -o 'StrictHostKeyChecking off'" ${repo_to_use}
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   100
                        else
317
a85c0bcfea43 CI: allow to set repository (forest) to checkout code from
Jan Vrany <jan.vrany@labware.com>
parents: 307
diff changeset
   101
                            hg clone --ssh "ssh -o 'StrictHostKeyChecking off'" ${repo_to_use} .
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   102
                        fi
223
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   103
                        hg up ${branch_to_use}
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   104
                        """
221
a0f64acd117d CI: renamed `Jenkinsfile.rb` to `build.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
   105
                    sh  "ruby build.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} update"
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   106
                }
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   107
            }
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   108
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   109
            stage ( "Compile - {${env.BUILD_TARGET}}") {
221
a0f64acd117d CI: renamed `Jenkinsfile.rb` to `build.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
   110
                sh "ruby build.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} compile"
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
            }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
        }
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   113
    }
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   115
    stage ( "Test" ) {
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   116
        matrix ( configurations ) {
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   117
            stage ( "Test - {${env.BUILD_TARGET}}") {
115
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   118
                /*
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   119
                 * Some tests requires display, so:
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   120
                 *
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   121
                 *  * on *NIX hosts, launch Xvfb
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   122
                 *  * on Windows, do nothing. Windows slave must be configured
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   123
                 *    so it has an access to interactive window station (which
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   124
                 *    means it has to run under user session, not as a service)
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   125
                 */
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   126
                if ( isUnix() ) {
129
b94e3e84adf9 CI: Let Xvfb to choose the display name
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 128
diff changeset
   127
                    wrap([$class: 'Xvfb', autoDisplayName: true, additionalOptions: '-screen 0 1024x768x24 -pixdepths 24 4 8 15 16 32', parallelBuild: true]) {
221
a0f64acd117d CI: renamed `Jenkinsfile.rb` to `build.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
   128
                        sh "ruby build.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} test"
115
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   129
                    }
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   130
                } else {
221
a0f64acd117d CI: renamed `Jenkinsfile.rb` to `build.rb`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 208
diff changeset
   131
                    sh "ruby build.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} test"
115
3b8372e82acd CI: On *NIX nodes, start Xvfb to allow for UI testing
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 114
diff changeset
   132
                }
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   133
                junit allowEmptyResults: true, testResults: "reports/*build${env.BUILD_NUMBER}*.xml"
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   134
            }
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
/*
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
   140
 * "Integration" steps
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
 */
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
def integration() {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
    build()
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    /*
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
   145
     * If a single test fails, abort the steps. There's no point
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
     * archiving a broken build.
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
     */
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   148
    println "Smalltalk/X built, job status is: ${currentBuild.result}"
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   149
    if ( currentBuild.result == 'UNSTABLE' ) {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
        return;
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    artifacts()
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   153
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   154
    /*
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   155
     * Check if there are changes to be pushed to upstream. If so,
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   156
     * ask user to approve that push
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   157
     */
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   158
    if ( changes() ) {
154
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   159
        def integrate = false;
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   160
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   161
        if (env.JENKINS_URL == "https://swing.fit.cvut.cz/jenkins/") {
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   162
            integrate = true;
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   163
        } else {
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   164
            integrate = input(message: 'Integrate all staged changes to upstream?',
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   165
                              parameters: [
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   166
                                    booleanParam(name: "Integrate changes",
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   167
                                         description: 'If checked, all staged changes will be pushed to an upstream repository',
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   168
                                         defaultValue: true)]);
154
bca6821cadad CI: do not wait for (manual) integration confirmation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   169
        }
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   170
        if ( integrate ) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   171
            push()
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   172
        }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   173
    }
283
e6e50f9b9987 Rakefiles / CI: various fixes towards new integration / artifact publishing workflow
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 248
diff changeset
   174
e6e50f9b9987 Rakefiles / CI: various fixes towards new integration / artifact publishing workflow
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 248
diff changeset
   175
    publish("devel")
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   176
}
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   177
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   178
/*
223
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   179
 * Publish built artifacts to download server
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   180
 */
283
e6e50f9b9987 Rakefiles / CI: various fixes towards new integration / artifact publishing workflow
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 248
diff changeset
   181
def publish(dir = "private-builds") {
223
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   182
    build(job:        'stx_jv_publish',
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   183
          parameters: [
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   184
                        string(name: 'job', value: env.JOB_NAME),
283
e6e50f9b9987 Rakefiles / CI: various fixes towards new integration / artifact publishing workflow
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 248
diff changeset
   185
                        string(name: 'bld', value: env.BUILD_NUMBER),
223
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   186
                        string(name: 'srv', value: env.STX_PUBLISH_SERVER),
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   187
                        string(name: 'dir', value: "${env.STX_PUBLISH_DIRECTORY}/${dir}")
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   188
                      ],
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   189
          wait: false)
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   190
}
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   191
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   192
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   193
575d0458b5c0 CI: added a job (pipeline) and step to publish artifacts to public server
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 222
diff changeset
   194
/*
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   195
 * Utility. Return true, if there are any changes to be pushed to an upstream,
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   196
 * false othervise.
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   197
 */
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   198
def changes() {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   199
    changes = false;
222
80f098bd53ca CI: moved CI-related files to (new) subdirectory `ci`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
   200
    any ( configurations ) {
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   201
        withCredentialsForUpstream() { user, pass ->
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   202
            status = sh ( script: "rake \"workflow:out-upstream[${user}, ${pass}]\"", returnStatus: true)
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   203
        }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   204
        changes = status == 0;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   205
    }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   206
    return changes;
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
def combine(configurations, axes = null, axis = 0, partial = new HashMap(), combinations = []) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    def axes0 = axes
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    if (axes0 == null) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
        axes0 = configurations.keySet().toArray();
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    if ( axis < axes0.length ) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
        for ( value in configurations[axes0[axis]] ) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
            def combined = partial.clone()
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
            combined[axes0[axis]] = value
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
            combine(configurations, axes0, axis + 1, combined, combinations)
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    } else {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
        combinations.add(partial)
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    return combinations;
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
def matrix(configurations, block) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    def combinations = combine(configurations).toArray()
70
8e73f248c6d4 Changed logic used to check whether to checkout or download stc and librun:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 69
diff changeset
   229
    def branches = [failFast: true]
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    for (i = 0; i < combinations.length; i++) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
        def index = i
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
        def conf = combinations[i];
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   233
        branches["${conf.BUILD_TARGET}"] = {
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   234
            node ( conf.BUILD_TARGET ) {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
                def newEnv = []
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
                for (k in conf.keySet()) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
                    newEnv.add("${k}=${conf[k]}")
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
                }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
                withEnv ( newEnv ) {
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   240
                    ws ("workspace/${workspace}/${env.BUILD_TARGET}") {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
                        block()
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
                    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
                }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
            }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    parallel branches
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
def any(configurations, block) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
    def axes = configurations.keySet().toArray()
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
    def conf = [:]
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
    for (axis in axes) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
        conf[axis] = configurations[axis][0]
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    }
248
a13b0f9ba9e9 CI: fixed step `any()` to use `BUILD_TARGET` as node label
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 237
diff changeset
   258
    node ( conf.BUILD_TARGET ) {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
        def newEnv = []
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
        for (k in conf.keySet()) {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
            newEnv.add("${k}=${conf[k]}")
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
        withEnv ( newEnv ) {
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   264
            ws ("workspace/${workspace}/${env.BUILD_TARGET}") {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
                block()
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
            }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
def artifacts() {
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
    matrix ( configurations ) {
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 129
diff changeset
   274
        stage ( "Artifacts - {${env.BUILD_TARGET}}") {
294
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   275
            if (env.BUILD_TARGET != 'i686-pc-mingw32' && env.BUILD_TARGET != 'i686-pc-linux-gnu') {
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   276
                sh "ruby build.rb --project \"stx:jv-branch\" --build-target ${env.BUILD_TARGET} artifacts"
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   277
                archiveArtifacts artifacts: "artifacts/*build${env.BUILD_NUMBER}*.zip, artifacts/*build${env.BUILD_NUMBER}*.bz2, artifacts/*build${env.BUILD_NUMBER}*.sha256", fingerprint: true//, onlyIfSuccessful: true
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   278
            } else {
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   279
                echo "Artifacts for ${env.BUILD_TARGET} are no longer archived. Use 64bit."
0f3980335d2b CI: do not archive (and publish) i686 versions any more
Jan Vrany <jan.vrany@labware.com>
parents: 283
diff changeset
   280
            }
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   285
/**
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   286
 * Push changes to upstream reporitory. To be called after a successful
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   287
 * build. See #build()
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   288
 */
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   289
def push() {
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
    any ( configurations ) {
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   291
        stage ( "Push to upstream" ) {
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   292
            withCredentialsForUpstream { user, pass ->
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   293
                sh "rake \"workflow:push-upstream[${user}, ${pass}]\""
106
af335c19cc3b CI: Allow to use different credentials to push to upstream
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   294
            }
69
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
        }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
    }
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
}
23cdc822cfc5 Initial support for Jenkins pipelines.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
295
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   299
/**
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   300
 * Cleanup the workspace
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   301
 */
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   302
 def cleanup() {
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   303
    matrix ( configurations ) {
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   304
        stage ( "Cleanup - {${env.BUILD_TARGET}}") {
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   305
            cleanWs cleanWhenAborted: false, cleanWhenFailure: false, cleanWhenNotBuilt: false, cleanWhenUnstable: false
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   306
        }
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   307
    }
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   308
 }
a04034567c92 CI: cleanup workspace after successfull build
Jan Vrany <jan.vrany@labware.com>
parents: 294
diff changeset
   309
128
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   310
/*
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   311
 * Utility. Executes given block with credentials for upstream repository.
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   312
 */
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   313
def withCredentialsForUpstream(block) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   314
    /*
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   315
     * Kludge: Upstream repositories may be on a public BitBucket
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   316
     * server. To access repos on BitBucket, I (JV) don't
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   317
     * want to use the same key / password as for checkouts from
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   318
     * staging repositories,
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   319
     *
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   320
     * Therefore, also look for another credentials with ID
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   321
     * `workflow:push-upstream`. If it exists, then use these to
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   322
     * push to upstrem repository. If no such credentials exist,
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   323
     * use standard credentials.
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   324
     *
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   325
     * So, here we go:
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   326
     */
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   327
    def id1 = "workflow-push-upstream";
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   328
    def id2 = scm.getCredentialsId();
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   329
    def credentials = null;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   330
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   331
    for (StandardUsernameCredentials c : CredentialsProvider.lookupCredentials(StandardUsernameCredentials.class)) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   332
      if (c.getId().equals(id1)) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   333
        credentials = c;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   334
        break;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   335
      }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   336
    }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   337
    if (credentials == null) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   338
      for (StandardUsernameCredentials c : CredentialsProvider.lookupCredentials(StandardUsernameCredentials.class)) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   339
        if (c.getId().equals(id2)) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   340
          credentials = c;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   341
          break;
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   342
        }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   343
      }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   344
    }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   345
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   346
    println "Using upstream credentials ${credentials.getId()}: ${credentials.getDescription()}"
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   347
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   348
    if (credentials instanceof SSHUserPrivateKey) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   349
        sshagent([ credentials.getId() ]) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   350
            // sh "rake \"workflow:push-upstream\""
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   351
            block(null, null)
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   352
        }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   353
    } else {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   354
        withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: credentials.getId(), passwordVariable: 'pass', usernameVariable: 'user']]) {
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   355
            // sh "rake \"workflow:push-upstream[${user}, ${pass}]\""
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   356
            block(user, pass)
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   357
        }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   358
    }
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   359
}
1433658a3853 CI: changed integration pipeline to check for outgoing changes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 115
diff changeset
   360
96
12b2d2bbd417 Merged changes from branch feature-block-in-context
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90 80
diff changeset
   361
return this;