build scripts: added option to skip building product distributions and build non-bundled plugins only

This commit is contained in:
nik
2016-12-02 18:40:58 +03:00
parent e417afe76a
commit ca9b4b5a34
5 changed files with 61 additions and 35 deletions
@@ -94,6 +94,8 @@ abstract class BuildContext {
*/
abstract void executeStep(String stepMessage, String stepId, Closure step)
abstract boolean shouldBuildDistributions()
abstract boolean shouldBuildDistributionForOS(String os)
static BuildContext createContext(AntBuilder ant, JpsGantProjectBuilder projectBuilder, JpsProject project, JpsGlobal global,
@@ -38,6 +38,11 @@ class BuildOptions {
static final String OS_WINDOWS = "windows"
static final String OS_MAC = "mac"
static final String OS_ALL = "all"
/**
* If this value is set no distributions of the product will be produced, only {@link ProductModulesLayout#pluginModulesToPublish non-bundled plugins}
* will be built.
*/
static final String OS_NONE = "none"
/**
* Pass comma-separated names of build steps (see below) to 'intellij.build.skip.build.steps' system property to skip them when building locally.
@@ -270,9 +270,14 @@ class BuildContextImpl extends BuildContext {
}
}
@Override
boolean shouldBuildDistributions() {
options.targetOS.toLowerCase() != BuildOptions.OS_NONE
}
@Override
boolean shouldBuildDistributionForOS(String os) {
options.targetOS.toLowerCase() in [BuildOptions.OS_ALL, os]
shouldBuildDistributions() && options.targetOS.toLowerCase() in [BuildOptions.OS_ALL, os]
}
@Override
@@ -248,39 +248,48 @@ idea.fatal.error.notification=disabled
compileModules(buildContext.productProperties.productLayout.includedPluginModules + distributionJARsBuilder.platformModules +
buildContext.productProperties.additionalModulesToCompile, buildContext.productProperties.modulesToCompileTests)
buildContext.messages.block("Build platform and plugin JARs") {
distributionJARsBuilder.buildJARs()
distributionJARsBuilder.buildAdditionalArtifacts()
}
if (buildContext.productProperties.scrambleMainJar) {
scramble()
}
layoutShared()
def propertiesFile = patchIdeaPropertiesFile()
List<BuildTaskRunnable<String>> tasks = [
createDistributionForOsTask("win", { BuildContext context ->
context.windowsDistributionCustomizer?.with { new WindowsDistributionBuilder(context, it, propertiesFile, patchedApplicationInfo) }
}),
createDistributionForOsTask("linux", { BuildContext context ->
context.linuxDistributionCustomizer?.with { new LinuxDistributionBuilder(context, it, propertiesFile) }
}),
createDistributionForOsTask("mac", { BuildContext context ->
context.macDistributionCustomizer?.with { new MacDistributionBuilder(context, it, propertiesFile) }
})
]
List<String> paths = runInParallel(tasks).findAll { it != null }
if (buildContext.productProperties.buildCrossPlatformDistribution) {
if (paths.size() == 3) {
buildContext.executeStep("Build cross-platform distribution", BuildOptions.CROSS_PLATFORM_DISTRIBUTION_STEP) {
def crossPlatformBuilder = new CrossPlatformDistributionBuilder(buildContext)
crossPlatformBuilder.buildCrossPlatformZip(paths[0], paths[1], paths[2])
}
if (buildContext.shouldBuildDistributions()) {
distributionJARsBuilder.buildJARs()
distributionJARsBuilder.buildAdditionalArtifacts()
}
else {
buildContext.messages.info("Skipping building cross-platform distribution because some OS-specific distributions were skipped")
buildContext.messages.info("Skipped building product distributions because 'intellij.build.target.os' property is set to '$BuildOptions.OS_NONE'")
distributionJARsBuilder.buildNonBundledPlugins()
}
}
if (buildContext.shouldBuildDistributions()) {
if (buildContext.productProperties.scrambleMainJar) {
scramble()
}
layoutShared()
def propertiesFile = patchIdeaPropertiesFile()
List<BuildTaskRunnable<String>> tasks = [
createDistributionForOsTask("win", { BuildContext context ->
context.windowsDistributionCustomizer?.with { new WindowsDistributionBuilder(context, it, propertiesFile, patchedApplicationInfo) }
}),
createDistributionForOsTask("linux", { BuildContext context ->
context.linuxDistributionCustomizer?.with { new LinuxDistributionBuilder(context, it, propertiesFile) }
}),
createDistributionForOsTask("mac", { BuildContext context ->
context.macDistributionCustomizer?.with { new MacDistributionBuilder(context, it, propertiesFile) }
})
]
List<String> paths = runInParallel(tasks).findAll { it != null }
if (buildContext.productProperties.buildCrossPlatformDistribution) {
if (paths.size() == 3) {
buildContext.executeStep("Build cross-platform distribution", BuildOptions.CROSS_PLATFORM_DISTRIBUTION_STEP) {
def crossPlatformBuilder = new CrossPlatformDistributionBuilder(buildContext)
crossPlatformBuilder.buildCrossPlatformZip(paths[0], paths[1], paths[2])
}
}
else {
buildContext.messages.info("Skipping building cross-platform distribution because some OS-specific distributions were skipped")
}
}
}
}
@@ -143,7 +143,8 @@ class DistributionJARsBuilder {
void buildJARs() {
buildLib()
buildPlugins()
buildBundledPlugins()
buildNonBundledPlugins()
def loadingOrderFilePath = buildContext.productProperties.productLayout.classesLoadingOrderFilePath
if (loadingOrderFilePath != null) {
@@ -235,13 +236,17 @@ class DistributionJARsBuilder {
usedModules.addAll(layoutBuilder.usedModules)
}
private void buildPlugins() {
def ant = buildContext.ant
private void buildBundledPlugins() {
def productLayout = buildContext.productProperties.productLayout
def layoutBuilder = createLayoutBuilder()
buildPlugins(layoutBuilder, getPluginsByModules(productLayout.bundledPluginModules), "$buildContext.paths.distAll/plugins")
usedModules.addAll(layoutBuilder.usedModules)
}
void buildNonBundledPlugins() {
def ant = buildContext.ant
def productLayout = buildContext.productProperties.productLayout
def layoutBuilder = createLayoutBuilder()
buildContext.executeStep("Build non-bundled plugins", BuildOptions.NON_BUNDLED_PLUGINS_STEP) {
def pluginsToPublish = getPluginsByModules(productLayout.pluginModulesToPublish)
if (buildContext.productProperties.setPluginAndIDEVersionInPluginXml) {