mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJI-1023 plugins validation with org.jetbrains.intellij.plugins:structure-intellij library
GitOrigin-RevId: f81477dcc2f57a032181fd7eb9ea3085e1f6b579
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4088c847f2
commit
be237eccff
-1
@@ -8,7 +8,6 @@ import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.util.function.Supplier
|
||||
|
||||
@Suppress("unused")
|
||||
@ApiStatus.Internal
|
||||
object TeamCityHelper {
|
||||
val isUnderTeamCity = System.getenv("TEAMCITY_VERSION") != null
|
||||
|
||||
@@ -166,5 +166,48 @@
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="module-library">
|
||||
<library name="jetbrains.intellij.plugins.structure" type="repository">
|
||||
<properties maven-id="org.jetbrains.intellij.plugins:structure-intellij:3.247">
|
||||
<exclude>
|
||||
<dependency maven-id="org.jetbrains.kotlin:kotlin-reflect" />
|
||||
<dependency maven-id="org.jetbrains.kotlin:kotlin-stdlib-common" />
|
||||
<dependency maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk7" />
|
||||
<dependency maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk8" />
|
||||
<dependency maven-id="org.jetbrains.kotlin:kotlin-stdlib" />
|
||||
<dependency maven-id="org.jetbrains:annotations" />
|
||||
<dependency maven-id="org.apache.commons:commons-compress" />
|
||||
<dependency maven-id="org.slf4j:slf4j-api" />
|
||||
<dependency maven-id="com.fasterxml.jackson.core:jackson-annotations" />
|
||||
<dependency maven-id="com.fasterxml.jackson.core:jackson-core" />
|
||||
<dependency maven-id="com.fasterxml.jackson.core:jackson-databind" />
|
||||
<dependency maven-id="org.jsoup:jsoup" />
|
||||
<dependency maven-id="org.tukaani:xz" />
|
||||
<dependency maven-id="commons-io:commons-io" />
|
||||
<dependency maven-id="org.jvnet.staxex:stax-ex" />
|
||||
<dependency maven-id="org.glassfish.jaxb:txw2" />
|
||||
<dependency maven-id="org.glassfish.jaxb:jaxb-runtime" />
|
||||
<dependency maven-id="com.sun.xml.fastinfoset:FastInfoset" />
|
||||
<dependency maven-id="com.sun.istack:istack-commons-runtime" />
|
||||
<dependency maven-id="javax.xml.bind:jaxb-api" />
|
||||
</exclude>
|
||||
</properties>
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/plugins/structure-intellij/3.247/structure-intellij-3.247.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/plugins/structure-base/3.247/structure-base-3.247.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/atteo/evo-inflector/1.3/evo-inflector-1.3.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/module/jackson-module-kotlin/2.14.1/jackson-module-kotlin-2.14.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="jaxb-api" level="project" />
|
||||
<orderEntry type="library" name="jaxb-runtime" level="project" />
|
||||
<orderEntry type="library" name="tcServiceMessages" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="kotlin-reflect" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="javax.activation" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="jsoup" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
+6
-9
@@ -4,6 +4,7 @@ package org.jetbrains.intellij.build
|
||||
import com.intellij.util.xml.dom.readXmlAsModel
|
||||
import org.jetbrains.annotations.VisibleForTesting
|
||||
import org.jetbrains.intellij.build.impl.BuildUtils
|
||||
import org.jetbrains.intellij.build.impl.logging.reportBuildProblem
|
||||
import org.jetbrains.intellij.build.impl.readSnapshotBuildNumber
|
||||
import org.jetbrains.jps.model.JpsProject
|
||||
import java.nio.file.Files
|
||||
@@ -94,15 +95,11 @@ class ApplicationInfoPropertiesImpl: ApplicationInfoProperties {
|
||||
val expirationDate = buildDate.plus(30, ChronoUnit.DAYS)
|
||||
val now = Instant.ofEpochMilli(System.currentTimeMillis())
|
||||
if (expirationDate < now) {
|
||||
val msg = "Supplied build date is $buildDate, " +
|
||||
"so expiration date is in the past, " +
|
||||
"distribution won't be able to start"
|
||||
if (buildOptions.isInDevelopmentMode) {
|
||||
error(msg)
|
||||
}
|
||||
else {
|
||||
println("##teamcity[buildProblem description='$msg']")
|
||||
}
|
||||
reportBuildProblem(
|
||||
"Supplied build date is $buildDate, " +
|
||||
"so expiration date is in the past, " +
|
||||
"distribution won't be able to start"
|
||||
)
|
||||
}
|
||||
}
|
||||
majorReleaseDate == null || majorReleaseDate.startsWith("__") -> {
|
||||
|
||||
+66
-14
@@ -12,6 +12,10 @@ import com.intellij.util.containers.MultiMap
|
||||
import com.intellij.util.io.Compressor
|
||||
import com.jetbrains.plugin.blockmap.core.BlockMap
|
||||
import com.jetbrains.plugin.blockmap.core.FileHash
|
||||
import com.jetbrains.plugin.structure.base.plugin.PluginCreationFail
|
||||
import com.jetbrains.plugin.structure.base.plugin.PluginCreationSuccess
|
||||
import com.jetbrains.plugin.structure.base.plugin.PluginProblem
|
||||
import com.jetbrains.plugin.structure.intellij.plugin.IdePluginManager
|
||||
import io.opentelemetry.api.common.AttributeKey
|
||||
import io.opentelemetry.api.common.Attributes
|
||||
import io.opentelemetry.api.trace.Span
|
||||
@@ -25,6 +29,7 @@ import org.jetbrains.intellij.build.*
|
||||
import org.jetbrains.intellij.build.TraceManager.spanBuilder
|
||||
import org.jetbrains.intellij.build.dependencies.BuildDependenciesCommunityRoot
|
||||
import org.jetbrains.intellij.build.fus.createStatisticsRecorderBundledMetadataProviderTask
|
||||
import org.jetbrains.intellij.build.impl.logging.reportBuildProblem
|
||||
import org.jetbrains.intellij.build.impl.projectStructureMapping.*
|
||||
import org.jetbrains.intellij.build.io.*
|
||||
import org.jetbrains.intellij.build.tasks.ZipSource
|
||||
@@ -50,6 +55,8 @@ import java.util.*
|
||||
import java.util.concurrent.ConcurrentLinkedQueue
|
||||
import java.util.function.Predicate
|
||||
import java.util.stream.Collectors
|
||||
import kotlin.io.path.exists
|
||||
import kotlin.io.path.name
|
||||
|
||||
/**
|
||||
* Assembles output of modules to platform JARs (in [BuildPaths.distAllDir]/lib directory),
|
||||
@@ -161,6 +168,50 @@ class DistributionJARsBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private fun validatePlugin(path: Path, context: BuildContext) {
|
||||
spanBuilder("plugin validation").setAttribute("path", "$path").useWithScope {
|
||||
if (!path.exists()) {
|
||||
it.addEvent("path doesn't exist, skipped")
|
||||
return@useWithScope
|
||||
}
|
||||
var id: String? = null
|
||||
val problems = when (val result = IdePluginManager.createManager().createPlugin(path)) {
|
||||
is PluginCreationSuccess -> {
|
||||
id = result.plugin.pluginId
|
||||
result.unacceptableWarnings
|
||||
}
|
||||
is PluginCreationFail -> {
|
||||
result.errorsAndWarnings
|
||||
}
|
||||
}
|
||||
if (problems.isNotEmpty()) {
|
||||
val msg = problems.joinToString(
|
||||
prefix = "${id ?: path}: ",
|
||||
separator = ". ",
|
||||
transform = PluginProblem::message
|
||||
)
|
||||
when (id) {
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-308174
|
||||
"androidx.compose.plugins.idea",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312410
|
||||
"com.intellij.tasks",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312409
|
||||
"org.jetbrains.plugins.sass",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312408
|
||||
"org.toml.lang",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312407
|
||||
"com.intellij.plugins.webcomponents",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312406
|
||||
"cucumber-javascript",
|
||||
// https://youtrack.jetbrains.com/issue/IDEA-312405
|
||||
"com.jetbrains.plugins.yeoman"
|
||||
-> context.messages.warning(msg)
|
||||
else -> reportBuildProblem(msg, identity = "${id ?: path}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// filter out jars with relative paths in name
|
||||
val productModules: List<String>
|
||||
get() {
|
||||
@@ -361,7 +412,7 @@ class DistributionJARsBuilder {
|
||||
}
|
||||
|
||||
// buildPlugins pluginBuilt listener is called concurrently
|
||||
val pluginsToIncludeInCustomRepository = ConcurrentLinkedQueue<PluginRepositorySpec>()
|
||||
val pluginSpecs = ConcurrentLinkedQueue<PluginRepositorySpec>()
|
||||
val autoPublishPluginChecker = loadPluginAutoPublishList(context)
|
||||
val prepareCustomPluginRepository = context.productProperties.productLayout.prepareCustomPluginRepositoryForPublishedPlugins &&
|
||||
!context.isStepSkipped(BuildOptions.ARCHIVE_PLUGINS)
|
||||
@@ -383,10 +434,8 @@ class DistributionJARsBuilder {
|
||||
defaultPluginVersion
|
||||
}
|
||||
val destFile = targetDirectory.resolve("${plugin.directoryName}-$pluginVersion.zip")
|
||||
if (prepareCustomPluginRepository) {
|
||||
val pluginXml = moduleOutputPatcher.getPatchedPluginXml(plugin.mainModule)
|
||||
pluginsToIncludeInCustomRepository.add(PluginRepositorySpec(destFile, pluginXml))
|
||||
}
|
||||
val pluginXml = moduleOutputPatcher.getPatchedPluginXml(plugin.mainModule)
|
||||
pluginSpecs.add(PluginRepositorySpec(destFile, pluginXml))
|
||||
dirToJar.add(NonBundledPlugin(pluginDirOrFile, destFile, !plugin.enableSymlinksAndExecutableResources))
|
||||
}
|
||||
|
||||
@@ -399,21 +448,24 @@ class DistributionJARsBuilder {
|
||||
targetDir = autoUploadingDir,
|
||||
moduleOutputPatcher = moduleOutputPatcher,
|
||||
context = context)
|
||||
if (prepareCustomPluginRepository) {
|
||||
pluginsToIncludeInCustomRepository.add(spec)
|
||||
}
|
||||
pluginSpecs.add(spec)
|
||||
}
|
||||
|
||||
for (item in buildKeymapPluginsTask.await()) {
|
||||
pluginSpecs.add(PluginRepositorySpec(pluginZip = item.first, pluginXml = item.second))
|
||||
}
|
||||
if (prepareCustomPluginRepository) {
|
||||
for (item in buildKeymapPluginsTask.await()) {
|
||||
pluginsToIncludeInCustomRepository.add(PluginRepositorySpec(pluginZip = item.first, pluginXml = item.second))
|
||||
}
|
||||
|
||||
val list = pluginsToIncludeInCustomRepository.sortedBy { it.pluginZip }
|
||||
val list = pluginSpecs.sortedBy { it.pluginZip }
|
||||
generatePluginRepositoryMetaFile(list, nonBundledPluginsArtifacts, context)
|
||||
generatePluginRepositoryMetaFile(list.filter { it.pluginZip.startsWith(autoUploadingDir) }, autoUploadingDir, context)
|
||||
}
|
||||
|
||||
pluginSpecs.forEach {
|
||||
if (it.pluginZip.startsWith(autoUploadingDir)) {
|
||||
launch {
|
||||
validatePlugin(it.pluginZip, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
mappings
|
||||
}
|
||||
}
|
||||
|
||||
+8
-3
@@ -13,6 +13,8 @@ import org.jetbrains.intellij.build.BuildContext
|
||||
import org.jetbrains.intellij.build.JvmArchitecture
|
||||
import org.jetbrains.intellij.build.OsFamily
|
||||
import org.jetbrains.intellij.build.TraceManager
|
||||
import org.jetbrains.intellij.build.dependencies.TeamCityHelper
|
||||
import org.jetbrains.intellij.build.impl.logging.reportBuildProblem
|
||||
import java.io.BufferedInputStream
|
||||
import java.nio.file.FileSystems
|
||||
import java.nio.file.Files
|
||||
@@ -66,10 +68,13 @@ interface OsSpecificDistributionBuilder {
|
||||
.toSet()
|
||||
if (unmatchedPatterns.isNotEmpty()) {
|
||||
context.messages.warning(matchedFiles.joinToString(prefix = "Matched files ${distribution.name}:\n", separator = "\n"))
|
||||
val msg = unmatchedPatterns.joinToString(prefix = "Unmatched executable permissions patterns in ${distribution.name}: ") {
|
||||
patterns.getValue(it)
|
||||
if (TeamCityHelper.isUnderTeamCity) {
|
||||
reportBuildProblem(
|
||||
unmatchedPatterns.joinToString(prefix = "Unmatched executable permissions patterns in ${distribution.name}: ") {
|
||||
patterns.getValue(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
println("##teamcity[buildProblem description='$msg']")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.intellij.build.*
|
||||
import org.jetbrains.intellij.build.CompilationTasks.Companion.create
|
||||
import org.jetbrains.intellij.build.TraceManager.spanBuilder
|
||||
import org.jetbrains.intellij.build.causal.CausalProfilingOptions
|
||||
import org.jetbrains.intellij.build.impl.logging.reportBuildProblem
|
||||
import org.jetbrains.intellij.build.io.runProcess
|
||||
import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType
|
||||
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||
@@ -59,8 +60,8 @@ internal class TestingTasksImpl(private val context: CompilationContext, private
|
||||
}
|
||||
}
|
||||
catch (e: Exception) {
|
||||
val description = e.message?.lineSequence()?.first()?.replace("'", "\"")
|
||||
println("##teamcity[buildProblem identity='${name.replace(" ", "_")}' description='$description']")
|
||||
val description = e.message?.lineSequence()?.firstOrNull() ?: ""
|
||||
reportBuildProblem(description, identity = name)
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
+20
-2
@@ -4,8 +4,11 @@ package org.jetbrains.intellij.build.impl.logging
|
||||
import com.intellij.diagnostic.telemetry.useWithScope
|
||||
import com.intellij.openapi.util.ThrowableComputable
|
||||
import com.intellij.util.containers.Stack
|
||||
import jetbrains.buildServer.messages.serviceMessages.ServiceMessage
|
||||
import org.jetbrains.annotations.ApiStatus.Internal
|
||||
import org.jetbrains.intellij.build.*
|
||||
import org.jetbrains.intellij.build.TraceManager.spanBuilder
|
||||
import org.jetbrains.intellij.build.dependencies.TeamCityHelper.isUnderTeamCity
|
||||
import java.io.BufferedWriter
|
||||
import java.io.PrintWriter
|
||||
import java.io.StringWriter
|
||||
@@ -15,6 +18,7 @@ import java.nio.file.StandardCopyOption
|
||||
import java.nio.file.StandardOpenOption
|
||||
import java.util.*
|
||||
import java.util.function.Consumer
|
||||
import jetbrains.buildServer.messages.serviceMessages.ServiceMessageTypes.BUILD_PORBLEM as BUILD_PROBLEM
|
||||
|
||||
class BuildMessagesImpl private constructor(private val logger: BuildMessageLogger,
|
||||
private val debugLogger: DebugLogger) : BuildMessages {
|
||||
@@ -22,8 +26,7 @@ class BuildMessagesImpl private constructor(private val logger: BuildMessageLogg
|
||||
|
||||
companion object {
|
||||
fun create(): BuildMessagesImpl {
|
||||
val underTeamCity = System.getenv("TEAMCITY_VERSION") != null
|
||||
val mainLoggerFactory = if (underTeamCity) TeamCityBuildMessageLogger.FACTORY else ConsoleBuildMessageLogger.FACTORY
|
||||
val mainLoggerFactory = if (isUnderTeamCity) TeamCityBuildMessageLogger.FACTORY else ConsoleBuildMessageLogger.FACTORY
|
||||
val debugLogger = DebugLogger()
|
||||
return BuildMessagesImpl(logger = CompositeBuildMessageLogger(listOf(mainLoggerFactory(), debugLogger.createLogger())),
|
||||
debugLogger = debugLogger)
|
||||
@@ -206,3 +209,18 @@ private class PrintWriterBuildMessageLogger(
|
||||
disposer.accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
@Internal
|
||||
fun reportBuildProblem(description: String, identity: String? = null) {
|
||||
if (isUnderTeamCity) {
|
||||
val attributes = mutableMapOf("description" to description)
|
||||
if (identity != null) {
|
||||
attributes["identity"] = identity
|
||||
}
|
||||
println(ServiceMessage.asString(BUILD_PROBLEM, attributes))
|
||||
}
|
||||
else {
|
||||
error("$identity: $description")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<category>Version Controls</category>
|
||||
<description>
|
||||
<![CDATA[
|
||||
Provides integration with <a href="http://github.com/">GitHub</a>.
|
||||
Provides integration with <a href="https://github.com/">GitHub</a>.
|
||||
<ul>
|
||||
<li>Specify your GitHub account to access all of your repositories from the IDE.</li>
|
||||
<li>Clone repositories, create and review pull requests, create gists, and much more.</li>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<name>Mercurial</name>
|
||||
<description>
|
||||
<![CDATA[
|
||||
Allows working with <a href="http://www.mercurial-scm.org/">Mercurial version control system</a>.
|
||||
Allows working with <a href="https://www.mercurial-scm.org/">Mercurial version control system</a>.
|
||||
The following features are available:
|
||||
<ul>
|
||||
<li>Dedicated page under the Version Control node in the Settings/Preferences dialog.</li>
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
The Python plug-in provides smart editing for Python scripts. The feature set of the plugin
|
||||
corresponds to PyCharm IDE Community Edition.
|
||||
<br>
|
||||
<a href="http://blog.jetbrains.com/pycharm">PyCharm blog</a><br>
|
||||
<a href="http://forum.jetbrains.com/forum/PyCharm">Discussion forum</a><br>
|
||||
<a href="https://blog.jetbrains.com/pycharm">PyCharm blog</a><br>
|
||||
<a href="https://forum.jetbrains.com/forum/PyCharm">Discussion forum</a><br>
|
||||
<a href="https://youtrack.jetbrains.com/issues/PY">Issue tracker</a><br>
|
||||
]]></description>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user