Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

W-14991650 (chore): cherry-pick release fix and publish new RC #1930

Merged
merged 2 commits into from
Feb 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ pipeline {
anyOf {
branch 'master'
branch 'develop'
branch 'release/*'
}
}
steps {
Expand All @@ -84,6 +85,7 @@ pipeline {
anyOf {
branch 'master'
branch 'develop'
branch 'release/*'
}
}
steps {
Expand All @@ -98,6 +100,7 @@ pipeline {
anyOf {
branch 'master'
branch 'develop'
branch 'release/*'
}
}
steps {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import amf.apicontract.internal.spec.async.parser.domain.declarations.{Async20De
import amf.core.internal.parser.Root
import amf.core.internal.remote.Spec.ASYNC20

case class AsyncApi20DocumentParser(root: Root, declarationParser: AsyncDeclarationParser = Async20DeclarationParser)(
case class AsyncApi20DocumentParser(root: Root, declarationParser: AsyncDeclarationParser = Async20DeclarationParser())(
override implicit val ctx: AsyncWebApiContext
) extends AsyncApiDocumentParser(root, ASYNC20, declarationParser)(ctx)
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,19 @@ abstract class AsyncApiDocumentParser(root: Root, spec: Spec, declarationParser:
document
.setWithoutId(DocumentModel.Encodes, api, Annotations.inferred())

addDeclarationsToModel(document)
if (references.nonEmpty) document.withReferences(references.baseUnitReferences())

ctx.futureDeclarations.resolve()
document
}

private def parseDeclarations(map: YMap, parentObj: AmfObject) = {
private def parseDeclarations(map: YMap, document: Document) = {
map.key("components").foreach { components =>
val parent = root.location + "#/declarations"
val componentsMap = components.value.as[YMap]
declarationParser.parseDeclarations(componentsMap, parent)
ctx.closedShape(parentObj, componentsMap, "components")
declarationParser.parseDeclarations(componentsMap, parent, document)
ctx.closedShape(document, componentsMap, "components")
// addDeclarationsToModel(document) // TODO: had to move this to each declaration parser as HF for release RCs
validateNames()
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,35 @@
package amf.apicontract.internal.spec.async.parser.domain.declarations

import amf.aml.internal.parse.common.{DeclarationKey, DeclarationKeyCollector}
import amf.apicontract.client.scala.model.domain.bindings.{ChannelBindings, MessageBindings, OperationBindings, ServerBindings}
import amf.apicontract.client.scala.model.domain.bindings.{
ChannelBindings,
MessageBindings,
OperationBindings,
ServerBindings
}
import amf.apicontract.client.scala.model.domain.{Operation, Parameter}
import amf.apicontract.internal.metamodel.domain.bindings.{ChannelBindingsModel, MessageBindingsModel, OperationBindingsModel, ServerBindingsModel}
import amf.apicontract.internal.metamodel.domain.bindings.{
ChannelBindingsModel,
MessageBindingsModel,
OperationBindingsModel,
ServerBindingsModel
}
import amf.apicontract.internal.metamodel.domain.security.SecuritySchemeModel
import amf.apicontract.internal.spec.async.parser.bindings.{AsyncChannelBindingsParser, AsyncMessageBindingsParser, AsyncOperationBindingsParser, AsyncServerBindingsParser}
import amf.apicontract.internal.spec.async.parser.bindings.{
AsyncChannelBindingsParser,
AsyncMessageBindingsParser,
AsyncOperationBindingsParser,
AsyncServerBindingsParser
}
import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.apicontract.internal.spec.async.parser.domain.{AsyncCorrelationIdParser, AsyncMessageParser, AsyncOperationParser, AsyncParametersParser}
import amf.apicontract.internal.spec.async.parser.domain.{
AsyncCorrelationIdParser,
AsyncMessageParser,
AsyncOperationParser,
AsyncParametersParser
}
import amf.apicontract.internal.spec.oas.parser.document.OasLikeDeclarationsHelper
import amf.core.client.scala.model.document.Document
import amf.core.client.scala.model.domain.{AmfScalar, DomainElement}
import amf.core.internal.annotations.DeclaredElement
import amf.core.internal.metamodel.domain.DomainElementModel
Expand All @@ -17,15 +38,16 @@ import amf.core.internal.parser.domain.Annotations
import amf.shapes.internal.spec.common.parser.YMapEntryLike
import org.yaml.model.{YMap, YMapEntry}


object Async20DeclarationParser
extends AsyncDeclarationParser
case class Async20DeclarationParser()
extends AsyncDeclarationParser
with DeclarationKeyCollector
with OasLikeDeclarationsHelper {

protected val definitionsKey = "schemas"

override def parseDeclarations(map: YMap, parent: String)(implicit ctx: AsyncWebApiContext): Unit = {
override def parseDeclarations(map: YMap, parent: String, document: Document)(implicit
ctx: AsyncWebApiContext
): Unit = {
parseSecuritySchemeDeclarations(map, parent + "/securitySchemes")
parseCorrelationIdDeclarations(map, parent + "/correlationIds")
super.parseTypeDeclarations(map, Some(this))
Expand All @@ -39,6 +61,7 @@ object Async20DeclarationParser
parseMessageTraits(map, parent + "/messageTraits")

parseMessageDeclarations(map, parent + "/messages")
addDeclarationsToModel(document)
}

private def parseMessageDeclarations(componentsMap: YMap, parent: String)(implicit ctx: AsyncWebApiContext): Unit =
Expand All @@ -60,7 +83,7 @@ object Async20DeclarationParser
entry => {
addDeclarationKey(DeclarationKey(entry, isAbstract = true))
entry.value.as[YMap].entries.foreach { entry =>
val adopt = (o: Operation) => o
val adopt = (o: Operation) => o
val operation = AsyncOperationParser(entry, adopt, isTrait = true).parse()
operation.add(DeclaredElement())
ctx.declarations += operation
Expand Down Expand Up @@ -108,7 +131,7 @@ object Async20DeclarationParser
}

private def parseParameterDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
componentsMap.key(
"parameters",
Expand All @@ -124,7 +147,7 @@ object Async20DeclarationParser
}

private def parseCorrelationIdDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
componentsMap.key(
"correlationIds",
Expand All @@ -139,7 +162,7 @@ object Async20DeclarationParser
}

private def parseMessageBindingsDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
parseBindingsDeclarations[MessageBindings](
"messageBindings",
Expand All @@ -152,7 +175,7 @@ object Async20DeclarationParser
}

private def parseServerBindingsDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
parseBindingsDeclarations[ServerBindings](
"serverBindings",
Expand All @@ -165,7 +188,7 @@ object Async20DeclarationParser
}

private def parseOperationBindingsDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
parseBindingsDeclarations[OperationBindings](
"operationBindings",
Expand All @@ -178,7 +201,7 @@ object Async20DeclarationParser
}

private def parseChannelBindingsDeclarations(componentsMap: YMap, parent: String)(implicit
ctx: AsyncWebApiContext
ctx: AsyncWebApiContext
): Unit = {
parseBindingsDeclarations[ChannelBindings](
"channelBindings",
Expand All @@ -191,11 +214,11 @@ object Async20DeclarationParser
}

private def parseBindingsDeclarations[T <: DomainElement](
keyword: String,
componentsMap: YMap,
parse: YMapEntry => T,
model: DomainElementModel
)(implicit ctx: AsyncWebApiContext): Unit = {
keyword: String,
componentsMap: YMap,
parse: YMapEntry => T,
model: DomainElementModel
)(implicit ctx: AsyncWebApiContext): Unit = {
componentsMap.key(
keyword,
e => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ package amf.apicontract.internal.spec.async.parser.domain.declarations
object Async21DeclarationParser {

// Doesn't add new functionality to previous version
def apply(): AsyncDeclarationParser = Async20DeclarationParser
def apply(): AsyncDeclarationParser = Async20DeclarationParser()
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package amf.apicontract.internal.spec.async.parser.domain.declarations
import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.core.client.scala.model.document.Document
import org.yaml.model.YMap

object Async23DeclarationParser extends AsyncDeclarationParser {
override def parseDeclarations(map: YMap, parent: String)(implicit ctx: AsyncWebApiContext): Unit = {
Async20DeclarationParser.parseDeclarations(map, parent)
override def parseDeclarations(map: YMap, parent: String, document: Document)(implicit
ctx: AsyncWebApiContext
): Unit = {
Async20DeclarationParser().parseDeclarations(map, parent, document)
// TODO: add stuff....
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package amf.apicontract.internal.spec.async.parser.domain.declarations

import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.core.client.scala.model.document.Document
import org.yaml.model.YMap

object Async24DeclarationParser extends AsyncDeclarationParser {
override def parseDeclarations(map: YMap, parent: String)(implicit ctx: AsyncWebApiContext): Unit = {
Async23DeclarationParser.parseDeclarations(map, parent)
override def parseDeclarations(map: YMap, parent: String, document: Document)(implicit
ctx: AsyncWebApiContext
): Unit = {
Async23DeclarationParser.parseDeclarations(map, parent, document)
// TODO: add stuff....
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package amf.apicontract.internal.spec.async.parser.domain.declarations

import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext
import amf.core.client.scala.model.document.Document
import org.yaml.model.YMap

trait AsyncDeclarationParser {
def parseDeclarations(map: YMap, parent: String)(implicit ctx: AsyncWebApiContext): Unit
def parseDeclarations(map: YMap, parent: String, document: Document)(implicit ctx: AsyncWebApiContext): Unit
}
2 changes: 1 addition & 1 deletion amf-apicontract.versions
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
amf.apicontract=5.4.8
amf.apicontract=5.4.8-RC.1
amf.aml=6.4.8
amf.model=3.8.2
antlr4Version=0.7.25
Expand Down
26 changes: 26 additions & 0 deletions amf-cli/shared/src/test/scala/amf/emit/DeclarationKeysTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package amf.emit

import amf.aml.internal.parse.common.DeclarationKeys
import amf.apicontract.client.scala.AsyncAPIConfiguration
import amf.core.internal.metamodel.document.ModuleModel
import amf.io.FunSuiteCycleTests
import org.scalatest.matchers.should.Matchers

class DeclarationKeysTest extends FunSuiteCycleTests with Matchers {

override val basePath: String = "amf-cli/shared/src/test/resources/validations/async20/"

test("Async declarations should have declaration keys") {
val apiPath = s"file://$basePath" + "components/async-components.yaml"
for {
parseResult <- AsyncAPIConfiguration.Async20().baseUnitClient().parseDocument(apiPath)
} yield {
val api = parseResult.document
val declaresAnnotations = api.fields.getValue(ModuleModel.Declares).annotations
val maybeDeclarationKeys = declaresAnnotations.find(classOf[DeclarationKeys])
maybeDeclarationKeys shouldBe a[Some[_]]
val keys = maybeDeclarationKeys.get.keys
keys should have size 9 // one for each type of component, not for each component
}
}
}