From 48a89bb400ce34da1f6ad8aee3b76264e23ab5d1 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 27 Sep 2021 16:11:57 -0300 Subject: [PATCH 01/28] publish 5.0.0-RC.0 --- Jenkinsfile | 2 +- build.sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8ba37cf65b..6d2587e58b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -36,7 +36,7 @@ pipeline { when { anyOf { branch 'master' - branch 'remod-breaking' + branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index c76b976520..4218a047b0 100644 --- a/build.sbt +++ b/build.sbt @@ -16,7 +16,7 @@ name := "amf-core" // // if (branch.contains("master")) s"$major.$minor.$build" else s"$major.${minor + 1}.0-SNAPSHOT" //} -ThisBuild / version := "5.0.0-SUPER-SECRET-SNAPSHOT" +ThisBuild / version := "5.0.0-RC.0" publish := {} From 94339c5e48f7a97ee97f8b3a6e247c8a81be0388 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 4 Oct 2021 11:51:25 -0300 Subject: [PATCH 02/28] adjust jenkins file to run sonar in release branch --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile b/Jenkinsfile index 6d2587e58b..2425cd1edd 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,6 +23,7 @@ pipeline { stage('Coverage') { when { branch 'master' + branch 'release/*' } steps { wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { From 7840be0660d8faa171f20a4179e8fa9a8fdc0fea Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 27 Sep 2021 14:37:38 -0300 Subject: [PATCH 03/28] APIMF-3417: added method to remove entities from configuration private to AMF. --- .../amf/core/client/scala/AMFGraphConfiguration.scala | 9 ++++++--- .../{AMFGraphEntities.scala => DataNodeEntities.scala} | 2 +- .../scala/amf/core/internal/registries/AMFRegistry.scala | 2 ++ .../internal/registries/domain/EntitiesRegistry.scala | 2 ++ .../amf/aml/internal/plugin/RegistryContextTest.scala | 6 +++--- 5 files changed, 14 insertions(+), 7 deletions(-) rename shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/{AMFGraphEntities.scala => DataNodeEntities.scala} (87%) diff --git a/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala b/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala index 4b422158bf..39f5bd567e 100644 --- a/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala +++ b/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala @@ -15,7 +15,7 @@ import amf.core.internal.entities.CoreEntities import amf.core.internal.metamodel.ModelDefaultBuilder import amf.core.internal.parser.CompilerConfiguration import amf.core.internal.plugins.AMFPlugin -import amf.core.internal.plugins.document.graph.entities.AMFGraphEntities +import amf.core.internal.plugins.document.graph.entities.DataNodeEntities import amf.core.internal.plugins.parse.{AMFGraphParsePlugin, DomainParsingFallback} import amf.core.internal.plugins.render.{AMFGraphRenderPlugin, DefaultRenderConfiguration} import amf.core.internal.plugins.syntax.{SyamlSyntaxParsePlugin, SyamlSyntaxRenderPlugin} @@ -52,12 +52,11 @@ object AMFGraphConfiguration { AMFResolvers.predefined(), DefaultErrorHandlerProvider, AMFRegistry.empty - .withEntities(CoreEntities.entities ++ AMFGraphEntities.entities) + .withEntities(CoreEntities.entities ++ DataNodeEntities.entities) .withAnnotations(CoreSerializableAnnotations.annotations), Set.empty, AMFOptions.default() ).withPlugins(List(AMFGraphParsePlugin, AMFGraphRenderPlugin, SyamlSyntaxParsePlugin, SyamlSyntaxRenderPlugin)) - // we might need to register editing pipeline as well because of legacy behaviour. .withTransformationPipeline(BasicTransformationPipeline()) } @@ -146,6 +145,7 @@ class AMFGraphConfiguration private[amf] (override private[amf] val resolvers: A } + private[amf] def emptyEntities(): AMFGraphConfiguration = super._emptyEntities() private[amf] def getParsingOptions: ParsingOptions = options.parsingOptions private[amf] def getRegistry: AMFRegistry = registry private[amf] def getResourceLoaders: List[ResourceLoader] = resolvers.resourceLoaders @@ -192,6 +192,9 @@ sealed abstract class BaseAMFConfigurationSetter(private[amf] val resolvers: AMF protected def _withEntities[T](entities: Map[String, ModelDefaultBuilder]): T = copy(registry = registry.withEntities(entities)).asInstanceOf[T] + protected def _emptyEntities[T](): T = + copy(registry = registry.emptyEntities()).asInstanceOf[T] + protected def _withAnnotations[T](ann: Map[String, AnnotationGraphLoader]): T = copy(registry = registry.withAnnotations(ann)).asInstanceOf[T] diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/AMFGraphEntities.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/DataNodeEntities.scala similarity index 87% rename from shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/AMFGraphEntities.scala rename to shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/DataNodeEntities.scala index b4886391e3..7a654cac26 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/AMFGraphEntities.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/document/graph/entities/DataNodeEntities.scala @@ -4,7 +4,7 @@ import amf.core.internal.entities.Entities import amf.core.internal.metamodel.{ModelDefaultBuilder, Obj} import amf.core.internal.metamodel.domain._ -private[amf] object AMFGraphEntities extends Entities { +private[amf] object DataNodeEntities extends Entities { override protected val innerEntities: Seq[ModelDefaultBuilder] = Seq( ObjectNodeModel, diff --git a/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala b/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala index 1fee87630b..f2376eb9bb 100644 --- a/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala +++ b/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala @@ -50,6 +50,8 @@ private[amf] case class AMFRegistry(plugins: PluginsRegistry, def withEntities(entities: Map[String, ModelDefaultBuilder]): AMFRegistry = copy(entitiesRegistry = entitiesRegistry.withEntities(entities)) + def emptyEntities(): AMFRegistry = copy(entitiesRegistry = entitiesRegistry.removeAllEntities()) + def withAnnotations(annotations: Map[String, AnnotationGraphLoader]): AMFRegistry = copy(entitiesRegistry = entitiesRegistry.withAnnotations(annotations)) diff --git a/shared/src/main/scala/amf/core/internal/registries/domain/EntitiesRegistry.scala b/shared/src/main/scala/amf/core/internal/registries/domain/EntitiesRegistry.scala index 91f86f416f..2dc21c7f9c 100644 --- a/shared/src/main/scala/amf/core/internal/registries/domain/EntitiesRegistry.scala +++ b/shared/src/main/scala/amf/core/internal/registries/domain/EntitiesRegistry.scala @@ -16,6 +16,8 @@ private[amf] case class EntitiesRegistry(domainEntities: Map[String, ModelDefaul def withExtensions(extensions: Seq[DomainElement]): EntitiesRegistry = copy(extensions = this.extensions ++ extensions) + private[amf] def removeAllEntities(): EntitiesRegistry = copy(domainEntities = Map.empty) + private[amf] def findType(`type`: String): Option[ModelDefaultBuilder] = domainEntities.get(`type`) private[amf] def findAnnotation(annotationID: String): Option[AnnotationGraphLoader] = diff --git a/shared/src/test/scala/amf/aml/internal/plugin/RegistryContextTest.scala b/shared/src/test/scala/amf/aml/internal/plugin/RegistryContextTest.scala index 22527daf26..f3ccb9780c 100644 --- a/shared/src/test/scala/amf/aml/internal/plugin/RegistryContextTest.scala +++ b/shared/src/test/scala/amf/aml/internal/plugin/RegistryContextTest.scala @@ -4,7 +4,7 @@ import amf.core.internal.annotations.serializable.CoreSerializableAnnotations import amf.core.internal.entities.CoreEntities import amf.core.internal.metamodel.Obj import amf.core.internal.metamodel.document.SourceMapModel -import amf.core.internal.plugins.document.graph.entities.AMFGraphEntities +import amf.core.internal.plugins.document.graph.entities.DataNodeEntities import amf.core.internal.registries.{AMFRegistry, RegistryContext} import org.scalatest.{FunSuite, Matchers} @@ -15,7 +15,7 @@ class RegistryContextTest extends FunSuite with Matchers { test("Test types without blocklist") { val ctx = RegistryContext( AMFRegistry.empty - .withEntities(CoreEntities.entities ++ AMFGraphEntities.entities) + .withEntities(CoreEntities.entities ++ DataNodeEntities.entities) .withAnnotations(CoreSerializableAnnotations.annotations)) CoreEntities.entities.values.foreach { `type` => @@ -32,7 +32,7 @@ class RegistryContextTest extends FunSuite with Matchers { test("Test types without Core") { val ctx = RegistryContext( AMFRegistry.empty - .withEntities(AMFGraphEntities.entities) + .withEntities(DataNodeEntities.entities) .withAnnotations(CoreSerializableAnnotations.annotations)) CoreEntities.entities.values.foreach { `type` => From a0bb16e485f011415e513adb43daf4932f2ef107 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Wed, 29 Sep 2021 14:21:47 -0300 Subject: [PATCH 04/28] APIMF-3350: processing data is converted to platform wrap to keep the type the same in scala -> platform conversion --- .../core/internal/convert/CoreBaseConverter.scala | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shared/src/main/scala/amf/core/internal/convert/CoreBaseConverter.scala b/shared/src/main/scala/amf/core/internal/convert/CoreBaseConverter.scala index bf59b30149..7fc847365d 100644 --- a/shared/src/main/scala/amf/core/internal/convert/CoreBaseConverter.scala +++ b/shared/src/main/scala/amf/core/internal/convert/CoreBaseConverter.scala @@ -52,7 +52,7 @@ import amf.core.client.platform.validation.{ ValidationCandidate => ClientValidationCandidate, ValidationShapeSet => ClientValidationShapeSet } -import amf.core.client.platform.{config, transform, AMFResult => ClientAMFResult} +import amf.core.client.platform.{config, model, transform, AMFResult => ClientAMFResult} import amf.core.client.scala.config._ import amf.core.client.scala.errorhandling.AMFErrorHandler import amf.core.client.scala.model._ @@ -734,13 +734,13 @@ trait AmfObjectResultConverter { } } -trait BaseUnitProcessingDataConverter { +trait BaseUnitProcessingDataConverter extends PlatformSecrets { implicit object BaseUnitProcessingDataMatcher - extends BidirectionalMatcher[BaseUnitProcessingData, platform.model.document.BaseUnitProcessingData] { - override def asInternal(from: platform.model.document.BaseUnitProcessingData): BaseUnitProcessingData = + extends BidirectionalMatcher[BaseUnitProcessingData, model.document.BaseUnitProcessingData] { + override def asInternal(from: model.document.BaseUnitProcessingData): BaseUnitProcessingData = from._internal - override def asClient(from: BaseUnitProcessingData): platform.model.document.BaseUnitProcessingData = - new platform.model.document.BaseUnitProcessingData(from) + override def asClient(from: BaseUnitProcessingData): model.document.BaseUnitProcessingData = + platform.wrap(from) } } From 17682d2186a5e94245fedaec9f84a5d0a16fdbea Mon Sep 17 00:00:00 2001 From: Hernan Najles Date: Fri, 1 Oct 2021 11:34:46 -0300 Subject: [PATCH 05/28] APIMF-2743: adopt syaml version with right bom handling --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 4218a047b0..f66bdfbae7 100644 --- a/build.sbt +++ b/build.sbt @@ -57,7 +57,7 @@ lazy val workspaceDirectory: File = case _ => Path.userHome / "mulesoft" } -val syamlVersion = "1.1.312" +val syamlVersion = "1.1.314" lazy val syamlJVMRef = ProjectRef(workspaceDirectory / "syaml", "syamlJVM") lazy val syamlJSRef = ProjectRef(workspaceDirectory / "syaml", "syamlJS") From a94f0309241ac2a640305202544420030afeb0ff Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Fri, 1 Oct 2021 12:37:44 -0300 Subject: [PATCH 06/28] Fix: removed static cache that wasn't being used properly and was making us accumulate memory --- .../document/graph/parser/FlattenedGraphParser.scala | 12 +++++------- .../parser/GraphDependenciesReferenceHandler.scala | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala index ab113ac3ec..e410afa9ee 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala @@ -29,7 +29,7 @@ class FlattenedUnitGraphParser()(implicit val ctx: GraphParserContext) extends G def parse(document: YDocument, location: String): BaseUnit = { - val rootNode: Option[YNode] = FlattenedUnitGraphParser.findRootNode.runCached(document) + val rootNode: Option[YNode] = FlattenedUnitGraphParser.findRootNode(document) val unit = rootNode.flatMap(_.toOption[YMap]).flatMap(m => retrieveId(m, ctx)) match { case Some(rootId) => @@ -193,7 +193,8 @@ class FlattenedGraphParser(startingPoint: String)(implicit val ctx: GraphParserC typeIris.find(findType(_).isDefined) match { case Some(t) => findType(t) case None => - ctx.eh.violation(UnableToParseNode, id, s"Error parsing JSON-LD node, unknown @types $typeIris", map.location) + ctx.eh + .violation(UnableToParseNode, id, s"Error parsing JSON-LD node, unknown @types $typeIris", map.location) None } } @@ -563,7 +564,7 @@ object FlattenedUnitGraphParser extends GraphContextHelper with GraphParserHelpe * @param document document to perform the canParse test on * @return */ - def canParse(document: SyamlParsedDocument): Boolean = findRootNode.runCached(document.document).isDefined + def canParse(document: SyamlParsedDocument): Boolean = findRootNode(document.document).isDefined private def isRootNode(node: YNode)(implicit ctx: GraphParserContext): Boolean = { node.value match { @@ -592,10 +593,7 @@ object FlattenedUnitGraphParser extends GraphContextHelper with GraphParserHelpe } } - private[amf] val findRootNode: CachedFunction[YDocument, Option[YNode], Identity] = - CachedFunction.from(findRootNodeImpl) - - private[amf] def findRootNodeImpl(document: YDocument): Option[YNode] = { + private[amf] def findRootNode(document: YDocument): Option[YNode] = { document.node.value match { case m: YMap => processGraph(m, ctx) diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphDependenciesReferenceHandler.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphDependenciesReferenceHandler.scala index 10d76f6ee0..56dba94c13 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphDependenciesReferenceHandler.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphDependenciesReferenceHandler.scala @@ -38,7 +38,7 @@ object GraphDependenciesReferenceHandler extends ReferenceHandler { } private def collectFromFlattened(document: YDocument)(implicit errorHandler: IllegalTypeHandler) = { - val rootNode = FlattenedUnitGraphParser.findRootNode.runCached(document) + val rootNode = FlattenedUnitGraphParser.findRootNode(document) rootNode match { case Some(rootNode) if rootNode.tagType == YType.Map => collectGraphDependenciesFrom(rootNode.as[YMap]) From c2e04b8c27f492b00f72fbcfa19502d8a1bb89b3 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Wed, 29 Sep 2021 19:09:20 -0300 Subject: [PATCH 07/28] Fix: removed source spec annotation and added SourceSpec model field to BaseUnitProcessingModel --- .../client/scala/model/document/BaseUnit.scala | 13 ++----------- .../document/BaseUnitProcessingData.scala | 8 ++++++-- .../core/internal/annotations/SourceSpec.scala | 18 ------------------ .../CoreSerializableAnnotations.scala | 1 - .../document/BaseUnitProcessingDataModel.scala | 13 ++++++++++--- .../core/internal/render/SpecOrdering.scala | 14 +++++++------- .../client/scala/model/ModelCloneTest.scala | 6 +++--- 7 files changed, 28 insertions(+), 45 deletions(-) diff --git a/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnit.scala b/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnit.scala index 355b555142..93b9e19de9 100644 --- a/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnit.scala +++ b/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnit.scala @@ -12,7 +12,7 @@ import amf.core.client.scala.traversal.{ TransformationData, TransformationTraversal } -import amf.core.internal.annotations.{Aliases, ReferencedInfo, SourceSpec} +import amf.core.internal.annotations.{Aliases, ReferencedInfo} import amf.core.internal.metamodel.MetaModelTypeMapping import amf.core.internal.metamodel.document.BaseUnitModel import amf.core.internal.metamodel.document.BaseUnitModel._ @@ -143,16 +143,7 @@ trait BaseUnit extends AmfObject with MetaModelTypeMapping with PlatformSecrets def findInReferences(id: String): Option[BaseUnit] = references.find(_.id == id) - def sourceSpec: Option[Spec] = { - processingData.sourceSpecProvider.orElse { - this match { - case e: EncodesModel if Option(e.encodes).isDefined => - e.encodes.annotations.find(classOf[SourceSpec]).map(a => a.spec) - case d: DeclaresModel => d.annotations.find(classOf[SourceSpec]).map(a => a.spec) - case _ => None - } - } - } + def sourceSpec: Option[Spec] = processingData.sourceSpecProvider protected[amf] def profileName: Option[ProfileName] = sourceSpec.map(v => ProfileName.apply(v.id)) diff --git a/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnitProcessingData.scala b/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnitProcessingData.scala index e07d81cb14..e6989f93ab 100644 --- a/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnitProcessingData.scala +++ b/shared/src/main/scala/amf/core/client/scala/model/document/BaseUnitProcessingData.scala @@ -16,10 +16,14 @@ class BaseUnitProcessingData(val fields: Fields, val annotations: Annotations) e def withTransformed(value: Boolean): this.type = set(Transformed, value) + def sourceSpec: StrField = fields.field(SourceSpec) + + def withSourceSpec(spec: String): this.type = set(SourceSpec, Spec(spec).id) + def withSourceSpec(spec: Spec): this.type = set(SourceSpec, spec.id) + override def meta: BaseUnitProcessingDataModel = BaseUnitProcessingDataModel - // Done this to provide API Contract Specs - protected[amf] def sourceSpecProvider: Option[Spec] = None + protected[amf] def sourceSpecProvider: Option[Spec] = sourceSpec.option().map(x => Spec(x)) } object BaseUnitProcessingData { diff --git a/shared/src/main/scala/amf/core/internal/annotations/SourceSpec.scala b/shared/src/main/scala/amf/core/internal/annotations/SourceSpec.scala index e82f4401ef..e09f36476d 100644 --- a/shared/src/main/scala/amf/core/internal/annotations/SourceSpec.scala +++ b/shared/src/main/scala/amf/core/internal/annotations/SourceSpec.scala @@ -8,24 +8,6 @@ trait BaseSourceSpec extends SerializableAnnotation { override val value: String = spec.id } -case class SourceSpec(override val spec: Spec) extends BaseSourceSpec with PerpetualAnnotation { - override val name: String = "source-vendor" // TODO ARM: Change -} - -object SourceSpec extends AnnotationGraphLoader { - def parse(spec: String): Option[SourceSpec] = spec match { - case Raml08.id => Some(SourceSpec(Raml08)) - case Raml10.id => Some(SourceSpec(Raml10)) - case Amf.id => Some(SourceSpec(Amf)) - case Oas20.id => Some(SourceSpec(Oas20)) - case Oas30.id => Some(SourceSpec(Oas30)) - case _ => None - } - - override def unparse(value: String, objects: Map[String, AmfElement]): Option[Annotation] = - SourceSpec.parse(value) -} - case class DefinedBySpec(override val spec: Spec) extends BaseSourceSpec { override val name: String = "defined-by-spec" } diff --git a/shared/src/main/scala/amf/core/internal/annotations/serializable/CoreSerializableAnnotations.scala b/shared/src/main/scala/amf/core/internal/annotations/serializable/CoreSerializableAnnotations.scala index 1f64a35cfb..042d0ca924 100644 --- a/shared/src/main/scala/amf/core/internal/annotations/serializable/CoreSerializableAnnotations.scala +++ b/shared/src/main/scala/amf/core/internal/annotations/serializable/CoreSerializableAnnotations.scala @@ -9,7 +9,6 @@ private[amf] object CoreSerializableAnnotations extends SerializableAnnotations "lexical" -> LexicalInformation, "host-lexical" -> HostLexicalInformation, "base-path-lexical" -> BasePathLexicalInformation, - "source-vendor" -> SourceSpec, // TODO ARM: Change "single-value-array" -> SingleValueArray, "aliases-array" -> Aliases, "synthesized-field" -> SynthesizedField, diff --git a/shared/src/main/scala/amf/core/internal/metamodel/document/BaseUnitProcessingDataModel.scala b/shared/src/main/scala/amf/core/internal/metamodel/document/BaseUnitProcessingDataModel.scala index 08fceb2872..dcdb092d6e 100644 --- a/shared/src/main/scala/amf/core/internal/metamodel/document/BaseUnitProcessingDataModel.scala +++ b/shared/src/main/scala/amf/core/internal/metamodel/document/BaseUnitProcessingDataModel.scala @@ -1,9 +1,9 @@ package amf.core.internal.metamodel.document import amf.core.client.scala.model.document.BaseUnitProcessingData -import amf.core.client.scala.vocabulary.Namespace.Document +import amf.core.client.scala.vocabulary.Namespace.{ApiContract, Document} import amf.core.client.scala.vocabulary.ValueType -import amf.core.internal.metamodel.Type.Bool +import amf.core.internal.metamodel.Type.{Bool, Str} import amf.core.internal.metamodel.domain.{ModelDoc, ModelVocabularies} import amf.core.internal.metamodel.{Field, ModelDefaultBuilder} @@ -15,6 +15,13 @@ trait BaseUnitProcessingDataModel extends ModelDefaultBuilder { "transformed", "Indicates whether a BaseUnit was transformed with some pipeline") ) + + val SourceSpec: Field = + Field( + Str, + Document + "sourceSpec", + ModelDoc(ModelVocabularies.AmlDoc, "sourceSpec", "Standard of the specification file") + ) } object BaseUnitProcessingDataModel extends BaseUnitProcessingDataModel { @@ -22,7 +29,7 @@ object BaseUnitProcessingDataModel extends BaseUnitProcessingDataModel { override def modelInstance: BaseUnitProcessingData = BaseUnitProcessingData() - override def fields: List[Field] = List(Transformed) + override def fields: List[Field] = List(Transformed, SourceSpec) override val doc: ModelDoc = ModelDoc(ModelVocabularies.AmlDoc, "BaseUnitProcessingData", diff --git a/shared/src/main/scala/amf/core/internal/render/SpecOrdering.scala b/shared/src/main/scala/amf/core/internal/render/SpecOrdering.scala index b43f5dc6df..af1c45657f 100644 --- a/shared/src/main/scala/amf/core/internal/render/SpecOrdering.scala +++ b/shared/src/main/scala/amf/core/internal/render/SpecOrdering.scala @@ -1,8 +1,7 @@ package amf.core.internal.render -import amf.core.internal.annotations.SourceSpec import amf.core.internal.parser.domain.Annotations -import amf.core.internal.remote.{Amf, Async, Oas, Raml, Spec} +import amf.core.internal.remote._ import amf.core.internal.render.emitters.Emitter /** @@ -24,11 +23,12 @@ object SpecOrdering { override def compare(x: Emitter, y: Emitter): Int = x.position().compareTo(y.position()) } - def ordering(target: Spec, annotations: Annotations): SpecOrdering = { - annotations.find(classOf[SourceSpec]) match { - case Some(SourceSpec(source)) if source == Amf || equivalent(source, target) => Lexical - case _ => Default - } + def ordering(target: Spec, maybeUnitSpec: Option[Spec]): SpecOrdering = { + maybeUnitSpec + .collect { + case unitSpec if unitSpec == Amf || equivalent(unitSpec, target) => Lexical + } + .getOrElse(Default) } private def equivalent(left: Spec, right: Spec) = { diff --git a/shared/src/test/scala/amf/core/client/scala/model/ModelCloneTest.scala b/shared/src/test/scala/amf/core/client/scala/model/ModelCloneTest.scala index 97aa43c8da..76876e2b62 100644 --- a/shared/src/test/scala/amf/core/client/scala/model/ModelCloneTest.scala +++ b/shared/src/test/scala/amf/core/client/scala/model/ModelCloneTest.scala @@ -1,5 +1,5 @@ package amf.core.client.scala.model -import amf.core.internal.annotations.{ErrorDeclaration, SourceSpec} +import amf.core.internal.annotations.{DefinedBySpec, ErrorDeclaration} import amf.core.internal.metamodel.domain.DomainElementModel import amf.core.internal.metamodel.{Field, ModelDefaultBuilder, Obj} import amf.core.client.scala.model.document.Document @@ -61,10 +61,10 @@ class ModelCloneTest extends FunSuite with ElementsFixture with Matchers { } test("Test annotations at object") { - objectNode.annotations += SourceSpec(Raml10) + objectNode.annotations += DefinedBySpec(Raml10) val cloned = objectNode.cloneElement(mutable.Map.empty).asInstanceOf[ObjectNode] - cloned.annotations.contains(classOf[SourceSpec]) should be(true) + cloned.annotations.contains(classOf[DefinedBySpec]) should be(true) } test("Test clone document with duplicated ids") { From 2e57bbeb1a3e6e3f537f8dff83d8d3ef2800a423 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 4 Oct 2021 12:18:58 -0300 Subject: [PATCH 08/28] publish 5.0.0-RC.1 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index f66bdfbae7..d0b0d67cbb 100644 --- a/build.sbt +++ b/build.sbt @@ -16,7 +16,7 @@ name := "amf-core" // // if (branch.contains("master")) s"$major.$minor.$build" else s"$major.${minor + 1}.0-SNAPSHOT" //} -ThisBuild / version := "5.0.0-RC.0" +ThisBuild / version := "5.0.0-RC.1" publish := {} From b93df62e86047fa6ed4d9cf7dae55a2efa2d457a Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 4 Oct 2021 16:01:15 -0300 Subject: [PATCH 09/28] fix jenkins file to run sonar --- Jenkinsfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2425cd1edd..6b1059f38a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,8 +22,10 @@ pipeline { } stage('Coverage') { when { - branch 'master' - branch 'release/*' + anyOf { + branch 'master' + branch 'release/*' + } } steps { wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { From a3d11131a976f83c4a11e3e3f300a88e7e2d0eb3 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Thu, 7 Oct 2021 08:29:44 -0300 Subject: [PATCH 10/28] collect custom properties using instances so it can be used during parsing --- .../scala/amf/core/client/scala/model/domain/Shape.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shared/src/main/scala/amf/core/client/scala/model/domain/Shape.scala b/shared/src/main/scala/amf/core/client/scala/model/domain/Shape.scala index 451b6935b6..29219f90df 100644 --- a/shared/src/main/scala/amf/core/client/scala/model/domain/Shape.scala +++ b/shared/src/main/scala/amf/core/client/scala/model/domain/Shape.scala @@ -82,7 +82,7 @@ abstract class Shape extends DomainElement with Linkable with NamedDomainElement // @todo should be memoize this? def collectCustomShapePropertyDefinitions(onlyInherited: Boolean = false, - traversed: mutable.Set[String] = mutable.Set()): Seq[FacetsMap] = { + traversed: mutable.Set[Shape] = mutable.Set()): Seq[FacetsMap] = { // Facet properties for the current shape val accInit: FacetsMap = Map.empty val initialSequence = if (onlyInherited) { @@ -103,8 +103,8 @@ abstract class Shape extends DomainElement with Linkable with NamedDomainElement // initial facets maps computed for this shape. This multiplies the number of // final facets maps effectiveInherits.foldLeft(initialSequence) { (acc: Seq[FacetsMap], baseShape: Shape) => - if (!traversed.contains(baseShape.id)) { - baseShape.collectCustomShapePropertyDefinitions(onlyInherited = false, traversed += baseShape.id).flatMap { + if (!traversed.contains(baseShape)) { + baseShape.collectCustomShapePropertyDefinitions(onlyInherited = false, traversed += baseShape).flatMap { facetsMap: FacetsMap => acc.map { accFacetsMap => accFacetsMap ++ facetsMap From ca1663e3741ee404b70c3f7640a7029d073b3ff3 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Wed, 6 Oct 2021 16:57:37 -0300 Subject: [PATCH 11/28] Added listeners in validation config for AML, removed TODOS that were not applicable or had issues created for them. --- .../amf/core/client/platform/config/AMFEventListener.scala | 6 ++++++ .../amf/core/client/scala/config/AMFEventListener.scala | 4 ++++ .../core/client/scala/errorhandling/AMFErrorHandler.scala | 2 +- .../payload/AMFShapePayloadValidationPlugin.scala | 1 - .../core/internal/validation/ValidationConfiguration.scala | 2 ++ .../core/client/common/parser/DuplicateJsonKeysTest.scala | 1 - .../core/client/common/parser/EmbeddedGraphParserTest.scala | 3 +-- .../client/common/parser/FlattenedGraphParserTest.scala | 2 +- 8 files changed, 15 insertions(+), 6 deletions(-) diff --git a/shared/src/main/scala/amf/core/client/platform/config/AMFEventListener.scala b/shared/src/main/scala/amf/core/client/platform/config/AMFEventListener.scala index 38b129663e..1784175cb3 100644 --- a/shared/src/main/scala/amf/core/client/platform/config/AMFEventListener.scala +++ b/shared/src/main/scala/amf/core/client/platform/config/AMFEventListener.scala @@ -45,6 +45,7 @@ object AMFEventNames { val FoundReferences = "FoundReferences" val SelectedParsePlugin = "SelectedParsePlugin" val DetectedSyntaxMediaType = "DetectedSyntaxMediaType" + val SkippedValidationPlugin = "SkippedValidationPlugin" } object AMFEventConverter { @@ -68,6 +69,7 @@ object AMFEventConverter { case e: config.SelectedParsePluginEvent => SelectedParsePluginEvent(e) case e: config.StartedTransformationStepEvent => StartedTransformationStepEvent(e) case e: config.StartingRenderToWriterEvent => StartingRenderToWriterEvent(e) + case e: config.SkippedValidationPluginEvent => SkippedValidationPluginEvent(e) } } @@ -241,3 +243,7 @@ case class DetectedSyntaxMediaTypeEvent(private val _internal: config.DetectedSy @JSExportAll case class StartedTransformationStepEvent(private val _internal: config.StartedTransformationStepEvent) extends ClientEvent(_internal) {} + +@JSExportAll +case class SkippedValidationPluginEvent(private val _internal: config.SkippedValidationPluginEvent) + extends ClientEvent(_internal) {} diff --git a/shared/src/main/scala/amf/core/client/scala/config/AMFEventListener.scala b/shared/src/main/scala/amf/core/client/scala/config/AMFEventListener.scala index 9ad66e29f9..c42b41b8c7 100644 --- a/shared/src/main/scala/amf/core/client/scala/config/AMFEventListener.scala +++ b/shared/src/main/scala/amf/core/client/scala/config/AMFEventListener.scala @@ -219,3 +219,7 @@ case class FinishedRenderingSyntaxEvent(unit: BaseUnit) extends AMFEvent with Gr override val name: String = FinishedSyntaxRender override val groupKey: String = unit.id } + +case class SkippedValidationPluginEvent(pluginName: String, reason: String) extends AMFEvent { + override val name: String = SkippedValidationPlugin +} diff --git a/shared/src/main/scala/amf/core/client/scala/errorhandling/AMFErrorHandler.scala b/shared/src/main/scala/amf/core/client/scala/errorhandling/AMFErrorHandler.scala index c51a63a0c1..8ee0adacef 100644 --- a/shared/src/main/scala/amf/core/client/scala/errorhandling/AMFErrorHandler.scala +++ b/shared/src/main/scala/amf/core/client/scala/errorhandling/AMFErrorHandler.scala @@ -21,7 +21,7 @@ trait AMFErrorHandler { /** Report an [[AMFValidationResult]] */ def report(result: AMFValidationResult): Unit = synchronized { - if (!results.contains(result)) { // TODO ARM check this assertion + if (!results.contains(result)) { results += result } } diff --git a/shared/src/main/scala/amf/core/client/scala/validation/payload/AMFShapePayloadValidationPlugin.scala b/shared/src/main/scala/amf/core/client/scala/validation/payload/AMFShapePayloadValidationPlugin.scala index e017025a62..3828a6c31a 100644 --- a/shared/src/main/scala/amf/core/client/scala/validation/payload/AMFShapePayloadValidationPlugin.scala +++ b/shared/src/main/scala/amf/core/client/scala/validation/payload/AMFShapePayloadValidationPlugin.scala @@ -17,7 +17,6 @@ trait AMFShapePayloadValidationPlugin extends AMFPlugin[ValidatePayloadRequest] override def applies(element: ValidatePayloadRequest): Boolean - // TODO ARM we can remove the validation mode and handle it on different plugins, o we can put the mode into the options def validator(shape: Shape, mediaType: String, config: ShapeValidationConfiguration, diff --git a/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala b/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala index 28cf19d940..8476079a64 100644 --- a/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala +++ b/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala @@ -3,6 +3,7 @@ package amf.core.internal.validation import amf.core.client.scala.AMFGraphConfiguration import amf.core.client.scala.errorhandling.AMFErrorHandler import amf.core.client.common.validation.ProfileName +import amf.core.client.scala.config.AMFEventListener import amf.core.internal.validation.core.ValidationProfile import scala.concurrent.ExecutionContext @@ -17,4 +18,5 @@ case class ValidationConfiguration(amfConfig: AMFGraphConfiguration) { val executionContext: ExecutionContext = amfConfig.getExecutionContext val maxYamlReferences: Option[Int] = amfConfig.options.parsingOptions.maxYamlReferences val constraints: Map[ProfileName, ValidationProfile] = amfConfig.registry.constraintsRules + val listeners: Set[AMFEventListener] = amfConfig.listeners } diff --git a/shared/src/test/scala/amf/core/client/common/parser/DuplicateJsonKeysTest.scala b/shared/src/test/scala/amf/core/client/common/parser/DuplicateJsonKeysTest.scala index c1e82cf782..f2fb619107 100644 --- a/shared/src/test/scala/amf/core/client/common/parser/DuplicateJsonKeysTest.scala +++ b/shared/src/test/scala/amf/core/client/common/parser/DuplicateJsonKeysTest.scala @@ -12,7 +12,6 @@ trait DuplicateJsonKeysTest extends AsyncFunSuite with PlatformSecrets with Nati override implicit def executionContext: ExecutionContext = ExecutionContext.Implicits.global - // TODO ARM: change this to call directly a plugin or syaml test("Parsed JSON with duplicate keys has several warnings") { val config = AMFGraphConfiguration.predefined().withFallback(ExternalFragmentDomainFallback(false)) diff --git a/shared/src/test/scala/amf/core/client/common/parser/EmbeddedGraphParserTest.scala b/shared/src/test/scala/amf/core/client/common/parser/EmbeddedGraphParserTest.scala index 3d65ddc3f1..4d0137045c 100644 --- a/shared/src/test/scala/amf/core/client/common/parser/EmbeddedGraphParserTest.scala +++ b/shared/src/test/scala/amf/core/client/common/parser/EmbeddedGraphParserTest.scala @@ -24,8 +24,7 @@ trait EmbeddedGraphParserTest override implicit val executionContext: ExecutionContext = ExecutionContext.Implicits.global test("Test parse simple document") { - val golden = "shared/src/test/resources/parser/simple-document.expanded.jsonld" - // TODO ARM update for new interfaces + val golden = "shared/src/test/resources/parser/simple-document.expanded.jsonld" val client = AMFGraphConfiguration.predefined().baseUnitClient() val f: Future[AMFResult] = client.parse("file://" + golden).asFuture diff --git a/shared/src/test/scala/amf/core/client/common/parser/FlattenedGraphParserTest.scala b/shared/src/test/scala/amf/core/client/common/parser/FlattenedGraphParserTest.scala index bad77d0482..8db632aaa4 100644 --- a/shared/src/test/scala/amf/core/client/common/parser/FlattenedGraphParserTest.scala +++ b/shared/src/test/scala/amf/core/client/common/parser/FlattenedGraphParserTest.scala @@ -22,7 +22,7 @@ trait FlattenedGraphParserTest test("Test parse simple document") { val golden = "shared/src/test/resources/parser/simple-document.flattened.jsonld" - /// TODO ARM use new client interfaces + val client = AMFGraphConfiguration.predefined().baseUnitClient() val f: Future[AMFResult] = client.parse("file://" + golden).asFuture From d617dd145bf0241c2fe40f2e6bce61e2a082124a Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Wed, 6 Oct 2021 17:02:40 -0300 Subject: [PATCH 12/28] Cleanup: Removed useless abstract class --- .../graph/parser/EmbeddedGraphParser.scala | 12 ++++++++---- .../graph/parser/FlattenedGraphParser.scala | 1 - .../document/graph/parser/GraphParser.scala | 15 --------------- 3 files changed, 8 insertions(+), 20 deletions(-) delete mode 100644 shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphParser.scala diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/EmbeddedGraphParser.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/EmbeddedGraphParser.scala index 8a15865159..fc4e7696d5 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/EmbeddedGraphParser.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/EmbeddedGraphParser.scala @@ -27,15 +27,18 @@ import scala.collection.mutable.ListBuffer /** * AMF Graph parser */ -class EmbeddedGraphParser()(implicit val ctx: GraphParserContext) extends GraphParser(ctx.config) { +class EmbeddedGraphParser()(implicit val ctx: GraphParserContext) extends GraphParserHelpers { - override def canParse(document: SyamlParsedDocument): Boolean = EmbeddedGraphParser.canParse(document) + def canParse(document: SyamlParsedDocument): Boolean = EmbeddedGraphParser.canParse(document) - override def parse(document: YDocument, location: String): BaseUnit = { + def parse(document: YDocument, location: String): BaseUnit = { val parser = Parser(Map()) parser.parse(document, location) } + def annotations(nodes: Map[String, AmfElement], sources: SourceMap, key: String): Annotations = + ctx.config.serializableAnnotationsFacade.retrieveAnnotation(nodes, sources, key) + case class Parser(var nodes: Map[String, AmfElement]) { private val unresolvedReferences = mutable.Map[String, Seq[DomainElement]]() private val unresolvedExtReferencesMap = @@ -68,7 +71,8 @@ class EmbeddedGraphParser()(implicit val ctx: GraphParserContext) extends GraphP stringTypes.find(findType(_).isDefined) match { case Some(t) => findType(t) case None => - ctx.eh.violation(UnableToParseNode, id, s"Error parsing JSON-LD node, unknown @types $stringTypes", map.location) + ctx.eh + .violation(UnableToParseNode, id, s"Error parsing JSON-LD node, unknown @types $stringTypes", map.location) None } } diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala index e410afa9ee..0c570fd302 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/FlattenedGraphParser.scala @@ -59,7 +59,6 @@ class FlattenedGraphParser(startingPoint: String)(implicit val ctx: GraphParserC parser.parse(document) } - // TODO ARM duplicated def annotations(nodes: Map[String, AmfElement], sources: SourceMap, key: String): Annotations = ctx.config.serializableAnnotationsFacade.retrieveAnnotation(nodes, sources, key) diff --git a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphParser.scala b/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphParser.scala deleted file mode 100644 index 4fa2bb0c1c..0000000000 --- a/shared/src/main/scala/amf/core/internal/plugins/document/graph/parser/GraphParser.scala +++ /dev/null @@ -1,15 +0,0 @@ -package amf.core.internal.plugins.document.graph.parser -import amf.core.client.scala.model.document.{BaseUnit, SourceMap} -import amf.core.client.scala.model.domain.AmfElement -import amf.core.client.scala.parse.document.SyamlParsedDocument -import amf.core.internal.parser.{CompilerConfiguration, ParseConfiguration} -import amf.core.internal.parser.domain.Annotations -import org.yaml.model.YDocument - -abstract class GraphParser(parserConfig: ParseConfiguration) extends GraphParserHelpers { - def canParse(document: SyamlParsedDocument): Boolean - def parse(document: YDocument, location: String): BaseUnit - - def annotations(nodes: Map[String, AmfElement], sources: SourceMap, key: String): Annotations = - parserConfig.serializableAnnotationsFacade.retrieveAnnotation(nodes, sources, key) -} From b7d515df75cb78f193847d7fe96a6d33470e1ef1 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Thu, 7 Oct 2021 14:52:40 -0300 Subject: [PATCH 13/28] APIMF-3473: add utility function in Fields to obtain value of certain field from iri value --- .../core/internal/parser/domain/Fields.scala | 14 ++++++++++---- .../scala/amf/core/parser/FieldsTest.scala | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 shared/src/test/scala/amf/core/parser/FieldsTest.scala diff --git a/shared/src/main/scala/amf/core/internal/parser/domain/Fields.scala b/shared/src/main/scala/amf/core/internal/parser/domain/Fields.scala index 86403bf08c..041fa97bf0 100644 --- a/shared/src/main/scala/amf/core/internal/parser/domain/Fields.scala +++ b/shared/src/main/scala/amf/core/internal/parser/domain/Fields.scala @@ -2,6 +2,7 @@ package amf.core.internal.parser.domain import amf.core.client.scala.model._ import amf.core.client.scala.model.domain._ +import amf.core.client.scala.vocabulary.ValueType import amf.core.internal.metamodel.Type._ import amf.core.internal.metamodel.{Field, Obj, Type} import amf.core.internal.annotations.{Inferred, SynthesizedField} @@ -75,6 +76,11 @@ class Fields { /** Return [[Value]] associated to given Field. */ def getValue(field: Field): Value = fs.get(field).orNull + def getValueAsOption(iri: String): Option[Value] = { + val constructedField = Field(Type.Any, ValueType(iri)) // valueType iri is the only relevant value + getValueAsOption(constructedField) + } + /** Return [[Value]] associated to given Field. */ def getValueAsOption(field: Field): Option[Value] = fs.get(field) @@ -262,10 +268,10 @@ class Value(var value: AmfElement, val annotations: Annotations) { value = resolved } else { value = resolved.resolveUnreferencedLink( - linkable.refName, - linkable.annotations, - linkable, - linkable.supportsRecursion.option().getOrElse(false)) // mutation of the field value + linkable.refName, + linkable.annotations, + linkable, + linkable.supportsRecursion.option().getOrElse(false)) // mutation of the field value } val syntax = value match { case s: Shape => Some(s.ramlSyntaxKey) diff --git a/shared/src/test/scala/amf/core/parser/FieldsTest.scala b/shared/src/test/scala/amf/core/parser/FieldsTest.scala new file mode 100644 index 0000000000..96e0c52970 --- /dev/null +++ b/shared/src/test/scala/amf/core/parser/FieldsTest.scala @@ -0,0 +1,18 @@ +package amf.core.parser + +import amf.core.client.scala.AMFGraphConfiguration +import amf.core.client.scala.model.document.Document +import amf.core.client.scala.parse.document.SyamlParsedDocument +import amf.core.internal.metamodel.document.DocumentModel +import amf.core.internal.parser.{AMFCompiler, CompilerContextBuilder} +import amf.core.internal.utils.UriUtils.platform +import org.scalatest.{FunSuite, Matchers} + +class FieldsTest extends FunSuite with Matchers { + + test("obtain value of certain field through iri") { + val document = Document().withLocation("some location") + val locationIri = DocumentModel.Location.value.iri() + assert(document.fields.getValueAsOption(locationIri).nonEmpty) + } +} From f790a170138ab296975c5aab88a869f7f67f993c Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Wed, 13 Oct 2021 11:48:32 -0300 Subject: [PATCH 14/28] APIMF-3224: include removeField in Graph interface --- .../amf/core/client/platform/model/domain/Graph.scala | 5 +++++ .../amf/core/client/scala/model/domain/Graph.scala | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/shared/src/main/scala/amf/core/client/platform/model/domain/Graph.scala b/shared/src/main/scala/amf/core/client/platform/model/domain/Graph.scala index 3e045c3792..ede50f53b8 100644 --- a/shared/src/main/scala/amf/core/client/platform/model/domain/Graph.scala +++ b/shared/src/main/scala/amf/core/client/platform/model/domain/Graph.scala @@ -18,4 +18,9 @@ case class Graph(private[amf] val _internal: InternalGraph) { def scalarByProperty(uri: String): ClientList[Any] = _internal.scalarByProperty(uri).asClient + def removeField(uri: String): this.type = { + _internal.removeField(uri) + this + } + } diff --git a/shared/src/main/scala/amf/core/client/scala/model/domain/Graph.scala b/shared/src/main/scala/amf/core/client/scala/model/domain/Graph.scala index 6926b1c448..83ea0cb256 100644 --- a/shared/src/main/scala/amf/core/client/scala/model/domain/Graph.scala +++ b/shared/src/main/scala/amf/core/client/scala/model/domain/Graph.scala @@ -7,11 +7,6 @@ import amf.core.internal.parser.domain.{Annotations, FieldEntry, Value} case class Graph(e: DomainElement) { - private[amf] def removeField(uri: String): this.type = { - e.fields.remove(uri) - this - } - private[amf] def scalarByField(field: Field): Seq[Any] = scalarByProperty(field.value.iri()) private[amf] def containsField(f: Field): Boolean = properties().contains(f.toString) @@ -67,4 +62,9 @@ case class Graph(e: DomainElement) { case None => List() } } + + def removeField(uri: String): this.type = { + e.fields.remove(uri) + this + } } From c8a8dd1b205d598373e28b2e644304b24b75f441 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 4 Oct 2021 16:18:22 -0300 Subject: [PATCH 15/28] Removed ValidationProfile and ProfileName computation from AMFValidator. EffectiveValidations are now computed when the validation profile is registered in the config. Added option to register effective validations alongside validation profile --- .../client/scala/AMFGraphConfiguration.scala | 10 +++- .../scala/validation/AMFValidator.scala | 32 +++---------- .../EffectiveValidationsCompute.scala | 48 +++++++++++++++++++ .../validation/AMFValidatePlugin.scala | 6 +-- .../internal/registries/AMFRegistry.scala | 30 ++++++++---- .../validation/RemodValidationRunner.scala | 4 +- .../validation/ValidationConfiguration.scala | 1 + 7 files changed, 89 insertions(+), 42 deletions(-) create mode 100644 shared/src/main/scala/amf/core/client/scala/validation/EffectiveValidationsCompute.scala diff --git a/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala b/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala index 39f5bd567e..8720d9d7d0 100644 --- a/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala +++ b/shared/src/main/scala/amf/core/client/scala/AMFGraphConfiguration.scala @@ -21,7 +21,7 @@ import amf.core.internal.plugins.render.{AMFGraphRenderPlugin, DefaultRenderConf import amf.core.internal.plugins.syntax.{SyamlSyntaxParsePlugin, SyamlSyntaxRenderPlugin} import amf.core.internal.registries.AMFRegistry import amf.core.internal.resource.AMFResolvers -import amf.core.internal.validation.ValidationConfiguration +import amf.core.internal.validation.{EffectiveValidations, ValidationConfiguration} import amf.core.internal.validation.core.ValidationProfile import scala.concurrent.ExecutionContext @@ -119,6 +119,11 @@ class AMFGraphConfiguration private[amf] (override private[amf] val resolvers: A private[amf] def withValidationProfile(profile: ValidationProfile): AMFGraphConfiguration = super._withValidationProfile(profile) + // Keep AMF internal, done to avoid recomputing validations every time a config is requested + private[amf] def withValidationProfile(profile: ValidationProfile, + effective: EffectiveValidations): AMFGraphConfiguration = + super._withValidationProfile(profile, effective) + def withTransformationPipeline(pipeline: TransformationPipeline): AMFGraphConfiguration = super._withTransformationPipeline(pipeline) @@ -204,6 +209,9 @@ sealed abstract class BaseAMFConfigurationSetter(private[amf] val resolvers: AMF protected def _withValidationProfile[T](profile: ValidationProfile): T = copy(registry = registry.withConstraints(profile)).asInstanceOf[T] + protected def _withValidationProfile[T](profile: ValidationProfile, effectiveValidations: EffectiveValidations): T = + copy(registry = registry.withConstraints(profile, effectiveValidations)).asInstanceOf[T] + protected def _withTransformationPipeline[T](pipeline: TransformationPipeline): T = copy(registry = registry.withTransformationPipeline(pipeline)).asInstanceOf[T] diff --git a/shared/src/main/scala/amf/core/client/scala/validation/AMFValidator.scala b/shared/src/main/scala/amf/core/client/scala/validation/AMFValidator.scala index 440d082861..4d67120e78 100644 --- a/shared/src/main/scala/amf/core/client/scala/validation/AMFValidator.scala +++ b/shared/src/main/scala/amf/core/client/scala/validation/AMFValidator.scala @@ -1,14 +1,11 @@ package amf.core.client.scala.validation -import amf._ -import amf.core.internal.validation.ValidationConfiguration +import amf.core.client.common.validation._ import amf.core.client.scala.AMFGraphConfiguration import amf.core.client.scala.model.document.BaseUnit -import amf.core.client.common.validation.{AmfProfile, Async20Profile, Oas20Profile, Oas30Profile, ProfileName, Raml08Profile, Raml10Profile} +import amf.core.internal.plugins.validation.{ValidationInfo, ValidationOptions} import amf.core.internal.remote.{AmlDialectSpec, Spec} import amf.core.internal.validation.core.ValidationProfile -import amf.core.internal.validation.FailFastValidationRunner -import amf.core.internal.plugins.validation.{ValidationInfo, ValidationOptions} import amf.core.internal.validation.{EffectiveValidations, FailFastValidationRunner, ValidationConfiguration} import scala.concurrent.Future @@ -36,30 +33,13 @@ object VendorToProfile { object AMFValidator { def validate(baseUnit: BaseUnit, conf: AMFGraphConfiguration): Future[AMFValidationReport] = { - // TODO ARM: ValidationProfile election shouldn't be done here. - val profileName = baseUnit.sourceSpec.map(VendorToProfile.mapOrDefault).getOrElse(AmfProfile) - val plugins = conf.registry.plugins.validatePlugins.filter(_.applies(ValidationInfo(baseUnit, profileName))).sorted - val constraints = computeApplicableConstraints(profileName, conf.registry.constraintsRules) - val options = ValidationOptions(profileName, constraints, ValidationConfiguration(conf)) + val plugins = computeApplicablePlugins(baseUnit, conf) + val options = ValidationOptions(ValidationConfiguration(conf)) val runner = FailFastValidationRunner(plugins, options) runner.run(baseUnit)(conf.getExecutionContext) } - private def computeApplicableConstraints(profileName: ProfileName, constraints: Map[ProfileName, ValidationProfile]): EffectiveValidations = { - val profiles = findProfileHierarchy(profileName, constraints) - val applicable = EffectiveValidations() - profiles.foldLeft(applicable) { (acc, curr) => acc.someEffective(curr) } - } - - private def findProfileHierarchy(profileName: ProfileName, constraints: Map[ProfileName, ValidationProfile], seen: Set[ProfileName] = Set.empty): Seq[ValidationProfile] = { - if (seen.contains(profileName)) return Seq.empty - constraints.map { - case (key, value) => key.p -> value - }.get(profileName.p) - .map { profile => - profile.baseProfile - .map(base => findProfileHierarchy(base, constraints, seen + profile.name)) - .getOrElse(Seq.empty) ++ Seq(profile) - }.getOrElse(Seq.empty) + private def computeApplicablePlugins(baseUnit: BaseUnit, conf: AMFGraphConfiguration) = { + conf.registry.plugins.validatePlugins.filter(_.applies(ValidationInfo(baseUnit))).sorted } } diff --git a/shared/src/main/scala/amf/core/client/scala/validation/EffectiveValidationsCompute.scala b/shared/src/main/scala/amf/core/client/scala/validation/EffectiveValidationsCompute.scala new file mode 100644 index 0000000000..b1ca523368 --- /dev/null +++ b/shared/src/main/scala/amf/core/client/scala/validation/EffectiveValidationsCompute.scala @@ -0,0 +1,48 @@ +package amf.core.client.scala.validation + +import amf.core.client.common.validation.ProfileName +import amf.core.internal.validation.EffectiveValidations +import amf.core.internal.validation.core.ValidationProfile + +object EffectiveValidationsCompute { + + def build(profile: ProfileName, constraints: Map[ProfileName, ValidationProfile]): Option[EffectiveValidations] = { + computeApplicableConstraints(profile, constraints) + } + + def buildAll(constraints: Map[ProfileName, ValidationProfile]): Map[ProfileName, EffectiveValidations] = { + constraints.keySet.foldLeft(Map[ProfileName, EffectiveValidations]()) { (acc, curr) => + build(curr, constraints).map(eff => acc + (curr -> eff)).getOrElse(acc) + } + } + + private def computeApplicableConstraints( + profileName: ProfileName, + constraints: Map[ProfileName, ValidationProfile]): Option[EffectiveValidations] = { + val profiles = findProfileHierarchy(profileName, constraints) + if (profiles.isEmpty) return None + + val applicable = EffectiveValidations() + profiles.foldLeft(applicable) { (acc, curr) => + acc.someEffective(curr) + } + Some(applicable) + } + + private def findProfileHierarchy(profileName: ProfileName, + constraints: Map[ProfileName, ValidationProfile], + seen: Set[ProfileName] = Set.empty): Seq[ValidationProfile] = { + if (seen.contains(profileName)) return Seq.empty + constraints + .map { + case (key, value) => key.p -> value + } + .get(profileName.p) + .map { profile => + profile.baseProfile + .map(base => findProfileHierarchy(base, constraints, seen + profile.name)) + .getOrElse(Seq.empty) ++ Seq(profile) + } + .getOrElse(Seq.empty) + } +} diff --git a/shared/src/main/scala/amf/core/internal/plugins/validation/AMFValidatePlugin.scala b/shared/src/main/scala/amf/core/internal/plugins/validation/AMFValidatePlugin.scala index 38c617302b..0f9d76354c 100644 --- a/shared/src/main/scala/amf/core/internal/plugins/validation/AMFValidatePlugin.scala +++ b/shared/src/main/scala/amf/core/internal/plugins/validation/AMFValidatePlugin.scala @@ -14,10 +14,8 @@ trait AMFValidatePlugin extends AMFPlugin[ValidationInfo] with PlatformSecrets { implicit executionContext: ExecutionContext): Future[ValidationResult] } -case class ValidationOptions(profile: ProfileName, - effectiveValidations: EffectiveValidations, - config: ValidationConfiguration) +case class ValidationOptions(config: ValidationConfiguration) -case class ValidationInfo(val baseUnit: BaseUnit, val profile: ProfileName) +case class ValidationInfo(baseUnit: BaseUnit) case class ValidationResult(unit: BaseUnit, report: AMFValidationReport) diff --git a/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala b/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala index f2376eb9bb..cc12e19fd4 100644 --- a/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala +++ b/shared/src/main/scala/amf/core/internal/registries/AMFRegistry.scala @@ -5,11 +5,13 @@ import amf.core.client.scala.parse.AMFParsePlugin import amf.core.client.common.validation.ProfileName import amf.core.client.scala.render.AMFElementRenderPlugin import amf.core.client.scala.transform.TransformationPipeline +import amf.core.client.scala.validation.EffectiveValidationsCompute import amf.core.internal.metamodel.ModelDefaultBuilder import amf.core.internal.validation.core.ValidationProfile import amf.core.internal.plugins.AMFPlugin import amf.core.internal.plugins.parse.DomainParsingFallback import amf.core.internal.registries.domain.EntitiesRegistry +import amf.core.internal.validation.EffectiveValidations /** * Registry to store plugins, entities, transformation pipelines and constraint rules @@ -22,7 +24,8 @@ import amf.core.internal.registries.domain.EntitiesRegistry private[amf] case class AMFRegistry(plugins: PluginsRegistry, entitiesRegistry: EntitiesRegistry, transformationPipelines: Map[String, TransformationPipeline], - constraintsRules: Map[ProfileName, ValidationProfile]) { + constraintsRules: Map[ProfileName, ValidationProfile], + effectiveValidations: Map[ProfileName, EffectiveValidations]) { def withPlugin(amfPlugin: AMFPlugin[_]): AMFRegistry = copy(plugins = plugins.withPlugin(amfPlugin)) @@ -32,11 +35,23 @@ private[amf] case class AMFRegistry(plugins: PluginsRegistry, def withFallback(plugin: DomainParsingFallback): AMFRegistry = copy(plugins = plugins.withFallback(plugin)) - def withConstraints(profile: ValidationProfile): AMFRegistry = - copy(constraintsRules = constraintsRules + (profile.name -> profile)) + def withConstraints(profile: ValidationProfile): AMFRegistry = { + val nextRules = constraintsRules + (profile.name -> profile) + val computedEffective = EffectiveValidationsCompute.buildAll(nextRules) + copy(constraintsRules = nextRules, effectiveValidations = computedEffective) + } - def removeConstraints(name: ProfileName): AMFRegistry = - copy(constraintsRules = constraintsRules - name) + def withConstraints(profile: ValidationProfile, effective: EffectiveValidations): AMFRegistry = { + val nextRules = constraintsRules + (profile.name -> profile) + val nextEffective = effectiveValidations + (profile.name -> effective) + copy(constraintsRules = nextRules, effectiveValidations = nextEffective) + } + + def withConstraintsRules(rules: Map[ProfileName, ValidationProfile]): AMFRegistry = { + val nextRules = constraintsRules ++ rules + val computedEffective = EffectiveValidationsCompute.buildAll(nextRules) + copy(constraintsRules = nextRules, effectiveValidations = computedEffective) + } def withTransformationPipeline(pipeline: TransformationPipeline): AMFRegistry = copy(transformationPipelines = transformationPipelines + (pipeline.name -> pipeline)) @@ -44,9 +59,6 @@ private[amf] case class AMFRegistry(plugins: PluginsRegistry, def withTransformationPipelines(pipelines: List[TransformationPipeline]): AMFRegistry = copy(transformationPipelines = transformationPipelines ++ pipelines.map(p => p.name -> p)) - def withConstraintsRules(rules: Map[ProfileName, ValidationProfile]): AMFRegistry = - copy(constraintsRules = constraintsRules ++ rules) - def withEntities(entities: Map[String, ModelDefaultBuilder]): AMFRegistry = copy(entitiesRegistry = entitiesRegistry.withEntities(entities)) @@ -69,5 +81,5 @@ private[amf] case class AMFRegistry(plugins: PluginsRegistry, object AMFRegistry { /** Creates an empty AMF Registry */ - val empty = new AMFRegistry(PluginsRegistry.empty, EntitiesRegistry.empty, Map.empty, Map.empty) + val empty = new AMFRegistry(PluginsRegistry.empty, EntitiesRegistry.empty, Map.empty, Map.empty, Map.empty) } diff --git a/shared/src/main/scala/amf/core/internal/validation/RemodValidationRunner.scala b/shared/src/main/scala/amf/core/internal/validation/RemodValidationRunner.scala index 2ff2776839..ebf433e0a0 100644 --- a/shared/src/main/scala/amf/core/internal/validation/RemodValidationRunner.scala +++ b/shared/src/main/scala/amf/core/internal/validation/RemodValidationRunner.scala @@ -2,7 +2,7 @@ package amf.core.internal.validation import amf.core.client.scala.model.document.BaseUnit import amf.core.client.scala.validation.AMFValidationReport -import amf.core.client.common.validation.ProfileName +import amf.core.client.common.validation.{ProfileName, UnknownProfile} import amf.core.internal.plugins.validation.{AMFValidatePlugin, ValidationOptions, ValidationResult} import scala.concurrent.{ExecutionContext, Future} @@ -18,7 +18,7 @@ trait RemodValidationRunner { case class FailFastValidationRunner(plugins: Seq[AMFValidatePlugin], options: ValidationOptions) extends RemodValidationRunner { override def run(unit: BaseUnit)(implicit executionContext: ExecutionContext): Future[AMFValidationReport] = { - val initialResult = Future.successful(ValidationResult(unit, emptyReport(unit, options.profile))) + val initialResult = Future.successful(ValidationResult(unit, emptyReport(unit, UnknownProfile))) plugins .foldLeft(initialResult) { (acc, curr) => acc.flatMap { validateResult => diff --git a/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala b/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala index 8476079a64..6e5cdbaaa1 100644 --- a/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala +++ b/shared/src/main/scala/amf/core/internal/validation/ValidationConfiguration.scala @@ -19,4 +19,5 @@ case class ValidationConfiguration(amfConfig: AMFGraphConfiguration) { val maxYamlReferences: Option[Int] = amfConfig.options.parsingOptions.maxYamlReferences val constraints: Map[ProfileName, ValidationProfile] = amfConfig.registry.constraintsRules val listeners: Set[AMFEventListener] = amfConfig.listeners + val effectiveValidations: Map[ProfileName, EffectiveValidations] = amfConfig.registry.effectiveValidations } From 38293e512879cd3f55bb7be59087e43c5a12b4d4 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Wed, 13 Oct 2021 14:58:10 -0300 Subject: [PATCH 16/28] Publish 5.0.0-RC.2 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index d0b0d67cbb..4584b7367a 100644 --- a/build.sbt +++ b/build.sbt @@ -16,7 +16,7 @@ name := "amf-core" // // if (branch.contains("master")) s"$major.$minor.$build" else s"$major.${minor + 1}.0-SNAPSHOT" //} -ThisBuild / version := "5.0.0-RC.1" +ThisBuild / version := "5.0.0-RC.2" publish := {} From 167ab06dc23f74b6b1baf17a6f83c978cb3c70fe Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Thu, 14 Oct 2021 16:15:44 -0300 Subject: [PATCH 17/28] Publish amf-core 5.0.0 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 4584b7367a..d773a90125 100644 --- a/build.sbt +++ b/build.sbt @@ -16,7 +16,7 @@ name := "amf-core" // // if (branch.contains("master")) s"$major.$minor.$build" else s"$major.${minor + 1}.0-SNAPSHOT" //} -ThisBuild / version := "5.0.0-RC.2" +ThisBuild / version := "5.0.0" publish := {} From 202dea63592caa9b76e26b062ac886a69eb4537f Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 8 Nov 2021 12:30:25 -0300 Subject: [PATCH 18/28] APIMF-3489: commented out publish section in Jenkinsfile --- Jenkinsfile | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6b1059f38a..9aa8a243e1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -35,23 +35,23 @@ pipeline { } } } - stage('Publish') { - when { - anyOf { - branch 'master' - branch 'release/*' - } - } - steps { - wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { - sh ''' - echo "about to publish in sbt" - sbt publish - echo "sbt publishing successful" - ''' - } - } - } +// stage('Publish') { +// when { +// anyOf { +// branch 'master' +// branch 'release/*' +// } +// } +// steps { +// wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { +// sh ''' +// echo "about to publish in sbt" +// sbt publish +// echo "sbt publishing successful" +// ''' +// } +// } +// } stage('Tag version') { when { anyOf { From eb32fc2535b2480ebf3d9c7ab13a062eaf93c690 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 11 Apr 2022 15:41:28 -0300 Subject: [PATCH 19/28] publish: 5.0.7-RC.0 --- Jenkinsfile | 1 + build.sbt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 92a7bd16de..95264534c5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -38,6 +38,7 @@ pipeline { anyOf { branch 'master' branch 'develop' + branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index 19d5fe86a1..201d5b03de 100644 --- a/build.sbt +++ b/build.sbt @@ -7,7 +7,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.11" -ThisBuild / version := "5.1.0-SNAPSHOT" +ThisBuild / version := "5.0.7" publish := {} From 982564cc244c78ba1926818f31443a7b142b7c59 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 11 Apr 2022 15:51:43 -0300 Subject: [PATCH 20/28] publish: 5.0.7-RC.0 (fixed version) --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 201d5b03de..c153a89db1 100644 --- a/build.sbt +++ b/build.sbt @@ -7,7 +7,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.11" -ThisBuild / version := "5.0.7" +ThisBuild / version := "5.0.7-RC.0" publish := {} From e6f3737280da911afa350c639104fe97f4965e3c Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Mon, 11 Apr 2022 17:08:54 -0300 Subject: [PATCH 21/28] Publish 5.0.7 --- Jenkinsfile | 1 - build.sbt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 95264534c5..92a7bd16de 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -38,7 +38,6 @@ pipeline { anyOf { branch 'master' branch 'develop' - branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index c153a89db1..201d5b03de 100644 --- a/build.sbt +++ b/build.sbt @@ -7,7 +7,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.11" -ThisBuild / version := "5.0.7-RC.0" +ThisBuild / version := "5.0.7" publish := {} From 5e545b91888ae5fba14bf2bfcbaa3234c9584fcb Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Tue, 20 Sep 2022 11:17:25 -0300 Subject: [PATCH 22/28] Publish 5.1.0 --- Jenkinsfile | 1 - build.sbt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 5d9337cb23..27e357069d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -56,7 +56,6 @@ pipeline { anyOf { branch 'master' branch 'develop' - branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index 81d73d7316..3f0af30e7e 100644 --- a/build.sbt +++ b/build.sbt @@ -7,7 +7,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.11" -ThisBuild / version := "5.1.0-RC.1" +ThisBuild / version := "5.1.0" publish := {} From 19a9d8af24959ed3471e886f42d0eec57106d97c Mon Sep 17 00:00:00 2001 From: mulesoft-es-bot <58085709+mulesoft-es-bot@users.noreply.github.com> Date: Fri, 7 Jul 2023 14:25:49 -0300 Subject: [PATCH 23/28] Updating CODEOWNERS --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..f633ffef98 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +#GUSINFO:MS AMF,MS AMF +* @aml-org/team-amf From a7cd65dcba655207197f1fa74f51c6657780e6fa Mon Sep 17 00:00:00 2001 From: Damian Pedra Date: Thu, 7 Dec 2023 11:49:36 -0300 Subject: [PATCH 24/28] Publish 5.4.6-RC.0 --- Jenkinsfile | 1 + build.sbt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e137057ec3..6c3e0218f2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -62,6 +62,7 @@ pipeline { anyOf { branch 'master' branch 'develop' + branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index 42a2eddc61..6395f0ea91 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.15" -ThisBuild / version := "5.5.0-SNAPSHOT" +ThisBuild / version := "5.4.6-RC.0" publish := {} From f7363054f3369f84eeb0fa079850072760a83636 Mon Sep 17 00:00:00 2001 From: Damian Pedra Date: Tue, 12 Dec 2023 17:42:35 -0300 Subject: [PATCH 25/28] Publish 5.4.6 --- Jenkinsfile | 1 - build.sbt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6c3e0218f2..e137057ec3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -62,7 +62,6 @@ pipeline { anyOf { branch 'master' branch 'develop' - branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index 6395f0ea91..033a215435 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.15" -ThisBuild / version := "5.4.6-RC.0" +ThisBuild / version := "5.4.6" publish := {} From 0f1e8ea4e9243d986f027f2fffc9b21a560f91c8 Mon Sep 17 00:00:00 2001 From: Tomas Fernandez Date: Fri, 29 Dec 2023 15:14:02 -0300 Subject: [PATCH 26/28] Publish 5.4.7 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 42a2eddc61..c9c272ac7f 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.15" -ThisBuild / version := "5.5.0-SNAPSHOT" +ThisBuild / version := "5.4.7" publish := {} From ea57cf706c17a70d06dab21ad5d2b3140e627283 Mon Sep 17 00:00:00 2001 From: Damian Pedra Date: Thu, 2 May 2024 15:19:26 -0300 Subject: [PATCH 27/28] Publish 5.5.1-RC.0 --- Jenkinsfile | 1 + build.sbt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index e137057ec3..6c3e0218f2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -62,6 +62,7 @@ pipeline { anyOf { branch 'master' branch 'develop' + branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index a1ba72bf9d..584e22f1f6 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.15" -ThisBuild / version := "5.5.0" +ThisBuild / version := "5.5.1-RC.0" publish := {} From cb5dbfd70e77127b60241acdad86b9bc875cc8b3 Mon Sep 17 00:00:00 2001 From: Damian Pedra Date: Thu, 9 May 2024 10:52:44 -0300 Subject: [PATCH 28/28] Publish 5.5.1 --- Jenkinsfile | 1 - build.sbt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6c3e0218f2..e137057ec3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -62,7 +62,6 @@ pipeline { anyOf { branch 'master' branch 'develop' - branch 'release/*' } } steps { diff --git a/build.sbt b/build.sbt index 584e22f1f6..13058d1807 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ val ivyLocal = Resolver.file("ivy", file(Path.userHome.absolutePath + "/.ivy2/lo name := "amf-core" ThisBuild / scalaVersion := "2.12.15" -ThisBuild / version := "5.5.1-RC.0" +ThisBuild / version := "5.5.1" publish := {}