[ci] Add Android Windows (Release) archive job to the pipeline (#14699)
[mono-project.git] / scripts / ci / pipeline / sdks-archive.groovy
blob554df955d27d100791b09a1f28b0e3f84e9563c9
1 // compression is incompatible with JEP-210 right now
2 properties([/* compressBuildLog() */])
4 parallel (
5 "Android Darwin (Debug)": {
6 throttle(['provisions-android-toolchain']) {
7 node ("osx-devices") {
8 archive ("android", "debug", "Darwin")
12 "Android Darwin (Release)": {
13 throttle(['provisions-android-toolchain']) {
14 node ("osx-devices") {
15 archive ("android", "release", "Darwin")
19 "Android Windows (Release)": {
20 throttle(['provisions-android-toolchain']) {
21 node ("w64") {
22 archive ("android", "release", "Windows")
26 "Android Linux (Debug)": {
27 throttle(['provisions-android-toolchain']) {
28 node ("debian-9-amd64-exclusive") {
29 archive ("android", "debug", "Linux", "debian-9-amd64multiarchi386-preview", "g++-mingw-w64 gcc-mingw-w64 lib32stdc++6 lib32z1 libz-mingw-w64-dev linux-libc-dev:i386 zlib1g-dev zlib1g-dev:i386", "${env.HOME}")
33 "Android Linux (Release)": {
34 throttle(['provisions-android-toolchain']) {
35 node ("debian-9-amd64-exclusive") {
36 archive ("android", "release", "Linux", "debian-9-amd64multiarchi386-preview", "g++-mingw-w64 gcc-mingw-w64 lib32stdc++6 lib32z1 libz-mingw-w64-dev linux-libc-dev:i386 zlib1g-dev zlib1g-dev:i386", "${env.HOME}")
40 "iOS": {
41 throttle(['provisions-ios-toolchain']) {
42 node ("osx-devices") {
43 archive ("ios", "release", "Darwin")
47 "Mac": {
48 throttle(['provisions-mac-toolchain']) {
49 node ("osx-devices") {
50 archive ("mac", "release", "Darwin")
54 "WASM Linux": {
55 throttle(['provisions-wasm-toolchain']) {
56 node ("ubuntu-1804-amd64") {
57 archive ("wasm", "release", "Linux", "ubuntu-1804-amd64-preview", "npm dotnet-sdk-2.1 nuget")
63 def archive (product, configuration, platform, chrootname = "", chrootadditionalpackages = "", chrootBindMounts = "") {
64 def isPr = (env.ghprbPullId && !env.ghprbPullId.empty ? true : false)
65 def monoBranch = (isPr ? "pr" : env.BRANCH_NAME)
66 def jobName = (isPr ? "archive-mono-pullrequest" : "archive-mono")
67 def packageFileName = null
68 def commitHash = null
69 def utils = null
71 ws ("workspace/${jobName}/${monoBranch}/${product}/${configuration}") {
72 timestamps {
73 stage('Checkout') {
74 echo "Running on ${env.NODE_NAME}"
76 // clone and checkout repo
77 checkout scm
79 utils = load "scripts/ci/pipeline/utils.groovy"
81 // remove old stuff
82 sh 'git reset --hard HEAD'
83 sh 'git submodule foreach --recursive git reset --hard HEAD'
84 sh 'git clean -xdff'
85 sh 'git submodule foreach --recursive git clean -xdff'
87 // get current commit sha
88 commitHash = sh (script: 'git rev-parse HEAD', returnStdout: true).trim()
89 currentBuild.displayName = "${commitHash.substring(0,7)}"
91 try {
92 stage('Build') {
93 utils.reportGitHubStatus (isPr ? env.ghprbActualCommit : commitHash, "Archive-${product}-${configuration}-${platform}", env.BUILD_URL, 'PENDING', 'Building...')
95 // build the Archive
96 timeout (time: 300, unit: 'MINUTES') {
97 if (platform == "Darwin") {
98 def brewpackages = "autoconf automake ccache cmake coreutils gdk-pixbuf gettext glib gnu-sed gnu-tar intltool ios-deploy jpeg libffi libidn2 libpng libtiff libtool libunistring ninja openssl p7zip pcre pkg-config scons wget xz mingw-w64 make xamarin/xamarin-android-windeps/mingw-zlib"
99 sh "brew tap xamarin/xamarin-android-windeps"
100 sh "brew install ${brewpackages} || brew upgrade ${brewpackages}"
101 sh "CI_TAGS=sdks-${product},no-tests,${configuration} scripts/ci/run-jenkins.sh"
102 } else if (platform == "Linux") {
103 chroot chrootName: chrootname,
104 command: "CI_TAGS=sdks-${product},no-tests,${configuration} scripts/ci/run-jenkins.sh",
105 bindMounts: chrootBindMounts,
106 additionalPackages: "xvfb xauth mono-devel git python wget bc build-essential libtool autoconf automake gettext iputils-ping cmake lsof libkrb5-dev curl p7zip-full ninja-build zip unzip gcc-multilib g++-multilib mingw-w64 binutils-mingw-w64 openjdk-8-jre ${chrootadditionalpackages}"
107 } else if (platform == "Windows") {
108 sh "PATH=\"/usr/bin:/usr/local/bin:$PATH\" CI_TAGS=sdks-${product},win-amd64,no-tests,${configuration} scripts/ci/run-jenkins.sh"
109 } else {
110 throw new Exception("Unknown platform \"${platform}\"")
113 // move Archive to the workspace root
114 packageFileName = findFiles (glob: "${product}-${configuration}-${platform}-${commitHash}.zip")[0].name
116 stage('Upload Archive to Azure') {
117 azureUpload(storageCredentialId: "fbd29020e8166fbede5518e038544343",
118 storageType: "blobstorage",
119 containerName: "mono-sdks",
120 virtualPath: "",
121 filesPath: "${packageFileName}",
122 allowAnonymousAccess: true,
123 pubAccessible: true,
124 doNotWaitForPreviousBuild: true,
125 uploadArtifactsOnlyIfSuccessful: true)
128 utils.reportGitHubStatus (isPr ? env.ghprbActualCommit : commitHash, "Archive-${product}-${configuration}-${platform}", "https://xamjenkinsartifact.azureedge.net/mono-sdks/${packageFileName}", 'SUCCESS', packageFileName)
130 catch (Exception e) {
131 utils.reportGitHubStatus (isPr ? env.ghprbActualCommit : commitHash, "Archive-${product}-${configuration}-${platform}", env.BUILD_URL, 'FAILURE', "Build failed.")
132 throw e