From 060790c98bda46c54db4730f408c6f6db6d00bf2 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 7 Jun 2016 22:27:53 +0300 Subject: [PATCH] build scripts redesign: added method to build archive of production sources --- .../intellij/build/BuildTasks.groovy | 9 ++++- .../intellij/build/impl/BuildTasksImpl.groovy | 37 +++++++++++++++++-- build/scripts/dist.gant | 2 +- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy b/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy index 68ebd05a9f19..94b4a4563967 100644 --- a/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy +++ b/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy @@ -22,9 +22,14 @@ import org.jetbrains.intellij.build.impl.BuildTasksImpl */ abstract class BuildTasks { /** - * Build archive of the project source files keeping the original layout + * Build sources.zip archive containing the project source files keeping the original layout */ - abstract void zipSources() + abstract void zipProjectSources() + + /** + * Build archive containing production source roots of the project modules + */ + abstract void zipSourcesOfModules(Collection modules, String targetFilePath) /** * Update search/searchableOptions.xml file in {@code targetModuleName} module output directory diff --git a/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy b/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy index f900b5a5a635..f34e1028fca6 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy @@ -19,9 +19,13 @@ import com.intellij.openapi.util.io.FileUtil import org.jetbrains.intellij.build.BuildContext import org.jetbrains.intellij.build.BuildOptions import org.jetbrains.intellij.build.BuildTasks +import org.jetbrains.jps.model.java.JavaResourceRootType +import org.jetbrains.jps.model.java.JavaSourceRootType +import org.jetbrains.jps.model.module.JpsModule import java.time.LocalDate import java.time.format.DateTimeFormatter + /** * @author nik */ @@ -33,7 +37,7 @@ class BuildTasksImpl extends BuildTasks { } @Override - void zipSources() { + void zipProjectSources() { buildContext.executeStep("Build sources zip archive", BuildOptions.SOURCES_ARCHIVE_STEP) { String targetFile = "$buildContext.paths.artifacts/sources.zip" buildContext.messages.progress("Building sources archive $targetFile") @@ -53,15 +57,40 @@ class BuildTasksImpl extends BuildTasks { } } - //todo[nik] do we need 'cp' and 'jvmArgs' parameters? + @Override + void zipSourcesOfModules(Collection modules, String targetFilePath) { + buildContext.executeStep("Build sources of modules archive", BuildOptions.SOURCES_ARCHIVE_STEP) { + buildContext.messages.progress("Building archive of ${modules.size()} modules to $targetFilePath") + buildContext.ant.mkdir(dir: new File(targetFilePath).getParent()) + buildContext.ant.delete(file: targetFilePath) + buildContext.ant.zip(destfile: targetFilePath) { + modules.each { + JpsModule module = buildContext.findModule(it) + if (module == null) { + buildContext.messages.error("Cannot build sources archive: '$it' module doesn't exist") + } + module.getSourceRoots(JavaSourceRootType.SOURCE).each { root -> + buildContext.ant. + zipfileset(dir: root.file.absolutePath, prefix: root.properties.packagePrefix.replace('.', '/'), erroronmissingdir: false) + } + module.getSourceRoots(JavaResourceRootType.RESOURCE).each { root -> + buildContext.ant.zipfileset(dir: root.file.absolutePath, prefix: root.properties.relativeOutputPath, erroronmissingdir: false) + } + } + } + + buildContext.notifyArtifactBuilt(targetFilePath) + } + } + +//todo[nik] do we need 'cp' and 'jvmArgs' parameters? @Override void buildSearchableOptions(String targetModuleName, List modulesToIndex, List pathsToLicenses) { //todo[nik] create searchableOptions.xml in a separate directory instead of modifying it in the module output buildContext.executeStep("Build searchable options index", BuildOptions.SEARCHABLE_OPTIONS_INDEX_STEP, { def javaRuntimeClasses = "${buildContext.projectBuilder.moduleOutput(buildContext.findModule("java-runtime"))}" if (!new File(javaRuntimeClasses).exists()) { - buildContext.messages. - error("Cannot build searchable options, 'java-runtime' module isn't compiled ($javaRuntimeClasses doesn't exist)") + buildContext.messages.error("Cannot build searchable options, 'java-runtime' module isn't compiled ($javaRuntimeClasses doesn't exist)") } buildContext.messages.progress("Building searchable options for modules $modulesToIndex") diff --git a/build/scripts/dist.gant b/build/scripts/dist.gant index c84d330b9ed1..10fa5409f9a0 100644 --- a/build/scripts/dist.gant +++ b/build/scripts/dist.gant @@ -77,7 +77,7 @@ target('default': 'The default target') { // Generate updater.jar from the updater module (patch updater) layoutUpdater(out) } - tasks.zipSources() + tasks.zipProjectSources() } //todo[nik] do we really need this target? updates.xml calls layout.gant directly