76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
#!/usr/bin/env groovy
 | 
						|
 | 
						|
// The stages we run one by one
 | 
						|
// Please don't add more than 2 items in a single stage; this hurts performance
 | 
						|
def ci_stages = [
 | 
						|
    "Checkers": [
 | 
						|
        "commit-checker": "openttd/compile-farm-ci:commit-checker",
 | 
						|
    ],
 | 
						|
    "Compilers": [
 | 
						|
        "linux-amd64-gcc-6": "openttd/compile-farm-ci:linux-amd64-gcc-6",
 | 
						|
        "linux-amd64-clang-3.8": "openttd/compile-farm-ci:linux-amd64-clang-3.8",
 | 
						|
    ],
 | 
						|
    "Archs": [
 | 
						|
        "linux-i386-gcc-6": "openttd/compile-farm-ci:linux-i386-gcc-6",
 | 
						|
    ],
 | 
						|
    "OS": [
 | 
						|
        "osx-10.9": "openttd/compile-farm-ci:osx-10.9",
 | 
						|
    ],
 | 
						|
]
 | 
						|
 | 
						|
def generateStage(targets) {
 | 
						|
    return targets.collectEntries{ key, target ->
 | 
						|
        ["${key}": generateCI(key, target)]
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
def generateCI(display_name, image_name) {
 | 
						|
    return {
 | 
						|
        githubNotify context: 'openttd/' + display_name, description: 'This commit is being built', status: 'PENDING'
 | 
						|
 | 
						|
        try {
 | 
						|
            dir("${display_name}") {
 | 
						|
                unstash "source"
 | 
						|
 | 
						|
                docker.image("${image_name}").pull()
 | 
						|
                docker.image("${image_name}").withRun("--volumes-from ${hostname} --workdir " + pwd()) { c ->
 | 
						|
                    sh "docker logs --follow ${c.id}; exit `docker wait ${c.id}`"
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            githubNotify context: 'openttd/' + display_name, description: 'The commit looks good', status: 'SUCCESS'
 | 
						|
        }
 | 
						|
        catch (error) {
 | 
						|
            githubNotify context: 'openttd/' + display_name, description: 'The commit cannot be built', status: 'FAILURE'
 | 
						|
            throw error
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
node {
 | 
						|
    ansiColor('xterm') {
 | 
						|
        stage("Checkout") {
 | 
						|
            checkout scm
 | 
						|
 | 
						|
            // Ensure user.email and user.name is set, otherwise rebase cannot work
 | 
						|
            sh "git config user.email 'info@openttd.org'"
 | 
						|
            sh "git config user.name 'OpenTTD CI'"
 | 
						|
 | 
						|
            // Ensure we also have origin/master available
 | 
						|
            sh "git fetch --no-tags origin master:refs/remotes/origin/master"
 | 
						|
 | 
						|
            // Try to rebase to origin/master; if this fails, fail the CI
 | 
						|
            sh "git rebase origin/master"
 | 
						|
 | 
						|
            stash name: "source", useDefaultExcludes: false
 | 
						|
        }
 | 
						|
 | 
						|
        ci_stages.each { ci_stage ->
 | 
						|
            stage(ci_stage.key) {
 | 
						|
                parallel generateStage(ci_stage.value)
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 |