An amazing project that generates micro reports from tournament results
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pa-tournament-stats/Carthage/Checkouts/realm-cocoa/Jenkinsfile.releasability

278 lines
7.6 KiB

xcodeVersions = ['9.2', '9.3', '9.4', '10.0', '10.1', '10.2.1']
platforms = ['osx', 'ios', 'watchos', 'tvos']
platformNames = ['osx': 'macOS', 'ios': 'iOS', 'watchos': 'watchOS', 'tvos': 'tvOS']
carthageXcodeVersion = '10.2.1'
docsSwiftVersion = '5.0.1'
def installationTest(platform, test, language) {
return {
node('osx') {
deleteDir()
unstash 'source'
if (test == "dynamic" || test == "static") {
unstash "${language}-packaged"
}
sh """
archive=\$(echo \$PWD/realm-${language}-*.zip)
cd examples/installation
if [[ -f \$archive ]]; then
mv \$archive .
unzip realm-${language}-*zip
find . -name 'realm-${language}-*' -print0 | xargs -J% mv % realm-${language}-latest
fi
export REALM_XCODE_VERSION=${carthageXcodeVersion}
./build.sh test-${platform}-${language}-${test}
"""
}
}
}
def buildObjC(platform, outputDirectory=null) {
return {
node('osx') {
deleteDir()
unstash 'source'
sh "XCMODE=xcpretty ./build.sh package-${platform}"
dir(outputDirectory ?: "build/${platform}") {
stash includes: "realm-framework-${platform}.zip", name: "${platform}-objc"
}
}
}
}
def doBuild() {
stage('prepare') {
node('docker') {
deleteDir()
checkout(
[
$class : 'GitSCM',
branches : scm.branches,
gitTool : 'native git',
extensions : scm.extensions + [[$class: 'CleanCheckout'],
[$class: 'SubmoduleOption', parentCredentials: true]],
userRemoteConfigs: scm.userRemoteConfigs,
]
)
stash includes: '**', name: 'source'
}
}
stage('build') {
def parallelBuilds = [
'Docs': {
node('osx') {
deleteDir()
unstash 'source'
sh """
export REALM_SWIFT_VERSION=${docsSwiftVersion}
./scripts/reset-simulators.sh
./build.sh docs
cd docs
zip -r objc-docs.zip objc_output
zip -r swift-docs.zip swift_output
"""
dir('docs') {
archiveArtifacts artifacts: '*-docs.zip'
}
}
},
'Examples': {
node('osx') {
deleteDir()
unstash 'source'
sh 'XCMODE=xcpretty ./build.sh package-examples'
stash includes: 'realm-examples.zip', name: 'examples'
}
},
'macOS Obj-C': buildObjC('osx', 'build/DerivedData/Realm/Build/Products/Release'),
'iOS Obj-C': buildObjC('ios'),
'watchOS Obj-C': buildObjC('watchos'),
'tvOS Obj-C': buildObjC('tvos'),
'iOS Obj-C static': buildObjC('ios-static'),
]
for (def p in platforms) {
def platform = p
def platformName = platformNames[platform]
parallelBuilds["${platformName} Carthage"] = {
node('osx') {
deleteDir()
unstash 'source'
sh """
export REALM_XCODE_VERSION=${carthageXcodeVersion}
. ./scripts/swift-version.sh
set_xcode_and_swift_versions
carthage build --no-skip-current --platform ${platform}
carthage archive --output Carthage-${platform}.framework.zip
"""
stash includes: "Carthage-${platform}.framework.zip",
name: "${platform}-carthage"
}
}
}
for (def p in platforms) {
def platform = p
def platformName = platformNames[platform]
for (def v in xcodeVersions) {
def xcodeVersion = v
parallelBuilds["${platformName} Swift ${xcodeVersion}"] = {
node('osx') {
deleteDir()
unstash 'source'
sh "XCMODE=xcpretty ./build.sh package-${platform}-swift-${xcodeVersion}"
dir("build/${platform}") {
stash includes: "realm-swift-framework-${platform}-swift-${xcodeVersion}.zip",
name: "${platform}-swift-${xcodeVersion}"
}
}
}
}
}
parallel parallelBuilds
}
stage('package') {
parallel (
"Obj-C": {
node('osx') {
deleteDir()
for (def platform in platforms) {
unstash "${platform}-objc"
}
unstash 'ios-static-objc'
unstash 'examples'
unstash 'source'
sh './build.sh package-release objc'
stash include: 'realm-objc-*.zip', name: 'objc-packaged'
archiveArtifacts artifacts: 'realm-objc-*.zip'
}
},
"Swift": {
node('osx') {
deleteDir()
for (def platform in platforms) {
for (def xcodeVersion in xcodeVersions) {
unstash "${platform}-swift-${xcodeVersion}"
}
}
unstash 'examples'
unstash 'source'
sh './build.sh package-release swift'
sh 'rm realm-swift-framework-*.zip'
stash include: 'realm-swift-*.zip', name: 'swift-packaged'
archiveArtifacts artifacts: 'realm-swift-*.zip'
}
},
"Carthage": {
node('osx') {
deleteDir()
for (def platform in platforms) {
unstash "${platform}-carthage"
}
sh '''
for zip in Carthage-*.framework.zip; do
ditto -xk $zip merged/
done
ditto -ck merged/ Carthage.framework.zip
'''
archiveArtifacts artifacts: 'Carthage.framework.zip'
}
}
)
}
stage('test') {
def parallelBuilds = [
'Test Examples': {
node('osx') {
deleteDir()
// FIXME: Split Obj-C and Swift.
unstash 'objc-packaged'
unstash 'swift-packaged'
def sha = params.sha
sh """
curl -O https://raw.githubusercontent.com/realm/realm-cocoa/${sha}/build.sh
mkdir -p scripts
curl https://raw.githubusercontent.com/realm/realm-cocoa/${sha}/scripts/swift-version.sh -o scripts/swift-version.sh
curl https://raw.githubusercontent.com/realm/realm-cocoa/${sha}/scripts/reset-simulators.sh -o scripts/reset-simulators.sh
curl https://raw.githubusercontent.com/realm/realm-cocoa/${sha}/scripts/reset-simulators.rb -o scripts/reset-simulators.rb
chmod +x scripts/reset-simulators.rb
XCMODE=xcpretty sh build.sh package-test-examples
"""
}
},
'Test iOS static': {
node('osx') {
deleteDir()
unstash 'source'
sh 'XCMODE=xcpretty IS_RUNNING_PACKAGING=1 sh build.sh test-ios-static'
}
},
'Test macOS': {
node('osx') {
deleteDir()
unstash 'source'
sh 'XCMODE=xcpretty sh build.sh test-osx'
}
}
]
for (def platform in ["osx", "ios"]) {
def platformName = platformNames[platform]
for (def test in ["dynamic", "cocoapods", "carthage"]) {
parallelBuilds["Installation - ${platformName} Obj-C ${test}"] = installationTest(platform, test, 'objc')
}
}
parallelBuilds["Installation - iOS Obj-C static"] = installationTest('ios', 'static', 'objc')
parallelBuilds["Installation - iOS Obj-C CocoaPods dynamic"] = installationTest('ios', 'cocoapods-dynamic', 'objc')
for (def platform in ["osx", "ios"]) {
def platformName = platformNames[platform]
for (def test in ["cocoapods", "carthage"]) {
parallelBuilds["Installation - ${platformName} Swift ${test}"] = installationTest(platform, test, 'swift')
}
}
parallel parallelBuilds
}
}
try {
doBuild()
} catch (e) {
// If there was an exception thrown, the build failed
currentBuild.result = "FAILED"
throw e
}