[releng] Fix Gradle build without maven tycho build

The Gradle build should work even without executing the maven tycho
build.

Bug 574772
Change-Id: I74ccc05d3b0b7c6ae87c40f308552cb5afc37551
diff --git a/releng/org.eclipse.etrice.releng/build.gradle b/releng/org.eclipse.etrice.releng/build.gradle
index 3c4b075..d6c55a7 100644
--- a/releng/org.eclipse.etrice.releng/build.gradle
+++ b/releng/org.eclipse.etrice.releng/build.gradle
@@ -1,4 +1,5 @@
 plugins {
+	id 'publishing'
 	id "org.hidetake.ssh"
 }
 
@@ -12,8 +13,9 @@
 	archives project(path: ':plugins:org.eclipse.etrice.generator.cpp', configuration: 'archive')
 	archives project(path: ':plugins:org.eclipse.etrice.generator.java', configuration: 'archive')
 	archives project(path: ':plugins:org.eclipse.etrice.generator.doc', configuration: 'archive')
-	
-	updates project(path: ':releng:org.eclipse.etrice.site', configuration: 'archive')
+	archives project(path: ':releng:org.eclipse.etrice.site', configuration: 'archive')
+
+	updates project(path: ':releng:org.eclipse.etrice.site', configuration: 'update')
 }
 
 def versionDir = scmVersion.version.endsWith('SNAPSHOT') ? 'nightly' : scmVersion.version
@@ -34,38 +36,26 @@
 }
 
 task assembleArtifacts(type: Sync) {
-	from([configurations.archives, configurations.updates]) {
+	into assembleDir
+	from(configurations.archives) {
 		into 'archives'
 	}
-	if(!configurations.updates.empty) {
-		from(zipTree(configurations.updates.singleFile)) {
-			into 'updates'
-		}
-	} else {
-		doFirst {
-			throw new GradleException("etrice update site is missing - execute tycho/maven 'package' first")
-		}
+	from(configurations.updates) {
+		into 'updates'
 	}
-	into assembleDir
 }
-
 assemble.dependsOn assembleArtifacts
 
-task promote {
-	dependsOn assembleArtifacts
+task promote(dependsOn: assembleArtifacts) {
 	doLast {
 		ssh.run {
 			session(remotes.projectsStorage) {
 				logger.info "clean download area"
 				remove promoteDir
-				execute "mkdir $promoteDir"
-				
-				logger.info "promote archives"
-				put from: "$assembleDir/archives", into: promoteDir
-				
-				logger.info "promote update site"
-				put from: "$assembleDir/updates", into: promoteDir
+				logger.info "promote artifacts"
+				put from: assembleDir, into: downloadDir
 			}
 		}
 	}
-}
\ No newline at end of file
+}
+publish.dependsOn promote
\ No newline at end of file
diff --git a/releng/org.eclipse.etrice.site/build.gradle b/releng/org.eclipse.etrice.site/build.gradle
index 4596834..609ce5f 100644
--- a/releng/org.eclipse.etrice.site/build.gradle
+++ b/releng/org.eclipse.etrice.site/build.gradle
@@ -4,65 +4,67 @@
 
 configurations {
 	archive
+	update
 }
 
-task updateVersionStrings {
-	doLast {
-		def manifestVersion = "${scmVersion.undecoratedVersion}.qualifier"
-		// Replace plugin versions
-		ant.replaceregexp(
-			match: "Bundle-Version:\\s*[\\w.-]*",
-			replace: "Bundle-Version: $manifestVersion") {
-			fileset(dir: rootDir, includes: '**/MANIFEST.MF')
-		}
-		// Replace feature versions
-		ant.replaceregexp(
-			match: "(?s)<feature(.*?)version\\s*=\\s*\"[\\w.-]*\"(.*)>",
-			replace: "<feature\\1version=\"$manifestVersion\"\\2>") {
-			fileset(dir: rootDir, includes: '**/feature.xml')
-		}
-		// Replace first occurence of version tag in poms
-		ant.replaceregexp(
-			match: "(?s)(.*?)<version>[\\w.-]*</version>(.*)",
-			replace: "\\1<version>$version</version>\\2") {
-			fileset(dir: rootDir, includes: '**/pom.xml')
+// The maven tycho build is disabled unless the 'maven' property is defined because
+// maven might not be installed and we have to update the version strings in many files.
+if(project.hasProperty('maven')) {
+	// Update version strings in manifest, feature and pom files for tycho.
+	task updateVersionStrings {
+		onlyIf { tycho.enabled }
+		doLast {
+			def manifestVersion = "${scmVersion.undecoratedVersion}.qualifier"
+			// Replace plugin versions
+			ant.replaceregexp(
+				match: "Bundle-Version:\\s*[\\w.-]*",
+				replace: "Bundle-Version: $manifestVersion") {
+				fileset(dir: rootDir, includes: '**/MANIFEST.MF')
+			}
+			// Replace feature versions
+			ant.replaceregexp(
+				match: "(?s)<feature(.*?)version\\s*=\\s*\"[\\w.-]*\"(.*)>",
+				replace: "<feature\\1version=\"$manifestVersion\"\\2>") {
+				fileset(dir: rootDir, includes: '**/feature.xml')
+			}
+			// Replace first occurence of version tag in poms
+			ant.replaceregexp(
+				match: "(?s)(.*?)<version>[\\w.-]*</version>(.*)",
+				replace: "\\1<version>$version</version>\\2") {
+				fileset(dir: rootDir, includes: '**/pom.xml')
+			}
 		}
 	}
-}
 
-task runMaven(type: MavenExec, dependsOn: updateVersionStrings) {
-	workingDir rootDir
-	goals 'clean', 'verify'
-	options {
-		define = ['build.type' : version.endsWith('SNAPSHOT') ? 'N' : 'R']
-		if(findProperty('sign') != null) {
-			activateProfiles = ['sign']
+	// The 'maven' property optionally provides the path to the maven installation.
+	// The 'sign' property enables artifact signing.
+	task tycho(type: MavenExec, dependsOn: updateVersionStrings) {
+		def mavenPath = project.property('maven')
+		if(!mavenPath.empty) {
+			mavenDir = rootProject.file(mavenPath)
+		}
+		workingDir rootDir
+		goals 'clean', 'verify'
+		options {
+			define = ['build.type' : version.endsWith('SNAPSHOT') ? 'N' : 'R']
+			if(project.hasProperty('sign')) {
+				activateProfiles = ['sign']
+			}
 		}
 	}
-}
 
-def maven = findProperty('maven')
-if(maven != null) {
-	if(!maven.empty) {
-		runMaven.mavenDir = rootProject.file(maven)
+	task zipSite(type: Zip, dependsOn: tycho) {
+		archiveBaseName = project.name
+		archiveVersion = project.version
+		destinationDirectory = layout.buildDirectory
+		from layout.projectDirectory.dir('target/repository')
 	}
-}
-else {
-	updateVersionStrings.enabled = false
-	runMaven.enabled = false
-}
+	assemble.dependsOn zipSite
 
-def siteZipName = "${project.name}-${version}.zip"
-
-task copySiteZip(type: Copy, dependsOn: runMaven) {
-	from 'target'
-	include "${project.name}-*.zip"
-	into buildDir
-	rename { siteZipName }
-}
-
-artifacts {
-	archive(layout.buildDirectory.file(siteZipName)) {
-		builtBy copySiteZip
+	artifacts {
+		archive zipSite
+		update(layout.projectDirectory.dir('target/repository')) {
+			builtBy tycho
+		}
 	}
 }
\ No newline at end of file