From 3e87d60ffd48d459baeaeb21454a67cfd8d2af7c Mon Sep 17 00:00:00 2001 From: bhashinee Date: Tue, 2 Jul 2024 12:28:04 +0530 Subject: [PATCH 1/3] Update the github workflow files --- .github/workflows/build-timestamped-master.yml | 2 +- .github/workflows/pull-request.yml | 3 +-- .../{AsyncAPIDiagnostic.java => AsyncApiDiagnostic.java} | 0 .../asyncapi/{APIDocTests.java => ApiDocTests.java} | 0 4 files changed, 2 insertions(+), 3 deletions(-) rename asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/{AsyncAPIDiagnostic.java => AsyncApiDiagnostic.java} (100%) rename asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/{APIDocTests.java => ApiDocTests.java} (100%) diff --git a/.github/workflows/build-timestamped-master.yml b/.github/workflows/build-timestamped-master.yml index a8657650e..d05f683bb 100644 --- a/.github/workflows/build-timestamped-master.yml +++ b/.github/workflows/build-timestamped-master.yml @@ -36,6 +36,6 @@ jobs: CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }} run: | - ./gradlew clean build publish --stacktrace --scan --console=plain + ./gradlew clean build publish codeCoverageReport --stacktrace --scan --console=plain - name: Generate CodeCov Report uses: codecov/codecov-action@v1 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 8f04b27ad..c145e13ce 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -24,8 +24,7 @@ jobs: packageUser: ${{ github.actor }} packagePAT: ${{ secrets.GITHUB_TOKEN }} run: | - ./gradlew build --stacktrace --scan --console=plain --no-daemon - ./gradlew codeCoverageReport --no-daemon + ./gradlew build codeCoverageReport --stacktrace --scan --console=plain --no-daemon - name: Generate Codecov Report if: github.event_name == 'pull_request' uses: codecov/codecov-action@v1 diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncAPIDiagnostic.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java similarity index 100% rename from asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncAPIDiagnostic.java rename to asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java diff --git a/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/APIDocTests.java b/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java similarity index 100% rename from asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/APIDocTests.java rename to asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java From d454a7be5a8a7065611b4dd819899c0ffd95e02c Mon Sep 17 00:00:00 2001 From: bhashinee Date: Tue, 2 Jul 2024 13:47:57 +0530 Subject: [PATCH 2/3] Refactor the code --- .../ballerina/asyncapi/cmd/AsyncApiCmd.java | 6 ++--- .../asyncapi/cmd/AsyncApiConstants.java | 18 +++++++++++++++ .../cmd/websockets/AsyncApiDiagnostic.java | 4 ++-- .../asyncapi/cmd/websockets/CmdUtils.java | 4 ++-- .../application/CodeGenerator.java | 2 +- .../GenerateModuleMemberDeclarationNode.java | 22 ++++++++++--------- .../service/AsyncApiRemoteMapper.java | 11 ++++------ .../wsgenerators/asyncapi/ApiDocTests.java | 2 +- asyncapi-cli/src/test/resources/testng.xml | 2 +- 9 files changed, 44 insertions(+), 27 deletions(-) diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiCmd.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiCmd.java index b2502e651..8ccd260d0 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiCmd.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiCmd.java @@ -17,7 +17,7 @@ */ package io.ballerina.asyncapi.cmd; -import io.ballerina.asyncapi.cmd.websockets.AsyncAPIDiagnostic; +import io.ballerina.asyncapi.cmd.websockets.AsyncApiDiagnostic; import io.ballerina.asyncapi.cmd.websockets.AsyncApiToBallerinaGenerator; import io.ballerina.asyncapi.cmd.websockets.BallerinaToAsyncApiGenerator; import io.ballerina.asyncapi.cmd.websockets.CmdConstants; @@ -281,13 +281,13 @@ private void ballerinaToAsyncApiWs(String fileName) { if (!errors.isEmpty()) { for (AsyncApiConverterDiagnostic error : errors) { if (error instanceof ExceptionDiagnostic exceptionDiagnostic) { - AsyncAPIDiagnostic diagnostic = CmdUtils.constructAsyncAPIDiagnostic(exceptionDiagnostic.getCode(), + AsyncApiDiagnostic diagnostic = CmdUtils.constructAsyncAPIDiagnostic(exceptionDiagnostic.getCode(), exceptionDiagnostic.getMessage(), exceptionDiagnostic.getDiagnosticSeverity(), exceptionDiagnostic.getLocation().orElse(null)); outStream.println(diagnostic); exitError(this.exitWhenFinish); } else if (error instanceof IncompatibleRemoteDiagnostic incompatibleError) { - AsyncAPIDiagnostic diagnostic = CmdUtils.constructAsyncAPIDiagnostic(incompatibleError.getCode(), + AsyncApiDiagnostic diagnostic = CmdUtils.constructAsyncAPIDiagnostic(incompatibleError.getCode(), incompatibleError.getMessage(), incompatibleError.getDiagnosticSeverity(), incompatibleError.getLocation().get()); outStream.println(diagnostic); diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiConstants.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiConstants.java index 665f1ae0e..ef45274e6 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiConstants.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/AsyncApiConstants.java @@ -1,3 +1,21 @@ +/* + * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com). + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package io.ballerina.asyncapi.cmd; import java.util.Arrays; diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java index 7b1dc40bf..27adfa3e8 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/AsyncApiDiagnostic.java @@ -32,12 +32,12 @@ * Represents a {@code Diagnostic} related to asyncapi command. * */ -public class AsyncAPIDiagnostic extends Diagnostic { +public class AsyncApiDiagnostic extends Diagnostic { private final DiagnosticInfo diagnosticInfo; private final Location location; private final String message; - public AsyncAPIDiagnostic(DiagnosticInfo diagnosticInfo, Location location, Object[] args) { + public AsyncApiDiagnostic(DiagnosticInfo diagnosticInfo, Location location, Object[] args) { this.diagnosticInfo = diagnosticInfo; this.location = location; this.message = MessageFormat.format(diagnosticInfo.messageFormat(), args); diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/CmdUtils.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/CmdUtils.java index f6a732d71..6159b0ce9 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/CmdUtils.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/cmd/websockets/CmdUtils.java @@ -35,7 +35,7 @@ public class CmdUtils { /** * This util method is used to generate {@code Diagnostic} for asyncapi command errors. */ - public static AsyncAPIDiagnostic constructAsyncAPIDiagnostic(String code, String message, + public static AsyncApiDiagnostic constructAsyncAPIDiagnostic(String code, String message, DiagnosticSeverity severity, Location location, Object... args) { @@ -43,7 +43,7 @@ public static AsyncAPIDiagnostic constructAsyncAPIDiagnostic(String code, String if (location == null) { location = new ConverterCommonUtils.NullLocation(); } - return new AsyncAPIDiagnostic(diagnosticInfo, location, args); + return new AsyncApiDiagnostic(diagnosticInfo, location, args); } /** diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/application/CodeGenerator.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/application/CodeGenerator.java index cbd128157..0b63322f4 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/application/CodeGenerator.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/application/CodeGenerator.java @@ -77,7 +77,7 @@ public void generate(String specPath, String outputPath) throws BallerinaAsyncAp BalController dispatcherController = new DispatcherController(serviceTypes, eventIdentifierType, eventIdentifierPath); - String dispatcherContent = ""; + String dispatcherContent; if (eventIdentifierType.equals(Constants.X_BALLERINA_EVENT_TYPE_BODY)) { String dispatcherTemplateForEventIdentifierInBody = fileRepository .getFileContentFromResources( diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/usecase/GenerateModuleMemberDeclarationNode.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/usecase/GenerateModuleMemberDeclarationNode.java index 838803b07..61411b79b 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/usecase/GenerateModuleMemberDeclarationNode.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/codegenerator/usecase/GenerateModuleMemberDeclarationNode.java @@ -209,26 +209,28 @@ private TypeDescriptorNode getTypeDescriptorNodeForObjects(AsyncApiSchema schema if (schema.getProperties() != null) { return getRecordTypeDescriptorNode(schema); } else if (schema.getType() != null) { - return getTypeDescriptorNodeFroPreDefined(schema); + return getTypeDescriptorNodeForPreDefined(schema); } else { throw new BallerinaAsyncApiException( "Unsupported Async Api Spec data type `" + schema.getType() + "`"); } } - private TypeDescriptorNode getTypeDescriptorNodeFroPreDefined(AsyncApiSchema schema) + private TypeDescriptorNode getTypeDescriptorNodeForPreDefined(AsyncApiSchema schema) throws BallerinaAsyncApiException { + String type; + Token typeName; switch (schema.getType()) { case Constants.INTEGER: case Constants.STRING: case Constants.BOOLEAN: - String type = convertAsyncAPITypeToBallerina(schema.getType().trim()); - Token typeName = AbstractNodeFactory.createIdentifierToken(type); + type = convertAsyncApiTypeToBallerina(schema.getType().trim()); + typeName = AbstractNodeFactory.createIdentifierToken(type); return createBuiltinSimpleNameReferenceNode(null, typeName); case Constants.NUMBER: - type = convertAsyncAPITypeToBallerina(schema.getType().trim()); - if (schema.getType().equals("number") && schema.getFormat() != null) { - type = convertAsyncAPITypeToBallerina(schema.getFormat().trim()); + type = convertAsyncApiTypeToBallerina(schema.getType().trim()); + if (schema.getFormat() != null) { + type = convertAsyncApiTypeToBallerina(schema.getFormat().trim()); } typeName = AbstractNodeFactory.createIdentifierToken(type); return createBuiltinSimpleNameReferenceNode(null, typeName); @@ -241,7 +243,7 @@ private TypeDescriptorNode getTypeDescriptorNodeFroPreDefined(AsyncApiSchema sch typeName = AbstractNodeFactory.createIdentifierToken(type); } else { typeName = AbstractNodeFactory.createIdentifierToken( - convertAsyncAPITypeToBallerina(schema.getType().trim())); + convertAsyncApiTypeToBallerina(schema.getType().trim())); } return createBuiltinSimpleNameReferenceNode(null, typeName); default: @@ -277,7 +279,7 @@ private RecordTypeDescriptorNode getRecordTypeDescriptorNode(AsyncApiSchema sche * @param type AsyncApi parameter types * @return ballerina type */ - public static String convertAsyncAPITypeToBallerina(String type) throws BallerinaAsyncApiException { + public static String convertAsyncApiTypeToBallerina(String type) throws BallerinaAsyncApiException { String convertedType; switch (type) { case Constants.INTEGER: @@ -335,7 +337,7 @@ public TypeDescriptorNode getTypeDescriptorNodeForArraySchema(AsyncApiSchema sch return createArrayTypeDescriptorNode(memberTypeDesc, createNodeList(arrayDimensionNode)); } else if (schemaItem.getType() != null) { type = schemaItem.getType(); - typeName = AbstractNodeFactory.createIdentifierToken(convertAsyncAPITypeToBallerina(type)); + typeName = AbstractNodeFactory.createIdentifierToken(convertAsyncApiTypeToBallerina(type)); memberTypeDesc = createBuiltinSimpleNameReferenceNode(null, typeName); return createArrayTypeDescriptorNode(memberTypeDesc, createNodeList(arrayDimensionNode)); } else { diff --git a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/websocketscore/generators/asyncspec/service/AsyncApiRemoteMapper.java b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/websocketscore/generators/asyncspec/service/AsyncApiRemoteMapper.java index d23ebf522..cbd5997cc 100644 --- a/asyncapi-cli/src/main/java/io/ballerina/asyncapi/websocketscore/generators/asyncspec/service/AsyncApiRemoteMapper.java +++ b/asyncapi-cli/src/main/java/io/ballerina/asyncapi/websocketscore/generators/asyncspec/service/AsyncApiRemoteMapper.java @@ -59,7 +59,6 @@ import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.CAMEL_CASE_PATTERN; import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.FALSE; -import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.FUNCTION_DEFAULT_NAME_CONTAINS_ERROR; import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.FUNCTION_PARAMETERS_EXCEEDED; import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.FUNCTION_SIGNATURE_WRONG_TYPE; import static io.ballerina.asyncapi.websocketscore.generators.asyncspec.Constants.FUNCTION_WRONG_NAME; @@ -129,10 +128,10 @@ public AsyncApi25ChannelsImpl getChannels(FunctionDefinitionNode resource, /** * Remote mapper when there have multiple remote methods. * @param resource functionDefinitionNode which contains resource function - * @param classDefinitionNode - * @param dispatcherValue - * @param channelItem - * @return + * @param classDefinitionNode classDefinitionNode which contains class definition + * @param dispatcherValue dispatcher key value + * @param channelItem AsyncAPI channel + * @return AsyncAPI channel object */ private AsyncApi25ChannelsImpl handleRemoteFunctions(FunctionDefinitionNode resource, ClassDefinitionNode classDefinitionNode, @@ -208,8 +207,6 @@ private AsyncApi25ChannelsImpl handleRemoteFunctions(FunctionDefinitionNode reso } } //TODO: Change because onError and onIdleTimeout in graphql over websocket - } else { - throw new NoSuchElementException(FUNCTION_DEFAULT_NAME_CONTAINS_ERROR); } } else { throw new NoSuchElementException(FUNCTION_WRONG_NAME); diff --git a/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java b/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java index a43b0a240..73e3b5887 100644 --- a/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java +++ b/asyncapi-cli/src/test/java/io/ballerina/asyncapi/wsgenerators/asyncapi/ApiDocTests.java @@ -30,7 +30,7 @@ /** * This test class for the covering the unit tests for return type scenarios. */ -public class APIDocTests { +public class ApiDocTests { private static final Path RES_DIR = Paths.get("src/test/resources/websockets" + "/ballerina-to-asyncapi").toAbsolutePath(); private Path tempDir; diff --git a/asyncapi-cli/src/test/resources/testng.xml b/asyncapi-cli/src/test/resources/testng.xml index ef90b8c46..7741eb96d 100644 --- a/asyncapi-cli/src/test/resources/testng.xml +++ b/asyncapi-cli/src/test/resources/testng.xml @@ -45,7 +45,7 @@ - + From 2ec36e322d7685379dbbb7afe0a623776e3cc8c6 Mon Sep 17 00:00:00 2001 From: bhashinee Date: Tue, 2 Jul 2024 14:01:09 +0530 Subject: [PATCH 3/3] Update the PR github workflow --- .github/workflows/pull-request.yml | 55 ++++++------------------------ 1 file changed, 11 insertions(+), 44 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index c145e13ce..31e0976d0 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,47 +1,14 @@ -name: PR build +name: PR Build -on: - pull_request: - push: - branches-ignore: - - master - - "automated/dependency_version_update" - - "automated/dependency_version_update_tmp" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true -jobs: - ubuntu-build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17.0.7 - uses: actions/setup-java@v3 - with: - distribution: "adopt" - java-version: 17.0.7 - - name: Build with Gradle - env: - packageUser: ${{ github.actor }} - packagePAT: ${{ secrets.GITHUB_TOKEN }} - run: | - ./gradlew build codeCoverageReport --stacktrace --scan --console=plain --no-daemon - - name: Generate Codecov Report - if: github.event_name == 'pull_request' - uses: codecov/codecov-action@v1 +on: [pull_request] - windows-build: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17.0.7 - uses: actions/setup-java@v3 - with: - distribution: "adopt" - java-version: 17.0.7 - - name: Build with Gradle - env: - packageUser: ${{ github.actor }} - packagePAT: ${{ secrets.GITHUB_TOKEN }} - JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 - run: ./gradlew.bat build --stacktrace --scan --console=plain --no-daemon +jobs: + call_workflow: + name: Run PR Build Workflow + if: ${{ github.repository_owner == 'ballerina-platform' }} + uses: ballerina-platform/ballerina-library/.github/workflows/pull-request-build-template.yml@main + secrets: inherit