Showing preview only (3,643K chars total). Download the full file or copy to clipboard to get everything.
Repository: ballerina-platform/ballerina-distribution
Branch: master
Commit: ff2dd242f9b1
Files: 3128
Total size: 2.8 MB
Directory structure:
gitextract_3c7m_6fq/
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yml
│ │ ├── config.yml
│ │ ├── improvement.yml
│ │ ├── new-feature.yml
│ │ └── task.yml
│ └── workflows/
│ ├── add_reason_labels.yml
│ ├── bbe-on-demand.yml
│ ├── daily-build-2201.12.x.yml
│ ├── daily-build-2201.13.x.yml
│ ├── daily-build-editor.yml
│ ├── daily-build.yml
│ ├── fossa_scan.yml
│ ├── language_server_simulator_fhir.yml
│ ├── language_server_simulator_nballerina.yml
│ ├── main.yml
│ ├── publish-release-artifacts-1.2.x.yml
│ ├── publish-release-artifacts.yml
│ ├── publish-release.yml
│ ├── publish_release_bi.yml
│ ├── pull-request.yml
│ ├── sign-installers.yml
│ ├── test-installers.yml
│ └── trigger-bbe-generation.yml
├── .gitignore
├── .trivyignore
├── LICENSE
├── README.md
├── ballerina/
│ ├── COPYRIGHT
│ ├── LICENSE
│ ├── README
│ ├── build.gradle
│ └── lib/
│ ├── run.bat
│ ├── run.sh
│ └── version.txt
├── ballerina-test/
│ ├── build.gradle
│ ├── gradle.properties
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── ballerinalang/
│ │ └── distribution/
│ │ ├── lengthValidation/
│ │ │ ├── LengthValidator.java
│ │ │ └── LineLengthExceededException.java
│ │ ├── test/
│ │ │ ├── ArtifactBuildTest.java
│ │ │ ├── BallerinaCommandTest.java
│ │ │ ├── DistributionArtifactCheckTest.java
│ │ │ ├── GraphqlToolTest.java
│ │ │ ├── GrpcToolingTest.java
│ │ │ ├── OpenAPIArtifactBuildTest.java
│ │ │ ├── OpenAPIDistributionArtifactCheck.java
│ │ │ └── PlatformDistributionArtifactCheckTest.java
│ │ └── utils/
│ │ └── TestUtils.java
│ └── resources/
│ ├── graphql/
│ │ ├── client-gen/
│ │ │ ├── project_1/
│ │ │ │ ├── graphql_endpoint.config.yaml
│ │ │ │ └── query_country.graphql
│ │ │ └── project_2/
│ │ │ ├── graphql_schema.config.yaml
│ │ │ ├── queries/
│ │ │ │ └── query_country.graphql
│ │ │ └── schema_country.graphql
│ │ ├── schema-gen/
│ │ │ ├── project_1/
│ │ │ │ ├── Ballerina.toml
│ │ │ │ └── main.bal
│ │ │ └── service.bal
│ │ └── service-gen/
│ │ ├── schema_book.graphql
│ │ └── schema_starwars.graphql
│ ├── grpc/
│ │ ├── expected-files/
│ │ │ └── route_guide_pb.bal
│ │ └── proto-files/
│ │ └── route_guide.proto
│ ├── openapi/
│ │ ├── expected/
│ │ │ ├── client.bal
│ │ │ ├── filtered_tags.bal
│ │ │ ├── types.bal
│ │ │ └── utils.bal
│ │ ├── integration-tests/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── testFiles/
│ │ │ ├── openapi-validator-off.bal
│ │ │ ├── openapi-validator-on.bal
│ │ │ ├── openapi_validator_off.yaml
│ │ │ └── openapi_validator_on.yaml
│ │ ├── openapi_client.yaml
│ │ ├── petstore.bal
│ │ ├── petstore.yaml
│ │ └── petstoreTags.yaml
│ ├── testing-line-length.xml
│ └── testng.xml
├── ballerina-test-automation/
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── installer-test/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── ballerina/
│ │ │ └── installer/
│ │ │ └── test/
│ │ │ ├── CentralTest.java
│ │ │ ├── InstallerTest.java
│ │ │ ├── ProjectTest.java
│ │ │ └── TestUtils.java
│ │ └── resources/
│ │ └── testng.xml
│ ├── settings.gradle
│ ├── test-automation/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── ballerina/
│ │ └── test/
│ │ ├── CentOS.java
│ │ ├── Executor.java
│ │ ├── MacOS.java
│ │ ├── Ubuntu.java
│ │ ├── Utils.java
│ │ └── Windows.java
│ └── update-tool-test/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── ballerina/
│ │ └── tool/
│ │ └── test/
│ │ ├── FetchDependencyTest.java
│ │ ├── UpdateDistTest.java
│ │ └── UpdateToolTest.java
│ └── resources/
│ └── testng.xml
├── build-time-tests/
│ ├── build.gradle
│ ├── samples/
│ │ ├── build-samples.sh
│ │ ├── helloservice/
│ │ │ ├── Ballerina.toml
│ │ │ └── service.bal
│ │ └── helloworld/
│ │ ├── Ballerina.toml
│ │ └── helloworld.bal
│ └── src/
│ └── main/
│ └── java/
│ └── org/
│ └── ballerina/
│ └── packages/
│ └── buildtime/
│ └── GenerateBuildDataCsv.java
├── build.gradle
├── cache-generator/
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── java/
│ │ ├── io/
│ │ │ └── ballerina/
│ │ │ └── gencache/
│ │ │ └── cmd/
│ │ │ └── GenCacheCmd.java
│ │ └── module-info.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── io.ballerina.cli.BLauncherCmd
├── config/
│ └── checkstyle/
│ ├── build.gradle
│ ├── checkstyle.xml
│ └── suppressions.xml
├── devtools-integration-tests/
│ ├── build.gradle
│ ├── index.json
│ ├── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── ballerina/
│ │ │ └── devtools/
│ │ │ └── debug/
│ │ │ ├── BaseTestCase.java
│ │ │ ├── ExpressionEvaluationTest.java
│ │ │ ├── ModuleBreakpointTest.java
│ │ │ └── ServiceDebugTest.java
│ │ └── resources/
│ │ ├── debug/
│ │ │ ├── project-based-tests/
│ │ │ │ ├── breakpoint-tests/
│ │ │ │ │ ├── Ballerina.toml
│ │ │ │ │ └── main.bal
│ │ │ │ ├── evaluation-tests/
│ │ │ │ │ ├── Ballerina.toml
│ │ │ │ │ └── main.bal
│ │ │ │ └── service-tests/
│ │ │ │ ├── Ballerina.toml
│ │ │ │ ├── hello_service.bal
│ │ │ │ └── tests/
│ │ │ │ └── hello_service_test.bal
│ │ │ └── single-file-tests/
│ │ │ └── hello_service.bal
│ │ └── testng.xml
│ └── testerina-object-mocking-test/
│ ├── client.bal
│ ├── service.bal
│ └── tests/
│ └── main_test.bal
├── dist-repo-builder/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── ballerina/
│ └── dist/
│ └── DistRepoBuilder.java
├── doc-guidelines.md
├── docs/
│ └── build-ballerina-from-source.md
├── examples/
│ ├── access-json-elements/
│ │ ├── access_json_elements.bal
│ │ ├── access_json_elements.md
│ │ ├── access_json_elements.metatags
│ │ └── access_json_elements.out
│ ├── access-optional-json-elements/
│ │ ├── access_optional_json_elements.bal
│ │ ├── access_optional_json_elements.md
│ │ ├── access_optional_json_elements.metatags
│ │ └── access_optional_json_elements.out
│ ├── advanced-conflict-handling/
│ │ ├── advanced_conflict_handling.bal
│ │ ├── advanced_conflict_handling.md
│ │ ├── advanced_conflict_handling.metatags
│ │ └── advanced_conflict_handling.out
│ ├── aggregation/
│ │ ├── aggregation.bal
│ │ ├── aggregation.md
│ │ ├── aggregation.metatags
│ │ └── aggregation.out
│ ├── ai-agent-external-endpoint-integration/
│ │ ├── ai_agent_external_endpoint_integration.bal
│ │ ├── ai_agent_external_endpoint_integration.md
│ │ ├── ai_agent_external_endpoint_integration.metatags
│ │ └── ai_agent_external_endpoint_integration.out
│ ├── ai-agent-local-tools/
│ │ ├── ai_agent_local_tools.bal
│ │ ├── ai_agent_local_tools.md
│ │ ├── ai_agent_local_tools.metatags
│ │ └── ai_agent_local_tools.out
│ ├── ai-agent-mcp-integration/
│ │ ├── ai_agent_mcp_integration.bal
│ │ ├── ai_agent_mcp_integration.md
│ │ ├── ai_agent_mcp_integration.metatags
│ │ └── ai_agent_mcp_integration.out
│ ├── ai-agent-tool-kit/
│ │ ├── ai_agent_tool_kit.bal
│ │ ├── ai_agent_tool_kit.md
│ │ ├── ai_agent_tool_kit.metatags
│ │ └── ai_agent_tool_kit.out
│ ├── alternate-receive/
│ │ ├── alternate_receive.bal
│ │ ├── alternate_receive.md
│ │ ├── alternate_receive.metatags
│ │ └── alternate_receive.out
│ ├── alternate-wait/
│ │ ├── alternate_wait.bal
│ │ ├── alternate_wait.md
│ │ ├── alternate_wait.metatags
│ │ └── alternate_wait.out
│ ├── annotations/
│ │ ├── annotations.bal
│ │ ├── annotations.md
│ │ ├── annotations.metatags
│ │ └── annotations.out
│ ├── anonymous-function/
│ │ ├── anonymous_function.bal
│ │ ├── anonymous_function.md
│ │ ├── anonymous_function.metatags
│ │ └── anonymous_function.out
│ ├── any-type/
│ │ ├── any_type.bal
│ │ ├── any_type.md
│ │ ├── any_type.metatags
│ │ └── any_type.out
│ ├── anydata-to-yaml-string/
│ │ ├── anydata_to_yaml_string.bal
│ │ ├── anydata_to_yaml_string.md
│ │ ├── anydata_to_yaml_string.metatags
│ │ └── anydata_to_yaml_string.out
│ ├── anydata-type/
│ │ ├── anydata_type.bal
│ │ ├── anydata_type.md
│ │ ├── anydata_type.metatags
│ │ └── anydata_type.out
│ ├── array-map-symmetry/
│ │ ├── array_map_symmetry.bal
│ │ ├── array_map_symmetry.md
│ │ ├── array_map_symmetry.metatags
│ │ └── array_map_symmetry.out
│ ├── arrays/
│ │ ├── arrays.bal
│ │ ├── arrays.md
│ │ ├── arrays.metatags
│ │ └── arrays.out
│ ├── asynchronize-message-passing/
│ │ ├── asynchronize_message_passing.bal
│ │ ├── asynchronize_message_passing.md
│ │ ├── asynchronize_message_passing.metatags
│ │ └── asynchronize_message_passing.out
│ ├── asynchronous-function-calls/
│ │ ├── asynchronous_function_calls.bal
│ │ ├── asynchronous_function_calls.md
│ │ ├── asynchronous_function_calls.metatags
│ │ └── asynchronous_function_calls.out
│ ├── avro-serdes/
│ │ ├── avro_serdes.bal
│ │ ├── avro_serdes.md
│ │ ├── avro_serdes.metatags
│ │ └── avro_serdes.out
│ ├── aws-lambda-dynamodb-trigger/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_dynamodb_trigger.bal
│ │ ├── aws_lambda_dynamodb_trigger.md
│ │ ├── aws_lambda_dynamodb_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── aws-lambda-execution-context/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_execution_context.bal
│ │ ├── aws_lambda_execution_context.md
│ │ ├── aws_lambda_execution_context.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── invoke_functions.out
│ ├── aws-lambda-hello-world/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_hello_world.bal
│ │ ├── aws_lambda_hello_world.md
│ │ ├── aws_lambda_hello_world.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── invoke_functions.out
│ ├── aws-lambda-s3-trigger/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_s3_trigger.bal
│ │ ├── aws_lambda_s3_trigger.md
│ │ ├── aws_lambda_s3_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── azure-functions-cosmosdb-trigger/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_cosmosdb_trigger.bal
│ │ ├── azure_functions_cosmosdb_trigger.md
│ │ ├── azure_functions_cosmosdb_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── azure-functions-hello-world/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_hello_world.bal
│ │ ├── azure_functions_hello_world.md
│ │ ├── azure_functions_hello_world.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── execute_function.out
│ ├── azure-functions-http-trigger-with-queue/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_http_trigger_with_queue.bal
│ │ ├── azure_functions_http_trigger_with_queue.md
│ │ ├── azure_functions_http_trigger_with_queue.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── execute_function.out
│ ├── azure-functions-timer-trigger/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_timer_trigger.bal
│ │ ├── azure_functions_timer_trigger.md
│ │ ├── azure_functions_timer_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── binary-data/
│ │ ├── binary_data.bal
│ │ ├── binary_data.md
│ │ ├── binary_data.metatags
│ │ └── binary_data.out
│ ├── binary-operators/
│ │ ├── binary_operators.bal
│ │ ├── binary_operators.md
│ │ ├── binary_operators.metatags
│ │ └── binary_operators.out
│ ├── binding-patterns/
│ │ ├── binding_patterns.bal
│ │ ├── binding_patterns.md
│ │ ├── binding_patterns.metatags
│ │ └── binding_patterns.out
│ ├── binding-patterns-in-match-statement/
│ │ ├── binding_patterns_in_match_statement.bal
│ │ ├── binding_patterns_in_match_statement.md
│ │ ├── binding_patterns_in_match_statement.metatags
│ │ └── binding_patterns_in_match_statement.out
│ ├── boolean/
│ │ ├── boolean.bal
│ │ ├── boolean.md
│ │ ├── boolean.metatags
│ │ └── boolean.out
│ ├── break-statement/
│ │ ├── break_statement.bal
│ │ ├── break_statement.md
│ │ ├── break_statement.metatags
│ │ └── break_statement.out
│ ├── built-in-integer-subtypes/
│ │ ├── built_in_integer_subtypes.bal
│ │ ├── built_in_integer_subtypes.md
│ │ ├── built_in_integer_subtypes.metatags
│ │ └── built_in_integer_subtypes.out
│ ├── built-in-string-subtype/
│ │ ├── built_in_string_subtype.bal
│ │ ├── built_in_string_subtype.md
│ │ ├── built_in_string_subtype.metatags
│ │ └── built_in_string_subtype.out
│ ├── byte-type/
│ │ ├── byte_type.bal
│ │ ├── byte_type.md
│ │ ├── byte_type.metatags
│ │ └── byte_type.out
│ ├── c2c-docker-deployment/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── c2c_docker_deployment.bal
│ │ ├── c2c_docker_deployment.md
│ │ ├── docker_images.out
│ │ ├── docker_run.out
│ │ └── execute_curl.out
│ ├── c2c-k8s-deployment/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── c2c_k8s_deployment.bal
│ │ ├── c2c_k8s_deployment.md
│ │ ├── docker_push.out
│ │ ├── execute_curl.out
│ │ ├── kubectl_apply.out
│ │ ├── kubectl_expose.out
│ │ ├── kubectl_pods.out
│ │ ├── kubectl_svc.out
│ │ └── minikube_ip.out
│ ├── cache-basics/
│ │ ├── cache_basics.bal
│ │ ├── cache_basics.md
│ │ ├── cache_basics.metatags
│ │ ├── cache_basics.out
│ │ └── tests/
│ │ └── cache_test.bal
│ ├── cache-invalidation/
│ │ ├── cache_invalidation.bal
│ │ ├── cache_invalidation.md
│ │ ├── cache_invalidation.metatags
│ │ ├── cache_invalidation.out
│ │ └── tests/
│ │ └── cache_test.bal
│ ├── casting-json-to-user-defined-type/
│ │ ├── casting_json_to_user_defined_type.bal
│ │ ├── casting_json_to_user_defined_type.md
│ │ ├── casting_json_to_user_defined_type.metatags
│ │ └── casting_json_to_user_defined_type.out
│ ├── cdc-advanced-service/
│ │ ├── cdc_advanced_service.bal
│ │ ├── cdc_advanced_service.md
│ │ ├── cdc_advanced_service.metatags
│ │ └── cdc_advanced_service.out
│ ├── cdc-prerequisite/
│ │ ├── README.md
│ │ ├── setup_finance_db.bal
│ │ ├── setup_store_db.bal
│ │ ├── test_cdc_advanced_service.bal
│ │ └── test_cdc_service.bal
│ ├── cdc-service/
│ │ ├── cdc_service.bal
│ │ ├── cdc_service.md
│ │ ├── cdc_service.metatags
│ │ └── cdc_service.out
│ ├── chat-agents/
│ │ ├── chat_agents.bal
│ │ ├── chat_agents.md
│ │ ├── chat_agents.metatags
│ │ └── chat_agents.out
│ ├── check-expression/
│ │ ├── check_expression.bal
│ │ ├── check_expression.md
│ │ ├── check_expression.metatags
│ │ └── check_expression.out
│ ├── check-semantics/
│ │ ├── check_semantics.bal
│ │ ├── check_semantics.md
│ │ ├── check_semantics.metatags
│ │ └── check_semantics.out
│ ├── child-loggers-with-context/
│ │ ├── child_loggers_with_context.bal
│ │ ├── child_loggers_with_context.md
│ │ ├── child_loggers_with_context.metatags
│ │ └── child_loggers_with_context.out
│ ├── client-class/
│ │ ├── client_class.bal
│ │ ├── client_class.md
│ │ ├── client_class.metatags
│ │ └── client_class.out
│ ├── combining-isolated-functions-and-lock/
│ │ ├── combining_isolated_functions_and_lock.bal
│ │ ├── combining_isolated_functions_and_lock.md
│ │ ├── combining_isolated_functions_and_lock.metatags
│ │ └── combining_isolated_functions_and_lock.out
│ ├── commit-rollback-handlers/
│ │ ├── commit_rollback_handlers.bal
│ │ ├── commit_rollback_handlers.md
│ │ ├── commit_rollback_handlers.metatags
│ │ └── commit_rollback_handlers.out
│ ├── computed-field-key/
│ │ ├── computed_field_key.bal
│ │ ├── computed_field_key.md
│ │ ├── computed_field_key.metatags
│ │ └── computed_field_key.out
│ ├── conditional-send/
│ │ ├── conditional_send.bal
│ │ ├── conditional_send.md
│ │ ├── conditional_send.metatags
│ │ └── conditional_send.out
│ ├── configurable-variables/
│ │ ├── configurable_variables.bal
│ │ ├── configurable_variables.md
│ │ ├── configurable_variables.metatags
│ │ └── configurable_variables.out
│ ├── configuring-via-cli/
│ │ ├── configuring_via_cli.bal
│ │ ├── configuring_via_cli.md
│ │ ├── configuring_via_cli.metatags
│ │ └── configuring_via_cli.out
│ ├── configuring-via-toml/
│ │ ├── configuring-via-toml.md
│ │ ├── configuring_via_toml.bal
│ │ ├── configuring_via_toml.metatags
│ │ └── configuring_via_toml.out
│ ├── const-and-final/
│ │ ├── const_and_final.bal
│ │ ├── const_and_final.md
│ │ ├── const_and_final.metatags
│ │ └── const_and_final.out
│ ├── constraint-validations/
│ │ ├── constraint_validations.bal
│ │ ├── constraint_validations.md
│ │ ├── constraint_validations.metatags
│ │ └── constraint_validations.out
│ ├── consuming-services/
│ │ ├── consuming_services.bal
│ │ ├── consuming_services.md
│ │ ├── consuming_services.metatags
│ │ └── consuming_services.out
│ ├── continue-statement/
│ │ ├── continue_statement.bal
│ │ ├── continue_statement.md
│ │ ├── continue_statement.metatags
│ │ └── continue_statement.out
│ ├── controlling-openness/
│ │ ├── controlling_openness.bal
│ │ ├── controlling_openness.md
│ │ ├── controlling_openness.metatags
│ │ └── controlling_openness.out
│ ├── convert-from-json-to-user-defined-type/
│ │ ├── convert_from_json_to_user_defined_type.bal
│ │ ├── convert_from_json_to_user_defined_type.md
│ │ ├── convert_from_json_to_user_defined_type.metatags
│ │ └── convert_from_json_to_user_defined_type.out
│ ├── converting-from-table-and-xml-to-json/
│ │ ├── converting_from_table_and_xml_to_json.bal
│ │ ├── converting_from_table_and_xml_to_json.md
│ │ ├── converting_from_table_and_xml_to_json.metatags
│ │ └── converting_from_table_and_xml_to_json.out
│ ├── converting-from-user-defined-type-to-json/
│ │ ├── converting_from_user_defined_type_to_json.bal
│ │ ├── converting_from_user_defined_type_to_json.md
│ │ ├── converting_from_user_defined_type_to_json.metatags
│ │ └── converting_from_user_defined_type_to_json.out
│ ├── counter-metrics/
│ │ ├── counter_metrics.bal
│ │ ├── counter_metrics.client.out
│ │ ├── counter_metrics.md
│ │ ├── counter_metrics.metatags
│ │ ├── counter_metrics.server.out
│ │ └── tests/
│ │ └── counter_metrics_test.bal
│ ├── covariance/
│ │ ├── covariance.bal
│ │ ├── covariance.md
│ │ ├── covariance.metatags
│ │ └── covariance.out
│ ├── create-maps-with-query/
│ │ ├── create_maps_with_query.bal
│ │ ├── create_maps_with_query.md
│ │ ├── create_maps_with_query.metatags
│ │ └── create_maps_with_query.out
│ ├── create-streams-with-query/
│ │ ├── create_streams_with_query.bal
│ │ ├── create_streams_with_query.md
│ │ ├── create_streams_with_query.metatags
│ │ └── create_streams_with_query.out
│ ├── create-tables-with-query/
│ │ ├── create_tables_with_query.bal
│ │ ├── create_tables_with_query.md
│ │ ├── create_tables_with_query.metatags
│ │ └── create_tables_with_query.out
│ ├── csv-streams-to-record-array/
│ │ ├── csv_streams_to_record_array.bal
│ │ ├── csv_streams_to_record_array.md
│ │ ├── csv_streams_to_record_array.metatags
│ │ └── csv_streams_to_record_array.out
│ ├── csv-string-to-anydata-array/
│ │ ├── csv_string_to_anydata_array.bal
│ │ ├── csv_string_to_anydata_array.md
│ │ ├── csv_string_to_anydata_array.metatags
│ │ └── csv_string_to_anydata_array.out
│ ├── csv-string-to-record-array/
│ │ ├── csv_string_to_record_array.bal
│ │ ├── csv_string_to_record_array.md
│ │ ├── csv_string_to_record_array.metatags
│ │ └── csv_string_to_record_array.out
│ ├── csv-user-configurations/
│ │ ├── csv_user_configurations.bal
│ │ ├── csv_user_configurations.md
│ │ ├── csv_user_configurations.metatags
│ │ └── csv_user_configurations.out
│ ├── custom-logger/
│ │ ├── custom_logger.bal
│ │ ├── custom_logger.md
│ │ ├── custom_logger.metatags
│ │ └── custom_logger.out
│ ├── custom-prefetch-methods/
│ │ ├── custom_prefetch_methods.bal
│ │ ├── custom_prefetch_methods.client.out
│ │ ├── custom_prefetch_methods.graphql
│ │ ├── custom_prefetch_methods.md
│ │ ├── custom_prefetch_methods.metatags
│ │ └── custom_prefetch_methods.server.out
│ ├── decimal-type/
│ │ ├── decimal_type.bal
│ │ ├── decimal_type.md
│ │ ├── decimal_type.metatags
│ │ └── decimal_type.out
│ ├── default-values-for-function-parameters/
│ │ ├── default_values_for_function_parameters.bal
│ │ ├── default_values_for_function_parameters.md
│ │ ├── default_values_for_function_parameters.metatags
│ │ └── default_values_for_function_parameters.out
│ ├── default-values-for-record-fields/
│ │ ├── default_values_for_record_fields.bal
│ │ ├── default_values_for_record_fields.md
│ │ ├── default_values_for_record_fields.metatags
│ │ └── default_values_for_record_fields.out
│ ├── defining-classes/
│ │ ├── defining_classes.bal
│ │ ├── defining_classes.md
│ │ ├── defining_classes.metatags
│ │ └── defining_classes.out
│ ├── dependent-types/
│ │ ├── dependent_types.bal
│ │ ├── dependent_types.md
│ │ ├── dependent_types.metatags
│ │ └── dependent_types.out
│ ├── destructure-records-using-query/
│ │ ├── destructure_records_using_query.bal
│ │ ├── destructure_records_using_query.md
│ │ ├── destructure_records_using_query.metatags
│ │ └── destructure_records_using_query.out
│ ├── direct-llm-calls/
│ │ ├── direct_llm_calls.bal
│ │ ├── direct_llm_calls.md
│ │ ├── direct_llm_calls.metatags
│ │ └── direct_llm_calls.out
│ ├── direct-llm-calls-with-history/
│ │ ├── direct_llm_calls_with_history.bal
│ │ ├── direct_llm_calls_with_history.md
│ │ ├── direct_llm_calls_with_history.metatags
│ │ └── direct_llm_calls_with_history.out
│ ├── direct-llm-calls-with-multimodal-input/
│ │ ├── direct_llm_calls_with_multimodal_input.bal
│ │ ├── direct_llm_calls_with_multimodal_input.md
│ │ ├── direct_llm_calls_with_multimodal_input.metatags
│ │ └── direct_llm_calls_with_multimodal_input.out
│ ├── directories/
│ │ ├── directories.bal
│ │ ├── directories.md
│ │ ├── directories.metatags
│ │ └── directories.out
│ ├── directory-listener/
│ │ ├── directory_listener.bal
│ │ ├── directory_listener.md
│ │ ├── directory_listener.metatags
│ │ └── directory_listener.out
│ ├── distinct-object-types/
│ │ ├── distinct_object_types.bal
│ │ ├── distinct_object_types.md
│ │ ├── distinct_object_types.metatags
│ │ └── distinct_object_types.out
│ ├── docker-hello-world/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── docker_hello_world.bal
│ │ ├── docker_hello_world.md
│ │ ├── docker_images.out
│ │ ├── docker_run.out
│ │ └── execute_curl.out
│ ├── documentation/
│ │ ├── documentation.bal
│ │ ├── documentation.md
│ │ ├── documentation.metatags
│ │ └── documentation.out
│ ├── dynamic-listener/
│ │ ├── dynamic_listener.bal
│ │ ├── dynamic_listener.client.out
│ │ ├── dynamic_listener.md
│ │ ├── dynamic_listener.metatags
│ │ └── dynamic_listener.server.out
│ ├── edi-to-record/
│ │ ├── bal_project.out
│ │ ├── codegen_command.out
│ │ ├── edi_to_record.bal
│ │ ├── edi_to_record.md
│ │ ├── edi_to_record.metatags
│ │ ├── order.edi
│ │ ├── output.out
│ │ ├── package_structure.out
│ │ ├── schema.json
│ │ └── tool_pull_command.out
│ ├── email-client-ssl-tls/
│ │ ├── email_client_ssl_tls.bal
│ │ ├── email_client_ssl_tls.md
│ │ ├── email_client_ssl_tls.metatags
│ │ └── email_client_ssl_tls.out
│ ├── email-service-ssl-tls/
│ │ ├── email_service_ssl_tls.bal
│ │ ├── email_service_ssl_tls.md
│ │ ├── email_service_ssl_tls.metatags
│ │ └── email_service_ssl_tls.out
│ ├── ensureType-function/
│ │ ├── ensureType_function.bal
│ │ ├── ensureType_function.md
│ │ ├── ensureType_function.metatags
│ │ └── ensureType_function.out
│ ├── enumerations/
│ │ ├── enumerations.bal
│ │ ├── enumerations.md
│ │ ├── enumerations.metatags
│ │ └── enumerations.out
│ ├── environment-variables/
│ │ ├── environment_variables.bal
│ │ ├── environment_variables.md
│ │ ├── environment_variables.metatags
│ │ └── environment_variables.out
│ ├── error-binding-pattern/
│ │ ├── error_binding_pattern.bal
│ │ ├── error_binding_pattern.md
│ │ ├── error_binding_pattern.metatags
│ │ └── error_binding_pattern.out
│ ├── error-binding-pattern-in-match-statement/
│ │ ├── error_binding_pattern_in_match_statement.bal
│ │ ├── error_binding_pattern_in_match_statement.md
│ │ ├── error_binding_pattern_in_match_statement.metatags
│ │ └── error_binding_pattern_in_match_statement.out
│ ├── error-cause/
│ │ ├── error_cause.bal
│ │ ├── error_cause.md
│ │ ├── error_cause.metatags
│ │ └── error_cause.out
│ ├── error-detail/
│ │ ├── error_detail.bal
│ │ ├── error_detail.md
│ │ ├── error_detail.metatags
│ │ └── error_detail.out
│ ├── error-handling/
│ │ ├── error_handling.bal
│ │ ├── error_handling.md
│ │ ├── error_handling.metatags
│ │ └── error_handling.out
│ ├── error-logging/
│ │ ├── error_logging.bal
│ │ ├── error_logging.md
│ │ ├── error_logging.metatags
│ │ └── error_logging.out
│ ├── error-reporting/
│ │ ├── error_reporting.bal
│ │ ├── error_reporting.md
│ │ ├── error_reporting.metatags
│ │ └── error_reporting.out
│ ├── error-subtyping/
│ │ ├── error_subtyping.bal
│ │ ├── error_subtyping.md
│ │ ├── error_subtyping.metatags
│ │ └── error_subtyping.out
│ ├── error-type-intersection/
│ │ ├── error_type_intersection.bal
│ │ ├── error_type_intersection.md
│ │ ├── error_type_intersection.metatags
│ │ └── error_type_intersection.out
│ ├── expression-equality/
│ │ ├── expression_equality.bal
│ │ ├── expression_equality.md
│ │ ├── expression_equality.metatags
│ │ └── expression_equality.out
│ ├── expression-oriented-style/
│ │ ├── expression_oriented_style.bal
│ │ ├── expression_oriented_style.md
│ │ ├── expression_oriented_style.metatags
│ │ └── expression_oriented_style.out
│ ├── filepaths/
│ │ ├── filepaths.bal
│ │ ├── filepaths.md
│ │ ├── filepaths.metatags
│ │ ├── filepaths.out
│ │ └── tests/
│ │ └── filepath_test.bal
│ ├── files/
│ │ ├── files.bal
│ │ ├── files.md
│ │ ├── files.metatags
│ │ └── files.out
│ ├── filler-values-of-a-list/
│ │ ├── filler_values_of_a_list.bal
│ │ ├── filler_values_of_a_list.md
│ │ ├── filler_values_of_a_list.metatags
│ │ └── filler_values_of_a_list.out
│ ├── floating-point-numbers/
│ │ ├── floating_point_numbers.bal
│ │ ├── floating_point_numbers.md
│ │ ├── floating_point_numbers.metatags
│ │ └── floating_point_numbers.out
│ ├── flush/
│ │ ├── flush.bal
│ │ ├── flush.md
│ │ ├── flush.metatags
│ │ └── flush.out
│ ├── foreach-statement/
│ │ ├── foreach_statement.bal
│ │ ├── foreach_statement.md
│ │ ├── foreach_statement.metatags
│ │ └── foreach_statement.out
│ ├── fork/
│ │ ├── fork.bal
│ │ ├── fork.md
│ │ ├── fork.metatags
│ │ └── fork.out
│ ├── ftp-client-receive-file/
│ │ ├── ftp_client_receive_file.bal
│ │ ├── ftp_client_receive_file.md
│ │ ├── ftp_client_receive_file.metatags
│ │ └── ftp_client_receive_file.out
│ ├── ftp-client-send-file/
│ │ ├── ftp_client_send_file.bal
│ │ ├── ftp_client_send_file.md
│ │ ├── ftp_client_send_file.metatags
│ │ └── ftp_client_send_file.out
│ ├── ftp-service-receive-file/
│ │ ├── ftp_service_receive_file.bal
│ │ ├── ftp_service_receive_file.md
│ │ ├── ftp_service_receive_file.metatags
│ │ └── ftp_service_receive_file.out
│ ├── ftp-service-send-file/
│ │ ├── ftp_service_send_file.bal
│ │ ├── ftp_service_send_file.md
│ │ ├── ftp_service_send_file.metatags
│ │ └── ftp_service_send_file.out
│ ├── function-closure/
│ │ ├── function_closure.bal
│ │ ├── function_closure.md
│ │ ├── function_closure.metatags
│ │ └── function_closure.out
│ ├── function-pointers/
│ │ ├── function_pointers.bal
│ │ ├── function_pointers.md
│ │ ├── function_pointers.metatags
│ │ └── function_pointers.out
│ ├── function-types/
│ │ ├── function_types.bal
│ │ ├── function_types.md
│ │ ├── function_types.metatags
│ │ └── function_types.out
│ ├── function-values/
│ │ ├── function_values.bal
│ │ ├── function_values.md
│ │ ├── function_values.metatags
│ │ └── function_values.out
│ ├── functions/
│ │ ├── functions.bal
│ │ ├── functions.md
│ │ ├── functions.metatags
│ │ └── functions.out
│ ├── gauge-metrics/
│ │ ├── gauge_metrics.bal
│ │ ├── gauge_metrics.client.out
│ │ ├── gauge_metrics.md
│ │ ├── gauge_metrics.metatags
│ │ ├── gauge_metrics.server.out
│ │ └── tests/
│ │ └── gauge_metrics_test.bal
│ ├── graphql-client-error-handling/
│ │ ├── graphql_client_error_handling.bal
│ │ ├── graphql_client_error_handling.md
│ │ ├── graphql_client_error_handling.metatags
│ │ └── graphql_client_error_handling.out
│ ├── graphql-client-handle-partial-response/
│ │ ├── graphql_client_handle_partial_response.bal
│ │ ├── graphql_client_handle_partial_response.md
│ │ ├── graphql_client_handle_partial_response.metatags
│ │ └── graphql_client_handle_partial_response.out
│ ├── graphql-client-query-endpoint/
│ │ ├── graphql_client_query_endpoint.bal
│ │ ├── graphql_client_query_endpoint.md
│ │ ├── graphql_client_query_endpoint.metatags
│ │ └── graphql_client_query_endpoint.out
│ ├── graphql-client-security-basic-auth/
│ │ ├── graphql_client_security_basic_auth.bal
│ │ ├── graphql_client_security_basic_auth.md
│ │ ├── graphql_client_security_basic_auth.metatags
│ │ └── graphql_client_security_basic_auth.out
│ ├── graphql-client-security-jwt-authentication/
│ │ ├── graphql_client_security_jwt_authentication.bal
│ │ ├── graphql_client_security_jwt_authentication.md
│ │ ├── graphql_client_security_jwt_authentication.metatags
│ │ └── graphql_client_security_jwt_authentication.out
│ ├── graphql-client-security-mutual-ssl/
│ │ ├── graphql_client_security_mutual_ssl.bal
│ │ ├── graphql_client_security_mutual_ssl.md
│ │ ├── graphql_client_security_mutual_ssl.metatags
│ │ └── graphql_client_security_mutual_ssl.out
│ ├── graphql-client-security-oauth2-password-grant-type/
│ │ ├── graphql_client_security_oauth2_password_grant_type.bal
│ │ ├── graphql_client_security_oauth2_password_grant_type.md
│ │ ├── graphql_client_security_oauth2_password_grant_type.metatags
│ │ └── graphql_client_security_oauth2_password_grant_type.out
│ ├── graphql-client-security-ssl-tls/
│ │ ├── graphql_client_security_ssl_tls.bal
│ │ ├── graphql_client_security_ssl_tls.md
│ │ ├── graphql_client_security_ssl_tls.metatags
│ │ └── graphql_client_security_ssl_tls.out
│ ├── graphql-context/
│ │ ├── graphql_context.1.client.out
│ │ ├── graphql_context.2.client.out
│ │ ├── graphql_context.bal
│ │ ├── graphql_context.graphql
│ │ ├── graphql_context.md
│ │ ├── graphql_context.metatags
│ │ └── graphql_context.server.out
│ ├── graphql-dataloader/
│ │ ├── graphql_dataloader.bal
│ │ ├── graphql_dataloader.client.out
│ │ ├── graphql_dataloader.graphql
│ │ ├── graphql_dataloader.md
│ │ ├── graphql_dataloader.metatags
│ │ └── graphql_dataloader.server.out
│ ├── graphql-directives/
│ │ ├── graphql_directives.1.client.out
│ │ ├── graphql_directives.1.graphql
│ │ ├── graphql_directives.2.client.out
│ │ ├── graphql_directives.2.graphql
│ │ ├── graphql_directives.3.client.out
│ │ ├── graphql_directives.3.graphql
│ │ ├── graphql_directives.bal
│ │ ├── graphql_directives.md
│ │ ├── graphql_directives.metatags
│ │ └── graphql_directives.server.out
│ ├── graphql-documentation/
│ │ ├── graphql_documentation.bal
│ │ ├── graphql_documentation.client.out
│ │ ├── graphql_documentation.graphql
│ │ ├── graphql_documentation.md
│ │ ├── graphql_documentation.metatags
│ │ └── graphql_documentation.server.out
│ ├── graphql-field-interceptors/
│ │ ├── graphql_field_interceptors.bal
│ │ ├── graphql_field_interceptors.client.out
│ │ ├── graphql_field_interceptors.graphql
│ │ ├── graphql_field_interceptors.md
│ │ ├── graphql_field_interceptors.metatags
│ │ └── graphql_field_interceptors.server.out
│ ├── graphql-file-upload/
│ │ ├── graphql_file_upload.bal
│ │ ├── graphql_file_upload.client.out
│ │ ├── graphql_file_upload.md
│ │ ├── graphql_file_upload.metatags
│ │ └── graphql_file_upload.server.out
│ ├── graphql-graphiql/
│ │ ├── graphql_graphiql.bal
│ │ ├── graphql_graphiql.md
│ │ ├── graphql_graphiql.metatags
│ │ └── graphql_graphiql.out
│ ├── graphql-hello-world/
│ │ ├── graphql_hello_world.bal
│ │ ├── graphql_hello_world.client.out
│ │ ├── graphql_hello_world.graphql
│ │ ├── graphql_hello_world.md
│ │ ├── graphql_hello_world.metatags
│ │ └── graphql_hello_world.server.out
│ ├── graphql-hierarchical-resource-paths/
│ │ ├── graphql_hierarchical_resource_paths.bal
│ │ ├── graphql_hierarchical_resource_paths.client.out
│ │ ├── graphql_hierarchical_resource_paths.graphql
│ │ ├── graphql_hierarchical_resource_paths.md
│ │ ├── graphql_hierarchical_resource_paths.metatags
│ │ └── graphql_hierarchical_resource_paths.server.out
│ ├── graphql-id-scalar-type/
│ │ ├── graphql_id_scalar_type.bal
│ │ ├── graphql_id_scalar_type.client.out
│ │ ├── graphql_id_scalar_type.graphql
│ │ ├── graphql_id_scalar_type.md
│ │ ├── graphql_id_scalar_type.metatags
│ │ └── graphql_id_scalar_type.server.out
│ ├── graphql-input-constraint-validation/
│ │ ├── graphql_input_constraint_validation.bal
│ │ ├── graphql_input_constraint_validation.client.out
│ │ ├── graphql_input_constraint_validation.graphql
│ │ ├── graphql_input_constraint_validation.md
│ │ ├── graphql_input_constraint_validation.metatags
│ │ └── graphql_input_constraint_validation.server.out
│ ├── graphql-input-objects/
│ │ ├── graphql_input_objects.bal
│ │ ├── graphql_input_objects.client.out
│ │ ├── graphql_input_objects.graphql
│ │ ├── graphql_input_objects.md
│ │ ├── graphql_input_objects.metatags
│ │ └── graphql_input_objects.server.out
│ ├── graphql-input-types/
│ │ ├── graphql_input_types.bal
│ │ ├── graphql_input_types.client.out
│ │ ├── graphql_input_types.graphql
│ │ ├── graphql_input_types.md
│ │ ├── graphql_input_types.metatags
│ │ └── graphql_input_types.server.out
│ ├── graphql-interceptor-configurations/
│ │ ├── graphql_interceptor_configurations.bal
│ │ ├── graphql_interceptor_configurations.client.out
│ │ ├── graphql_interceptor_configurations.graphql
│ │ ├── graphql_interceptor_configurations.md
│ │ ├── graphql_interceptor_configurations.metatags
│ │ └── graphql_interceptor_configurations.server.out
│ ├── graphql-interfaces/
│ │ ├── graphql_interfaces.bal
│ │ ├── graphql_interfaces.client.out
│ │ ├── graphql_interfaces.graphql
│ │ ├── graphql_interfaces.md
│ │ ├── graphql_interfaces.metatags
│ │ └── graphql_interfaces.server.out
│ ├── graphql-interfaces-implementing-interfaces/
│ │ ├── graphql_interfaces_implementing_interfaces.bal
│ │ ├── graphql_interfaces_implementing_interfaces.client.out
│ │ ├── graphql_interfaces_implementing_interfaces.graphql
│ │ ├── graphql_interfaces_implementing_interfaces.md
│ │ ├── graphql_interfaces_implementing_interfaces.metatags
│ │ └── graphql_interfaces_implementing_interfaces.server.out
│ ├── graphql-mutations/
│ │ ├── graphql_mutations.bal
│ │ ├── graphql_mutations.client.out
│ │ ├── graphql_mutations.graphql
│ │ ├── graphql_mutations.md
│ │ ├── graphql_mutations.metatags
│ │ └── graphql_mutations.server.out
│ ├── graphql-returning-record-values/
│ │ ├── graphql_returning_record_values.bal
│ │ ├── graphql_returning_record_values.client.out
│ │ ├── graphql_returning_record_values.graphql
│ │ ├── graphql_returning_record_values.md
│ │ ├── graphql_returning_record_values.metatags
│ │ └── graphql_returning_record_values.server.out
│ ├── graphql-returning-service-objects/
│ │ ├── graphql_returning_service_objects.bal
│ │ ├── graphql_returning_service_objects.client.out
│ │ ├── graphql_returning_service_objects.graphql
│ │ ├── graphql_returning_service_objects.md
│ │ ├── graphql_returning_service_objects.metatags
│ │ └── graphql_returning_service_objects.server.out
│ ├── graphql-service-basic-auth-file-user-store/
│ │ ├── graphql_service_basic_auth_file_user_store.bal
│ │ ├── graphql_service_basic_auth_file_user_store.md
│ │ ├── graphql_service_basic_auth_file_user_store.metatags
│ │ └── graphql_service_basic_auth_file_user_store.server.out
│ ├── graphql-service-basic-auth-ldap-user-store/
│ │ ├── graphql_service_basic_auth_ldap_user_store.bal
│ │ ├── graphql_service_basic_auth_ldap_user_store.md
│ │ ├── graphql_service_basic_auth_ldap_user_store.metatags
│ │ └── graphql_service_basic_auth_ldap_user_store.server.out
│ ├── graphql-service-cache-invalidation/
│ │ ├── graphql_service_cache_invalidation.bal
│ │ ├── graphql_service_cache_invalidation.client.out
│ │ ├── graphql_service_cache_invalidation.graphql
│ │ ├── graphql_service_cache_invalidation.md
│ │ ├── graphql_service_cache_invalidation.metatags
│ │ └── graphql_service_cache_invalidation.server.out
│ ├── graphql-service-error-handling/
│ │ ├── graphql_service_error_handling.1.client.out
│ │ ├── graphql_service_error_handling.1.graphql
│ │ ├── graphql_service_error_handling.2.client.out
│ │ ├── graphql_service_error_handling.2.graphql
│ │ ├── graphql_service_error_handling.bal
│ │ ├── graphql_service_error_handling.md
│ │ ├── graphql_service_error_handling.metatags
│ │ └── graphql_service_error_handling.server.out
│ ├── graphql-service-field-level-caching/
│ │ ├── graphql_service_field_level_caching.bal
│ │ ├── graphql_service_field_level_caching.client.out
│ │ ├── graphql_service_field_level_caching.graphql
│ │ ├── graphql_service_field_level_caching.md
│ │ ├── graphql_service_field_level_caching.metatags
│ │ └── graphql_service_field_level_caching.server.out
│ ├── graphql-service-field-object/
│ │ ├── graphql_service_field_object.1.client.out
│ │ ├── graphql_service_field_object.1.graphql
│ │ ├── graphql_service_field_object.2.client.out
│ │ ├── graphql_service_field_object.2.graphql
│ │ ├── graphql_service_field_object.bal
│ │ ├── graphql_service_field_object.md
│ │ ├── graphql_service_field_object.metatags
│ │ ├── graphql_service_field_object.server.1.out
│ │ ├── graphql_service_field_object.server.2.out
│ │ └── graphql_service_field_object.server.3.out
│ ├── graphql-service-interceptors/
│ │ ├── graphql_service_interceptors.bal
│ │ ├── graphql_service_interceptors.client.out
│ │ ├── graphql_service_interceptors.graphql
│ │ ├── graphql_service_interceptors.md
│ │ ├── graphql_service_interceptors.metatags
│ │ └── graphql_service_interceptors.server.out
│ ├── graphql-service-jwt-auth/
│ │ ├── graphql_service_jwt_auth.bal
│ │ ├── graphql_service_jwt_auth.md
│ │ ├── graphql_service_jwt_auth.metatags
│ │ └── graphql_service_jwt_auth.server.out
│ ├── graphql-service-mutual-ssl/
│ │ ├── graphql_service_mutual_ssl.bal
│ │ ├── graphql_service_mutual_ssl.md
│ │ ├── graphql_service_mutual_ssl.metatags
│ │ └── graphql_service_mutual_ssl.server.out
│ ├── graphql-service-oauth2/
│ │ ├── graphql_service_oauth2.bal
│ │ ├── graphql_service_oauth2.md
│ │ ├── graphql_service_oauth2.metatags
│ │ └── graphql_service_oauth2.server.out
│ ├── graphql-service-operation-level-caching/
│ │ ├── graphql_service_operation_level_caching.bal
│ │ ├── graphql_service_operation_level_caching.client.out
│ │ ├── graphql_service_operation_level_caching.graphql
│ │ ├── graphql_service_operation_level_caching.md
│ │ ├── graphql_service_operation_level_caching.metatags
│ │ └── graphql_service_operation_level_caching.server.out
│ ├── graphql-service-query-complexity/
│ │ ├── graphql_service_query_complexity.1.graphql
│ │ ├── graphql_service_query_complexity.2.graphql
│ │ ├── graphql_service_query_complexity.bal
│ │ ├── graphql_service_query_complexity.client.1.out
│ │ ├── graphql_service_query_complexity.client.2.out
│ │ ├── graphql_service_query_complexity.md
│ │ ├── graphql_service_query_complexity.metatags
│ │ └── graphql_service_query_complexity.server.out
│ ├── graphql-service-ssl-tls/
│ │ ├── graphql_service_ssl_tls.bal
│ │ ├── graphql_service_ssl_tls.md
│ │ ├── graphql_service_ssl_tls.metatags
│ │ └── graphql_service_ssl_tls.server.out
│ ├── graphql-service-union-types/
│ │ ├── graphql_service_union_types.bal
│ │ ├── graphql_service_union_types.client.out
│ │ ├── graphql_service_union_types.graphql
│ │ ├── graphql_service_union_types.md
│ │ ├── graphql_service_union_types.metatags
│ │ └── graphql_service_union_types.server.out
│ ├── graphql-subscriptions/
│ │ ├── graphql_subscriptions.bal
│ │ ├── graphql_subscriptions.client.out
│ │ ├── graphql_subscriptions.graphql
│ │ ├── graphql_subscriptions.md
│ │ ├── graphql_subscriptions.metatags
│ │ └── graphql_subscriptions.server.out
│ ├── grpc-client-basic-auth/
│ │ ├── grpc_client_basic_auth.bal
│ │ ├── grpc_client_basic_auth.md
│ │ ├── grpc_client_basic_auth.metatags
│ │ ├── grpc_client_basic_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-bearer-token-auth/
│ │ ├── grpc_client_bearer_token_auth.bal
│ │ ├── grpc_client_bearer_token_auth.md
│ │ ├── grpc_client_bearer_token_auth.metatags
│ │ ├── grpc_client_bearer_token_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-bidirectional-streaming/
│ │ ├── grpc_bidirectional_streaming.md
│ │ ├── grpc_bidirectional_streaming.metatags
│ │ ├── grpc_bidirectional_streaming.out
│ │ ├── grpc_bidirectional_streaming.proto
│ │ ├── grpc_bidirectional_streaming_service_client.bal
│ │ └── grpc_bidirectional_streaming_service_client.out
│ ├── grpc-client-client-streaming/
│ │ ├── grpc_client_streaming.md
│ │ ├── grpc_client_streaming.metatags
│ │ ├── grpc_client_streaming.out
│ │ ├── grpc_client_streaming.proto
│ │ ├── grpc_client_streaming_service_client.bal
│ │ └── grpc_client_streaming_service_client.out
│ ├── grpc-client-headers/
│ │ ├── grpc_simple.proto
│ │ ├── grpc_simple_with_headers.md
│ │ ├── grpc_simple_with_headers.metatags
│ │ ├── grpc_simple_with_headers_service_client.bal
│ │ └── grpc_simple_with_headers_service_client.out
│ ├── grpc-client-mutual-ssl/
│ │ ├── grpc_client_mutual_ssl.bal
│ │ ├── grpc_client_mutual_ssl.md
│ │ ├── grpc_client_mutual_ssl.metatags
│ │ ├── grpc_client_mutual_ssl.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-client-credentials-grant-type/
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.bal
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.md
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.metatags
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-jwt-bearer-grant-type/
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.metatags
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-password-grant-type/
│ │ ├── grpc_client_oauth2_password_grant_type.bal
│ │ ├── grpc_client_oauth2_password_grant_type.md
│ │ ├── grpc_client_oauth2_password_grant_type.metatags
│ │ ├── grpc_client_oauth2_password_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-refresh-token-grant-type/
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.bal
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.md
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.metatags
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-self-signed-jwt-auth/
│ │ ├── grpc_client_self_signed_jwt_auth.bal
│ │ ├── grpc_client_self_signed_jwt_auth.md
│ │ ├── grpc_client_self_signed_jwt_auth.metatags
│ │ ├── grpc_client_self_signed_jwt_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-server-streaming/
│ │ ├── grpc_server_streaming.md
│ │ ├── grpc_server_streaming.metatags
│ │ ├── grpc_server_streaming.out
│ │ ├── grpc_server_streaming.proto
│ │ ├── grpc_server_streaming_service_client.bal
│ │ └── grpc_server_streaming_service_client.out
│ ├── grpc-client-set-deadline/
│ │ ├── grpc_client_set_deadline.bal
│ │ ├── grpc_client_set_deadline.md
│ │ ├── grpc_client_set_deadline.metatags
│ │ ├── grpc_client_set_deadline.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-simple/
│ │ ├── grpc_client_simple.bal
│ │ ├── grpc_client_simple.md
│ │ ├── grpc_client_simple.metatags
│ │ ├── grpc_client_simple.out
│ │ ├── grpc_client_simple.proto
│ │ └── grpc_simple.out
│ ├── grpc-client-ssl-tls/
│ │ ├── grpc_client_ssl_tls.bal
│ │ ├── grpc_client_ssl_tls.md
│ │ ├── grpc_client_ssl_tls.metatags
│ │ ├── grpc_client_ssl_tls.out
│ │ └── grpc_simple.proto
│ ├── grpc-server-reflection/
│ │ ├── grpc_server_reflection.bal
│ │ ├── grpc_server_reflection.md
│ │ ├── grpc_server_reflection.metatags
│ │ ├── grpc_server_reflection.out
│ │ ├── grpc_server_reflection_grpcurl.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-basic-auth-file-user-store/
│ │ ├── grpc_service_basic_auth_file_user_store.bal
│ │ ├── grpc_service_basic_auth_file_user_store.md
│ │ ├── grpc_service_basic_auth_file_user_store.metatags
│ │ ├── grpc_service_basic_auth_file_user_store.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-basic-auth-ldap-user-store/
│ │ ├── grpc_service_basic_auth_ldap_user_store.bal
│ │ ├── grpc_service_basic_auth_ldap_user_store.md
│ │ ├── grpc_service_basic_auth_ldap_user_store.metatags
│ │ ├── grpc_service_basic_auth_ldap_user_store.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-bidirectional-streaming/
│ │ ├── grpc_bidirectional_streaming.md
│ │ ├── grpc_bidirectional_streaming.metatags
│ │ ├── grpc_bidirectional_streaming.out
│ │ ├── grpc_bidirectional_streaming.proto
│ │ ├── grpc_bidirectional_streaming_service.bal
│ │ ├── grpc_bidirectional_streaming_service.out
│ │ └── tests/
│ │ └── grpc_bidirectional_streaming_test.bal
│ ├── grpc-service-check-deadline/
│ │ ├── grpc_service_check_deadline.bal
│ │ ├── grpc_service_check_deadline.md
│ │ ├── grpc_service_check_deadline.metatags
│ │ ├── grpc_service_check_deadline.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-client-streaming/
│ │ ├── grpc_client_streaming.md
│ │ ├── grpc_client_streaming.metatags
│ │ ├── grpc_client_streaming.out
│ │ ├── grpc_client_streaming.proto
│ │ ├── grpc_client_streaming_service.bal
│ │ ├── grpc_client_streaming_service.out
│ │ └── tests/
│ │ └── grpc_client_streaming_test.bal
│ ├── grpc-service-headers/
│ │ ├── grpc_simple.proto
│ │ ├── grpc_simple_with_headers.md
│ │ ├── grpc_simple_with_headers.metatags
│ │ ├── grpc_simple_with_headers_service.bal
│ │ ├── grpc_simple_with_headers_service.out
│ │ └── tests/
│ │ └── grpc_simple_with_headers_test.bal
│ ├── grpc-service-jwt-auth/
│ │ ├── grpc_service_jwt_auth.bal
│ │ ├── grpc_service_jwt_auth.md
│ │ ├── grpc_service_jwt_auth.metatags
│ │ ├── grpc_service_jwt_auth.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-mutual-ssl/
│ │ ├── grpc_service_mutual_ssl.bal
│ │ ├── grpc_service_mutual_ssl.md
│ │ ├── grpc_service_mutual_ssl.metatags
│ │ ├── grpc_service_mutual_ssl.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-oauth2/
│ │ ├── grpc_service_oauth2.bal
│ │ ├── grpc_service_oauth2.md
│ │ ├── grpc_service_oauth2.metatags
│ │ ├── grpc_service_oauth2.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-server-streaming/
│ │ ├── grpc_server_streaming.md
│ │ ├── grpc_server_streaming.metatags
│ │ ├── grpc_server_streaming.out
│ │ ├── grpc_server_streaming.proto
│ │ ├── grpc_server_streaming_service.bal
│ │ ├── grpc_server_streaming_service.out
│ │ └── tests/
│ │ └── grpc_server_streaming_test.bal
│ ├── grpc-service-simple/
│ │ ├── grpc_service_simple.bal
│ │ ├── grpc_service_simple.md
│ │ ├── grpc_service_simple.metatags
│ │ ├── grpc_service_simple.out
│ │ ├── grpc_service_simple.proto
│ │ ├── grpc_simple.out
│ │ └── tests/
│ │ └── grpc_simple_test.bal
│ ├── grpc-service-ssl-tls/
│ │ ├── grpc_service_ssl_tls.bal
│ │ ├── grpc_service_ssl_tls.md
│ │ ├── grpc_service_ssl_tls.metatags
│ │ ├── grpc_service_ssl_tls.server.out
│ │ └── grpc_simple.proto
│ ├── hello-world/
│ │ ├── hello_world.bal
│ │ ├── hello_world.md
│ │ ├── hello_world.metatags
│ │ └── hello_world.out
│ ├── hello-world-service/
│ │ ├── hello_world_service.bal
│ │ ├── hello_world_service.client.out
│ │ ├── hello_world_service.md
│ │ ├── hello_world_service.metatags
│ │ └── hello_world_service.server.out
│ ├── hierarchical-resources/
│ │ ├── hierarchical_resources.bal
│ │ ├── hierarchical_resources.client.out
│ │ ├── hierarchical_resources.md
│ │ ├── hierarchical_resources.metatags
│ │ └── hierarchical_resources.server.out
│ ├── http-1-1-to-2-0-protocol-switch/
│ │ └── http_1_1_to_2_0_protocol_switch.md
│ ├── http-100-continue/
│ │ ├── http_100_continue.bal
│ │ ├── http_100_continue.client.out
│ │ ├── http_100_continue.md
│ │ ├── http_100_continue.metatags
│ │ ├── http_100_continue.server.out
│ │ └── tests/
│ │ └── http_100_continue_test.bal
│ ├── http-2-0-client-server-push/
│ │ ├── http_2_0_client_server_push.bal
│ │ ├── http_2_0_client_server_push.md
│ │ ├── http_2_0_client_server_push.metatags
│ │ └── http_2_0_client_server_push.out
│ ├── http-2-0-server-push/
│ │ ├── http_2_0_server_push.bal
│ │ ├── http_2_0_server_push.md
│ │ ├── http_2_0_server_push.metatags
│ │ └── http_2_0_server_push.out
│ ├── http-2-prior-knowledge-client/
│ │ ├── http_2_prior_knowledge_client.bal
│ │ ├── http_2_prior_knowledge_client.md
│ │ ├── http_2_prior_knowledge_client.metatags
│ │ └── http_2_prior_knowledge_client.out
│ ├── http-2-to-1-1-downgrade-client/
│ │ ├── http_2_to_1_1_downgrade_client.bal
│ │ ├── http_2_to_1_1_downgrade_client.md
│ │ ├── http_2_to_1_1_downgrade_client.metatags
│ │ └── http_2_to_1_1_downgrade_client.out
│ ├── http-2-to-1-1-downgrade-service/
│ │ ├── http_2_to_1_1_downgrade_service.bal
│ │ ├── http_2_to_1_1_downgrade_service.client.out
│ │ ├── http_2_to_1_1_downgrade_service.md
│ │ ├── http_2_to_1_1_downgrade_service.metatags
│ │ ├── http_2_to_1_1_downgrade_service.server.out
│ │ └── tests/
│ │ └── http_2_0_to_1_1_downgrade_service_test.bal
│ ├── http-access-logs/
│ │ ├── http_access_logs.bal
│ │ ├── http_access_logs.client.out
│ │ ├── http_access_logs.md
│ │ ├── http_access_logs.metatags
│ │ └── http_access_logs.server.out
│ ├── http-basic-rest-service/
│ │ ├── http_basic_rest_service.bal
│ │ ├── http_basic_rest_service.client.1.out
│ │ ├── http_basic_rest_service.client.2.out
│ │ ├── http_basic_rest_service.md
│ │ ├── http_basic_rest_service.metatags
│ │ ├── http_basic_rest_service.server.out
│ │ └── tests/
│ │ └── http_basic_rest_service_test.bal
│ ├── http-caching-client/
│ │ ├── http_caching_client.bal
│ │ ├── http_caching_client.md
│ │ ├── http_caching_client.metatags
│ │ ├── http_caching_client.out
│ │ └── tests/
│ │ └── http_caching_client_test.bal
│ ├── http-caller/
│ │ ├── http_caller.bal
│ │ ├── http_caller.client.out
│ │ ├── http_caller.md
│ │ ├── http_caller.metatags
│ │ ├── http_caller.server.out
│ │ └── tests/
│ │ └── http_caller_test.bal
│ ├── http-circuit-breaker/
│ │ ├── http_circuit_breaker.bal
│ │ ├── http_circuit_breaker.md
│ │ ├── http_circuit_breaker.metatags
│ │ ├── http_circuit_breaker.out
│ │ └── tests/
│ │ └── http_circuit_breaker_test.bal
│ ├── http-client-basic-authentication/
│ │ ├── http_client_basic_authentication.bal
│ │ ├── http_client_basic_authentication.md
│ │ ├── http_client_basic_authentication.metatags
│ │ └── http_client_basic_authentication.out
│ ├── http-client-bearer-token-authentication/
│ │ ├── http_client_bearer_token_authentication.bal
│ │ ├── http_client_bearer_token_authentication.md
│ │ ├── http_client_bearer_token_authentication.metatags
│ │ └── http_client_bearer_token_authentication.out
│ ├── http-client-chunking/
│ │ ├── http_client_chunking.bal
│ │ ├── http_client_chunking.md
│ │ ├── http_client_chunking.metatags
│ │ ├── http_client_chunking.out
│ │ └── tests/
│ │ └── http_client_chunking_test.bal
│ ├── http-client-data-binding/
│ │ ├── http_client_data_binding.bal
│ │ ├── http_client_data_binding.md
│ │ ├── http_client_data_binding.metatags
│ │ └── http_client_data_binding.out
│ ├── http-client-file-upload/
│ │ ├── http_client_file_upload.bal
│ │ ├── http_client_file_upload.md
│ │ ├── http_client_file_upload.metatags
│ │ └── http_client_file_upload.out
│ ├── http-client-header-parameter/
│ │ ├── http_client_header_parameter.bal
│ │ ├── http_client_header_parameter.md
│ │ ├── http_client_header_parameter.metatags
│ │ ├── http_client_header_parameter.out
│ │ └── http_client_header_parameter_post.bal
│ ├── http-client-mutual-ssl/
│ │ ├── http_client_mutual_ssl.bal
│ │ ├── http_client_mutual_ssl.md
│ │ ├── http_client_mutual_ssl.metatags
│ │ └── http_client_mutual_ssl.out
│ ├── http-client-oauth2-client-credentials-grant-type/
│ │ ├── http_client_oauth2_client_credentials_grant_type.bal
│ │ ├── http_client_oauth2_client_credentials_grant_type.md
│ │ ├── http_client_oauth2_client_credentials_grant_type.metatags
│ │ └── http_client_oauth2_client_credentials_grant_type.out
│ ├── http-client-oauth2-jwt-bearer-grant-type/
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.metatags
│ │ └── http_client_oauth2_jwt_bearer_grant_type.out
│ ├── http-client-oauth2-password-grant-type/
│ │ ├── http_client_oauth2_password_grant_type.bal
│ │ ├── http_client_oauth2_password_grant_type.md
│ │ ├── http_client_oauth2_password_grant_type.metatags
│ │ └── http_client_oauth2_password_grant_type.out
│ ├── http-client-oauth2-refresh-token-grant-type/
│ │ ├── http_client_oauth2_refresh_token_grant_type.bal
│ │ ├── http_client_oauth2_refresh_token_grant_type.md
│ │ ├── http_client_oauth2_refresh_token_grant_type.metatags
│ │ └── http_client_oauth2_refresh_token_grant_type.out
│ ├── http-client-path-parameter/
│ │ ├── http_client_path_parameter.bal
│ │ ├── http_client_path_parameter.md
│ │ ├── http_client_path_parameter.metatags
│ │ └── http_client_path_parameter.out
│ ├── http-client-payload-constraint-validation/
│ │ ├── http_client_payload_constraint_validation.bal
│ │ ├── http_client_payload_constraint_validation.md
│ │ ├── http_client_payload_constraint_validation.metatags
│ │ └── http_client_payload_constraint_validation.out
│ ├── http-client-query-parameter/
│ │ ├── http_client_query_parameter.bal
│ │ ├── http_client_query_parameter.md
│ │ ├── http_client_query_parameter.metatags
│ │ ├── http_client_query_parameter.out
│ │ └── http_client_query_parameter_post.bal
│ ├── http-client-redirects/
│ │ ├── http_client_redirects.bal
│ │ ├── http_client_redirects.md
│ │ ├── http_client_redirects.metatags
│ │ ├── http_client_redirects.out
│ │ └── tests/
│ │ └── http_client_redirects_test.bal
│ ├── http-client-self-signed-jwt-authentication/
│ │ ├── http_client_self_signed_jwt_authentication.bal
│ │ ├── http_client_self_signed_jwt_authentication.md
│ │ ├── http_client_self_signed_jwt_authentication.metatags
│ │ └── http_client_self_signed_jwt_authentication.out
│ ├── http-client-send-request-receive-response/
│ │ ├── http_client_send_request_receive_response.bal
│ │ ├── http_client_send_request_receive_response.md
│ │ ├── http_client_send_request_receive_response.metatags
│ │ ├── http_client_send_request_receive_response.out
│ │ └── tests/
│ │ └── http_client_send_request_receive_response_test.bal
│ ├── http-client-ssl-tls/
│ │ ├── http_client_ssl_tls.bal
│ │ ├── http_client_ssl_tls.md
│ │ ├── http_client_ssl_tls.metatags
│ │ └── http_client_ssl_tls.out
│ ├── http-compression/
│ │ ├── http_compression.bal
│ │ ├── http_compression.client.out
│ │ ├── http_compression.md
│ │ ├── http_compression.metatags
│ │ ├── http_compression.server.out
│ │ └── tests/
│ │ └── http_compression_test.bal
│ ├── http-cookies-client/
│ │ ├── http_cookies_client.bal
│ │ ├── http_cookies_client.md
│ │ ├── http_cookies_client.metatags
│ │ └── http_cookies_client.out
│ ├── http-cookies-service/
│ │ ├── http_cookies_service.bal
│ │ ├── http_cookies_service.md
│ │ ├── http_cookies_service.metatags
│ │ └── http_cookies_service.out
│ ├── http-cors/
│ │ ├── http_cors.bal
│ │ ├── http_cors.client.out
│ │ ├── http_cors.md
│ │ ├── http_cors.metatags
│ │ ├── http_cors.server.out
│ │ └── tests/
│ │ └── http_cors_test.bal
│ ├── http-default-error-handling/
│ │ ├── http_default_error_handling.bal
│ │ ├── http_default_error_handling.client.out
│ │ ├── http_default_error_handling.md
│ │ ├── http_default_error_handling.metatags
│ │ ├── http_default_error_handling.server.out
│ │ └── tests/
│ │ └── http_default_error_handling_test.bal
│ ├── http-default-resource/
│ │ ├── http_default_resource.bal
│ │ ├── http_default_resource.client.out
│ │ ├── http_default_resource.md
│ │ ├── http_default_resource.metatags
│ │ ├── http_default_resource.server.out
│ │ └── tests/
│ │ └── http_default_resource_test.bal
│ ├── http-error-handling/
│ │ ├── http_error_handling.bal
│ │ ├── http_error_handling.client.out
│ │ ├── http_error_handling.md
│ │ ├── http_error_handling.metatags
│ │ ├── http_error_handling.server.out
│ │ └── tests/
│ │ └── http_error_handling_test.bal
│ ├── http-failover/
│ │ ├── http_failover.bal
│ │ ├── http_failover.md
│ │ ├── http_failover.metatags
│ │ ├── http_failover.out
│ │ └── tests/
│ │ └── http_failover_test.bal
│ ├── http-header-param/
│ │ ├── http_header_param.bal
│ │ ├── http_header_param.client.out
│ │ ├── http_header_param.md
│ │ ├── http_header_param.metatags
│ │ ├── http_header_param.server.out
│ │ └── tests/
│ │ └── http_header_param_test.bal
│ ├── http-interceptor-error-handling/
│ │ ├── http_interceptor_error_handling.bal
│ │ ├── http_interceptor_error_handling.client.out
│ │ ├── http_interceptor_error_handling.md
│ │ ├── http_interceptor_error_handling.metatags
│ │ ├── http_interceptor_error_handling.server.out
│ │ └── tests/
│ │ └── http_interceptor_error_handling_test.bal
│ ├── http-load-balancer/
│ │ ├── http_load_balancer.bal
│ │ ├── http_load_balancer.md
│ │ ├── http_load_balancer.metatags
│ │ ├── http_load_balancer.out
│ │ └── tests/
│ │ └── http_load_balancer_test.bal
│ ├── http-matrix-param/
│ │ ├── http_matrix_param.bal
│ │ ├── http_matrix_param.client.out
│ │ ├── http_matrix_param.md
│ │ ├── http_matrix_param.metatags
│ │ ├── http_matrix_param.server.out
│ │ └── tests/
│ │ └── http_matrix_param_test.bal
│ ├── http-passthrough/
│ │ ├── http_passthrough.bal
│ │ ├── http_passthrough.client.out
│ │ ├── http_passthrough.md
│ │ ├── http_passthrough.metatags
│ │ ├── http_passthrough.server.out
│ │ └── tests/
│ │ └── http_passthrough_test.bal
│ ├── http-path-param/
│ │ ├── http_path_param.bal
│ │ ├── http_path_param.client.out
│ │ ├── http_path_param.md
│ │ ├── http_path_param.metatags
│ │ ├── http_path_param.server.out
│ │ └── tests/
│ │ └── http_path_param_test.bal
│ ├── http-query-parameter/
│ │ ├── http_query_parameter.bal
│ │ ├── http_query_parameter.client.out
│ │ ├── http_query_parameter.md
│ │ ├── http_query_parameter.metatags
│ │ ├── http_query_parameter.server.out
│ │ └── tests/
│ │ └── http_query_parameter_test.bal
│ ├── http-request-interceptor/
│ │ ├── http_request_interceptor.bal
│ │ ├── http_request_interceptor.client.out
│ │ ├── http_request_interceptor.md
│ │ ├── http_request_interceptor.metatags
│ │ ├── http_request_interceptor.server.out
│ │ └── tests/
│ │ └── http_request_interceptor_test.bal
│ ├── http-request-response/
│ │ ├── http_request_response.bal
│ │ ├── http_request_response.client.out
│ │ ├── http_request_response.md
│ │ ├── http_request_response.metatags
│ │ ├── http_request_response.server.out
│ │ └── tests/
│ │ └── http_request_response_test.bal
│ ├── http-request-with-multiparts/
│ │ ├── files/
│ │ │ └── test.xml
│ │ ├── http_request_with_multiparts.1.client.out
│ │ ├── http_request_with_multiparts.2.client.out
│ │ ├── http_request_with_multiparts.bal
│ │ ├── http_request_with_multiparts.md
│ │ ├── http_request_with_multiparts.metatags
│ │ ├── http_request_with_multiparts.server.out
│ │ └── tests/
│ │ └── http_request_with_multiparts_test.bal
│ ├── http-response-interceptor/
│ │ ├── http_response_interceptor.bal
│ │ ├── http_response_interceptor.client.out
│ │ ├── http_response_interceptor.md
│ │ ├── http_response_interceptor.metatags
│ │ ├── http_response_interceptor.server.out
│ │ └── tests/
│ │ └── http_response_interceptor_test.bal
│ ├── http-response-with-multiparts/
│ │ ├── files/
│ │ │ └── test.xml
│ │ ├── http_response_with_multiparts.1.client.out
│ │ ├── http_response_with_multiparts.2.client.out
│ │ ├── http_response_with_multiparts.bal
│ │ ├── http_response_with_multiparts.md
│ │ ├── http_response_with_multiparts.metatags
│ │ ├── http_response_with_multiparts.server.out
│ │ └── tests/
│ │ └── http_response_with_multiparts_test.bal
│ ├── http-restrict-by-media-type/
│ │ ├── http_restrict_by_media_type.bal
│ │ ├── http_restrict_by_media_type.client.out
│ │ ├── http_restrict_by_media_type.md
│ │ ├── http_restrict_by_media_type.metatags
│ │ ├── http_restrict_by_media_type.server.out
│ │ └── tests/
│ │ └── http_restrict_by_media_type_test.bal
│ ├── http-retry/
│ │ ├── http_retry.bal
│ │ ├── http_retry.md
│ │ ├── http_retry.metatags
│ │ ├── http_retry.out
│ │ └── tests/
│ │ └── http_retry_test.bal
│ ├── http-send-different-status-codes/
│ │ ├── http_send_different_status_codes.bal
│ │ ├── http_send_different_status_codes.client.out
│ │ ├── http_send_different_status_codes.md
│ │ ├── http_send_different_status_codes.metatags
│ │ ├── http_send_different_status_codes.server.out
│ │ └── tests/
│ │ └── http_send_different_status_codes_test.bal
│ ├── http-send-different-status-codes-with-payload/
│ │ ├── http_send_different_status_codes_with_payload.bal
│ │ ├── http_send_different_status_codes_with_payload.client.out
│ │ ├── http_send_different_status_codes_with_payload.md
│ │ ├── http_send_different_status_codes_with_payload.metatags
│ │ ├── http_send_different_status_codes_with_payload.server.out
│ │ └── tests/
│ │ └── http_send_different_status_codes_with_payload_test.bal
│ ├── http-send-header/
│ │ ├── http_send_header.bal
│ │ ├── http_send_header.client.out
│ │ ├── http_send_header.md
│ │ ├── http_send_header.metatags
│ │ ├── http_send_header.server.out
│ │ └── tests/
│ │ └── http_send_header_test.bal
│ ├── http-send-response/
│ │ ├── http_send_response.bal
│ │ ├── http_send_response.client.out
│ │ ├── http_send_response.md
│ │ ├── http_send_response.metatags
│ │ ├── http_send_response.server.out
│ │ └── tests/
│ │ └── http_send_response_test.bal
│ ├── http-service-and-resource-paths/
│ │ ├── http_service_and_resource_paths.bal
│ │ ├── http_service_and_resource_paths.client.out
│ │ ├── http_service_and_resource_paths.md
│ │ ├── http_service_and_resource_paths.metatags
│ │ ├── http_service_and_resource_paths.server.out
│ │ └── tests/
│ │ └── http_service_and_resource_paths_test.bal
│ ├── http-service-basic-authentication-file-user-store/
│ │ ├── http_service_basic_authentication_file_user_store.bal
│ │ ├── http_service_basic_authentication_file_user_store.md
│ │ ├── http_service_basic_authentication_file_user_store.metatags
│ │ └── http_service_basic_authentication_file_user_store.server.out
│ ├── http-service-basic-authentication-ldap-user-store/
│ │ ├── http_service_basic_authentication_ldap_user_store.bal
│ │ ├── http_service_basic_authentication_ldap_user_store.md
│ │ ├── http_service_basic_authentication_ldap_user_store.metatags
│ │ └── http_service_basic_authentication_ldap_user_store.server.out
│ ├── http-service-cache-response/
│ │ ├── http_service_cache_response.bal
│ │ ├── http_service_cache_response.md
│ │ ├── http_service_cache_response.metatags
│ │ ├── http_service_cache_response.server.out
│ │ └── tests/
│ │ └── http_service_cache_response_test.bal
│ ├── http-service-chunking/
│ │ ├── http_service_chunking.bal
│ │ ├── http_service_chunking.client.out
│ │ ├── http_service_chunking.md
│ │ ├── http_service_chunking.metatags
│ │ ├── http_service_chunking.server.out
│ │ └── tests/
│ │ └── http_service_chunking_test.bal
│ ├── http-service-data-binding/
│ │ ├── http_service_data_binding.bal
│ │ ├── http_service_data_binding.client.out
│ │ ├── http_service_data_binding.md
│ │ ├── http_service_data_binding.metatags
│ │ ├── http_service_data_binding.server.out
│ │ └── tests/
│ │ └── http_service_data_binding_test.bal
│ ├── http-service-file-upload/
│ │ ├── http_service_file_upload.bal
│ │ ├── http_service_file_upload.md
│ │ ├── http_service_file_upload.metatags
│ │ └── http_service_file_upload.server.out
│ ├── http-service-jwt-authentication/
│ │ ├── http_service_jwt_authentication.bal
│ │ ├── http_service_jwt_authentication.md
│ │ ├── http_service_jwt_authentication.metatags
│ │ └── http_service_jwt_authentication.server.out
│ ├── http-service-mutual-ssl/
│ │ ├── http_service_mutual_ssl.bal
│ │ ├── http_service_mutual_ssl.client.out
│ │ ├── http_service_mutual_ssl.md
│ │ ├── http_service_mutual_ssl.metatags
│ │ └── http_service_mutual_ssl.server.out
│ ├── http-service-oauth2/
│ │ ├── http_service_oauth2.bal
│ │ ├── http_service_oauth2.md
│ │ ├── http_service_oauth2.metatags
│ │ └── http_service_oauth2.server.out
│ ├── http-service-payload-constraint-validation/
│ │ ├── http_service_payload_constraint_validation.bal
│ │ ├── http_service_payload_constraint_validation.client.out
│ │ ├── http_service_payload_constraint_validation.md
│ │ ├── http_service_payload_constraint_validation.metatags
│ │ ├── http_service_payload_constraint_validation.server.out
│ │ └── tests/
│ │ └── http_service_payload_constraint_validation.bal
│ ├── http-service-redirects/
│ │ ├── http_service_redirects.bal
│ │ ├── http_service_redirects.client.out
│ │ ├── http_service_redirects.md
│ │ ├── http_service_redirects.metatags
│ │ ├── http_service_redirects.server.out
│ │ └── tests/
│ │ └── http_service_redirects_test.bal
│ ├── http-service-ssl-tls/
│ │ ├── http_service_ssl_tls.bal
│ │ ├── http_service_ssl_tls.client.out
│ │ ├── http_service_ssl_tls.md
│ │ ├── http_service_ssl_tls.metatags
│ │ └── http_service_ssl_tls.server.out
│ ├── http-sse-client/
│ │ ├── http_sse_client.bal
│ │ ├── http_sse_client.client.out
│ │ ├── http_sse_client.md
│ │ └── http_sse_client.metatags
│ ├── http-sse-service/
│ │ ├── http_sse_service.bal
│ │ ├── http_sse_service.client.out
│ │ ├── http_sse_service.md
│ │ ├── http_sse_service.metatags
│ │ └── http_sse_service.server.out
│ ├── http-timeout/
│ │ ├── http_timeout.bal
│ │ ├── http_timeout.md
│ │ ├── http_timeout.metatags
│ │ ├── http_timeout.out
│ │ └── tests/
│ │ └── http_timeout_test.bal
│ ├── http-trace-logs/
│ │ ├── http_trace_logs.bal
│ │ ├── http_trace_logs.client.out
│ │ ├── http_trace_logs.md
│ │ ├── http_trace_logs.metatags
│ │ └── http_trace_logs.server.out
│ ├── identifiers/
│ │ ├── identifiers.bal
│ │ ├── identifiers.md
│ │ ├── identifiers.metatags
│ │ └── identifiers.out
│ ├── identity/
│ │ ├── identity.bal
│ │ ├── identity.md
│ │ ├── identity.metatags
│ │ └── identity.out
│ ├── if-statement/
│ │ ├── if_statement.bal
│ │ ├── if_statement.md
│ │ ├── if_statement.metatags
│ │ └── if_statement.out
│ ├── ignoring-return-values-and-errors/
│ │ ├── ignoring_return_values_and_errors.bal
│ │ ├── ignoring_return_values_and_errors.md
│ │ ├── ignoring_return_values_and_errors.metatags
│ │ └── ignoring_return_values_and_errors.out
│ ├── immutability/
│ │ ├── immutability.bal
│ │ ├── immutability.md
│ │ ├── immutability.metatags
│ │ └── immutability.out
│ ├── in-memory-message-store/
│ │ ├── in_memory_message_store.bal
│ │ ├── in_memory_message_store.md
│ │ ├── in_memory_message_store.metatags
│ │ └── in_memory_message_store.out
│ ├── included-record-parameters/
│ │ ├── included_record_parameters.bal
│ │ ├── included_record_parameters.md
│ │ ├── included_record_parameters.metatags
│ │ └── included_record_parameters.out
│ ├── index.json
│ ├── inferring-isolated/
│ │ ├── inferring_isolated.bal
│ │ ├── inferring_isolated.md
│ │ ├── inferring_isolated.metatags
│ │ └── inferring_isolated.out
│ ├── init-function/
│ │ ├── init_function.bal
│ │ ├── init_function.md
│ │ ├── init_function.metatags
│ │ └── init_function.out
│ ├── init-return-type/
│ │ ├── init_return_type.bal
│ │ ├── init_return_type.md
│ │ ├── init_return_type.metatags
│ │ └── init_return_type.out
│ ├── int-range/
│ │ ├── int_range.bal
│ │ ├── int_range.md
│ │ ├── int_range.metatags
│ │ └── int_range.out
│ ├── integers/
│ │ ├── integers.bal
│ │ ├── integers.md
│ │ ├── integers.metatags
│ │ └── integers.out
│ ├── inter-worker-failure-propagation/
│ │ ├── inter_worker_failure_propagation.bal
│ │ ├── inter_worker_failure_propagation.md
│ │ ├── inter_worker_failure_propagation.metatags
│ │ └── inter_worker_failure_propagation.out
│ ├── inter-worker-message-passing/
│ │ ├── inter_worker_message_passing.bal
│ │ ├── inter_worker_message_passing.md
│ │ ├── inter_worker_message_passing.metatags
│ │ └── inter_worker_message_passing.out
│ ├── interface-to-external-code/
│ │ ├── interface_to_external_code.bal
│ │ ├── interface_to_external_code.md
│ │ ├── interface_to_external_code.metatags
│ │ └── interface_to_external_code.out
│ ├── io-bytes/
│ │ ├── io_bytes.bal
│ │ ├── io_bytes.md
│ │ ├── io_bytes.metatags
│ │ └── io_bytes.out
│ ├── io-csv/
│ │ ├── io_csv.bal
│ │ ├── io_csv.md
│ │ ├── io_csv.metatags
│ │ └── io_csv.out
│ ├── io-csv-datamapping/
│ │ ├── io_csv_datamapping.bal
│ │ ├── io_csv_datamapping.md
│ │ ├── io_csv_datamapping.metatags
│ │ └── io_csv_datamapping.out
│ ├── io-json/
│ │ ├── io_json.bal
│ │ ├── io_json.md
│ │ ├── io_json.metatags
│ │ └── io_json.out
│ ├── io-strings/
│ │ ├── io_strings.bal
│ │ ├── io_strings.md
│ │ ├── io_strings.metatags
│ │ └── io_strings.out
│ ├── io-xml/
│ │ ├── io_xml.bal
│ │ ├── io_xml.md
│ │ ├── io_xml.metatags
│ │ └── io_xml.out
│ ├── isolated-functions/
│ │ ├── isolated_functions.bal
│ │ ├── isolated_functions.md
│ │ ├── isolated_functions.metatags
│ │ └── isolated_functions.out
│ ├── isolated-methods/
│ │ ├── isolated_methods.bal
│ │ ├── isolated_methods.md
│ │ ├── isolated_methods.metatags
│ │ └── isolated_methods.out
│ ├── isolated-objects/
│ │ ├── isolated_objects.bal
│ │ ├── isolated_objects.md
│ │ ├── isolated_objects.metatags
│ │ └── isolated_objects.out
│ ├── isolated-variables/
│ │ ├── isolated_variables.bal
│ │ ├── isolated_variables.md
│ │ ├── isolated_variables.metatags
│ │ └── isolated_variables.out
│ ├── iterating-over-xml-with-query/
│ │ ├── iterating_over_xml_with_query.bal
│ │ ├── iterating_over_xml_with_query.md
│ │ ├── iterating_over_xml_with_query.metatags
│ │ └── iterating_over_xml_with_query.out
│ ├── iterative-use-of-typed-binding/
│ │ ├── iterative_use_of_typed_binding.bal
│ │ ├── iterative_use_of_typed_binding.md
│ │ ├── iterative_use_of_typed_binding.metatags
│ │ └── iterative_use_of_typed_binding.out
│ ├── jdbc-atomic-transaction/
│ │ └── jdbc_atomic_transaction.out
│ ├── jms-consumer-acknowledgement/
│ │ ├── jms_consumer_acknowledgement.bal
│ │ ├── jms_consumer_acknowledgement.md
│ │ ├── jms_consumer_acknowledgement.metatags
│ │ └── jms_consumer_acknowledgement.out
│ ├── jms-consumer-consume-message/
│ │ ├── jms_consumer_consume_message.bal
│ │ ├── jms_consumer_consume_message.md
│ │ ├── jms_consumer_consume_message.metatags
│ │ └── jms_consumer_consume_message.out
│ ├── jms-producer-produce-message/
│ │ ├── jms_producer_produce_message.bal
│ │ ├── jms_producer_produce_message.curl.out
│ │ ├── jms_producer_produce_message.md
│ │ ├── jms_producer_produce_message.metatags
│ │ └── jms_producer_produce_message.out
│ ├── jms-producer-transaction/
│ │ ├── jms_producer_transaction.bal
│ │ ├── jms_producer_transaction.curl.out
│ │ ├── jms_producer_transaction.md
│ │ ├── jms_producer_transaction.metatags
│ │ └── jms_producer_transaction.out
│ ├── jms-service-consume-message/
│ │ ├── jms_service_consume_message.bal
│ │ ├── jms_service_consume_message.md
│ │ ├── jms_service_consume_message.metatags
│ │ └── jms_service_consume_message.out
│ ├── joining-iterable-objects/
│ │ ├── joining_iterable_objects.bal
│ │ ├── joining_iterable_objects.md
│ │ ├── joining_iterable_objects.metatags
│ │ └── joining_iterable_objects.out
│ ├── json-numbers/
│ │ ├── json_numbers.bal
│ │ ├── json_numbers.md
│ │ ├── json_numbers.metatags
│ │ └── json_numbers.out
│ ├── json-to-record/
│ │ ├── json_to_record.bal
│ │ ├── json_to_record.md
│ │ ├── json_to_record.metatags
│ │ └── json_to_record.out
│ ├── json-to-record-with-projection/
│ │ ├── json_to_record_with_projection.bal
│ │ ├── json_to_record_with_projection.md
│ │ ├── json_to_record_with_projection.metatags
│ │ └── json_to_record_with_projection.out
│ ├── json-type/
│ │ ├── json_type.bal
│ │ ├── json_type.md
│ │ ├── json_type.metatags
│ │ └── json_type.out
│ ├── jsonpath-expressions/
│ │ ├── jsonpath_expressions.bal
│ │ ├── jsonpath_expressions.md
│ │ ├── jsonpath_expressions.metatags
│ │ └── jsonpath_expressions.out
│ ├── kafka-consumer-constraint-validation/
│ │ ├── kafka_consumer_constraint_validation.bal
│ │ ├── kafka_consumer_constraint_validation.md
│ │ ├── kafka_consumer_constraint_validation.metatags
│ │ └── kafka_consumer_constraint_validation.out
│ ├── kafka-consumer-consumer-record-data-binding/
│ │ ├── kafka_consumer_consumer_record_data_binding.bal
│ │ ├── kafka_consumer_consumer_record_data_binding.md
│ │ ├── kafka_consumer_consumer_record_data_binding.metatags
│ │ └── kafka_consumer_consumer_record_data_binding.out
│ ├── kafka-consumer-payload-data-binding/
│ │ ├── kafka_consumer_payload_data_binding.bal
│ │ ├── kafka_consumer_payload_data_binding.md
│ │ ├── kafka_consumer_payload_data_binding.metatags
│ │ └── kafka_consumer_payload_data_binding.out
│ ├── kafka-consumer-sasl/
│ │ ├── kafka_consumer_sasl.bal
│ │ ├── kafka_consumer_sasl.md
│ │ ├── kafka_consumer_sasl.metatags
│ │ └── kafka_consumer_sasl.out
│ ├── kafka-consumer-ssl/
│ │ ├── kafka_consumer_ssl.bal
│ │ ├── kafka_consumer_ssl.md
│ │ ├── kafka_consumer_ssl.metatags
│ │ └── kafka_consumer_ssl.out
│ ├── kafka-producer-produce-message/
│ │ ├── kafka_producer_produce_message.bal
│ │ ├── kafka_producer_produce_message.curl.out
│ │ ├── kafka_producer_produce_message.md
│ │ ├── kafka_producer_produce_message.metatags
│ │ └── kafka_producer_produce_message.out
│ ├── kafka-producer-sasl/
│ │ ├── kafka_producer_sasl.bal
│ │ ├── kafka_producer_sasl.curl.out
│ │ ├── kafka_producer_sasl.md
│ │ ├── kafka_producer_sasl.metatags
│ │ └── kafka_producer_sasl.out
│ ├── kafka-producer-ssl/
│ │ ├── kafka_producer_ssl.bal
│ │ ├── kafka_producer_ssl.curl.out
│ │ ├── kafka_producer_ssl.md
│ │ ├── kafka_producer_ssl.metatags
│ │ └── kafka_producer_ssl.out
│ ├── kafka-service-constraint-validation/
│ │ ├── kafka_service_constraint_validation.bal
│ │ ├── kafka_service_constraint_validation.md
│ │ ├── kafka_service_constraint_validation.metatags
│ │ └── kafka_service_constraint_validation.out
│ ├── kafka-service-consume-message/
│ │ ├── kafka_service_consume_message.bal
│ │ ├── kafka_service_consume_message.md
│ │ ├── kafka_service_consume_message.metatags
│ │ └── kafka_service_consume_message.out
│ ├── kafka-service-error-handling/
│ │ ├── kafka_service_error_handling.bal
│ │ ├── kafka_service_error_handling.md
│ │ ├── kafka_service_error_handling.metatags
│ │ └── kafka_service_error_handling.out
│ ├── kafka-service-sasl/
│ │ ├── kafka_service_sasl.bal
│ │ ├── kafka_service_sasl.md
│ │ ├── kafka_service_sasl.metatags
│ │ └── kafka_service_sasl.out
│ ├── kafka-service-ssl/
│ │ ├── kafka_service_ssl.bal
│ │ ├── kafka_service_ssl.md
│ │ ├── kafka_service_ssl.metatags
│ │ └── kafka_service_ssl.out
│ ├── kubernetes-hello-world/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── docker_push.out
│ │ ├── execute_curl.out
│ │ ├── kubectl_apply.out
│ │ ├── kubectl_expose.out
│ │ ├── kubectl_pods.out
│ │ ├── kubectl_svc.out
│ │ ├── kubernetes_hello_world.bal
│ │ ├── kubernetes_hello_world.md
│ │ └── minikube_ip.out
│ ├── langlib-functions/
│ │ ├── langlib_functions.bal
│ │ ├── langlib_functions.md
│ │ ├── langlib_functions.metatags
│ │ └── langlib_functions.out
│ ├── ldap-add-remove-entry/
│ │ ├── ldap_add_remove_entry.bal
│ │ ├── ldap_add_remove_entry.md
│ │ ├── ldap_add_remove_entry.metatags
│ │ └── ldap_add_remove_entry.server.out
│ ├── ldap-search-entry/
│ │ ├── ldap_search_entry.bal
│ │ ├── ldap_search_entry.md
│ │ ├── ldap_search_entry.metatags
│ │ └── ldap_search_entry.server.out
│ ├── let-clause/
│ │ ├── let_clause.bal
│ │ ├── let_clause.md
│ │ ├── let_clause.metatags
│ │ └── let_clause.out
│ ├── limit-clause/
│ │ ├── limit_clause.bal
│ │ ├── limit_clause.md
│ │ ├── limit_clause.metatags
│ │ └── limit_clause.out
│ ├── list-binding-pattern/
│ │ ├── list_binding_pattern.bal
│ │ ├── list_binding_pattern.md
│ │ ├── list_binding_pattern.metatags
│ │ └── list_binding_pattern.out
│ ├── list-binding-pattern-in-match-statement/
│ │ ├── list_binding_pattern_in_match_statement.bal
│ │ ├── list_binding_pattern_in_match_statement.md
│ │ ├── list_binding_pattern_in_match_statement.metatags
│ │ └── list_binding_pattern_in_match_statement.out
│ ├── list-equality/
│ │ ├── list_equality.bal
│ │ ├── list_equality.md
│ │ ├── list_equality.metatags
│ │ └── list_equality.out
│ ├── list-subtyping/
│ │ ├── list_subtyping.bal
│ │ ├── list_subtyping.md
│ │ ├── list_subtyping.metatags
│ │ └── list_subtyping.out
│ ├── lock-statement/
│ │ ├── lock_statement.bal
│ │ ├── lock_statement.md
│ │ ├── lock_statement.metatags
│ │ └── lock_statement.out
│ ├── log-file-rotation/
│ │ ├── app_log_rotation.out
│ │ ├── log_file_rotation.bal
│ │ ├── log_file_rotation.md
│ │ ├── log_file_rotation.metatags
│ │ └── log_file_rotation.out
│ ├── logger-from-config/
│ │ ├── audit_logs.out
│ │ ├── logger_from_config.bal
│ │ ├── logger_from_config.md
│ │ ├── logger_from_config.metatags
│ │ ├── logger_from_config.out
│ │ └── metrics_logs.out
│ ├── logging/
│ │ ├── logging.bal
│ │ ├── logging.md
│ │ ├── logging.metatags
│ │ ├── logging.out
│ │ └── tests/
│ │ └── log_api_test.bal
│ ├── logging-configuration/
│ │ ├── ModuleConfig.toml
│ │ ├── logging_configuration.bal
│ │ ├── logging_configuration.md
│ │ ├── logging_configuration.metatags
│ │ └── logging_configuration.out
│ ├── logging-with-context/
│ │ ├── logging_with_context.bal
│ │ ├── logging_with_context.md
│ │ ├── logging_with_context.metatags
│ │ └── logging_with_context.out
│ ├── main-function/
│ │ ├── main_function.bal
│ │ ├── main_function.md
│ │ ├── main_function.metatags
│ │ └── main_function.out
│ ├── manage-scheduled-jobs/
│ │ ├── manage_scheduled_jobs.bal
│ │ ├── manage_scheduled_jobs.md
│ │ ├── manage_scheduled_jobs.metatags
│ │ └── manage_scheduled_jobs.out
│ ├── mapping-binding-pattern/
│ │ ├── mapping_binding_pattern.bal
│ │ ├── mapping_binding_pattern.md
│ │ ├── mapping_binding_pattern.metatags
│ │ └── mapping_binding_pattern.out
│ ├── mapping-binding-pattern-in-match-statement/
│ │ ├── mapping_binding_pattern_in_match_statement.bal
│ │ ├── mapping_binding_pattern_in_match_statement.md
│ │ ├── mapping_binding_pattern_in_match_statement.metatags
│ │ └── mapping_binding_pattern_in_match_statement.out
│ ├── maps/
│ │ ├── maps.bal
│ │ ├── maps.md
│ │ ├── maps.metatags
│ │ └── maps.out
│ ├── match-guard-in-match-statement/
│ │ ├── match_guard_in_match_statement.bal
│ │ ├── match_guard_in_match_statement.md
│ │ ├── match_guard_in_match_statement.metatags
│ │ └── match_guard_in_match_statement.out
│ ├── match-statement/
│ │ ├── match_statement.bal
│ │ ├── match_statement.md
│ │ ├── match_statement.metatags
│ │ └── match_statement.out
│ ├── match-statement-with-maps/
│ │ ├── match_statement_with_maps.bal
│ │ ├── match_statement_with_maps.md
│ │ ├── match_statement_with_maps.metatags
│ │ └── match_statement_with_maps.out
│ ├── mcp-service/
│ │ ├── mcp_service.bal
│ │ ├── mcp_service.md
│ │ ├── mcp_service.metatags
│ │ └── mcp_service.out
│ ├── mcp-service-advanced/
│ │ ├── mcp_service_advanced.bal
│ │ ├── mcp_service_advanced.md
│ │ ├── mcp_service_advanced.metatags
│ │ └── mcp_service_advanced.out
│ ├── message-store-listener/
│ │ ├── message_store_listener.bal
│ │ ├── message_store_listener.md
│ │ ├── message_store_listener.metatags
│ │ └── message_store_listener.out
│ ├── message-store-type/
│ │ ├── message_store_type.bal
│ │ ├── message_store_type.md
│ │ ├── message_store_type.metatags
│ │ └── message_store_type.out
│ ├── meta.json
│ ├── module-lifecycle/
│ │ ├── module_lifecycle.bal
│ │ ├── module_lifecycle.md
│ │ ├── module_lifecycle.metatags
│ │ └── module_lifecycle.out
│ ├── mqtt-client-basic-authentication/
│ │ ├── mqtt_client_basic_authentication.bal
│ │ ├── mqtt_client_basic_authentication.curl.out
│ │ ├── mqtt_client_basic_authentication.md
│ │ ├── mqtt_client_basic_authentication.metatags
│ │ └── mqtt_client_basic_authentication.out
│ ├── mqtt-client-publish-message/
│ │ ├── mqtt_client_publish_message.bal
│ │ ├── mqtt_client_publish_message.curl.out
│ │ ├── mqtt_client_publish_message.md
│ │ ├── mqtt_client_publish_message.metatags
│ │ └── mqtt_client_publish_message.out
│ ├── mqtt-client-ssl/
│ │ ├── mqtt_client_ssl.bal
│ │ ├── mqtt_client_ssl.curl.out
│ │ ├── mqtt_client_ssl.md
│ │ ├── mqtt_client_ssl.metatags
│ │ └── mqtt_client_ssl.out
│ ├── mqtt-service-basic-authentication/
│ │ ├── mqtt_service_basic_authentication.bal
│ │ ├── mqtt_service_basic_authentication.md
│ │ ├── mqtt_service_basic_authentication.metatags
│ │ └── mqtt_service_basic_authentication.out
│ ├── mqtt-service-ssl/
│ │ ├── mqtt_service_ssl.bal
│ │ ├── mqtt_service_ssl.md
│ │ ├── mqtt_service_ssl.metatags
│ │ └── mqtt_service_ssl.out
│ ├── mqtt-service-subscribe-message/
│ │ ├── mqtt_service_subscribe_message.bal
│ │ ├── mqtt_service_subscribe_message.md
│ │ ├── mqtt_service_subscribe_message.metatags
│ │ └── mqtt_service_subscribe_message.out
│ ├── multiple-key-fields/
│ │ ├── multiple_key_fields.bal
│ │ ├── multiple_key_fields.md
│ │ ├── multiple_key_fields.metatags
│ │ └── multiple_key_fields.out
│ ├── multiple-receive/
│ │ ├── multiple_receive.bal
│ │ ├── multiple_receive.md
│ │ ├── multiple_receive.metatags
│ │ └── multiple_receive.out
│ ├── multiple-wait/
│ │ ├── multiple_wait.bal
│ │ ├── multiple_wait.md
│ │ ├── multiple_wait.metatags
│ │ └── multiple_wait.out
│ ├── mysql-atomic-transaction/
│ │ ├── mysql_atomic_transaction.bal
│ │ ├── mysql_atomic_transaction.client.out
│ │ ├── mysql_atomic_transaction.md
│ │ ├── mysql_atomic_transaction.metatags
│ │ ├── mysql_atomic_transaction.server.out
│ │ └── mysql_atomic_xa_transaction.bal
│ ├── mysql-batch-execute-operation/
│ │ ├── mysql_batch_execute_operation.bal
│ │ ├── mysql_batch_execute_operation.client.out
│ │ ├── mysql_batch_execute_operation.md
│ │ ├── mysql_batch_execute_operation.metatags
│ │ └── mysql_batch_execute_operation.server.out
│ ├── mysql-call-stored-procedures/
│ │ ├── mysql_call_stored_procedures.bal
│ │ ├── mysql_call_stored_procedures.client.out
│ │ ├── mysql_call_stored_procedures.md
│ │ ├── mysql_call_stored_procedures.metatags
│ │ └── mysql_call_stored_procedures.server.out
│ ├── mysql-execute-operation/
│ │ ├── mysql_execute_operation.bal
│ │ ├── mysql_execute_operation.client.out
│ │ ├── mysql_execute_operation.md
│ │ ├── mysql_execute_operation.metatags
│ │ └── mysql_execute_operation.server.out
│ ├── mysql-prerequisite/
│ │ ├── README.md
│ │ ├── create_stored_procedure.bal
│ │ └── setup_database.bal
│ ├── mysql-query-column-mapping/
│ │ ├── mysql_query_column_mapping.bal
│ │ ├── mysql_query_column_mapping.client.out
│ │ ├── mysql_query_column_mapping.md
│ │ ├── mysql_query_column_mapping.metatags
│ │ └── mysql_query_column_mapping.server.out
│ ├── mysql-query-operation/
│ │ ├── mysql_query_operation.md
│ │ ├── mysql_query_operation.metatags
│ │ ├── mysql_simple_query.bal
│ │ ├── mysql_simple_query.client.out
│ │ └── mysql_simple_query.server.out
│ ├── mysql-query-row-operation/
│ │ ├── mysql_query_row.bal
│ │ ├── mysql_query_row.client.out
│ │ ├── mysql_query_row.server.out
│ │ ├── mysql_query_row_operation.md
│ │ └── mysql_query_row_operation.metatags
│ ├── named-worker-return-values/
│ │ ├── named_worker_return_values.bal
│ │ ├── named_worker_return_values.md
│ │ ├── named_worker_return_values.metatags
│ │ └── named_worker_return_values.out
│ ├── named-worker-with-on-fail-clause/
│ │ ├── named_worker_with_on_fail_clause.bal
│ │ ├── named_worker_with_on_fail_clause.md
│ │ ├── named_worker_with_on_fail_clause.metatags
│ │ └── named_worker_with_on_fail_clause.out
│ ├── named-workers/
│ │ ├── named_workers.bal
│ │ ├── named_workers.md
│ │ ├── named_workers.metatags
│ │ └── named_workers.out
│ ├── named-workers-and-futures/
│ │ ├── named_workers_and_futures.bal
│ │ ├── named_workers_and_futures.md
│ │ ├── named_workers_and_futures.metatags
│ │ └── named_workers_and_futures.out
│ ├── nats-basic-pub/
│ │ ├── nats_basic_pub.bal
│ │ ├── nats_basic_pub.client.out
│ │ ├── nats_basic_pub.md
│ │ ├── nats_basic_pub.metatags
│ │ └── nats_basic_pub.server.out
│ ├── nats-basic-reply/
│ │ ├── nats_basic_reply.bal
│ │ ├── nats_basic_reply.md
│ │ ├── nats_basic_reply.metatags
│ │ └── nats_basic_reply.out
│ ├── nats-basic-request/
│ │ ├── nats_basic_request.bal
│ │ ├── nats_basic_request.client.out
│ │ ├── nats_basic_request.md
│ │ ├── nats_basic_request.metatags
│ │ └── nats_basic_request.server.out
│ ├── nats-basic-sub/
│ │ ├── nats_basic_sub.bal
│ │ ├── nats_basic_sub.md
│ │ ├── nats_basic_sub.metatags
│ │ └── nats_basic_sub.out
│ ├── nats-client-basic-auth/
│ │ ├── nats_client_basic_auth.bal
│ │ ├── nats_client_basic_auth.client.out
│ │ ├── nats_client_basic_auth.md
│ │ ├── nats_client_basic_auth.metatags
│ │ └── nats_client_basic_auth.server.out
│ ├── nats-client-secure-connection/
│ │ ├── nats_client_secure_connection.bal
│ │ ├── nats_client_secure_connection.client.out
│ │ ├── nats_client_secure_connection.md
│ │ ├── nats_client_secure_connection.metatags
│ │ └── nats_client_secure_connection.server.out
│ ├── nats-jetstream-pub/
│ │ ├── nats_jetstream_pub.bal
│ │ ├── nats_jetstream_pub.client.out
│ │ ├── nats_jetstream_pub.md
│ │ ├── nats_jetstream_pub.metatags
│ │ └── nats_jetstream_pub.server.out
│ ├── nats-jetstream-sub/
│ │ ├── nats_jestream_sub.bal
│ │ ├── nats_jestream_sub.md
│ │ ├── nats_jestream_sub.metatags
│ │ └── nats_jestream_sub.out
│ ├── nats-service-basic-auth/
│ │ ├── nats_service_basic_auth.bal
│ │ ├── nats_service_basic_auth.md
│ │ ├── nats_service_basic_auth.metatags
│ │ └── nats_service_basic_auth.out
│ ├── nats-service-constraint-validation/
│ │ ├── nats_service_constraint_validation.bal
│ │ ├── nats_service_constraint_validation.md
│ │ ├── nats_service_constraint_validation.metatags
│ │ └── nats_service_constraint_validation.out
│ ├── nats-service-secure-connection/
│ │ ├── nats_service_secure_connection.bal
│ │ ├── nats_service_secure_connection.md
│ │ ├── nats_service_secure_connection.metatags
│ │ └── nats_service_secure_connection.out
│ ├── natural-expressions/
│ │ ├── natural_expressions.bal
│ │ ├── natural_expressions.md
│ │ ├── natural_expressions.metatags
│ │ └── natural_expressions.out
│ ├── nested-arrays/
│ │ ├── nested_arrays.bal
│ │ ├── nested_arrays.md
│ │ ├── nested_arrays.metatags
│ │ └── nested_arrays.out
│ ├── nested-query-expressions/
│ │ ├── nested_query_expressions.bal
│ │ ├── nested_query_expressions.md
│ │ ├── nested_query_expressions.metatags
│ │ └── nested_query_expressions.out
│ ├── never-type/
│ │ ├── never_type.bal
│ │ ├── never_type.md
│ │ ├── never_type.metatags
│ │ └── never_type.out
│ ├── nil/
│ │ ├── nil.bal
│ │ ├── nil.md
│ │ ├── nil.metatags
│ │ └── nil.out
│ ├── object/
│ │ ├── object.bal
│ │ ├── object.md
│ │ ├── object.metatags
│ │ └── object.out
│ ├── object-closure/
│ │ ├── object_closure.bal
│ │ ├── object_closure.md
│ │ ├── object_closure.metatags
│ │ └── object_closure.out
│ ├── object-constructor/
│ │ ├── object_constructor.bal
│ │ ├── object_constructor.md
│ │ ├── object_constructor.metatags
│ │ └── object_constructor.out
│ ├── object-type-inclusion/
│ │ ├── object_type_inclusion.bal
│ │ ├── object_type_inclusion.md
│ │ ├── object_type_inclusion.metatags
│ │ └── object_type_inclusion.out
│ ├── object-types/
│ │ ├── object_types.bal
│ │ ├── object_types.md
│ │ ├── object_types.metatags
│ │ └── object_types.out
│ ├── object-value-from-class-definition/
│ │ ├── object_value_from_class_definition.bal
│ │ ├── object_value_from_class_definition.md
│ │ ├── object_value_from_class_definition.metatags
│ │ └── object_value_from_class_definition.out
│ ├── on-conflict-clause/
│ │ ├── on_conflict_clause.bal
│ │ ├── on_conflict_clause.md
│ │ ├── on_conflict_clause.metatags
│ │ └── on_conflict_clause.out
│ ├── open-records/
│ │ ├── open_records.bal
│ │ ├── open_records.md
│ │ ├── open_records.metatags
│ │ └── open_records.out
│ ├── optional-fields/
│ │ ├── optional_fields.bal
│ │ ├── optional_fields.md
│ │ ├── optional_fields.metatags
│ │ └── optional_fields.out
│ ├── outer-join-clause/
│ │ ├── outer_join_clause.bal
│ │ ├── outer_join_clause.md
│ │ ├── outer_join_clause.metatags
│ │ └── outer_join_clause.out
│ ├── panics/
│ │ ├── panics.bal
│ │ ├── panics.md
│ │ ├── panics.metatags
│ │ └── panics.out
│ ├── parse-csv-lists/
│ │ ├── parse_csv_lists.bal
│ │ ├── parse_csv_lists.md
│ │ ├── parse_csv_lists.metatags
│ │ └── parse_csv_lists.out
│ ├── persist-create/
│ │ ├── persist_create.bal
│ │ ├── persist_create.md
│ │ ├── persist_create.metatags
│ │ ├── persist_create.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-delete/
│ │ ├── persist_create.metatags
│ │ ├── persist_delete.bal
│ │ ├── persist_delete.md
│ │ ├── persist_delete.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-filtering/
│ │ ├── persist_filtering.bal
│ │ ├── persist_filtering.md
│ │ ├── persist_filtering.metatags
│ │ ├── persist_filtering.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-get-all/
│ │ ├── persist_generate.out
│ │ ├── persist_get_all.bal
│ │ ├── persist_get_all.md
│ │ ├── persist_get_all.metatags
│ │ ├── persist_get_all.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-get-by-key/
│ │ ├── persist_generate.out
│ │ ├── persist_get_by_key.bal
│ │ ├── persist_get_by_key.md
│ │ ├── persist_get_by_key.metatags
│ │ ├── persist_get_by_key.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-relation-queries/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_relation_queries.bal
│ │ ├── persist_relation_queries.md
│ │ ├── persist_relation_queries.metatags
│ │ └── persist_relation_queries.out
│ ├── persist-select-fields/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_select_fields.bal
│ │ ├── persist_select_fields.md
│ │ ├── persist_select_fields.metatags
│ │ └── persist_select_fields.out
│ ├── persist-update/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_update.bal
│ │ ├── persist_update.md
│ │ ├── persist_update.metatags
│ │ └── persist_update.out
│ ├── programs-and-modules/
│ │ ├── programs_and_modules.bal
│ │ ├── programs_and_modules.md
│ │ ├── programs_and_modules.metatags
│ │ └── programs_and_modules.out
│ ├── provide-function-arguments-by-name/
│ │ ├── provide_function_arguments_by_name.bal
│ │ ├── provide_function_arguments_by_name.md
│ │ ├── provide_function_arguments_by_name.metatags
│ │ └── provide_function_arguments_by_name.out
│ ├── providing-services/
│ │ ├── providing_services.bal
│ │ ├── providing_services.md
│ │ ├── providing_services.metatags
│ │ └── providing_services.out
│ ├── query-actions/
│ │ ├── query_actions.bal
│ │ ├── query_actions.md
│ │ ├── query_actions.metatags
│ │ └── query_actions.out
│ ├── query-expressions/
│ │ ├── query_expressions.bal
│ │ ├── query_expressions.md
│ │ ├── query_expressions.metatags
│ │ └── query_expressions.out
│ ├── querying-tables/
│ │ ├── querying_tables.bal
│ │ ├── querying_tables.md
│ │ ├── querying_tables.metatags
│ │ └── querying_tables.out
│ ├── querying-with-streams/
│ │ ├── querying_with_streams.bal
│ │ ├── querying_with_streams.md
│ │ ├── querying_with_streams.metatags
│ │ └── querying_with_streams.out
│ ├── rabbitmq-client-basic-auth/
│ │ ├── rabbitmq_client_basic_auth.bal
│ │ ├── rabbitmq_client_basic_auth.client.out
│ │ ├── rabbitmq_client_basic_auth.md
│ │ ├── rabbitmq_client_basic_auth.metatags
│ │ └── rabbitmq_client_basic_auth.server.out
│ ├── rabbitmq-client-constraint-validation/
│ │ ├── rabbitmq_client_constraint_validation.bal
│ │ ├── rabbitmq_client_constraint_validation.md
│ │ ├── rabbitmq_client_constraint_validation.metatags
│ │ └── rabbitmq_client_constraint_validation.out
│ ├── rabbitmq-client-secure-connection/
│ │ ├── rabbitmq_client_secure_connection.bal
│ │ ├── rabbitmq_client_secure_connection.client.out
│ │ ├── rabbitmq_client_secure_connection.md
│ │ ├── rabbitmq_client_secure_connection.metatags
│ │ └── rabbitmq_client_secure_connection.server.out
│ ├── rabbitmq-consumer/
│ │ ├── rabbitmq_consumer.bal
│ │ ├── rabbitmq_consumer.md
│ │ ├── rabbitmq_consumer.metatags
│ │ └── rabbitmq_consumer.out
│ ├── rabbitmq-consumer-with-client-acknowledgement/
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.bal
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.md
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.metatags
│ │ └── rabbitmq_consumer_with_client_acknowledgement.out
│ ├── rabbitmq-producer/
│ │ ├── rabbitmq_producer.bal
│ │ ├── rabbitmq_producer.client.out
│ │ ├── rabbitmq_producer.md
│ │ ├── rabbitmq_producer.metatags
│ │ └── rabbitmq_producer.server.out
│ ├── rabbitmq-queue-declare/
│ │ ├── rabbitmq_queue_declare.bal
│ │ ├── rabbitmq_queue_declare.md
│ │ ├── rabbitmq_queue_declare.metatags
│ │ └── rabbitmq_queue_declare.out
│ ├── rabbitmq-service-basic-auth/
│ │ ├── rabbitmq_service_basic_auth.bal
│ │ ├── rabbitmq_service_basic_auth.md
│ │ ├── rabbitmq_service_basic_auth.metatags
│ │ └── rabbitmq_service_basic_auth.out
│ ├── rabbitmq-service-constraint-validation/
│ │ ├── rabbitmq_service_constraint_validation.bal
│ │ ├── rabbitmq_service_constraint_validation.md
│ │ ├── rabbitmq_service_constraint_validation.metatags
│ │ └── rabbitmq_service_constraint_validation.out
│ ├── rabbitmq-service-secure-connection/
│ │ ├── rabbitmq_service_secure_connection.bal
│ │ ├── rabbitmq_service_secure_connection.md
│ │ ├── rabbitmq_service_secure_connection.metatags
│ │ └── rabbitmq_service_secure_connection.out
│ ├── rabbitmq-sync-consumer/
│ │ ├── rabbitmq_sync_consumer.bal
│ │ ├── rabbitmq_sync_consumer.md
│ │ ├── rabbitmq_sync_consumer.metatags
│ │ └── rabbitmq_sync_consumer.out
│ ├── rabbitmq-transaction-consumer/
│ │ ├── rabbitmq_transaction_consumer.bal
│ │ ├── rabbitmq_transaction_consumer.md
│ │ ├── rabbitmq_transaction_consumer.metatags
│ │ └── rabbitmq_transaction_consumer.out
│ ├── rabbitmq-transaction-producer/
│ │ ├── rabbitmq_transaction_producer.bal
│ │ ├── rabbitmq_transaction_producer.md
│ │ ├── rabbitmq_transaction_producer.metatags
│ │ └── rabbitmq_transaction_producer.out
│ ├── rag-ingestion-with-external-vector-store/
│ │ ├── rag_ingestion_with_external_vector_store.bal
│ │ ├── rag_ingestion_with_external_vector_store.md
│ │ ├── rag_ingestion_with_external_vector_store.metatags
│ │ └── rag_ingestion_with_external_vector_store.out
│ ├── rag-query-with-external-vector-store/
│ │ ├── rag_query_with_external_vector_store.bal
│ │ ├── rag_query_with_external_vector_store.md
│ │ ├── rag_query_with_external_vector_store.metatags
│ │ └── rag_query_with_external_vector_store.out
│ ├── rag-with-in-memory-vector-store/
│ │ ├── leave_policy.md
│ │ ├── rag_with_in_memory_vector_store.bal
│ │ ├── rag_with_in_memory_vector_store.md
│ │ ├── rag_with_in_memory_vector_store.metatags
│ │ └── rag_with_in_memory_vector_store.out
│ ├── random-numbers/
│ │ ├── random_numbers.bal
│ │ ├── random_numbers.md
│ │ ├── random_numbers.metatags
│ │ └── random_numbers.out
│ ├── raw-templates/
│ │ ├── raw_templates.bal
│ │ ├── raw_templates.md
│ │ ├── raw_templates.metatags
│ │ └── raw_templates.out
│ ├── readonly-and-isolated/
│ │ ├── readonly_and_isolated.bal
│ │ ├── readonly_and_isolated.md
│ │ ├── readonly_and_isolated.metatags
│ │ └── readonly_and_isolated.out
│ ├── readonly-objects-and-classes/
│ │ ├── readonly_objects_and_classes.bal
│ │ ├── readonly_objects_and_classes.md
│ │ ├── readonly_objects_and_classes.metatags
│ │ └── readonly_objects_and_classes.out
│ ├── readonly-type/
│ │ ├── readonly_type.bal
│ │ ├── readonly_type.md
│ │ ├── readonly_type.metatags
│ │ └── readonly_type.out
│ ├── receive-email-using-client/
│ │ ├── receive_email_using_client.bal
│ │ ├── receive_email_using_client.md
│ │ ├── receive_email_using_client.metatags
│ │ └── receive_email_using_client.out
│ ├── receive-email-using-service/
│ │ ├── receive_email_using_service.bal
│ │ ├── receive_email_using_service.md
│ │ ├── receive_email_using_service.metatags
│ │ └── receive_email_using_service.out
│ ├── record-to-edi/
│ │ ├── bal_project.out
│ │ ├── codegen_command.out
│ │ ├── output.out
│ │ ├── package_structure.out
│ │ ├── record_to_edi.bal
│ │ ├── record_to_edi.md
│ │ ├── record_to_edi.metatags
│ │ ├── schema.json
│ │ └── tool_pull_command.out
│ ├── records/
│ │ ├── records.bal
│ │ ├── records.md
│ │ ├── records.metatags
│ │ └── records.out
│ ├── regexp-find-operations/
│ │ ├── regexp_find_operations.bal
│ │ ├── regexp_find_operations.md
│ │ ├── regexp_find_operations.metatags
│ │ └── regexp_find_operations.out
│ ├── regexp-match-operations/
│ │ ├── regexp_match_operations.bal
│ │ ├── regexp_match_operations.md
│ │ ├── regexp_match_operations.metatags
│ │ └── regexp_match_operations.out
│ ├── regexp-operations-overview/
│ │ ├── regexp_operations_overview.bal
│ │ ├── regexp_operations_overview.md
│ │ ├── regexp_operations_overview.metatags
│ │ └── regexp_operations_overview.out
│ ├── regexp-replace-operations/
│ │ ├── regexp_replace_operations.bal
│ │ ├── regexp_replace_operations.md
│ │ ├── regexp_replace_operations.metatags
│ │ └── regexp_replace_operations.out
│ ├── regexp-type/
│ │ ├── regexp_type.bal
│ │ ├── regexp_type.md
│ │ ├── regexp_type.metatags
│ │ └── regexp_type.out
│ ├── resource/
│ │ └── path/
│ │ └── to/
│ │ ├── ballerinaKeystore.p12
│ │ ├── ballerinaTruststore.p12
│ │ ├── client-private.key
│ │ ├── client-public.crt
│ │ ├── encryptedPrivate.key
│ │ ├── private.key
│ │ ├── public.crt
│ │ ├── server-private.key
│ │ └── server-public.crt
│ ├── resource-method-typing/
│ │ ├── resource_method_typing.bal
│ │ ├── resource_method_typing.client.out
│ │ ├── resource_method_typing.md
│ │ ├── resource_method_typing.metatags
│ │ └── resource_method_typing.server.out
│ ├── resource-methods/
│ │ ├── resource_methods.bal
│ │ ├── resource_methods.client.out
│ │ ├── resource_methods.md
│ │ ├── resource_methods.metatags
│ │ └── resource_methods.server.out
│ ├── resource-path-parameters/
│ │ ├── resource_path_parameters.bal
│ │ ├── resource_path_parameters.client.out
│ │ ├── resource_path_parameters.md
│ │ ├── resource_path_parameters.metatags
│ │ └── resource_path_parameters.server.out
│ ├── rest-arguments/
│ │ ├── rest_arguments.bal
│ │ ├── rest_arguments.md
│ │ ├── rest_arguments.metatags
│ │ └── rest_arguments.out
│ ├── rest-binding-pattern-in-error-binding-pattern/
│ │ ├── rest_binding_pattern_in_error_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_error_binding_pattern.md
│ │ ├── rest_binding_pattern_in_error_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_error_binding_pattern.out
│ ├── rest-binding-pattern-in-list-binding-pattern/
│ │ ├── rest_binding_pattern_in_list_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_list_binding_pattern.md
│ │ ├── rest_binding_pattern_in_list_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_list_binding_pattern.out
│ ├── rest-binding-pattern-in-mapping-binding-pattern/
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.md
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_mapping_binding_pattern.out
│ ├── rest-parameters/
│ │ ├── rest_parameters.bal
│ │ ├── rest_parameters.md
│ │ ├── rest_parameters.metatags
│ │ └── rest_parameters.out
│ ├── rest-type-in-tuples/
│ │ ├── rest_type_in_tuples.bal
│ │ ├── rest_type_in_tuples.md
│ │ ├── rest_type_in_tuples.metatags
│ │ └── rest_type_in_tuples.out
│ ├── retry-transaction-statement/
│ │ ├── retry_transaction_statement.bal
│ │ ├── retry_transaction_statement.md
│ │ ├── retry_transaction_statement.metatags
│ │ └── retry_transaction_statement.out
│ ├── rollback/
│ │ ├── rollback.bal
│ │ ├── rollback.md
│ │ ├── rollback.metatags
│ │ └── rollback.out
│ ├── run-strands-safely-on-separate-threads/
│ │ ├── run_strands_safely_on_separate_threads.bal
│ │ ├── run_strands_safely_on_separate_threads.md
│ │ ├── run_strands_safely_on_separate_threads.metatags
│ │ └── run_strands_safely_on_separate_threads.out
│ ├── security-crypto/
│ │ ├── security_crypto.bal
│ │ ├── security_crypto.md
│ │ ├── security_crypto.metatags
│ │ ├── security_crypto.out
│ │ └── tests/
│ │ └── security_crypto_test.bal
│ ├── security-jwt-issue-validate/
│ │ ├── security_jwt_issue_validate.bal
│ │ ├── security_jwt_issue_validate.md
│ │ ├── security_jwt_issue_validate.metatags
│ │ ├── security_jwt_issue_validate.out
│ │ └── tests/
│ │ └── security_jwt_issue_validate_test.bal
│ ├── send-email/
│ │ ├── send_email.bal
│ │ ├── send_email.md
│ │ ├── send_email.metatags
│ │ └── send_email.out
│ ├── sensitive-data-logging/
│ │ ├── sensitive_data_logging.bal
│ │ ├── sensitive_data_logging.md
│ │ ├── sensitive_data_logging.metatags
│ │ └── sensitive_data_logging.out
│ ├── sequence-diagrams/
│ │ ├── sequence_diagrams.bal
│ │ ├── sequence_diagrams.md
│ │ ├── sequence_diagrams.metatags
│ │ └── sequence_diagrams.out
│ ├── service-declaration/
│ │ ├── service_declaration.bal
│ │ ├── service_declaration.client.out
│ │ ├── service_declaration.md
│ │ ├── service_declaration.metatags
│ │ └── service_declaration.server.out
│ ├── sftp-client-receive-file/
│ │ ├── sftp_client_receive_file.bal
│ │ ├── sftp_client_receive_file.md
│ │ ├── sftp_client_receive_file.metatags
│ │ └── sftp_client_receive_file.out
│ ├── sftp-client-send-file/
│ │ ├── sftp_client_send_file.bal
│ │ ├── sftp_client_send_file.md
│ │ ├── sftp_client_send_file.metatags
│ │ └── sftp_client_send_file.out
│ ├── sftp-service-receive-file/
│ │ ├── sftp_service_receive_file.bal
│ │ ├── sftp_service_receive_file.md
│ │ ├── sftp_service_receive_file.metatags
│ │ └── sftp_service_receive_file.out
│ ├── sftp-service-send-file/
│ │ ├── sftp_service_send_file.bal
│ │ ├── sftp_service_send_file.md
│ │ ├── sftp_service_send_file.metatags
│ │ └── sftp_service_send_file.out
│ ├── single-use-of-typed-binding/
│ │ ├── single_use_of_typed_binding.bal
│ │ ├── single_use_of_typed_binding.md
│ │ ├── single_use_of_typed_binding.metatags
│ │ └── single_use_of_typed_binding.out
│ ├── single-use-with-on-fail-clause/
│ │ ├── single_use_with_on_fail_clause.bal
│ │ ├── single_use_with_on_fail_clause.md
│ │ ├── single_use_with_on_fail_clause.metatags
│ │ └── single_use_with_on_fail_clause.out
│ ├── singleton-types/
│ │ ├── singleton_types.bal
│ │ ├── singleton_types.md
│ │ ├── singleton_types.metatags
│ │ └── singleton_types.out
│ ├── soap-client-security-inbound-security-config/
│ │ ├── soap_client_security_inbound_security_config.bal
│ │ ├── soap_client_security_inbound_security_config.md
│ │ ├── soap_client_security_inbound_security_config.metatags
│ │ └── soap_client_security_inbound_security_config.out
│ ├── soap-client-security-outbound-security-config/
│ │ ├── soap_client_security_outbound_security_config.bal
│ │ ├── soap_client_security_outbound_security_config.md
│ │ ├── soap_client_security_outbound_security_config.metatags
│ │ └── soap_client_security_outbound_security_config.out
│ ├── soap-client-security-ssl-tsl/
│ │ ├── soap_client_security_ssl_tls.bal
│ │ ├── soap_client_security_ssl_tls.md
│ │ ├── soap_client_security_ssl_tls.metatags
│ │ └── soap_client_security_ssl_tls.out
│ ├── soap-client-send-receive/
│ │ ├── soap_client_send_receive.bal
│ │ ├── soap_client_send_receive.md
│ │ ├── soap_client_send_receive.metatags
│ │ └── soap_client_send_receive.out
│ ├── sort-iterable-objects/
│ │ ├── sort_iterable_objects.bal
│ │ ├── sort_iterable_objects.md
│ │ ├── sort_iterable_objects.metatags
│ │ └── sort_iterable_objects.out
│ ├── start-service-from-service-class-definition/
│ │ ├── start_service_from_service_class_definition.bal
│ │ ├── start_service_from_service_class_definition.client.out
│ │ ├── start_service_from_service_class_definition.md
│ │ ├── start_service_from_service_class_definition.metatags
│ │ └── start_service_from_service_class_definition.server.out
│ ├── stop-handler/
│ │ ├── stop_handler.bal
│ │ ├── stop_handler.client.out
│ │ ├── stop_handler.md
│ │ ├── stop_handler.metatags
│ │ └── stop_handler.server.out
│ ├── strands/
│ │ ├── strands.bal
│ │ ├── strands.md
│ │ ├── strands.metatags
│ │ └── strands.out
│ ├── stream-type/
│ │ ├── stream_type.bal
│ │ ├── stream_type.md
│ │ ├── stream_type.metatags
│ │ └── stream_type.out
│ ├── string-templates/
│ │ ├── string_templates.bal
│ │ ├── string_templates.md
│ │ ├── string_templates.metatags
│ │ └── string_templates.out
│ ├── strings/
│ │ ├── strings.bal
│ │ ├── strings.md
│ │ ├── strings.metatags
│ │ └── strings.out
│ ├── structural-typing/
│ │ ├── structural_typing.bal
│ │ ├── structural_typing.md
│ │ ├── structural_typing.metatags
│ │ └── structural_typing.out
│ ├── structured-keys/
│ │ ├── structured_keys.bal
│ │ ├── structured_keys.md
│ │ ├── structured_keys.metatags
│ │ └── structured_keys.out
│ ├── synchronize-message-passing/
│ │ ├── synchronize_message_passing.bal
│ │ ├── synchronize_message_passing.md
│ │ ├── synchronize_message_passing.metatags
│ │ └── synchronize_message_passing.out
│ ├── table/
│ │ ├── table.bal
│ │ ├── table.md
│ │ ├── table.metatags
│ │ └── table.out
│ ├── table-types/
│ │ ├── table_types.bal
│ │ ├── table_types.md
│ │ ├── table_types.metatags
│ │ └── table_types.out
│ ├── task-frequency-job-execution/
│ │ ├── task_frequency_job_execution.bal
│ │ ├── task_frequency_job_execution.md
│ │ ├── task_frequency_job_execution.metatags
│ │ └── task_frequency_job_execution.out
│ ├── task-one-time-job-execution/
│ │ ├── task_one_time_job_execution.bal
│ │ ├── task_one_time_job_execution.md
│ │ ├── task_one_time_job_execution.metatags
│ │ └── task_one_time_job_execution.out
│ ├── tcp-client/
│ │ ├── tcp_client.bal
│ │ ├── tcp_client.md
│ │ ├── tcp_client.metatags
│ │ └── tcp_client.out
│ ├── tcp-client-ssl-tls/
│ │ ├── tcp_client_ssl_tls.bal
│ │ ├── tcp_client_ssl_tls.md
│ │ ├── tcp_client_ssl_tls.metatags
│ │ └── tcp_client_ssl_tls.out
│ ├── tcp-listener/
│ │ ├── tcp_listener.bal
│ │ ├── tcp_listener.md
│ │ ├── tcp_listener.metatags
│ │ └── tcp_listener.out
│ ├── tcp-service-ssl-tls/
│ │ ├── tcp_service_ssl_tls.bal
│ │ ├── tcp_service_ssl_tls.md
│ │ ├── tcp_service_ssl_tls.metatags
│ │ └── tcp_service_ssl_tls.out
│ ├── temp-files-directories/
│ │ ├── temp_files_directories.bal
│ │ ├── temp_files_directories.md
│ │ ├── temp_files_directories.metatags
│ │ └── temp_files_directories.out
│ ├── testerina-assertions/
│ │ ├── testerina_assertions.bal
│ │ ├── testerina_assertions.md
│ │ ├── testerina_assertions.metatags
│ │ └── testerina_assertions.out
│ ├── testerina-before-and-after-each/
│ │ ├── testerina_before_and_after_each.bal
│ │ ├── testerina_before_and_after_each.md
│ │ ├── testerina_before_and_after_each.metatags
│ │ └── testerina_before_and_after_each.out
│ ├── testerina-before-and-after-groups/
│ │ ├── testerina_before_and_after_groups.bal
│ │ ├── testerina_before_and_after_groups.md
│ │ ├── testerina_before_and_after_groups.metatags
│ │ └── testerina_before_and_after_groups.out
│ ├── testerina-before-and-after-suite/
│ │ ├── testerina_before_and_after_suite.bal
│ │ ├── testerina_before_and_after_suite.md
│ │ ├── testerina_before_and_after_suite.metatags
│ │ └── testerina_before_and_after_suite.out
│ ├── testerina-before-and-after-test/
│ │ ├── testerina_before_and_after_test.bal
│ │ ├── testerina_before_and_after_test.md
│ │ ├── testerina_before_and_after_test.metatags
│ │ └── testerina_before_and_after_test.out
│ ├── testerina-data-driven-tests/
│ │ ├── testerina_data_driven_tests.bal
│ │ ├── testerina_data_driven_tests.md
│ │ ├── testerina_data_driven_tests.metadata
│ │ └── testerina_data_driven_tests.out
│ ├── testerina-group-tests/
│ │ ├── testerina_group_disable_groups.out
│ │ ├── testerina_group_tests.bal
│ │ ├── testerina_group_tests.md
│ │ ├── testerina_group_tests.metadata
│ │ ├── testerina_group_tests_groups_g1.out
│ │ └── testerina_group_tests_groups_g1_g2.out
│ ├── testerina-guarantee-test-execution-order/
│ │ ├── testerina_guarantee_test_execution_order.bal
│ │ ├── testerina_guarantee_test_execution_order.md
│ │ ├── testerina_guarantee_test_execution_order.metadata
│ │ └── testerina_guarantee_test_execution_order.out
│ ├── testerina-mocking-functions/
│ │ ├── testerina_mocking_functions.md
│ │ ├── testerina_mocking_functions.metatags
│ │ ├── testerina_mocking_functions_main.bal
│ │ ├── testerina_mocking_functions_test.bal
│ │ └── testerina_mocking_functions_test.out
│ ├── testerina-mocking-objects/
│ │ ├── testerina_mocking_objects.md
│ │ ├── testerina_mocking_objects.metatags
│ │ ├── testerina_mocking_objects_main.bal
│ │ ├── testerina_mocking_objects_test.bal
│ │ └── testerina_mocking_objects_test.out
│ ├── time-formatting-and-parsing/
│ │ ├── tests/
│ │ │ └── time_formatting_and_parsing_test.bal
│ │ ├── time_formatting_and_parsing.bal
│ │ ├── time_formatting_and_parsing.md
│ │ ├── time_formatting_and_parsing.metatags
│ │ └── time_formatting_and_parsing.out
│ ├── time-utc/
│ │ ├── tests/
│ │ │ └── time_utc_test.bal
│ │ ├── time_utc.bal
│ │ ├── time_utc.md
│ │ ├── time_utc.metatags
│ │ └── time_utc.out
│ ├── time-utc-and-civil/
│ │ ├── tests/
│ │ │ └── time_utc_and_civil_test.bal
│ │ ├── time_utc_and_civil.bal
│ │ ├── time_utc_and_civil.md
│ │ ├── time_utc_and_civil.metatags
│ │ └── time_utc_and_civil.out
│ ├── time-zone/
│ │ ├── time_zone.bal
│ │ ├── time_zone.md
│ │ ├── time_zone.metatags
│ │ └── time_zone.out
│ ├── tracing/
│ │ ├── tests/
│ │ │ └── tracing_test.bal
│ │ ├── tracing.bal
│ │ ├── tracing.client.out
│ │ ├── tracing.md
│ │ ├── tracing.metatags
│ │ └── tracing.server.out
│ ├── transaction-statement/
│ │ ├── transaction_statement.bal
│ │ ├── transaction_statement.md
│ │ ├── transaction_statement.metatags
│ │ └── transaction_statement.out
│ ├── transactional-named-workers/
│ │ ├── transactional_named_workers.bal
│ │ ├── transactional_named_workers.md
│ │ ├── transactional_named_workers.metatags
│ │ └── transactional_named_workers.out
│ ├── transactional-qualifier/
│ │ ├── transactional_qualifier.bal
│ │ ├── transactional_qualifier.md
│ │ ├── transactional_qualifier.metatags
│ │ └── transactional_qualifier.out
│ ├── transform-csv-records-to-custom-types/
│ │ ├── transform_csv_records_to_custom_types.bal
│ │ ├── transform_csv_records_to_custom_types.md
│ │ ├── transform_csv_records_to_custom_types.metatags
│ │ └── transform_csv_records_to_custom_types.out
│ ├── trap-expression/
│ │ ├── trap_expression.bal
│ │ ├── trap_expression.md
│ │ ├── trap_expression.metatags
│ │ └── trap_expression.out
│ ├── tuples/
│ │ ├── tuples.bal
│ │ ├── tuples.md
│ │ ├── tuples.metatags
│ │ └── tuples.out
│ ├── type-definitions/
│ │ ├── type_definitions.bal
│ │ ├── type_definitions.md
│ │ ├── type_definitions.metatags
│ │ └── type_definitions.out
│ ├── type-inclusion-for-records/
│ │ ├── type_inclusion_for_records.bal
│ │ ├── type_inclusion_for_records.md
│ │ ├── type_inclusion_for_records.metatags
│ │ └── type_inclusion_for_records.out
│ ├── type-inference/
│ │ ├── type_inference.bal
│ │ ├── type_inference.md
│ │ ├── type_inference.metatags
│ │ └── type_inference.out
│ ├── typed-binding-pattern/
│ │ ├── typed_binding_pattern.bal
│ │ ├── typed_binding_pattern.md
│ │ ├── typed_binding_pattern.metatags
│ │ └── typed_binding_pattern.out
│ ├── typedesc-type/
│ │ ├── typedesc_type.bal
│ │ ├── typedesc_type.md
│ │ ├── typedesc_type.metatags
│ │ └── typedesc_type.out
│ ├── udp-client/
│ │ ├── udp_client.bal
│ │ ├── udp_client.md
│ │ ├── udp_client.metatags
│ │ └── udp_client.out
│ ├── udp-connect-client/
│ │ ├── udp_connect_client.bal
│ │ ├── udp_connect_client.md
│ │ ├── udp_connect_client.metatags
│ │ └── udp_connect_client.out
│ ├── udp-listener/
│ │ ├── udp_listener.bal
│ │ ├── udp_listener.md
│ │ ├── udp_listener.metatags
│ │ └── udp_listener.out
│ ├── unary-operators/
│ │ ├── unary_operators.bal
│ │ ├── unary_operators.md
│ │ ├── unary_operators.metatags
│ │ └── unary_operators.out
│ ├── unions/
│ │ ├── unions.bal
│ │ ├── unions.md
│ │ ├── unions.metatags
│ │ └── unions.out
│ ├── url-encode-decode/
│ │ ├── tests/
│ │ │ └── url_encode_decode_test.bal
│ │ ├── url_encode_decode.bal
│ │ ├── url_encode_decode.md
│ │ ├── url_encode_decode.metatags
│ │ └── url_encode_decode.out
│ ├── uuid-generation/
│ │ ├── uuid_generation.bal
│ │ ├── uuid_generation.md
│ │ ├── uuid_generation.metatags
│ │ └── uuid_generation.out
│ ├── uuid-operations/
│ │ ├── uuid_operations.bal
│ │ ├── uuid_operations.md
│ │ ├── uuid_operations.metatags
│ │ └── uuid_operations.out
│ ├── variables-and-types/
│ │ ├── variables_and_types.bal
│ │ ├── variables_and_types.md
│ │ ├── variables_and_types.metatags
│ │ └── variables_and_types.out
│ ├── visibility-of-object-fields-and-methods/
│ │ ├── visibility_of_object_fields_and_methods.bal
│ │ ├── visibility_of_object_fields_and_methods.md
│ │ ├── visibility_of_object_fields_and_methods.metatags
│ │ └── visibility_of_object_fields_and_methods.out
│ ├── waiting-for-workers/
│ │ ├── waiting_for_workers.bal
│ │ ├── waiting_for_workers.md
│ │ ├── waiting_for_workers.metatags
│ │ └── waiting_for_workers.out
│ ├── websocket-basic-sample/
│ │ ├── tests/
│ │ │ └── websocket_basic_sample_test.bal
│ │ ├── websocket_basic_sample.bal
│ │ ├── websocket_basic_sample.md
│ │ ├── websocket_basic_sample.metatags
│ │ └── websocket_basic_sample.out
│ ├── websocket-binary-client/
│ │ └── websocket_binary_client.md
│ ├── websocket-client/
│ │ ├── websocket_client.bal
│ │ ├── websocket_client.md
│ │ ├── websocket_client.metatags
│ │ └── websocket_client.out
│ ├── websocket-client-basic-auth/
│ │ ├── websocket_client_basic_auth.bal
│ │ ├── websocket_client_basic_auth.md
│ │ ├── websocket_client_basic_auth.metatags
│ │ └── websocket_client_basic_auth.out
│ ├── websocket-client-bearer-token-auth/
│ │ ├── websocket_client_bearer_token_auth.bal
│ │ ├── websocket_client_bearer_token_auth.md
│ │ ├── websocket_client_bearer_token_auth.metatags
│ │ └── websocket_client_bearer_token_auth.out
│ ├── websocket-client-mutual-ssl/
│ │ ├── websocket_client_mutual_ssl.bal
│ │ ├── websocket_client_mutual_ssl.md
│ │ ├── websocket_client_mutual_ssl.metatags
│ │ └── websocket_client_mutual_ssl.out
│ ├── websocket-client-oauth2-client-cred-grant-type/
│ │ ├── websocket_client_oauth2_client_cred_grant_type.bal
│ │ ├── websocket_client_oauth2_client_cred_grant_type.md
│ │ ├── websocket_client_oauth2_client_cred_grant_type.metatags
│ │ └── websocket_client_oauth2_client_cred_grant_type.out
│ ├── websocket-client-oauth2-jwt-bearer-grant-type/
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.metatags
│ │ └── websocket_client_oauth2_jwt_bearer_grant_type.out
│ ├── websocket-client-oauth2-password-grant-type/
│ │ ├── websocket_client_oauth2_password_grant_type.bal
│ │ ├── websocket_client_oauth2_password_grant_type.md
│ │ ├── websocket_client_oauth2_password_grant_type.metatags
│ │ └── websocket_client_oauth2_password_grant_type.out
│ ├── websocket-client-oauth2-refresh-token-grant-type/
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.bal
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.md
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.metatags
│ │ └── websocket_client_oauth2_refresh_token_grant_type.out
│ ├── websocket-client-payload-constraint-validation/
│ │ ├── websocket_client_payload_constraint_validation.bal
│ │ ├── websocket_client_payload_constraint_validation.md
│ │ ├── websocket_client_payload_constraint_validation.metatags
│ │ └── websocket_client_payload_constraint_validation.out
│ ├── websocket-client-self-signed-jwt-auth/
│ │ ├── websocket_client_self_signed_jwt_auth.bal
│ │ ├── websocket_client_self_signed_jwt_auth.md
│ │ ├── websocket_client_self_signed_jwt_auth.metatags
│ │ └── websocket_client_self_signed_jwt_auth.out
│ ├── websocket-client-ssl-tls/
│ │ ├── websocket_client_ssl_tls.bal
│ │ ├── websocket_client_ssl_tls.md
│ │ ├── websocket_client_ssl_tls.metatags
│ │ └── websocket_client_ssl_tls.out
│ ├── websocket-query-parameter/
│ │ ├── websocket_query_parameter.bal
│ │ ├── websocket_query_parameter.md
│ │ ├── websocket_query_parameter.metatags
│ │ └── websocket_query_parameter.server.out
│ ├── websocket-retry-client/
│ │ ├── websocket_retry_client.bal
│ │ ├── websocket_retry_client.md
│ │ ├── websocket_retry_client.metatags
│ │ └── websocket_retry_client.out
│ ├── websocket-service-basic-auth-file-user-store/
│ │ ├── websocket_service_basic_auth_file_user_store.bal
│ │ ├── websocket_service_basic_auth_file_user_store.md
│ │ ├── websocket_service_basic_auth_file_user_store.metatags
│ │ └── websocket_service_basic_auth_file_user_store.server.out
│ ├── websocket-service-basic-auth-ldap-user-store/
│ │ ├── websocket_service_basic_auth_ldap_user_store.bal
│ │ ├── websocket_service_basic_auth_ldap_user_store.md
│ │ ├── websocket_service_basic_auth_ldap_user_store.metatags
│ │ └── websocket_service_basic_auth_ldap_user_store.server.out
│ ├── websocket-service-error-handling/
│ │ ├── websocket_service_error_handling.bal
│ │ ├── websocket_service_error_handling.md
│ │ ├── websocket_service_error_handling.metatags
│ │ └── websocket_service_error_handling.out
│ ├── websocket-service-jwt-auth/
│ │ ├── websocket_service_jwt_auth.bal
│ │ ├── websocket_service_jwt_auth.md
│ │ ├── websocket_service_jwt_auth.metatags
│ │ └── websocket_service_jwt_auth.server.out
│ ├── websocket-service-mutual-ssl/
│ │ ├── websocket_service_mutual_ssl.bal
│ │ ├── websocket_service_mutual_ssl.md
│ │ ├── websocket_service_mutual_ssl.metatags
│ │ └── websocket_service_mutual_ssl.server.out
│ ├── websocket-service-oauth2/
│ │ ├── websocket_service_oauth2.bal
│ │ ├── websocket_service_oauth2.md
│ │ ├── websocket_service_oauth2.metatags
│ │ └── websocket_service_oauth2.server.out
│ ├── websocket-service-payload-constraint-validation/
│ │ ├── websocket_service_payload_constraint_validation.bal
│ │ ├── websocket_service_payload_constraint_validation.md
│ │ ├── websocket_service_payload_constraint_validation.metatags
│ │ └── websocket_service_payload_constraint_validation.out
│ ├── websocket-service-ssl-tls/
│ │ ├── websocket_service_ssl_tls.bal
│ │ ├── websocket_service_ssl_tls.md
│ │ ├── websocket_service_ssl_tls.metatags
│ │ └── websocket_service_ssl_tls.server.out
│ ├── websocket-text-client/
│ │ └── websocket_text_client.md
│ ├── websocket-timeout-client/
│ │ ├── websocket_timeout_client.bal
│ │ ├── websocket_timeout_client.md
│ │ ├── websocket_timeout_client.metatags
│ │ └── websocket_timeout_client.out
│ ├── websub-webhook-sample/
│ │ ├── websub_webhook_sample.bal
│ │ ├── websub_webhook_sample.md
│ │ ├── websub_webhook_sample.metatags
│ │ └── websub_webhook_sample.out
│ ├── while-statement/
│ │ ├── while_statement.bal
│ │ ├── while_statement.md
│ │ ├── while_statement.metatags
│ │ └── while_statement.out
│ ├── wildcard-binding-pattern/
│ │ ├── wildcard_binding_pattern.bal
│ │ ├── wildcard_binding_pattern.md
│ │ ├── wildcard_binding_pattern.metatags
│ │ └── wildcard_binding_pattern.out
│ ├── xml-access/
│ │ ├── xml_access.bal
│ │ ├── xml_access.md
│ │ ├── xml_access.metatags
│ │ └── xml_access.out
│ ├── xml-data-model/
│ │ ├── xml_data_model.bal
│ │ ├── xml_data_model.md
│ │ ├── xml_data_model.metatags
│ │ └── xml_data_model.out
│ ├── xml-from-json-conversion/
│ │ ├── xml_from_json_conversion.bal
│ │ ├── xml_from_json_conversion.md
│ │ ├── xml_from_json_conversion.metatags
│ │ └── xml_from_json_conversion.out
│ ├── xml-from-record-conversion/
│ │ ├── xml_from_record_conversion.bal
│ │ ├── xml_from_record_conversion.md
│ │ ├── xml_from_record_conversion.metatags
│ │ └── xml_from_record_conversion.out
│ ├── xml-iteration/
│ │ ├── xml_iteration.bal
│ │ ├── xml_iteration.md
│ │ ├── xml_iteration.metatags
│ │ └── xml_iteration.out
│ ├── xml-mutation/
│ │ ├── xml_mutation.bal
│ │ ├── xml_mutation.md
│ │ ├── xml_mutation.metatags
│ │ └── xml_mutation.out
│ ├── xml-namespaces/
│ │ ├── xml_namespaces.bal
│ │ ├── xml_namespaces.md
│ │ ├── xml_namespaces.metatags
│ │ └── xml_namespaces.out
│ ├── xml-navigation/
│ │ ├── xml_navigation.bal
│ │ ├── xml_navigation.md
│ │ ├── xml_navigation.metatags
│ │ └── xml_navigation.out
│ ├── xml-operations/
│ │ ├── xml_operations.bal
│ │ ├── xml_operations.md
│ │ ├── xml_operations.metatags
│ │ └── xml_operations.out
│ ├── xml-subtyping/
│ │ ├── xml_subtyping.bal
│ │ ├── xml_subtyping.md
│ │ ├── xml_subtyping.metatags
│ │ └── xml_subtyping.out
│ ├── xml-templates/
│ │ ├── xml_templates.bal
│ │ ├── xml_templates.md
│ │ ├── xml_templates.metatags
│ │ └── xml_templates.out
│ ├── xml-templates-and-query/
│ │ ├── xml_templates_and_query.bal
│ │ ├── xml_templates_and_query.md
│ │ ├── xml_templates_and_query.metatags
│ │ └── xml_templates_and_query.out
│ ├── xml-to-json-conversion/
│ │ ├── xml_to_json_conversion.bal
│ │ ├── xml_to_json_conversion.md
│ │ ├── xml_to_json_conversion.metatags
│ │ └── xml_to_json_conversion.out
│ ├── xml-to-record/
│ │ ├── xml_to_record.bal
│ │ ├── xml_to_record.md
│ │ ├── xml_to_record.metatags
│ │ └── xml_to_record.out
│ ├── xml-to-record-conversion/
│ │ ├── xml_to_record_conversion.bal
│ │ ├── xml_to_record_conversion.md
│ │ ├── xml_to_record_conversion.metatags
│ │ └── xml_to_record_conversion.out
│ ├── xml-to-record-with-projection/
│ │ ├── xml_to_record_with_projection.bal
│ │ ├── xml_to_record_with_projection.md
│ │ ├── xml_to_record_with_projection.metatags
│ │ └── xml_to_record_with_projection.out
│ ├── xmlns-declarations/
│ │ ├── xmlns_declarations.bal
│ │ ├── xmlns_declarations.md
│ │ ├── xmlns_declarations.metatags
│ │ └── xmlns_declarations.out
│ ├── xslt-transformation/
│ │ ├── xslt_transformation.bal
│ │ ├── xslt_transformation.md
│ │ ├── xslt_transformation.metatags
│ │ └── xslt_transformation.out
│ ├── yaml-to-anydata/
│ │ ├── yaml_to_anydata.bal
│ │ ├── yaml_to_anydata.md
│ │ ├── yaml_to_anydata.metatags
│ │ └── yaml_to_anydata.out
│ └── yaml-to-anydata-with-projection/
│ ├── yaml_to_anydata_with_projection.bal
│ ├── yaml_to_anydata_with_projection.md
│ ├── yaml_to_anydata_with_projection.metatags
│ └── yaml_to_anydata_with_projection.out
├── gradle/
│ ├── javaProject.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── installers/
│ ├── linux-deb/
│ │ ├── README.md
│ │ ├── build-ballerina-linux-deb-x64.sh
│ │ └── resources/
│ │ ├── amd/
│ │ │ └── DEBIAN/
│ │ │ ├── control
│ │ │ ├── postinst
│ │ │ └── postrm
│ │ └── arm/
│ │ └── DEBIAN/
│ │ ├── control
│ │ ├── postinst
│ │ └── postrm
│ ├── linux-rpm/
│ │ ├── build-ballerina-linux-rpm-x64.sh
│ │ ├── resources/
│ │ │ ├── ballerina-runtime.spec
│ │ │ └── ballerina-tools.spec
│ │ └── rpmbuild/
│ │ ├── BUILDROOT/
│ │ │ └── .gitkeep
│ │ ├── RPMS/
│ │ │ └── .gitkeep
│ │ ├── SOURCES/
│ │ │ └── .gitkeep
│ │ ├── SPECS/
│ │ │ └── .gitkeep
│ │ └── SRPMS/
│ │ └── .gitkeep
│ ├── mac/
│ │ ├── build-ballerina-macos-x64.sh
│ │ └── darwin/
│ │ ├── Distribution
│ │ ├── app.plist
│ │ └── scripts/
│ │ └── postinstall
│ └── windows/
│ ├── build-ballerina-windows-x64.bat
│ └── resources/
│ ├── cert/
│ │ └── ballerina-cert.pfx
│ ├── en-us.wxl
│ └── installer.wxs
├── issue_template.md
├── language-server-simulator/
│ ├── build.gradle
│ ├── gradle.properties
│ └── src/
│ └── main/
│ ├── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── ballerinalang/
│ │ └── langserver/
│ │ └── simulator/
│ │ ├── Editor.java
│ │ ├── EditorOutputStream.java
│ │ ├── EditorSimulator.java
│ │ ├── EditorTab.java
│ │ └── generators/
│ │ ├── ClassGenerator.java
│ │ ├── CodeSnippetGenerator.java
│ │ ├── FunctionGenerator.java
│ │ ├── Generators.java
│ │ ├── ImportStatementGenerator.java
│ │ ├── MatchStatementGenerator.java
│ │ ├── ServiceGenerator.java
│ │ ├── StatementGenerator.java
│ │ ├── TypeDefinitionGenerator.java
│ │ └── VarDeclarationStatementGenerator.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── org.ballerinalang.langserver.simulator.generators.CodeSnippetGenerator
├── project-api-tests/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── ballerina/
│ │ └── projectapi/
│ │ ├── BalToolTest.java
│ │ ├── BuildTimeTest.java
│ │ ├── CentralNegativeTest.java
│ │ ├── CentralTest.java
│ │ ├── CentralTestUtils.java
│ │ ├── DistributionCompatibilityTest.java
│ │ ├── HierarchicalPackagesTest.java
│ │ ├── MavenCustomRepoTest.java
│ │ ├── MavenCustomRepoTestUtils.java
│ │ └── TestUtils.java
│ └── resources/
│ ├── bal-tool/
│ │ ├── DistTestCommand/
│ │ │ ├── build.gradle
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── disttest/
│ │ │ │ └── cli/
│ │ │ │ └── DistTestCommand.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── io.ballerina.cli.BLauncherCmd
│ │ │ └── disttest.help
│ │ ├── cmd-outputs/
│ │ │ ├── tool-execute-general-help.txt
│ │ │ ├── tool-execute-specific-help-1.0.0.txt
│ │ │ ├── tool-execute-specific-help-1.1.0.txt
│ │ │ ├── tool-execute-tool.txt
│ │ │ ├── tool-execute-unknown-cmd-non-existing.txt
│ │ │ ├── tool-execute-unknown-cmd.txt
│ │ │ ├── tool-list-with-multiple-tool-versions.txt
│ │ │ ├── tool-list-with-no-tools.txt
│ │ │ ├── tool-pull-again-with-specific-version.txt
│ │ │ ├── tool-pull-again-without-version.txt
│ │ │ ├── tool-pull-with-incompatible-dist.txt
│ │ │ ├── tool-pull-with-non-existing-version.txt
│ │ │ ├── tool-pull-with-specific-version.txt
│ │ │ ├── tool-pull-without-version.txt
│ │ │ ├── tool-remove-active-version.txt
│ │ │ ├── tool-remove-all.txt
│ │ │ ├── tool-remove-non-existing-tool.txt
│ │ │ ├── tool-remove-non-existing-version.txt
│ │ │ ├── tool-remove-specific-version.txt
│ │ │ ├── tool-remove-with-incompatible-dist.txt
│ │ │ ├── tool-search-with-tool-id.txt
│ │ │ ├── tool-update-non-existing.txt
│ │ │ ├── tool-update-with-new-patch-and-minor.txt
│ │ │ ├── tool-update-with-no-new-version.txt
│ │ │ ├── tool-use-active-version.txt
│ │ │ ├── tool-use-new-version.txt
│ │ │ ├── tool-use-non-existent-version.txt
│ │ │ ├── tool-use-old-version.txt
│ │ │ └── tool-use-with-incompatible-dist.txt
│ │ ├── v1.0.0/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── README.md
│ │ ├── v1.0.1/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── Package.md
│ │ ├── v1.0.4/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── README.md
│ │ └── v1.1.0/
│ │ └── disttestpackage/
│ │ ├── BalTool.toml
│ │ ├── Ballerina.toml
│ │ └── README.md
│ ├── build-time/
│ │ ├── Project1/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── Project2/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ └── Project3/
│ │ ├── Ballerina.toml
│ │ ├── main.bal
│ │ └── tests/
│ │ └── test.bal
│ ├── central/
│ │ ├── projectA/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectB/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectC/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectD/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectE/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectF/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectG/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ └── projectSnapshot/
│ │ ├── Ballerina.toml
│ │ ├── Package.md
│ │ └── main.bal
│ ├── distribution-tests/
│ │ ├── disttestmultiples/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── bctestorg-disttestmultiples-any-1.1.0.bala
│ │ │ └── disttestmultiples.bal
│ │ ├── disttestpack1/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── disttestpack1.bal
│ │ ├── disttestpack2/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack3/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack4/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack5/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpackbeta6/
│ │ │ └── bctestorg-disttestpackbeta6-any-1.1.0.bala
│ │ └── forwardpack1/
│ │ └── bctestorg-forwardpack1-any-1.1.0.bala
│ ├── hierarchical-packages/
│ │ ├── PackageH.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageH.test.mod/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── api/
│ │ │ │ ├── Module.md
│ │ │ │ ├── Package.md
│ │ │ │ └── api.bal
│ │ │ └── api.doc/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── api.doc.bal
│ │ ├── PackageI/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageJ.test/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageK/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageL.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageM/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageN/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageO.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageP/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── PackageQ.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageR/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── PackageR.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageS/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageT.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageU/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ └── Transitive.PackageH.test/
│ │ ├── .gitignore
│ │ ├── Ballerina.toml
│ │ ├── Module.md
│ │ ├── Package.md
│ │ └── lib.bal
│ ├── maven-repos/
│ │ ├── myproject1/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pact/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg1/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg2/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg3/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ └── test-resolution/
│ │ ├── .devcontainer.json
│ │ ├── .gitignore
│ │ ├── Ballerina.toml
│ │ └── main.bal
│ └── testng.xml
├── pull_request_template.md
├── release-notes.md
├── resources/
│ └── tools/
│ ├── COPYRIGHT.txt
│ ├── INSTALL.txt
│ ├── LICENSE.txt
│ ├── PATENTS.txt
│ ├── README.txt
│ ├── distributions/
│ │ ├── ballerina-version
│ │ └── installer-version
│ └── scripts/
│ ├── install
│ └── install.bat
├── settings.gradle
└── stdlib-integration-tests/
├── auth/
│ └── tests/
│ ├── Config.toml
│ ├── auth_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── crypto/
│ └── tests/
│ ├── crypto_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── email/
│ └── tests/
│ └── email_test.bal
├── ftp/
│ └── tests/
│ └── ftp_test.bal
├── http/
│ └── tests/
│ ├── http_1_1_passthrough_test.bal
│ ├── http_2_0_server_push_test.bal
│ └── rest_introspection_test.bal
├── index.json
├── jwt/
│ └── tests/
│ ├── jwt_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ ├── ballerinaTruststore.p12
│ └── expiredTruststore.p12
├── library_package_test/
│ ├── Ballerina.toml
│ └── main.bal
├── mime/
│ └── tests/
│ └── mime_test.bal
├── oauth2/
│ └── tests/
│ ├── oauth2_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── task/
│ └── tests/
│ └── http_service.bal
├── tcp/
│ └── tests/
│ ├── mock_servers.bal
│ ├── resources/
│ │ ├── private.key
│ │ └── public.crt
│ └── tcp_tests.bal
├── transaction/
│ └── tests/
│ └── xa_transactions_test.bal
├── udp/
│ └── tests/
│ ├── mock_servers.bal
│ └── udp_tests.bal
├── url/
│ └── tests/
│ └── url_test.bal
├── websocket/
│ └── tests/
│ └── web_socket_test.bal
├── websub/
│ └── tests/
│ └── web_sub_test.bal
├── websub-advance/
│ └── tests/
│ ├── constants.bal
│ ├── resources/
│ │ └── security/
│ │ ├── ballerinaKeystore.p12
│ │ └── ballerinaTruststore.p12
│ ├── test_subscribers_at_basic_auth_secured_hub.bal
│ ├── test_subscribers_at_persistence_enabled_hub.bal
│ └── utils.bal
└── websub-generic/
└── tests/
├── 01_websub_publisher.bal
├── 02_redirection_publishers.bal
├── constants.bal
├── resources/
│ └── security/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── test_content_negotiation.bal
├── test_custom_subscribers.bal
├── test_different_content_type_subscribers.bal
├── test_multiple_subscribers.bal
├── test_redirected_subscribers.bal
├── test_subscriber.bal
├── test_subscriber_startup.bal
├── test_unsubscription_client.bal
└── utils.bal
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Ensure all Java files use LF.
*.java eol=lf
================================================
FILE: .github/CODEOWNERS
================================================
# This is a comment.
# Each line is a file pattern followed by one or more owners.
# See: https://help.github.com/articles/about-codeowners/
* @keizer619
# Components
/ballerina-test-automation/ @keizer619
/ballerina-test/ @keizer619
/build-time-tests/ @azinneera
/cache-generator/ @warunalakshitha
/config/ @keizer619
/devtools-integration-tests/ @azinneera
/dist-repo-builder/ @keizer619
/examples/ @MaryamZi @NipunaRanasinghe @gimantha
/gradle/ @keizer619
/installers/ @keizer619
/language-server-simulator/ @kavinduZoysa
/project-api-tests/ @azinneera
/resources/ @keizer619
/stdlib-integration-tests/ @NipunaRanasinghe
================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: "🐞 Report a Bug"
description: Create an issue if something does not work as expected.
labels: ["Type/Bug"]
body:
- type: textarea
id: background
attributes:
label: Description
description: Please share a clear and concise description of the problem.
placeholder: Description
- type: textarea
id: steps
attributes:
label: Steps to Reproduce
description: List the steps you followed when you encountered the issue. Provide sample source code to reproduce the issue where applicable.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Enter product/component version.
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment Details (with versions)
description: Mention the environment details (OS, Client, etc.) that the product is running on.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: '📚 Documentation Issue'
about: Request a new article, missing topic, or report an issue if a topic is incorrect in the current documentation.
url: https://github.com/ballerina-platform/ballerina-dev-website/issues/new/choose
- name: General Question
url: https://stackoverflow.com/questions/tagged/ballerina
about: "If you have a question then please ask on Stack Overflow using the #ballerina tag."
- name: Chat on Ballerina Discord Channel
url: https://discord.gg/ballerinalang
about: "Chat about anything else with the community."
================================================
FILE: .github/ISSUE_TEMPLATE/improvement.yml
================================================
name: "🚀 Improvement Request"
description: Suggest an improvement to the product.
labels: ["Type/Improvement"]
body:
- type: textarea
id: limitation
attributes:
label: Current Limitation
description: Describe the the current limitation.
validations:
required: true
- type: textarea
id: suggestion
attributes:
label: Suggested Improvement
description: Describe the the improvement you suggest.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Enter component version.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/new-feature.yml
================================================
name: "💡 New Feature Request"
description: Suggest new functionality and features for the product.
labels: ["Type/NewFeature"]
body:
- type: textarea
id: problem
attributes:
label: Problem
description: What is the problem this feature will solve?
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed Solution
description: Describe the solution you'd like to have.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives
description: Describe any alternatives have you considered
validations:
required: false
- type: input
id: version
attributes:
label: Version
description: Enter product/component version.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/task.yml
================================================
name: "✍️ Create a Task"
description: Create a new task.
labels: ["Type/Task"]
body:
- type: textarea
id: description
attributes:
label: Description
description: A clear description of what needs to be done.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: Enter product/component version.
validations:
required: false
================================================
FILE: .github/workflows/add_reason_labels.yml
================================================
on:
issues:
types: [closed]
jobs:
check-resolution-label:
runs-on: ubuntu-latest
if:
${{ contains(github.event.issue.labels.*.name, 'Type/Bug') && !(contains(github.event.issue.labels.*.name, 'Reason/EngineeringMistake') ||
contains(github.event.issue.labels.*.name, 'Reason/Complex') ||
contains(github.event.issue.labels.*.name, 'Reason/Regression') ||
contains(github.event.issue.labels.*.name, 'Reason/Other') ||
contains(github.event.issue.labels.*.name, 'Reason/Invalid') ||
contains(github.event.issue.labels.*.name, 'Reason/MultipleComponentInteraction')) }}
steps:
- run: echo Resolution label is not set
- run: gh issue comment $ISSUE --body "This issue is **NOT** closed with a proper **Reason/** label. Make sure to add proper reason label before closing. Please add or leave a comment with the proper reason label now.<br /><br /> - **Reason/EngineeringMistake** - The issue occurred due to a mistake made in the past.<br /> - **Reason/Regression** - The issue has introduced a regression.<br /> - **Reason/MultipleComponentInteraction** - Issue occured due to interactions in multiple components.<br /> - **Reason/Complex** - Issue occurred due to complex scenario.<br /> - **Reason/Invalid** - Issue is invalid.<br /> - **Reason/Other** - None of the above cases."
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.issue.html_url }}
================================================
FILE: .github/workflows/bbe-on-demand.yml
================================================
name: Run BBE On Demand
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to run BBE tests against'
required: true
default: 'master'
javaVersion:
description: 'Java version to run BBE tests on'
required: true
default: '25'
type: choice
options:
- '21'
- '25'
jobs:
bbe-tests:
name: Run BBE on Java ${{ github.event.inputs.javaVersion }}
if: github.repository_owner == 'ballerina-platform'
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-manual-bbe-tests
cancel-in-progress: true
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.branch }}
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Build Ballerina pack
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: ${{ secrets.BALLERINA_BOT_WORKFLOW }}
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x :ballerina:testExamples -x :project-api-tests:test
- name: Set up JDK ${{ github.event.inputs.javaVersion }} for BBE tests
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ github.event.inputs.javaVersion }}
- name: Run BBE tests
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: ${{ secrets.BALLERINA_BOT_WORKFLOW }}
run: |
java -version
./gradlew :ballerina:testExamples --stacktrace --scan --console=plain --no-daemon --continue -x :project-api-tests:test
================================================
FILE: .github/workflows/daily-build-2201.12.x.yml
================================================
name: Daily build (2201.12.x)
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)
jobs:
ubuntu-build:
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v3
with:
ref: 2201.12.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Get daily docker version
id: version
run: echo "::set-output name=version::$(date +'%Y-%m-%d')"
- name: Get project version
id: project-version
run: |
SHORT_VERSION=$((grep -w "version" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
DIST_VERSION=$((grep -w "version" | cut -d= -f2 | xargs) < gradle.properties)
LANG_VERSION=$((grep -w "ballerinaLangVersion" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION-$CODE_NAME
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=langversion::$LANG_VERSION"
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x project-api-tests:test
- name: Create linux-deb
id: run_installers_deb
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Create linux-rpm
id: run_installers_rpm
run: |
cd installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-x64.deb
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256 installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.version }}.zip
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Ballerina ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina ZIP
path: ballerina/build/distributions/ballerina-*-swan-lake.zip
- name: Archive Ballerina Short Name ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name ZIP
path: ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Linux deb
uses: actions/upload-artifact@v4
with:
name: Linux Installer deb
path: installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Archive Linux rpm
uses: actions/upload-artifact@v4
with:
name: Linux Installer rpm
path: installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
- name: Archive MacOS Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos.zip
- name: Archive MacOS-ARM Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos-arm.zip
- name: Archive Windows Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Windows Installer ZIP
path: ballerina/build/distributions/ballerina-*-windows.zip
- name: Archive Linux deb Hashes
uses: actions/upload-artifact@v4
with:
name: Linux deb Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256
- name: Archive Linux rpm Hashes
uses: actions/upload-artifact@v4
with:
name: Linux rpm Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256
- name: Archive Ballerina Zip Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Zip Hashes
path: ballerina-${{ steps.project-version.outputs.version }}.zip.sha256
- name: Archive Ballerina Short Name Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name Hashes
path: ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256
- name: Install Ballerina DEB
run: sudo dpkg -i installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ steps.project-version.outputs.langversion }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
- name: Checkout docker repo
uses: actions/checkout@v3
with:
repository: ballerina-platform/module-ballerina-docker
path: module-ballerina-docker
- name: Copy zip artifact
run: cp ballerina/build/distributions/ballerina-22*.zip module-ballerina-docker/base/docker/
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build the docker image
id: docker_build
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
load: true
push: false
tags: ballerina/ballerina:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
push: true
tags: ballerina/ballerina:nightly-2201.12.x
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- name: Copy deb artifact
run: cp installers/linux-deb/target/ballerina-*-linux-x64.deb module-ballerina-docker/base/devcontainer/
- name: Build the dev container docker image
id: docker_build_devcontainer
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
load: true
push: false
tags: ballerina/ballerina-devcontainer:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Run Trivy vulnerability scanner for dev container docker image
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina-devcontainer:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push dev container image
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
push: true
tags: ballerina/ballerina-devcontainer:nightly-2201.12.x
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Notify failure
if: ${{ failure() }}
run: |
curl -X POST \
'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"notify-build-failure\",
\"client_payload\": {
\"repoName\": \"ballerina-distribution\",
\"branch\": \"2201.12.x\"
}
}"
outputs:
project-version: ${{ steps.project-version.outputs.version }}
lang-version: ${{ steps.project-version.outputs.langversion }}
project-api-tests:
runs-on: ubuntu-latest
if: false
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
prodCentralToken: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew :project-api-tests:test --stacktrace --scan --console=plain --no-daemon --continue
windows-build:
runs-on: windows-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew.bat clean build --stacktrace --scan --console=plain --no-daemon -x test
ubuntu-rpm-installer-test:
needs: ubuntu-build
runs-on: ubuntu-latest
container: centos:latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Setup Files
run: |
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
- name: Download Ballerina rpm Installer
uses: actions/download-artifact@v4
with:
name: Linux Installer rpm
- name: Install Ballerina RPM
run: |
rpm -ivh ballerina-*-linux-x64.rpm
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
sed -i -e "s/swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
sed -i -e "s/swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
macos-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Download MacOS Intaller Zip
uses: actions/download-artifact@v4
with:
name: MacOS Installer ZIP
- name: Create macos-pkg
id: run_installers_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../
echo "Created macos-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Archive MacOS pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256
- name: Archive MacOS pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer pkg
path: installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Install Ballerina PKG
run: sudo installer -pkg installers/mac/target/pkg/ballerina-*-macos-x64.pkg -target /
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
macos-arm-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download MacOS-ARM Intaller Zip
uses: actions/download-artifact@v4
with:
name: MacOS-ARM Installer ZIP
- name: Create macos-arm-pkg
id: run_installers_arm_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../ -a arm
echo "Created macos-arm-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
- name: Archive MacOS-ARM pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256
- name: Archive MacOS-ARM pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ARM pkg
path: installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
windows-installer-build:
needs: ubuntu-build
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'
- name: Install GUID Generator
run: dotnet tool install -g dotnet-guid --version 0.5.2
- name: Set up Wix toolkit
run: echo "${WIX}bin" >> $GITHUB_PATH
shell: bash
- name: Download Windows Intaller Zip
uses: actions/download-artifact@v4
with:
name: Windows Installer ZIP
- name: Create windows-msi
id: run_installers_msi
run: |
move installers\windows .\..\..\
cd ..\..\windows
.\build-ballerina-windows-x64.bat --version ${{ needs.ubuntu-build.outputs.project-version }} --path .\..\ballerina-distribution\ballerina-distribution
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256 D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Archive Windows msi Hashes
uses: actions/upload-artifact@v4
with:
name: Windows msi Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256
- name: Archive Windows msi
uses: actions/upload-artifact@v4
with:
name: Windows Installer msi
path: D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Install Ballerina msi
run: msiexec /i D:\a\windows\target\msi\ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi /quiet /qr
shell: cmd
- name: Update Installer Test Configs
run: |
set DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
set SWAN_LAKE_LATEST_VERSION=swan-lake-%DISPLAY_TEXT%
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=%DISPLAY_TEXT%/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=%SWAN_LAKE_LATEST_VERSION%/" ballerina-test-automation/gradle.properties
shell: cmd
- name: Run Installer Tests
working-directory: .\ballerina-test-automation\installer-test
run: |
$env:Path += ";C:\Program Files\Ballerina\bin"
.\..\gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
trigger-notifications:
needs: [ubuntu-build, macos-installer-build, windows-installer-build]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.12.x
- name: Invoke Connector Ballerina Version Bump
run: |
ballerinaVersion=$((grep -w 'ballerinaLangVersion' | cut -d= -f2) < gradle.properties)
echo "Triggering connectors dependency bumps..." && \
curl -X POST \
https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: token ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"connector-update\",
\"client_payload\": {
\"ballerinaVersion\": \"$ballerinaVersion\"
}
}"
================================================
FILE: .github/workflows/daily-build-2201.13.x.yml
================================================
name: Daily build (2201.13.x)
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)
jobs:
ubuntu-build:
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v3
with:
ref: 2201.13.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Get daily docker version
id: version
run: echo "::set-output name=version::$(date +'%Y-%m-%d')"
- name: Get project version
id: project-version
run: |
SHORT_VERSION=$((grep -w "version" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
DIST_VERSION=$((grep -w "version" | cut -d= -f2 | xargs) < gradle.properties)
LANG_VERSION=$((grep -w "ballerinaLangVersion" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION-$CODE_NAME
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=langversion::$LANG_VERSION"
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x project-api-tests:test
- name: Create linux-deb
id: run_installers_deb
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Create linux-rpm
id: run_installers_rpm
run: |
cd installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-x64.deb
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256 installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.version }}.zip
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Ballerina ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina ZIP
path: ballerina/build/distributions/ballerina-*-swan-lake.zip
- name: Archive Ballerina Short Name ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name ZIP
path: ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Linux deb
uses: actions/upload-artifact@v4
with:
name: Linux Installer deb
path: installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Archive Linux rpm
uses: actions/upload-artifact@v4
with:
name: Linux Installer rpm
path: installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
- name: Archive MacOS Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos.zip
- name: Archive MacOS-ARM Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos-arm.zip
- name: Archive Windows Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Windows Installer ZIP
path: ballerina/build/distributions/ballerina-*-windows.zip
- name: Archive Linux deb Hashes
uses: actions/upload-artifact@v4
with:
name: Linux deb Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256
- name: Archive Linux rpm Hashes
uses: actions/upload-artifact@v4
with:
name: Linux rpm Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256
- name: Archive Ballerina Zip Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Zip Hashes
path: ballerina-${{ steps.project-version.outputs.version }}.zip.sha256
- name: Archive Ballerina Short Name Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name Hashes
path: ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256
- name: Install Ballerina DEB
run: sudo dpkg -i installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ steps.project-version.outputs.langversion }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
- name: Checkout docker repo
uses: actions/checkout@v3
with:
repository: ballerina-platform/module-ballerina-docker
path: module-ballerina-docker
- name: Copy zip artifact
run: cp ballerina/build/distributions/ballerina-22*.zip module-ballerina-docker/base/docker/
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build the docker image
id: docker_build
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
load: true
push: false
tags: ballerina/ballerina:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
push: true
tags: ballerina/ballerina:nightly-2201.13.x
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- name: Copy deb artifact
run: cp installers/linux-deb/target/ballerina-*-linux-x64.deb module-ballerina-docker/base/devcontainer/
- name: Build the dev container docker image
id: docker_build_devcontainer
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
load: true
push: false
tags: ballerina/ballerina-devcontainer:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Run Trivy vulnerability scanner for dev container docker image
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina-devcontainer:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push dev container image
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
push: true
tags: ballerina/ballerina-devcontainer:nightly-2201.13.x
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Notify failure
if: ${{ failure() }}
run: |
curl -X POST \
'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"notify-build-failure\",
\"client_payload\": {
\"repoName\": \"ballerina-distribution\",
\"branch\": \"2201.13.x\"
}
}"
outputs:
project-version: ${{ steps.project-version.outputs.version }}
lang-version: ${{ steps.project-version.outputs.langversion }}
project-api-tests:
runs-on: ubuntu-latest
if: false
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
prodCentralToken: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew :project-api-tests:test --stacktrace --scan --console=plain --no-daemon --continue
windows-build:
runs-on: windows-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew.bat clean build --stacktrace --scan --console=plain --no-daemon -x test
ubuntu-rpm-installer-test:
needs: ubuntu-build
runs-on: ubuntu-latest
container: centos:latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Setup Files
run: |
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
- name: Download Ballerina rpm Installer
uses: actions/download-artifact@v4
with:
name: Linux Installer rpm
- name: Install Ballerina RPM
run: |
rpm -ivh ballerina-*-linux-x64.rpm
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
sed -i -e "s/swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
sed -i -e "s/swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
macos-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Download MacOS Intaller Zip
uses: actions/download-artifact@v4
with:
name: MacOS Installer ZIP
- name: Create macos-pkg
id: run_installers_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../
echo "Created macos-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Archive MacOS pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256
- name: Archive MacOS pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer pkg
path: installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Install Ballerina PKG
run: sudo installer -pkg installers/mac/target/pkg/ballerina-*-macos-x64.pkg -target /
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
macos-arm-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download MacOS-ARM Intaller Zip
uses: actions/download-artifact@v4
with:
name: MacOS-ARM Installer ZIP
- name: Create macos-arm-pkg
id: run_installers_arm_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../ -a arm
echo "Created macos-arm-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
- name: Archive MacOS-ARM pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256
- name: Archive MacOS-ARM pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ARM pkg
path: installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
windows-installer-build:
needs: ubuntu-build
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'
- name: Install GUID Generator
run: dotnet tool install -g dotnet-guid --version 0.5.2
- name: Set up Wix toolkit
run: echo "${WIX}bin" >> $GITHUB_PATH
shell: bash
- name: Download Windows Intaller Zip
uses: actions/download-artifact@v4
with:
name: Windows Installer ZIP
- name: Create windows-msi
id: run_installers_msi
run: |
move installers\windows .\..\..\
cd ..\..\windows
.\build-ballerina-windows-x64.bat --version ${{ needs.ubuntu-build.outputs.project-version }} --path .\..\ballerina-distribution\ballerina-distribution
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256 D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Archive Windows msi Hashes
uses: actions/upload-artifact@v4
with:
name: Windows msi Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256
- name: Archive Windows msi
uses: actions/upload-artifact@v4
with:
name: Windows Installer msi
path: D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Install Ballerina msi
run: msiexec /i D:\a\windows\target\msi\ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi /quiet /qr
shell: cmd
- name: Update Installer Test Configs
run: |
set DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
set SWAN_LAKE_LATEST_VERSION=swan-lake-%DISPLAY_TEXT%
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=%DISPLAY_TEXT%/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=%SWAN_LAKE_LATEST_VERSION%/" ballerina-test-automation/gradle.properties
shell: cmd
- name: Run Installer Tests
working-directory: .\ballerina-test-automation\installer-test
run: |
$env:Path += ";C:\Program Files\Ballerina\bin"
.\..\gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
trigger-notifications:
needs: [ubuntu-build, macos-installer-build, windows-installer-build]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: 2201.13.x
- name: Invoke Connector Ballerina Version Bump
run: |
ballerinaVersion=$((grep -w 'ballerinaLangVersion' | cut -d= -f2) < gradle.properties)
echo "Triggering connectors dependency bumps..." && \
curl -X POST \
https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: token ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"connector-update\",
\"client_payload\": {
\"ballerinaVersion\": \"$ballerinaVersion\"
}
}"
================================================
FILE: .github/workflows/daily-build-editor.yml
================================================
name: Daily build editor
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)
jobs:
ubuntu-build:
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '10.22.1'
- name: Checkout Dev Tools Repository
uses: actions/checkout@v3
with:
repository: ballerina-platform/ballerina-dev-tools
path: ballerina-dev-tools
- name: Build with Gradle
id: build-dev-tools
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: |
cd ballerina-dev-tools
echo "::set-output name=version::$(grep "^version=" gradle.properties | cut -d'=' -f2)"
echo "::set-output name=langVersion::$(grep "^ballerinaLangVersion=" gradle.properties | cut -d'=' -f2)"
./gradlew clean build --stacktrace --scan -x test --console=plain --no-daemon --continue publishToMavenLocal
cd ..
- name: Checkout Distribution Repository
uses: actions/checkout@v3
with:
repository: ballerina-platform/ballerina-distribution
path: ballerina-distribution
- name: Get daily docker version
id: version
run: echo "::set-output name=version::$(date +'%Y-%m-%d')"
- name: Get project version
id: project-version
run: |
cd ballerina-distribution
SHORT_VERSION=$((grep -w "version" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
DIST_VERSION=$((grep -w "version" | cut -d= -f2 | xargs) < gradle.properties)
LANG_VERSION=$((grep -w "ballerinaLangVersion" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION-$CODE_NAME
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=langversion::$LANG_VERSION"
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: |
cd ballerina-distribution
sed -i "s/^devToolsVersion=.*/devToolsVersion=${{ steps.build-dev-tools.outputs.version }}/" gradle.properties
sed -i "s/^ballerinaLangVersion=.*/ballerinaLangVersion=${{ steps.build-dev-tools.outputs.langVersion }}/" gradle.properties
./gradlew clean build --stacktrace --scan -x test --console=plain --no-daemon --continue -x project-api-tests:test
- name: Create linux-deb
id: run_installers_deb
run: |
cd ballerina-distribution/installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Create linux-rpm
id: run_installers_rpm
run: |
cd ballerina-distribution/installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Archive Ballerina ZIP
uses: actions/upload-artifact@v4
id: artifact-upload
with:
name: Ballerina ZIP
path: ballerina-distribution/ballerina/build/distributions/ballerina-*-swan-lake.zip
- name: Archive Ballerina Short Name ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name ZIP
path: ballerina-distribution/ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Linux deb
uses: actions/upload-artifact@v4
with:
name: Linux Installer deb
path: ballerina-distribution/installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Archive Linux rpm
uses: actions/upload-artifact@v4
with:
name: Linux Installer rpm
path: ballerina-distribution/installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
- name: Archive MacOS Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ZIP
path: ballerina-distribution/ballerina/build/distributions/ballerina-*-macos.zip
- name: Archive MacOS-ARM Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM Installer ZIP
path: ballerina-distribution/ballerina/build/distributions/ballerina-*-macos-arm.zip
- name: Archive Windows Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Windows Installer ZIP
path: ballerina-distribution/ballerina/build/distributions/ballerina-*-windows.zip
- name: Send release notification
shell: bash
run: |
body=$(cat << EOF
{
"cards": [
{
"header": {
"title": "Daily Build",
},
"sections": [
{
"widgets": [
{
"keyValue": {
"topLabel": "Ballerina Distribution",
"content": "v${{ steps.project-version.outputs.langversion }}",
"onClick": {
"openLink": {
"url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}
},
"iconUrl": "https://lh6.googleusercontent.com/proxy/R9Rx8vYNd-_HZn58ckf5PNX7RMlC6P-B75fB7UQ_GFH5R0UwtfJ1gVNARBvH1us8LBuK4NVFsvMGnwZkm-H2_9ACwH_j0lQmExR1SRMNGlFcbrm_1O7foFpqqOiVzA",
"button": {
"textButton": {
"text": "Download ZIP",
"onClick": {
"openLink": {
"url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts/${{ steps.artifact-upload.outputs.artifact-id }}"
}
}
}
}
}
}
]
}
]
}
]
}
EOF
)
curl \
-X POST \
-H 'Content-Type: application/json' \
"https://chat.googleapis.com/v1/spaces/AAAApvQDm3o/messages?key=${{ secrets.EDITOR_CHAT_BOT_KEY }}&token=${{ secrets.EDITOR_CHAT_BOT_TOKEN }}" \
-d "$body"
================================================
FILE: .github/workflows/daily-build.yml
================================================
name: Daily build
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)
jobs:
ubuntu-build:
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Get daily docker version
id: version
run: echo "::set-output name=version::$(date +'%Y-%m-%d')"
- name: Get project version
id: project-version
run: |
SHORT_VERSION=$((grep -w "version" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
DIST_VERSION=$((grep -w "version" | cut -d= -f2 | xargs) < gradle.properties)
LANG_VERSION=$((grep -w "ballerinaLangVersion" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION-$CODE_NAME
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=langversion::$LANG_VERSION"
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x project-api-tests:test
- name: Create linux-deb
id: run_installers_deb
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Create linux-rpm
id: run_installers_rpm
run: |
cd installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.project-version.outputs.version }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-x64.deb
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256 installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.version }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.version }}.zip
openssl dgst -sha256 -out ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Ballerina ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina ZIP
path: ballerina/build/distributions/ballerina-*-swan-lake.zip
- name: Archive Ballerina Short Name ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name ZIP
path: ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
# Delete existing nightly release if it exists
- name: Delete existing nightly release
continue-on-error: true
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const release = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: 'nightly'
});
await github.rest.repos.deleteRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.data.id
});
await github.rest.git.deleteRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: 'tags/nightly'
});
# Create nightly release and upload artifacts
- name: Create nightly release
uses: softprops/action-gh-release@v1
with:
tag_name: nightly
name: Nightly Build - ${{ steps.version.outputs.version }}
body: |
Automated nightly build for ${{ steps.version.outputs.version }}
Ballerina Version: ${{ steps.project-version.outputs.version }}
prerelease: true
files: |
ballerina/build/distributions/ballerina-*-swan-lake.zip
installers/linux-deb/target/ballerina-*-linux-x64.deb
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Archive Linux deb
uses: actions/upload-artifact@v4
with:
name: Linux Installer deb
path: installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Archive Linux rpm
uses: actions/upload-artifact@v4
with:
name: Linux Installer rpm
path: installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
- name: Archive Linux Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Linux Installer ZIP
path: ballerina/build/distributions/ballerina-*-linux.zip
- name: Archive Linux-ARM Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Linux-ARM Installer ZIP
path: ballerina/build/distributions/ballerina-*-linux-arm.zip
- name: Archive MacOS Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos.zip
- name: Archive MacOS-ARM Installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM Installer ZIP
path: ballerina/build/distributions/ballerina-*-macos-arm.zip
- name: Archive Windows Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Windows Installer ZIP
path: ballerina/build/distributions/ballerina-*-windows.zip
- name: Archive Linux deb Hashes
uses: actions/upload-artifact@v4
with:
name: Linux deb Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb.sha256
- name: Archive Linux rpm Hashes
uses: actions/upload-artifact@v4
with:
name: Linux rpm Hashes
path: ballerina-${{ steps.project-version.outputs.version }}-linux-x64.rpm.sha256
- name: Archive Ballerina Zip Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Zip Hashes
path: ballerina-${{ steps.project-version.outputs.version }}.zip.sha256
- name: Archive Ballerina Short Name Hashes
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name Hashes
path: ballerina-${{ steps.project-version.outputs.sversion }}.zip.sha256
- name: Install Ballerina DEB
run: sudo dpkg -i installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ steps.project-version.outputs.langversion }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
- name: Checkout docker repo
uses: actions/checkout@v2
with:
repository: ballerina-platform/module-ballerina-docker
path: module-ballerina-docker
- name: Copy zip artifact
run: cp ballerina/build/distributions/ballerina-22*.zip module-ballerina-docker/base/docker/
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build the docker image
id: docker_build
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
load: true
push: false
tags: ballerina/ballerina:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
push: true
tags: ballerina/ballerina:nightly
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- name: Copy deb artifact
run: cp installers/linux-deb/target/ballerina-*-linux-x64.deb module-ballerina-docker/base/devcontainer/
- name: Build the dev container docker image
id: docker_build_devcontainer
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
load: true
push: false
tags: ballerina/ballerina-devcontainer:nightly-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Clean up created artifacts
run: |
rm -rf installers/linux-deb/target/ballerina-*-linux-x64.deb
rm -rf installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
rm -rf ballerina/build/distributions/ballerina-*-macos.zip
rm -rf ballerina/build/distributions/ballerina-*-macos-arm.zip
rm -rf ballerina/build/distributions/ballerina-*-windows.zip
- name: Run Trivy vulnerability scanner for dev container docker image
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina-devcontainer:nightly-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
- name: Build and push dev container image
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/devcontainer/
push: true
tags: ballerina/ballerina-devcontainer:nightly
build-args: |
BALLERINA_DIST=ballerina-${{ steps.project-version.outputs.version }}-linux-x64.deb
- name: Notify failure
if: ${{ failure() }}
run: |
curl -X POST \
'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"notify-build-failure\",
\"client_payload\": {
\"repoName\": \"ballerina-distribution\",
\"branch\": \"master\"
}
}"
outputs:
project-version: ${{ steps.project-version.outputs.version }}
lang-version: ${{ steps.project-version.outputs.langversion }}
project-api-tests:
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
prodCentralToken: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew :project-api-tests:test --stacktrace --scan --console=plain --no-daemon --continue
windows-build:
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build with Gradle
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: ./gradlew.bat clean build --stacktrace --scan --console=plain --no-daemon -x test
ubuntu-rpm-installer-test:
needs: ubuntu-build
runs-on: ubuntu-latest
container: centos:latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Setup Files
run: |
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
- name: Download Ballerina rpm Installer
uses: actions/download-artifact@v4
with:
name: Linux Installer rpm
- name: Install Ballerina RPM
run: |
rpm -ivh ballerina-*-linux-x64.rpm
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
sed -i -e "s/swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
sed -i -e "s/swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
ubuntu-arm-installer-build:
needs: ubuntu-build
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download Linux-ARM Installer Zip
uses: actions/download-artifact@v4
with:
name: Linux-ARM Installer ZIP
- name: Create linux-arm deb
working-directory: installers/linux-deb
run: |
./build-ballerina-linux-deb-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../ -a arm
echo "Created linux-arm-deb successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-linux-arm-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-arm-x64.deb
- name: Archive Linux deb
uses: actions/upload-artifact@v4
with:
name: Linux-ARM Installer deb
path: installers/linux-deb/target/ballerina-*-linux-arm-x64.deb
- name: Archive Linux deb Hashes
uses: actions/upload-artifact@v4
with:
name: Linux-ARM deb Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-linux-arm-x64.deb.sha256
macos-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download MacOS Installer Zip
uses: actions/download-artifact@v4
with:
name: MacOS Installer ZIP
- name: Create macos-pkg
id: run_installers_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../
echo "Created macos-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Archive MacOS pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-x64.pkg.sha256
- name: Archive MacOS pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer pkg
path: installers/mac/target/pkg/ballerina-*-macos-x64.pkg
- name: Install Ballerina PKG
run: sudo installer -pkg installers/mac/target/pkg/ballerina-*-macos-x64.pkg -target /
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
macos-arm-installer-build:
needs: ubuntu-build
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download MacOS-ARM Intaller Zip
uses: actions/download-artifact@v4
with:
name: MacOS-ARM Installer ZIP
- name: Create macos-arm-pkg
id: run_installers_arm_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.ubuntu-build.outputs.project-version }} -p ./../../ -a arm
echo "Created macos-arm-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256 installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
- name: Archive MacOS-ARM pkg Hashes
uses: actions/upload-artifact@v4
with:
name: MacOS-ARM pkg Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-macos-arm-x64.pkg.sha256
- name: Archive MacOS-ARM pkg
uses: actions/upload-artifact@v4
with:
name: MacOS Installer ARM pkg
path: installers/mac/target/pkg/ballerina-*-macos-arm-x64.pkg
windows-installer-build:
needs: ubuntu-build
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'
- name: Install GUID Generator
run: dotnet tool install -g dotnet-guid --version 0.5.2
- name: Set up Wix toolkit
run: echo "${WIX}bin" >> $GITHUB_PATH
shell: bash
- name: Download Windows Installer Zip
uses: actions/download-artifact@v4
with:
name: Windows Installer ZIP
- name: Create windows-msi
id: run_installers_msi
run: |
move installers\windows .\..\..\
cd ..\..\windows
.\build-ballerina-windows-x64.bat --version ${{ needs.ubuntu-build.outputs.project-version }} --path .\..\ballerina-distribution\ballerina-distribution
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256 D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Archive Windows msi Hashes
uses: actions/upload-artifact@v4
with:
name: Windows msi Hashes
path: ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi.sha256
- name: Archive Windows msi
uses: actions/upload-artifact@v4
with:
name: Windows Installer msi
path: D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Install Ballerina msi
run: msiexec /i D:\a\windows\target\msi\ballerina-${{ needs.ubuntu-build.outputs.project-version }}-windows-x64.msi /quiet /qr
shell: cmd
- name: Update Installer Test Configs
run: |
set DISPLAY_TEXT=${{ needs.ubuntu-build.outputs.lang-version }}
set SWAN_LAKE_LATEST_VERSION=swan-lake-%DISPLAY_TEXT%
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=%DISPLAY_TEXT%/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=%SWAN_LAKE_LATEST_VERSION%/" ballerina-test-automation/gradle.properties
shell: cmd
- name: Run Installer Tests
working-directory: .\ballerina-test-automation\installer-test
run: |
$env:Path += ";C:\Program Files\Ballerina\bin"
.\..\gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
env:
TEST_MODE_ACTIVE: true
trigger-notifications:
needs: [ubuntu-build, macos-installer-build, windows-installer-build]
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Invoke Connector Ballerina Version Bump
run: |
ballerinaVersion=$((grep -w 'ballerinaLangVersion' | cut -d= -f2) < gradle.properties)
echo "Triggering connectors dependency bumps..." && \
curl -X POST \
https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: token ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"connector-update\",
\"client_payload\": {
\"ballerinaVersion\": \"$ballerinaVersion\"
}
}"
================================================
FILE: .github/workflows/fossa_scan.yml
================================================
name: Fossa Scan
on:
workflow_dispatch:
schedule:
- cron: '30 18 * * *' # 00:00 in LK time (GMT+5:30)
jobs:
fossa-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: fossas/fossa-action@main
env:
packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }}
packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
api-key: ${{secrets.FOSSA_APIKEY}}
================================================
FILE: .github/workflows/language_server_simulator_fhir.yml
================================================
name: Language Server Simulator on FHIR
on:
schedule:
- cron: '0 */12 * * *'
workflow_dispatch:
jobs:
run_simulator:
name: Run LS Simulator
runs-on: ubuntu-latest
timeout-minutes: 240
strategy:
fail-fast: false
matrix:
branch: [ "master" ]
skipGenerators: [ "", "IMPORT_STATEMENT" ]
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: ${{ matrix.branch }}
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Initialize sub-modules
run: git submodule update --init
- name: Build with Gradle
timeout-minutes: 180
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
run: |
export DISPLAY=':99.0'
/usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
./gradlew clean :language-server-simulator:runLSSimulatorOnFHIR -Dls.simulation.skipGenerators=${{ matrix.skipGenerators }}
- name: Check Simulation Failure
run: if test -f dump.hprof; then exit 1; else exit 0; fi
- name: Analyze Heap Dump If Exists
if: failure()
run: |
if test -f dump.hprof; then echo "Heap sump exists. Analyzing..."; else exit 0; fi
wget https://ftp.jaist.ac.jp/pub/eclipse/mat/1.12.0/rcp/MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip
unzip MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip
./mat/ParseHeapDump.sh ./dump.hprof org.eclipse.mat.api:suspects
- name: Upload Heap Dumps
uses: actions/upload-artifact@v4
if: always()
with:
name: heap_dump-${{ matrix.branch }}.hprof
path: '*.hprof'
- name: Upload Leaks Suspects
uses: actions/upload-artifact@v4
if: failure()
with:
name: Leak_Suspects-${{ matrix.branch }}
path: 'dump_Leak_Suspects.zip'
- name: Notify failure
if: failure()
run: |
curl -X POST \
'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"notify-simulator-failure\",
\"client_payload\": {
\"branch\": \"${{ matrix.branch }}\",
\"runId\":\"${{ github.run_id }}\"
}
}"
================================================
FILE: .github/workflows/language_server_simulator_nballerina.yml
================================================
name: Language Server Simulator on nBallerina
on:
schedule:
- cron: '0 */12 * * *'
workflow_dispatch:
jobs:
run_simulator:
name: Run LS Simulator
runs-on: ubuntu-latest
timeout-minutes: 240
strategy:
fail-fast: false
matrix:
branch: [ "master" ]
skipGenerators: [ "", "IMPORT_STATEMENT" ]
steps:
- name: Checkout Repository
uses: actions/checkout@v2
with:
ref: ${{ matrix.branch }}
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Initialize sub-modules
run: git submodule update --init
- name: Build with Gradle
timeout-minutes: 180
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
run: |
export DISPLAY=':99.0'
/usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
./gradlew clean :language-server-simulator:runLSSimulatorOnnBallerina -Dls.simulation.skipGenerators=${{ matrix.skipGenerators }}
- name: Check Simulation Failure
run: if test -f dump.hprof; then exit 1; else exit 0; fi
- name: Analyze Heap Dump If Exists
if: failure()
run: |
if test -f dump.hprof; then echo "Heap sump exists. Analyzing..."; else exit 0; fi
wget https://ftp.jaist.ac.jp/pub/eclipse/mat/1.12.0/rcp/MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip
unzip MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip
./mat/ParseHeapDump.sh ./dump.hprof org.eclipse.mat.api:suspects
- name: Upload Heap Dumps
uses: actions/upload-artifact@v4
if: always()
with:
name: heap_dump-${{ matrix.branch }}.hprof
path: '*.hprof'
- name: Upload Leaks Suspects
uses: actions/upload-artifact@v4
if: failure()
with:
name: Leak_Suspects-${{ matrix.branch }}
path: 'dump_Leak_Suspects.zip'
- name: Notify failure
if: failure()
run: |
curl -X POST \
'https://api.github.com/repos/ballerina-platform/ballerina-release/dispatches' \
-H 'Accept: application/vnd.github.v3+json' \
-H 'Authorization: Bearer ${{ secrets.BALLERINA_BOT_TOKEN }}' \
--data "{
\"event_type\": \"notify-simulator-failure\",
\"client_payload\": {
\"branch\": \"${{ matrix.branch }}\",
\"runId\":\"${{ github.run_id }}\"
}
}"
================================================
FILE: .github/workflows/main.yml
================================================
name: Build
on:
push:
branches:
- master
- stage
- ballerina-1.1.x
workflow_dispatch:
inputs:
skipTests:
description: 'Skip Tests during build'
required: false
default: 'false'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Get project version
id: project-version
run: |
SHORT_VERSION=$((grep -w "version" | cut -d= -f2 | cut -d- -f1) < gradle.properties)
DIST_VERSION=$((grep -w "version" | cut -d= -f2) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION-$CODE_NAME
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
- name: Build Ballerina Distribution
if: ${{ github.event.inputs.skipTests == '' || github.event.inputs.skipTests == 'false' }}
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x project-api-tests:test
- name: Build Ballerina Distribution Skip Tests
if: ${{ github.event.inputs.skipTests == 'true' }}
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x test
- name: Archive Ballerina ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina ZIP
path: ballerina/build/distributions/ballerina-*-swan-lake.zip
- name: Archive Ballerina Short Name ZIP
uses: actions/upload-artifact@v4
with:
name: Ballerina Short Name ZIP
path: ballerina/build/distributions/ballerina-${{ steps.project-version.outputs.sversion }}.zip
- name: Archive Linux installer ZIP
uses: actions/upload-artifact@v4
with:
name: Linux installer ZIP
path: ballerina/build/distributions/ballerina-*-linux.zip
- name: Archive MacOS installer ZIP
uses: actions/upload-artifact@v4
with:
name: MacOS installer ZIP
path: ballerina/build/distributions/ballerina-*-macos.zip
- name: Archive Windows Installer ZIP
uses: actions/upload-artifact@v4
with:
name: Windows Installer ZIP
path: ballerina/build/distributions/ballerina-*-windows.zip
================================================
FILE: .github/workflows/publish-release-artifacts-1.2.x.yml
================================================
name: Publish Release Artifacts (1.2.x)
on:
workflow_dispatch:
inputs:
release_version:
description: 'Release Version e.g., 1.2.31, 1.2.31-rc1'
default: '1.2.31'
required: true
jobs:
publish-artifacts:
name: Publish Release Artifacts
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '8'
- name: Set version env variable
id: set-version
run: |
RELEASE_VERSION=${{ github.event.inputs.release_version }}
VERSION=$(cut -d- -f1 <<< $RELEASE_VERSION)
TAGGED_VERSION=$RELEASE_VERSION
DISPLAY_VERSION=$VERSION
echo VERSION=$VERSION >> $GITHUB_ENV
echo DISPLAY_VERSION=$DISPLAY_VERSION >> $GITHUB_ENV
echo GIT_TAG=$TAGGED_VERSION >> $GITHUB_ENV
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=taggedVersion::$TAGGED_VERSION"
- name: Download artifacts
run: |
baseUrl="https://github.com/ballerina-platform/ballerina-distribution/releases/download/v$GIT_TAG"
rm -rf $VERSION
mkdir $VERSION
cd $VERSION
wget "$baseUrl/ballerina-$VERSION.zip"
wget "$baseUrl/jballerina-$VERSION.zip"
wget "$baseUrl/ballerina-windows-installer-x64-$VERSION.msi"
wget "$baseUrl/ballerina-linux-installer-x64-$VERSION.deb"
wget "$baseUrl/ballerina-linux-installer-x64-$VERSION.rpm"
wget "$baseUrl/ballerina-macos-installer-x64-$VERSION.pkg"
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }}
packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
- name: Generate metadata json
working-directory: ${{ steps.set-version.outputs.version }}
run: |
date=`date +%Y-%m-%d`
winInstSize=`ls -lh ballerina-windows-installer-x64-$VERSION.msi | cut -d " " -f5 | sed 's/M/mb/g'`
linuxInstSize=`ls -lh ballerina-linux-installer-x64-$VERSION.deb | cut -d " " -f5 | sed 's/M/mb/g'`
rpmInstSize=`ls -lh ballerina-linux-installer-x64-$VERSION.rpm | cut -d " " -f5 | sed 's/M/mb/g'`
macInstSize=`ls -lh ballerina-macos-installer-x64-$VERSION.pkg | cut -d " " -f5 | sed 's/M/mb/g'`
fileName=metadata.json
echo { > $fileName
echo " \"version\":\"$VERSION\"," >> $fileName
echo " \"release-date\":\"$date\"," >> $fileName
echo " \"windows-installer\":\"ballerina-windows-installer-x64-$VERSION.msi\"," >> $fileName
echo " \"windows-installer-size\":\"$winInstSize\"," >> $fileName
echo " \"linux-installer\":\"ballerina-linux-installer-x64-$VERSION.deb\"," >> $fileName
echo " \"linux-installer-size\":\"$linuxInstSize\"," >> $fileName
echo " \"macos-installer\":\"ballerina-macos-installer-x64-$VERSION.pkg\"," >> $fileName
echo " \"macos-installer-size\":\"$macInstSize\"," >> $fileName
echo " \"rpm-installer\":\"ballerina-linux-installer-x64-$VERSION.rpm\"," >> $fileName
echo " \"rpm-installer-size\":\"$rpmInstSize\"," >> $fileName
echo " \"other-artefacts\":[ " >> $fileName
echo " \"ballerina-$VERSION.zip\"," >> $fileName
echo " \"ballerina-$VERSION.vsix\"" >> $fileName
echo " ]", >> $fileName
echo " \"api-docs\":\"ballerina-api-docs-$VERSION.zip\"," >> $fileName
echo " \"release-notes\":\"ballerina-release-notes-$VERSION.md\"" >> $fileName
echo } >> $fileName
- name: Archive metadata json
uses: actions/upload-artifact@v4
with:
name: Metadata JSON
path: ${{ steps.set-version.outputs.version }}/metadata.json
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Process docker
id: process-docker
run: |
git clone --single-branch --branch ballerina-1.2.x https://github.com/ballerina-platform/module-ballerina-docker
DOCKER_REPO='module-ballerina-docker'
echo "::set-output name=dockerRepo::$DOCKER_REPO"
- name: Enable experimental functions
run: |
echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json
sudo service docker restart
docker version
- name: Build and push docker image
run: |
DOCKER_REPO=${{ steps.process-docker.outputs.dockerRepo }}
cp $VERSION/ballerina-$VERSION.zip $DOCKER_REPO/base/docker/
docker build --no-cache=true --squash --build-arg BALLERINA_DIST=ballerina-$VERSION.zip -t ballerina/ballerina:$VERSION $DOCKER_REPO/base/docker/
rm $DOCKER_REPO/base/docker/ballerina-$VERSION.zip
docker push ballerina/ballerina:$VERSION
docker rmi ballerina/ballerina:$VERSION
docker image prune -f
- name: Publish Artifacts
run: |
sudo apt-get install python3-setuptools
python3 -m pip install --user awscli
aws configure set aws_access_key_id $s3_acc_id
aws configure set aws_secret_access_key $s3_acc_key
aws s3 cp $VERSION s3://dist-dev.ballerina.io/downloads/$VERSION --recursive
env:
s3_acc_id: ${{ secrets.S3_ID }}
s3_acc_key: ${{ secrets.S3_KEY }}
================================================
FILE: .github/workflows/publish-release-artifacts.yml
================================================
name: Publish Release Artifacts
on:
workflow_dispatch:
inputs:
release_version:
description: 'Release Version e.g., 2201.1.1, 2201.1.1-rc1'
default: '2201.1.1'
required: true
jobs:
publish-artifacts:
name: Publish Release Artifacts
runs-on: ubuntu-latest
if: github.repository_owner == 'ballerina-platform'
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Set version env variable
id: set-version
env:
RELEASE_VERSION: ${{ github.event.inputs.release_version }}
run: |
if [[ "$RELEASE_VERSION" == *-SNAPSHOT ]]; then
VERSION="${RELEASE_VERSION%-SNAPSHOT}"
else
VERSION="$RELEASE_VERSION"
fi
DIST_VERSION="${VERSION%%-*}"
CODE_NAME="swan-lake"
TAGGED_VERSION=$RELEASE_VERSION
LONG_VERSION=$DIST_VERSION-$CODE_NAME
UPDATE_NUMBER=$(cut -d'.' -f2 <<< $DIST_VERSION)
DISPLAY_VERSION="$VERSION (Swan Lake Update $UPDATE_NUMBER)"
echo VERSION=$VERSION >> $GITHUB_ENV
echo DIST_VERSION=$DIST_VERSION >> $GITHUB_ENV
echo LONG_VERSION=$LONG_VERSION >> $GITHUB_ENV
echo DISPLAY_VERSION=$DISPLAY_VERSION >> $GITHUB_ENV
echo GIT_TAG=$TAGGED_VERSION >> $GITHUB_ENV
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "distVersion=$DIST_VERSION" >> "$GITHUB_OUTPUT"
echo "taggedVersion=$TAGGED_VERSION" >> "$GITHUB_OUTPUT"
echo "::set-output name=updateNumber::$UPDATE_NUMBER"
echo "::set-output name=longVersion::$LONG_VERSION"
- name: Download artifacts
run: |
baseUrl="https://github.com/ballerina-platform/ballerina-distribution/releases/download/v$GIT_TAG"
updateNumber=${{ steps.set-version.outputs.updateNumber }}
distVersion=${{ steps.set-version.outputs.distVersion }}
rm -rf $VERSION
mkdir $VERSION
cd $VERSION
wget "$baseUrl/ballerina-$LONG_VERSION.zip"
wget "$baseUrl/ballerina-$distVersion.zip"
wget "$baseUrl/ballerina-$LONG_VERSION-windows-x64.msi"
wget "$baseUrl/ballerina-$LONG_VERSION-linux-x64.deb"
wget "$baseUrl/ballerina-$LONG_VERSION-linux-x64.rpm"
wget "$baseUrl/ballerina-$LONG_VERSION-macos-x64.pkg"
if [ "$updateNumber" -ge 5 ]; then
wget "$baseUrl/ballerina-$LONG_VERSION-macos-arm-x64.pkg"
fi
if [ "$updateNumber" -ge 11 ]; then
wget "$baseUrl/ballerina-$LONG_VERSION-linux-arm-x64.deb"
fi
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }}
packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
- name: Generate metadata json
working-directory: ${{ steps.set-version.outputs.version }}
run: |
updateNumber=${{ steps.set-version.outputs.updateNumber }}
date=`date +%Y-%m-%d`
winInstSize=`ls -lh ballerina-$LONG_VERSION-windows-x64.msi | cut -d " " -f5 | sed 's/M/mb/g'`
linuxInstSize=`ls -lh ballerina-$LONG_VERSION-linux-x64.deb | cut -d " " -f5 | sed 's/M/mb/g'`
rpmInstSize=`ls -lh ballerina-$LONG_VERSION-linux-x64.rpm | cut -d " " -f5 | sed 's/M/mb/g'`
macInstSize=`ls -lh ballerina-$LONG_VERSION-macos-x64.pkg | cut -d " " -f5 | sed 's/M/mb/g'`
fileName=metadata.json
echo "{" >> $fileName
echo " \"version\":\"$VERSION\"," >> $fileName
echo " \"short-version\":\"$VERSION\"," >> $fileName
echo " \"display-version\":\"$DISPLAY_VERSION\"," >> $fileName
echo " \"release-date\":\"$date\"," >> $fileName
echo " \"windows-installer\":\"ballerina-$LONG_VERSION-windows-x64.msi\"," >> $fileName
echo " \"windows-installer-size\":\"$winInstSize\"," >> $fileName
echo " \"linux-installer\":\"ballerina-$LONG_VERSION-linux-x64.deb\"," >> $fileName
echo " \"linux-installer-size\":\"$linuxInstSize\"," >> $fileName
if [ "$updateNumber" -ge 11 ]; then
linuxArmInstSize=`ls -lh ballerina-$LONG_VERSION-linux-arm-x64.deb | cut -d " " -f5 | sed 's/M/mb/g'`
echo " \"linux-arm-installer\":\"ballerina-$LONG_VERSION-linux-arm-x64.deb\"," >> $fileName
echo " \"linux-arm-installer-size\":\"$linuxArmInstSize\"," >> $fileName
fi
echo " \"macos-installer\":\"ballerina-$LONG_VERSION-macos-x64.pkg\"," >> $fileName
echo " \"macos-installer-size\":\"$macInstSize\"," >> $fileName
if [ "$updateNumber" -ge 5 ]; then
macArmInstSize=`ls -lh ballerina-$LONG_VERSION-macos-arm-x64.pkg | cut -d " " -f5 | sed 's/M/mb/g'`
echo " \"macos-arm-installer\":\"ballerina-$LONG_VERSION-macos-arm-x64.pkg\"," >> $fileName
echo " \"macos-arm-installer-size\":\"$macArmInstSize\"," >> $fileName
fi
echo " \"rpm-installer\":\"ballerina-$LONG_VERSION-linux-x64.rpm\"," >> $fileName
echo " \"rpm-installer-size\":\"$rpmInstSize\"," >> $fileName
echo " \"other-artefacts\":[ " >> $fileName
echo " \"ballerina-$LONG_VERSION.zip\"" >> $fileName
echo " ]", >> $fileName
echo " \"api-docs\":\"ballerina-api-docs-$VERSION.zip\"," >> $fileName
echo " \"release-notes\":\"ballerina-release-notes-$VERSION.md\"" >> $fileName
echo "}" >> $fileName
- name: Archive metadata json
uses: actions/upload-artifact@v4
with:
name: Metadata JSON
path: ${{ steps.set-version.outputs.version }}/metadata.json
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Clone Docker Repo
id: process-docker
run: |
git clone --single-branch --branch master https://github.com/ballerina-platform/module-ballerina-docker
DOCKER_REPO='module-ballerina-docker'
echo "::set-output name=dockerRepo::$DOCKER_REPO"
- name: Copy artifacts to Docker repo
run: |
DOCKER_REPO=${{ steps.process-docker.outputs.dockerRepo }}
cp $VERSION/ballerina-${{ steps.set-version.outputs.distVersion }}.zip $DOCKER_REPO/base/docker/
cp $VERSION/ballerina-$LONG_VERSION-linux-x64.deb $DOCKER_REPO/base/devcontainer/
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push the Ballerina Docker image
id: docker_build
uses: docker/build-push-action@v6
with:
context: ${{ steps.process-docker.outputs.dockerRepo }}/base/docker/
push: true
tags: ballerina/ballerina:${{ steps.set-version.outputs.taggedVersion }}
platforms: linux/amd64,linux/arm64
build-args: |
BALLERINA_DIST=ballerina-${{ steps.set-version.outputs.distVersion }}.zip
- name: Build and push dev container image
id: docker_build_devcontainer
uses: docker/build-push-action@v6
with:
context: ${{ steps.process-docker.outputs.dockerRepo }}/base/devcontainer/
push: true
tags: ballerina/ballerina-devcontainer:${{ steps.set-version.outputs.taggedVersion }}
build-args: |
BALLERINA_DIST=ballerina-${{ steps.set-version.outputs.longVersion }}-linux-x64.deb
- name: Publish Artifacts
run: |
sudo apt-get install python3-setuptools
python3 -m pip install --user awscli
aws configure set aws_access_key_id $s3_acc_id
aws configure set aws_secret_access_key $s3_acc_key
aws s3 cp $VERSION s3://dist-dev.ballerina.io/downloads/$VERSION --recursive
env:
s3_acc_id: ${{ secrets.S3_ID }}
s3_acc_key: ${{ secrets.S3_KEY }}
================================================
FILE: .github/workflows/publish-release.yml
================================================
name: Publish release
on:
workflow_dispatch:
inputs:
isPreRelease:
description: "Tag created is a pre-release tag"
required: true
default: "false"
preReleaseSuffix:
description: "The text that will be suffixed to the Git tag. e.g., rc1"
required: false
default: ""
permissions:
id-token: write
contents: write
jobs:
publish-release:
name: Publish Release
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: "temurin"
java-version: "21.0.3"
- name: Set version env variable
id: version-set
run: |
SHORT_VERSION=$(grep -w "version" gradle.properties | cut -d= -f2 | sed 's/-SNAPSHOT//' | xargs)
DIST_VERSION=$(grep -w "version" gradle.properties | cut -d= -f2 | sed 's/-SNAPSHOT//' | xargs)
LANG_VERSION=$(grep -w "ballerinaLangVersion" gradle.properties | cut -d= -f2 | sed 's/-SNAPSHOT//' | xargs)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION
TAGGED_VERSION=$RELEASE_VERSION
LONG_VERSION=$DIST_VERSION-$CODE_NAME
if [ -n "${{ github.event.inputs.preReleaseSuffix }}" ]; then
TAGGED_VERSION=$RELEASE_VERSION-${{ github.event.inputs.preReleaseSuffix }}
fi
echo VERSION=$RELEASE_VERSION >> $GITHUB_ENV
echo GIT_TAG=$TAGGED_VERSION >> $GITHUB_ENV
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=taggedVersion::$TAGGED_VERSION"
echo "::set-output name=longVersion::$LONG_VERSION"
echo "::set-output name=langVersion::$LANG_VERSION"
- name: Pre release depenency version update
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
run: |
echo "Version: ${VERSION}"
echo "Tagged Version: ${GIT_TAG}"
git config user.name ${{ secrets.BALLERINA_BOT_USERNAME }}
git config user.email ${{ secrets.BALLERINA_BOT_EMAIL }}
git checkout -b release-${GIT_TAG}
- name: Generate UUID
run: |
UUID=$(uuidgen)
perl -pi -e "s/^\s*installerVersion=.*/installerVersion=$UUID/" gradle.properties
git config user.name ${{ secrets.BALLERINA_BOT_USERNAME }}
git config user.email ${{ secrets.BALLERINA_BOT_EMAIL }}
git add gradle.properties
git commit -m "Update UUID for installer"
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Publish artifact
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }}
packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
prodCentralToken: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: |
./gradlew build -x project-api-tests:test -Pversion=${VERSION}
./gradlew release -x project-api-tests:test -Prelease.useAutomaticVersion=true
- name: Checkout docker repo
uses: actions/checkout@v3
with:
repository: ballerina-platform/module-ballerina-docker
path: module-ballerina-docker
- name: Copy zip artifact
run: cp ballerina/build/distributions/ballerina-22*.zip module-ballerina-docker/base/docker/
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build the docker image
id: docker_build
uses: docker/build-push-action@v6
with:
context: module-ballerina-docker/base/docker/
load: true
push: false
tags: ballerina/ballerina:release-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.version-set.outputs.sversion }}.zip
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: "ballerina/ballerina:release-test"
skip-dirs: "ballerina/runtime/examples"
format: "table"
exit-code: "1"
timeout: "10m0s"
- name: cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: "14"
- name: Install GitHub CLI
run: |
npm install -g github-cli
gh --version
- name: Get Markdown file
id: file-url
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh repo view ballerina-platform/ballerina-dev-website --json url --jq '.clone_url'
gh api repos/ballerina-platform/ballerina-dev-website/contents/downloads/verify-ballerina-artifacts.md -H 'Accept: application/vnd.github.v3.raw' > release_notes.md
sed -i '1,10d' release_notes.md
- name: Retrieve Branch
id: retrieve-branch
run: |
branchName=$(echo ${{ github.ref }} | cut -d'/' -f3)
echo "::set-output name=branchName::$branchName"
- name: Update Markdown file
run: |
if ${{ github.event.inputs.isPreRelease }} == 'true'; then
echo "" > release_notes.md;
else sed -i 's/{{ version }}/${{ steps.version-set.outputs.taggedVersion }}/g' release_notes.md; sed -i 's/{{ branch }}/${{ steps.retrieve-branch.outputs.branchName }}/g' release_notes.md; fi
- name: Read release notes from file
id: release_notes
uses: actions/github-script@v4
with:
github-token: ${{ secrets.BALLERINA_BOT_TOKEN }}
script: |
const fs = require('fs');
const releaseNotes = fs.readFileSync('release_notes.md', 'utf8');
core.setOutput('notes', releaseNotes);
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
tag_name: "v${{ steps.version-set.outputs.taggedVersion }}"
release_name: ${{ steps.version-set.outputs.taggedVersion }}
body: ${{ steps.release_notes.outputs.notes }}
draft: false
prerelease: ${{ github.event.inputs.isPreRelease }}
- name: Create linux-deb Installer
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Sign the linux-deb installer
run: |
cosign sign-blob installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sig --yes
- name: Verify the linux-deb installer
run: |
cosign verify-blob installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Create linux-rpm Installer
id: run_installers_rpm
run: |
cd installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Sign the linux-rpm installer
run: |
cosign sign-blob installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sig --yes
- name: Verify the linux-rpm installer
run: |
cosign verify-blob installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-x64.deb
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256 installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip
- name: Sign the zip artifacts
run: |
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip --output-certificate ballerina-${{ steps.version-set.outputs.sversion }}.pem --output-signature ballerina-${{ steps.version-set.outputs.sversion }}.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-macos.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-macos.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.sig --yes
cosign sign-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-windows.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-windows.sig --yes
- name: Verify the zip artifacts
run: |
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip --certificate ballerina-${{ steps.version-set.outputs.sversion }}.pem --signature ballerina-${{ steps.version-set.outputs.sversion }}.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-macos.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-macos.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
cosign verify-blob ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-windows.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-windows.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Upload zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip
asset_content_type: application/octet-stream
- name: Upload zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}.pem
asset_content_type: application/octet-stream
- name: Upload zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}.sig
asset_content_type: application/octet-stream
- name: Upload zip without tool artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip
asset_content_type: application/octet-stream
- name: Upload zip without tool artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.sversion }}.pem
asset_content_type: application/octet-stream
- name: Upload zip without tool artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.sversion }}.sig
asset_content_type: application/octet-stream
- name: Upload Linux deb Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb
asset_path: installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb
asset_content_type: application/octet-stream
- name: Upload Linux deb Installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.pem
asset_content_type: application/octet-stream
- name: Upload Linux deb Installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sig
asset_content_type: application/octet-stream
- name: Upload Linux rpm Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm
asset_path: installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm
asset_content_type: application/octet-stream
- name: Upload Linux rpm Installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.pem
asset_content_type: application/octet-stream
- name: Upload Linux rpm Installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sig
asset_content_type: application/octet-stream
- name: Upload Linux zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip
asset_content_type: application/octet-stream
- name: Upload Linux zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux.pem
asset_content_type: application/octet-stream
- name: Upload Linux zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux.sig
asset_content_type: application/octet-stream
- name: Upload Linux-ARM zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip
asset_content_type: application/octet-stream
- name: Upload Linux-ARM zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.pem
asset_content_type: application/octet-stream
- name: Upload Linux-ARM zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.sig
asset_content_type: application/octet-stream
- name: Upload MacOS zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip
asset_content_type: application/octet-stream
- name: Upload MacOS zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-macos.pem
asset_content_type: application/octet-stream
- name: Upload MacOS zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-macos.sig
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.pem
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.sig
asset_content_type: application/octet-stream
- name: Upload Windows zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip
asset_content_type: application/octet-stream
- name: Upload Windows zip artifact's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-windows.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-windows.pem
asset_content_type: application/octet-stream
- name: Upload Windows zip artifact's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-windows.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-windows.sig
asset_content_type: application/octet-stream
- name: Upload Linux deb Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256
asset_content_type: application/octet-stream
- name: Upload Linux rpm Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256
asset_content_type: application/octet-stream
- name: Upload Ballerina zip Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256
asset_content_type: application/octet-stream
- name: Upload ballerina Short Name zip Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256
asset_path: ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256
asset_content_type: application/octet-stream
- name: Install Ballerina DEB
run: sudo dpkg -i installers/linux-deb/target/ballerina-*-linux-x64.deb
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ steps.version-set.outputs.langVersion }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
# - name: Run Installer Tests
# working-directory: ./ballerina-test-automation/installer-test
# run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
# env:
# TEST_MODE_ACTIVE: true
- name: Create linux-arm-deb Installer
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions -a arm
echo "Created linux-arm-deb successfully"
- name: Sign the linux-arm-deb installer
run: |
cosign sign-blob installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb --output-certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.pem --output-signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.sig --yes
- name: Verify the linux-arm-deb installer
run: |
cosign verify-blob installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb --certificate ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.pem --signature ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Upload Linux-ARM deb Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb
asset_path: installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb
asset_content_type: application/octet-stream
- name: Upload Linux-ARM deb Installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.pem
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.pem
asset_content_type: application/octet-stream
- name: Upload Linux-ARM deb Installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.sig
asset_path: ./ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb.sig
asset_content_type: application/octet-stream
- name: Post release PR
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
run: |
curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
bin/hub pull-request -m "[Automated] Sync master after "$VERSION" release"
outputs:
project-version: ${{ steps.version-set.outputs.longVersion }}
upload-asset-url: ${{ steps.create_release.outputs.upload_url }}
release-version: ${{ steps.version-set.outputs.taggedVersion }}
lang-version: ${{ steps.version-set.outputs.langVersion }}
macos-installer-build:
name: MacOS Installer Build
needs: publish-release
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: "temurin"
java-version: "21.0.3"
- name: Download MacOS Intaller Zip
run: |
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-macos.zip
- name: cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Create macos-pkg Installer
id: run_installers_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.publish-release.outputs.project-version }} -p ./../../
echo "Created macos-pkg successfully"
- name: Sign the MacOS installer
run: |
cosign sign-blob installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg --output-certificate ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.pem --output-signature ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sig --yes
- name: Verify the MacOS installer
run: |
cosign verify-blob installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg --certificate ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.pem --signature ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256 installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
- name: Upload MacOS pkg Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256
asset_content_type: application/octet-stream
- name: Upload MacOS pkg Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
asset_path: installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
asset_content_type: application/octet-stream
- name: Upload MacOS installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.pem
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.pem
asset_content_type: application/octet-stream
- name: Upload MacOS installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sig
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sig
asset_content_type: application/octet-stream
- name: Install Ballerina PKG
run: sudo installer -pkg installers/mac/target/pkg/ballerina-*-macos-x64.pkg -target /
- name: Update Installer Test Configs
run: |
DISPLAY_TEXT=${{ needs.publish-release.outputs.lang-version }}
SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
# - name: Run Installer Tests
# working-directory: ./ballerina-test-automation/installer-test
# run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
# env:
# TEST_MODE_ACTIVE: true
- name: Download MacOS-ARM Installer Zip
run: |
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm.zip
- name: Create macos-arm-pkg Installer
id: run_installers_arm_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.publish-release.outputs.project-version }} -p ./../../ -a arm
echo "Created macos-arm-pkg successfully"
- name: Sign the MacOS-ARM installer
run: |
cosign sign-blob installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg --output-certificate ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.pem --output-signature ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sig --yes
- name: Verify the MacOS-ARM installer
run: |
cosign verify-blob installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg --certificate ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.pem --signature ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256 installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
- name: Upload MacOS-ARM pkg Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM pkg Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
asset_path: installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.pem
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.pem
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sig
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sig
asset_content_type: application/octet-stream
windows-installer-build:
name: Windows Installer Build
needs: publish-release
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: "temurin"
java-version: "21.0.3"
- uses: actions/setup-dotnet@v1
with:
dotnet-version: "2.1.x"
- name: Install GUID Generator
run: dotnet tool install -g dotnet-guid --version 0.5.2
- name: Set up Wix toolkit
run: echo "${WIX}bin" >> $GITHUB_PATH
shell: bash
- name: Set cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Download Windows Installer Zip
run: |
echo default login ${{ secrets.BALLERINA_BOT_USERNAME }} password ${{ secrets.BALLERINA_BOT_TOKEN }} >> _netrc
curl --netrc-file _netrc -L -o ballerina-${{ needs.publish-release.outputs.project-version }}-windows.zip https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-windows.zip
- name: Create windows-msi Installer
id: run_installers_msi
run: |
move installers\windows .\..\..\
cd ..\..\windows
.\build-ballerina-windows-x64.bat --version ${{ needs.publish-release.outputs.project-version }} --path .\..\ballerina-distribution\ballerina-distribution
- name: Sign the Windows installer
run: |
cosign sign-blob D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi --output-certificate ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.pem --output-signature ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sig --yes
- name: Verify the Windows installer
run: |
cosign verify-blob D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi --certificate ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.pem --signature ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/publish-release.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256 D:\a\windows\target\msi\ballerina-*-windows-x64.msi
- name: Upload Windows msi Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256
asset_content_type: application/octet-stream
- name: Upload Windows msi Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi
asset_path: D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi
asset_content_type: application/octet-stream
- name: Upload Windows installer's Certificate
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.pem
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.pem
asset_content_type: application/octet-stream
- name: Upload Windows installer's Signature
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sig
asset_path: ./ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sig
asset_content_type: application/octet-stream
- name: Install Ballerina msi
run: msiexec /i D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi /quiet /qr
shell: cmd
- name: Update Installer Test Configs
run: |
set DISPLAY_TEXT=${{ needs.publish-release.outputs.lang-version }}
set SWAN_LAKE_LATEST_VERSION=swan-lake-%DISPLAY_TEXT%
perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=%DISPLAY_TEXT%/" ballerina-test-automation/gradle.properties
perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=%SWAN_LAKE_LATEST_VERSION%/" ballerina-test-automation/gradle.properties
shell: cmd
# - name: Run Installer Tests
# working-directory: .\ballerina-test-automation\installer-test
# run: |
# $env:Path += ";C:\Program Files\Ballerina\bin"
# .\..\gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
================================================
FILE: .github/workflows/publish_release_bi.yml
================================================
name: Publish Release Kola Distribution
on:
workflow_dispatch:
schedule:
- cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)
permissions:
id-token: write
contents: write
jobs:
publish-release:
name: Publish Release
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '10.22.1'
- name: Clone ballerina-dev-tools
run: git clone https://github.com/ballerina-platform/ballerina-dev-tools.git
- name: Build ballerina-dev-tools
id: build-dev-tools
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
TEST_MODE_ACTIVE: true
run: |
cd ballerina-dev-tools
VERSION=$((grep -w 'version' | cut -d= -f2 | cut -d- -f1) < gradle.properties)
sed -i "s/^version=.*/version=$VERSION/" gradle.properties
echo "::set-output name=version::$(grep "^version=" gradle.properties | cut -d'=' -f2)"
echo "::set-output name=langVersion::$(grep "^ballerinaLangVersion=" gradle.properties | cut -d'=' -f2)"
./gradlew clean build --stacktrace --scan -x test --console=plain --no-daemon --continue publishToMavenLocal
cd ..
rm -rf ballerina-dev-tools
- name: Set version env variable
id: version-set
run: |
sed -i "s/^devToolsVersion=.*/devToolsVersion=${{ steps.build-dev-tools.outputs.version }}/" gradle.properties
sed -i "s/^ballerinaLangVersion=.*/ballerinaLangVersion=${{ steps.build-dev-tools.outputs.langVersion }}/" gradle.properties
SHORT_VERSION=$((grep -w 'version' | cut -d= -f2 | cut -d- -f1) < gradle.properties)
DIST_VERSION=$((grep -w 'version' | cut -d= -f2) < gradle.properties | rev | cut --complement -d- -f1 | rev)
LANG_VERSION=$((grep -w "ballerinaLangVersion" | cut -d= -f2 | cut -d- -f1 | xargs) < gradle.properties)
CODE_NAME=$((grep -w 'codeName' | cut -d= -f2) < gradle.properties)
RELEASE_VERSION=$DIST_VERSION
TAGGED_VERSION=$RELEASE_VERSION-bi-pack-$(TZ="Asia/Kolkata" date +'%Y%m%d-%H%M00')
LONG_VERSION=$DIST_VERSION-$CODE_NAME
echo VERSION=$RELEASE_VERSION >> $GITHUB_ENV
echo GIT_TAG=$TAGGED_VERSION >> $GITHUB_ENV
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=sversion::$SHORT_VERSION"
echo "::set-output name=taggedVersion::$TAGGED_VERSION"
echo "::set-output name=longVersion::$LONG_VERSION"
echo "::set-output name=langVersion::$LANG_VERSION"
- name: Pre release dependency version update
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
run: |
echo "Version: ${VERSION}"
echo "Tagged Version: ${GIT_TAG}"
git config user.name ${{ secrets.BALLERINA_BOT_USERNAME }}
git config user.email ${{ secrets.BALLERINA_BOT_EMAIL }}
git checkout -b release-${GIT_TAG}
- name: Generate UUID
run: |
UUID=$(uuidgen)
perl -pi -e "s/^\s*installerVersion=.*/installerVersion=$UUID/" gradle.properties
git config user.name ${{ secrets.BALLERINA_BOT_USERNAME }}
git config user.email ${{ secrets.BALLERINA_BOT_EMAIL }}
git add gradle.properties
git commit -m "Update UUID for installer"
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Publish artifact
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
packageUser: ${{ secrets.BALLERINA_BOT_USERNAME }}
packagePAT: ${{ secrets.BALLERINA_BOT_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
prodCentralToken: ${{ secrets.BALLERINA_CENTRAL_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: |
./gradlew build -x test -x project-api-tests:test -Pversion=${VERSION}
./gradlew release -Prelease.useAutomaticVersion=true -x test
- name: Checkout docker repo
uses: actions/checkout@v3
with:
repository: ballerina-platform/module-ballerina-docker
path: module-ballerina-docker
- name: Copy zip artifact
run: cp ballerina/build/distributions/ballerina-22*.zip module-ballerina-docker/base/docker/
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build the docker image
id: docker_build
uses: docker/build-push-action@v2
with:
context: module-ballerina-docker/base/docker/
load: true
push: false
tags: ballerina/ballerina:release-test
build-args: |
BALLERINA_DIST=ballerina-${{ steps.version-set.outputs.sversion }}.zip
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ballerina/ballerina:release-test'
skip-dirs: 'ballerina/runtime/examples'
format: 'table'
exit-code: '1'
timeout: "10m0s"
severity: 'CRITICAL,HIGH'
- name: cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install GitHub CLI
run: |
npm install -g github-cli
gh --version
- name: Get Markdown file
id: file-url
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh repo view ballerina-platform/ballerina-dev-website --json url --jq '.clone_url'
gh api repos/ballerina-platform/ballerina-dev-website/contents/downloads/verify-ballerina-artifacts.md -H 'Accept: application/vnd.github.v3.raw' > release_notes.md
sed -i '1,10d' release_notes.md
- name: Retrieve Branch
id: retrieve-branch
run: |
branchName=$(echo ${{ github.ref }} | cut -d'/' -f3)
echo "::set-output name=branchName::$branchName"
- name: Update Markdown file
run: echo "" > release_notes.md;
- name: Read release notes from file
id: release_notes
uses: actions/github-script@v4
with:
github-token: ${{ secrets.BALLERINA_BOT_TOKEN }}
script: |
const fs = require('fs');
const releaseNotes = fs.readFileSync('release_notes.md', 'utf8');
core.setOutput('notes', releaseNotes);
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
tag_name: "v${{ steps.version-set.outputs.taggedVersion }}"
release_name: ${{ steps.version-set.outputs.taggedVersion }}
body: ${{ steps.release_notes.outputs.notes }}
draft: false
prerelease: true
- name: Create linux-deb Installer
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions
echo "Created linux-deb successfully"
- name: Create linux-rpm Installer
id: run_installers_rpm
run: |
cd installers/linux-rpm
./build-ballerina-linux-rpm-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions
echo "Created linux-rpm successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256 installers/linux-deb/target/ballerina-*-linux-x64.deb
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256 installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-*-linux-x64.rpm
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip
openssl dgst -sha256 -out ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256 ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip
- name: Upload zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}.zip
asset_content_type: application/octet-stream
- name: Upload zip without tool artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.sversion }}.zip
asset_content_type: application/octet-stream
- name: Upload Linux deb Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb
asset_path: installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb
asset_content_type: application/octet-stream
- name: Upload Linux rpm Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm
asset_path: installers/linux-rpm/rpmbuild/RPMS/x86_64/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm
asset_content_type: application/octet-stream
- name: Upload Linux zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux.zip
asset_content_type: application/octet-stream
- name: Upload Linux-ARM zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm.zip
asset_content_type: application/octet-stream
- name: Upload MacOS zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos.zip
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-macos-arm.zip
asset_content_type: application/octet-stream
- name: Upload Windows zip artifacts
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip
asset_path: ballerina/build/distributions/ballerina-${{ steps.version-set.outputs.longVersion }}-windows.zip
asset_content_type: application/octet-stream
- name: Upload Linux deb Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.deb.sha256
asset_content_type: application/octet-stream
- name: Upload Linux rpm Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-x64.rpm.sha256
asset_content_type: application/octet-stream
- name: Upload Ballerina zip Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256
asset_path: ballerina-${{ steps.version-set.outputs.longVersion }}.zip.sha256
asset_content_type: application/octet-stream
- name: Upload ballerina Short Name zip Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256
asset_path: ballerina-${{ steps.version-set.outputs.sversion }}.zip.sha256
asset_content_type: application/octet-stream
# - name: Install Ballerina DEB
# run: sudo dpkg -i installers/linux-deb/target/ballerina-*-linux-x64.deb
# - name: Update Installer Test Configs
# run: |
# DISPLAY_TEXT=${{ steps.version-set.outputs.langVersion }}
# SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
# perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
# perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
# - name: Run Installer Tests
# working-directory: ./ballerina-test-automation/installer-test
# run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
# env:
# TEST_MODE_ACTIVE: true
- name: Create linux-arm-deb Installer
run: |
cd installers/linux-deb
./build-ballerina-linux-deb-x64.sh -v ${{ steps.version-set.outputs.longVersion }} -p ./../../ballerina/build/distributions -a arm
echo "Created linux-arm-deb successfully"
- name: Upload Linux-ARM deb Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_name: ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb
asset_path: installers/linux-deb/target/ballerina-${{ steps.version-set.outputs.longVersion }}-linux-arm-x64.deb
asset_content_type: application/octet-stream
outputs:
project-version: ${{ steps.version-set.outputs.longVersion }}
upload-asset-url: ${{ steps.create_release.outputs.upload_url }}
release-version: ${{ steps.version-set.outputs.taggedVersion }}
lang-version: ${{ steps.version-set.outputs.langVersion }}
macos-installer-build:
name: MacOS Installer Build
needs: publish-release
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Download MacOS Intaller Zip
run: |
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-macos.zip
- name: cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Create macos-pkg Installer
id: run_installers_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.publish-release.outputs.project-version }} -p ./../../
echo "Created macos-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256 installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
- name: Upload MacOS pkg Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg.sha256
asset_content_type: application/octet-stream
- name: Upload MacOS pkg Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
asset_path: installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-x64.pkg
asset_content_type: application/octet-stream
# - name: Install Ballerina PKG
# run: sudo installer -pkg installers/mac/target/pkg/ballerina-*-macos-x64.pkg -target /
# - name: Update Installer Test Configs
# run: |
# DISPLAY_TEXT=${{ needs.publish-release.outputs.lang-version }}
# SWAN_LAKE_LATEST_VERSION="swan-lake-"+$DISPLAY_TEXT
# perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=$DISPLAY_TEXT/" ballerina-test-automation/gradle.properties
# perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=$SWAN_LAKE_LATEST_VERSION/" ballerina-test-automation/gradle.properties
# - name: Run Installer Tests
# working-directory: ./ballerina-test-automation/installer-test
# run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
# env:
# TEST_MODE_ACTIVE: true
- name: Download MacOS-ARM Installer Zip
run: |
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm.zip
- name: Create macos-arm-pkg Installer
id: run_installers_arm_pkg
run: |
cd installers/mac
./build-ballerina-macos-x64.sh -v ${{ needs.publish-release.outputs.project-version }} -p ./../../ -a arm
echo "Created macos-arm-pkg successfully"
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256 installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
- name: Upload MacOS-ARM pkg Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg.sha256
asset_content_type: application/octet-stream
- name: Upload MacOS-ARM pkg Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
asset_path: installers/mac/target/pkg/ballerina-${{ needs.publish-release.outputs.project-version }}-macos-arm-x64.pkg
asset_content_type: application/octet-stream
windows-installer-build:
name: Windows Installer Build
needs: publish-release
runs-on: windows-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: '21.0.3'
- uses: actions/setup-dotnet@v1
with:
dotnet-version: '2.1.x'
- name: Install GUID Generator
run: dotnet tool install -g dotnet-guid --version 0.5.2
- name: Set up Wix toolkit
run: echo "${WIX}bin" >> $GITHUB_PATH
shell: bash
- name: Set cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Download Windows Installer Zip
run: |
echo default login ${{ secrets.BALLERINA_BOT_USERNAME }} password ${{ secrets.BALLERINA_BOT_TOKEN }} >> _netrc
curl --netrc-file _netrc -L -o ballerina-${{ needs.publish-release.outputs.project-version }}-windows.zip https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ needs.publish-release.outputs.release-version }}/ballerina-${{ needs.publish-release.outputs.project-version }}-windows.zip
- name: Create windows-msi Installer
id: run_installers_msi
run: |
move installers\windows .\..\..\
cd ..\..\windows
.\build-ballerina-windows-x64.bat --version ${{ needs.publish-release.outputs.project-version }} --path .\..\ballerina-distribution\ballerina-distribution
- name: Generate Hashes
run: |
openssl dgst -sha256 -out ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256 D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi
- name: Upload Windows msi Hashes
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256
asset_path: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi.sha256
asset_content_type: application/octet-stream
- name: Upload Windows msi Installer
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.BALLERINA_BOT_TOKEN }}
with:
upload_url: ${{ needs.publish-release.outputs.upload-asset-url }}
asset_name: ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi
asset_path: D:\a\windows\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi
asset_content_type: application/octet-stream
# - name: Install Ballerina msi
# run: msiexec /i w\target\msi\ballerina-${{ needs.publish-release.outputs.project-version }}-windows-x64.msi /quiet /qr
# shell: cmd
# - name: Update Installer Test Configs
# run: |
# set DISPLAY_TEXT=${{ needs.publish-release.outputs.lang-version }}
# set SWAN_LAKE_LATEST_VERSION=swan-lake-%DISPLAY_TEXT%
# perl -pi -e "s/^\s*swan-lake-latest-version-display-text=.*/swan-lake-latest-version-display-text=%DISPLAY_TEXT%/" ballerina-test-automation/gradle.properties
# perl -pi -e "s/^\s*swan-lake-latest-version=.*/swan-lake-latest-version=%SWAN_LAKE_LATEST_VERSION%/" ballerina-test-automation/gradle.properties
# shell: cmd
# - name: Run Installer Tests
# working-directory: .\ballerina-test-automation\installer-test
# run: |
# $env:Path += ";C:\Program Files\Ballerina\bin"
# .\..\gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
send-notification:
name: Send Notification
runs-on: ubuntu-latest
needs: [publish-release, macos-installer-build, windows-installer-build]
steps:
- name: Send notification to Google Chat
run: |
body=$(cat << 'EOF'
{
"cardsV2": [
{
"cardId": "published-ballerina-distribution",
"card": {
"header": {
"title": "Ballerina Distribution",
"subtitle": "v${{ needs.publish-release.outputs.release-version }}",
"imageUrl": "https://lh6.googleusercontent.com/proxy/R9Rx8vYNd-_HZn58ckf5PNX7RMlC6P-B75fB7UQ_GFH5R0UwtfJ1gVNARBvH1us8LBuK4NVFsvMGnwZkm-H2_9ACwH_j0lQmExR1SRMNGlFcbrm_1O7foFpqqOiVzA",
"imageType": "CIRCLE"
},
"sections": [
{
"widgets": [
{
"textParagraph": {
"text": "Run \"Update Kola\" to update the distribution."
}
},
{
"buttonList": {
"buttons": [
{
"text": "Download",
"onClick": {
"openLink": {
"url": "https://github.com/${{ github.repository }}/releases/tag/v${{ needs.publish-release.outputs.release-version }}"
}
}
}
]
}
}
]
}
]
}
}
]
}
EOF
)
curl -X POST -H 'Content-Type: application/json' "https://chat.googleapis.com/v1/spaces/AAAApvQDm3o/messages?key=${{ secrets.EDITOR_CHAT_BOT_KEY }}&token=${{ secrets.EDITOR_CHAT_BOT_TOKEN }}" -d "$body"
send-failure-notification:
name: Send Failure Notification
runs-on: ubuntu-latest
if: ${{ failure() }}
needs: [publish-release, macos-installer-build, windows-installer-build]
steps:
- name: Send failure notification to Google Chat
run: |
body=$(cat << 'EOF'
{
"cardsV2": [
{
"cardId": "ballerina-dist-build-error",
"card": {
"header": {
"title": "Ballerina Distribution",
"subtitle": "Release Failure",
"imageUrl": "https://lh6.googleusercontent.com/proxy/R9Rx8vYNd-_HZn58ckf5PNX7RMlC6P-B75fB7UQ_GFH5R0UwtfJ1gVNARBvH1us8LBuK4NVFsvMGnwZkm-H2_9ACwH_j0lQmExR1SRMNGlFcbrm_1O7foFpqqOiVzA",
"imageType": "CIRCLE"
},
"sections": [
{
"widgets": [
{
"decoratedText": {
"text": "<font color=\"#FF0000\">Error: The build has failed</font>",
"startIcon": {
"materialIcon": {
"name": "error",
"fill": true,
"weight": 500,
"grade": 100
}
}
}
},
{
"textParagraph": {
"text": "Please view the workflow for further details."
}
},
{
"buttonList": {
"buttons": [
{
"text": "View Workflow",
"onClick": {
"openLink": {
"url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}
}
}
]
}
}
]
}
]
}
}
]
}
EOF
)
curl -X POST -H 'Content-Type: application/json' "https://chat.googleapis.com/v1/spaces/AAAApvQDm3o/messages?key=${{ secrets.EDITOR_CHAT_BOT_KEY }}&token=${{ secrets.EDITOR_CHAT_BOT_TOKEN }}" -d "$body"
================================================
FILE: .github/workflows/pull-request.yml
================================================
name: Pull Request
on:
pull_request:
branches:
- master
- ballerina-1.1.x
- ballerina-1.2.x
- 2201.[0-9]+.x
jobs:
ubuntu-integration-tests:
name: Integration Tests on Ubuntu
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-integration-tests
cancel-in-progress: true
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build Ballerina Distribution
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: ./gradlew clean build --stacktrace --scan --console=plain --no-daemon --continue -x :ballerina:testExamples -x :project-api-tests:test
ubuntu-bbe-tests:
name: BBE Tests on Ubuntu
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-bbe-tests
cancel-in-progress: true
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build Ballerina Distribution
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: ./gradlew clean :ballerina:testExamples --stacktrace --scan --console=plain --no-daemon --continue -x :project-api-tests:test
windows-build-without-tests:
name: Windows Build
runs-on: windows-latest
concurrency:
group: ${{ github.ref }}-windows
cancel-in-progress: true
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '21.0.3'
- name: Build Ballerina Distribution
env:
packageUser: ${{ github.actor }}
packagePAT: ${{ secrets.GITHUB_TOKEN }}
JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
devCentralToken: ${{ secrets.BALLERINA_CENTRAL_DEV_ACCESS_TOKEN }}
githubAccessToken: ${{ secrets.GITHUB_TOKEN }}
ballerinaBotWorkflow: $ {{ secrets.BALLERINA_BOT_WORKFLOW }}
run: ./gradlew.bat clean build --stacktrace --scan --console=plain --no-daemon --continue -x test
================================================
FILE: .github/workflows/sign-installers.yml
================================================
name: Sign release artifacts
on:
workflow_dispatch:
inputs:
versionName:
description: 'Specify the Version name eg: 2201.6.0'
required: true
default: ''
permissions:
id-token: write
contents: write
jobs:
sign-release:
name: Sign release artifacts
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: cosign-installer
uses: sigstore/cosign-installer@v3.5.0
- name: Install Node
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install GitHub CLI
run: |
npm install -g github-cli
- name: Retrieve MacOS Installer
run:
|
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ github.event.inputs.versionName }}/ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg
- name: Sign the MacOS Installer
run: |
cosign sign-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg --output-certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.pem --output-signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.sig --yes
- name: Verify the MacOS Installer
run: |
cosign verify-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg --certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.pem --signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/sign-installers.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Retrieve MacOS-ARM Installer
run:
|
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ github.event.inputs.versionName }}/ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg
- name: Sign the MacOS-ARM Installer
run: |
cosign sign-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg --output-certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.pem --output-signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.sig --yes
- name: Verify the MacOS-ARM Installer
run: |
cosign verify-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg --certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.pem --signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/sign-installers.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Retrieve Windows Installer
run:
|
wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ github.event.inputs.versionName }}/ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi
- name: Sign the Windows Installer
run: |
cosign sign-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi --output-certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.pem --output-signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.sig --yes
- name: Verify the Windows Installer
run: |
cosign verify-blob ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi --certificate ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.pem --signature ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.sig --certificate-identity=https://github.com/ballerina-platform/ballerina-distribution/.github/workflows/sign-installers.yml@${{ github.ref }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com
- name: Upload Installers' Verification Files
env:
GH_TOKEN : ${{ secrets.BALLERINA_BOT_TOKEN }}
run: |
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.pem --clobber
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-x64.pkg.sig --clobber
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.pem --clobber
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-macos-arm-x64.pkg.sig --clobber
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.pem --clobber
gh release upload v${{ github.event.inputs.versionName }} ./ballerina-${{ github.event.inputs.versionName }}-swan-lake-windows-x64.msi.sig --clobber
================================================
FILE: .github/workflows/test-installers.yml
================================================
name: Test Installers
on:
workflow_dispatch:
inputs:
releaseVersion:
description: 'Version of the release. e.g., swan-lake-beta1'
required: true
preReleaseSuffix:
description: 'The text that will be suffixed to the Git tag. e.g., rc1'
required: false
default: ''
jobs:
macos-installer-test:
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Set Version
id: set-version
run: |
RELEASE_VERSION=${{ github.event.inputs.releaseVersion }}
TAGGED_VERSION=$RELEASE_VERSION
if [ -n "${{ github.event.inputs.preReleaseSuffix }}" ]; then
TAGGED_VERSION=$RELEASE_VERSION-${{ github.event.inputs.preReleaseSuffix }}
fi
echo VERSION=$RELEASE_VERSION >> $GITHUB_ENV
echo GIT_TAG=$TAGGED_VERSION >> $GITHUB_ENV
echo "::set-output name=version::$RELEASE_VERSION"
echo "::set-output name=taggedVersion::$TAGGED_VERSION"
- name: Download Ballerina pkg Installer
run: wget https://github.com/ballerina-platform/ballerina-distribution/releases/download/v${{ steps.set-version.outputs.taggedVersion }}/ballerina-macos-x64-${{ steps.set-version.outputs.version }}.pkg
- name: Install Ballerina pkg
run: sudo installer -pkg ballerina-macos-x64-${{ steps.set-version.outputs.version }}.pkg -target /
- name: Run Installer Tests
working-directory: ./ballerina-test-automation/installer-test
run: ./../gradlew build --stacktrace -scan --console=plain --no-daemon -DballerinaInstalled=true
================================================
FILE: .github/workflows/trigger-bbe-generation.yml
================================================
name: Generate Ballerina By Examples
on:
push:
branches:
- '2201.0.x'
paths:
- 'examples/**'
jobs:
trigger-bbe-gen:
name: Trigger Ballerina By Examples genration
if: github.repository_owner == 'ballerina-platform'
runs-on: ubuntu-latest
steps:
- run: |
curl --request \
POST 'http
gitextract_3c7m_6fq/
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.yml
│ │ ├── config.yml
│ │ ├── improvement.yml
│ │ ├── new-feature.yml
│ │ └── task.yml
│ └── workflows/
│ ├── add_reason_labels.yml
│ ├── bbe-on-demand.yml
│ ├── daily-build-2201.12.x.yml
│ ├── daily-build-2201.13.x.yml
│ ├── daily-build-editor.yml
│ ├── daily-build.yml
│ ├── fossa_scan.yml
│ ├── language_server_simulator_fhir.yml
│ ├── language_server_simulator_nballerina.yml
│ ├── main.yml
│ ├── publish-release-artifacts-1.2.x.yml
│ ├── publish-release-artifacts.yml
│ ├── publish-release.yml
│ ├── publish_release_bi.yml
│ ├── pull-request.yml
│ ├── sign-installers.yml
│ ├── test-installers.yml
│ └── trigger-bbe-generation.yml
├── .gitignore
├── .trivyignore
├── LICENSE
├── README.md
├── ballerina/
│ ├── COPYRIGHT
│ ├── LICENSE
│ ├── README
│ ├── build.gradle
│ └── lib/
│ ├── run.bat
│ ├── run.sh
│ └── version.txt
├── ballerina-test/
│ ├── build.gradle
│ ├── gradle.properties
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── ballerinalang/
│ │ └── distribution/
│ │ ├── lengthValidation/
│ │ │ ├── LengthValidator.java
│ │ │ └── LineLengthExceededException.java
│ │ ├── test/
│ │ │ ├── ArtifactBuildTest.java
│ │ │ ├── BallerinaCommandTest.java
│ │ │ ├── DistributionArtifactCheckTest.java
│ │ │ ├── GraphqlToolTest.java
│ │ │ ├── GrpcToolingTest.java
│ │ │ ├── OpenAPIArtifactBuildTest.java
│ │ │ ├── OpenAPIDistributionArtifactCheck.java
│ │ │ └── PlatformDistributionArtifactCheckTest.java
│ │ └── utils/
│ │ └── TestUtils.java
│ └── resources/
│ ├── graphql/
│ │ ├── client-gen/
│ │ │ ├── project_1/
│ │ │ │ ├── graphql_endpoint.config.yaml
│ │ │ │ └── query_country.graphql
│ │ │ └── project_2/
│ │ │ ├── graphql_schema.config.yaml
│ │ │ ├── queries/
│ │ │ │ └── query_country.graphql
│ │ │ └── schema_country.graphql
│ │ ├── schema-gen/
│ │ │ ├── project_1/
│ │ │ │ ├── Ballerina.toml
│ │ │ │ └── main.bal
│ │ │ └── service.bal
│ │ └── service-gen/
│ │ ├── schema_book.graphql
│ │ └── schema_starwars.graphql
│ ├── grpc/
│ │ ├── expected-files/
│ │ │ └── route_guide_pb.bal
│ │ └── proto-files/
│ │ └── route_guide.proto
│ ├── openapi/
│ │ ├── expected/
│ │ │ ├── client.bal
│ │ │ ├── filtered_tags.bal
│ │ │ ├── types.bal
│ │ │ └── utils.bal
│ │ ├── integration-tests/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── testFiles/
│ │ │ ├── openapi-validator-off.bal
│ │ │ ├── openapi-validator-on.bal
│ │ │ ├── openapi_validator_off.yaml
│ │ │ └── openapi_validator_on.yaml
│ │ ├── openapi_client.yaml
│ │ ├── petstore.bal
│ │ ├── petstore.yaml
│ │ └── petstoreTags.yaml
│ ├── testing-line-length.xml
│ └── testng.xml
├── ballerina-test-automation/
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── installer-test/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── io/
│ │ │ └── ballerina/
│ │ │ └── installer/
│ │ │ └── test/
│ │ │ ├── CentralTest.java
│ │ │ ├── InstallerTest.java
│ │ │ ├── ProjectTest.java
│ │ │ └── TestUtils.java
│ │ └── resources/
│ │ └── testng.xml
│ ├── settings.gradle
│ ├── test-automation/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── ballerina/
│ │ └── test/
│ │ ├── CentOS.java
│ │ ├── Executor.java
│ │ ├── MacOS.java
│ │ ├── Ubuntu.java
│ │ ├── Utils.java
│ │ └── Windows.java
│ └── update-tool-test/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── io/
│ │ └── ballerina/
│ │ └── tool/
│ │ └── test/
│ │ ├── FetchDependencyTest.java
│ │ ├── UpdateDistTest.java
│ │ └── UpdateToolTest.java
│ └── resources/
│ └── testng.xml
├── build-time-tests/
│ ├── build.gradle
│ ├── samples/
│ │ ├── build-samples.sh
│ │ ├── helloservice/
│ │ │ ├── Ballerina.toml
│ │ │ └── service.bal
│ │ └── helloworld/
│ │ ├── Ballerina.toml
│ │ └── helloworld.bal
│ └── src/
│ └── main/
│ └── java/
│ └── org/
│ └── ballerina/
│ └── packages/
│ └── buildtime/
│ └── GenerateBuildDataCsv.java
├── build.gradle
├── cache-generator/
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── java/
│ │ ├── io/
│ │ │ └── ballerina/
│ │ │ └── gencache/
│ │ │ └── cmd/
│ │ │ └── GenCacheCmd.java
│ │ └── module-info.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── io.ballerina.cli.BLauncherCmd
├── config/
│ └── checkstyle/
│ ├── build.gradle
│ ├── checkstyle.xml
│ └── suppressions.xml
├── devtools-integration-tests/
│ ├── build.gradle
│ ├── index.json
│ ├── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── ballerina/
│ │ │ └── devtools/
│ │ │ └── debug/
│ │ │ ├── BaseTestCase.java
│ │ │ ├── ExpressionEvaluationTest.java
│ │ │ ├── ModuleBreakpointTest.java
│ │ │ └── ServiceDebugTest.java
│ │ └── resources/
│ │ ├── debug/
│ │ │ ├── project-based-tests/
│ │ │ │ ├── breakpoint-tests/
│ │ │ │ │ ├── Ballerina.toml
│ │ │ │ │ └── main.bal
│ │ │ │ ├── evaluation-tests/
│ │ │ │ │ ├── Ballerina.toml
│ │ │ │ │ └── main.bal
│ │ │ │ └── service-tests/
│ │ │ │ ├── Ballerina.toml
│ │ │ │ ├── hello_service.bal
│ │ │ │ └── tests/
│ │ │ │ └── hello_service_test.bal
│ │ │ └── single-file-tests/
│ │ │ └── hello_service.bal
│ │ └── testng.xml
│ └── testerina-object-mocking-test/
│ ├── client.bal
│ ├── service.bal
│ └── tests/
│ └── main_test.bal
├── dist-repo-builder/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── ballerina/
│ └── dist/
│ └── DistRepoBuilder.java
├── doc-guidelines.md
├── docs/
│ └── build-ballerina-from-source.md
├── examples/
│ ├── access-json-elements/
│ │ ├── access_json_elements.bal
│ │ ├── access_json_elements.md
│ │ ├── access_json_elements.metatags
│ │ └── access_json_elements.out
│ ├── access-optional-json-elements/
│ │ ├── access_optional_json_elements.bal
│ │ ├── access_optional_json_elements.md
│ │ ├── access_optional_json_elements.metatags
│ │ └── access_optional_json_elements.out
│ ├── advanced-conflict-handling/
│ │ ├── advanced_conflict_handling.bal
│ │ ├── advanced_conflict_handling.md
│ │ ├── advanced_conflict_handling.metatags
│ │ └── advanced_conflict_handling.out
│ ├── aggregation/
│ │ ├── aggregation.bal
│ │ ├── aggregation.md
│ │ ├── aggregation.metatags
│ │ └── aggregation.out
│ ├── ai-agent-external-endpoint-integration/
│ │ ├── ai_agent_external_endpoint_integration.bal
│ │ ├── ai_agent_external_endpoint_integration.md
│ │ ├── ai_agent_external_endpoint_integration.metatags
│ │ └── ai_agent_external_endpoint_integration.out
│ ├── ai-agent-local-tools/
│ │ ├── ai_agent_local_tools.bal
│ │ ├── ai_agent_local_tools.md
│ │ ├── ai_agent_local_tools.metatags
│ │ └── ai_agent_local_tools.out
│ ├── ai-agent-mcp-integration/
│ │ ├── ai_agent_mcp_integration.bal
│ │ ├── ai_agent_mcp_integration.md
│ │ ├── ai_agent_mcp_integration.metatags
│ │ └── ai_agent_mcp_integration.out
│ ├── ai-agent-tool-kit/
│ │ ├── ai_agent_tool_kit.bal
│ │ ├── ai_agent_tool_kit.md
│ │ ├── ai_agent_tool_kit.metatags
│ │ └── ai_agent_tool_kit.out
│ ├── alternate-receive/
│ │ ├── alternate_receive.bal
│ │ ├── alternate_receive.md
│ │ ├── alternate_receive.metatags
│ │ └── alternate_receive.out
│ ├── alternate-wait/
│ │ ├── alternate_wait.bal
│ │ ├── alternate_wait.md
│ │ ├── alternate_wait.metatags
│ │ └── alternate_wait.out
│ ├── annotations/
│ │ ├── annotations.bal
│ │ ├── annotations.md
│ │ ├── annotations.metatags
│ │ └── annotations.out
│ ├── anonymous-function/
│ │ ├── anonymous_function.bal
│ │ ├── anonymous_function.md
│ │ ├── anonymous_function.metatags
│ │ └── anonymous_function.out
│ ├── any-type/
│ │ ├── any_type.bal
│ │ ├── any_type.md
│ │ ├── any_type.metatags
│ │ └── any_type.out
│ ├── anydata-to-yaml-string/
│ │ ├── anydata_to_yaml_string.bal
│ │ ├── anydata_to_yaml_string.md
│ │ ├── anydata_to_yaml_string.metatags
│ │ └── anydata_to_yaml_string.out
│ ├── anydata-type/
│ │ ├── anydata_type.bal
│ │ ├── anydata_type.md
│ │ ├── anydata_type.metatags
│ │ └── anydata_type.out
│ ├── array-map-symmetry/
│ │ ├── array_map_symmetry.bal
│ │ ├── array_map_symmetry.md
│ │ ├── array_map_symmetry.metatags
│ │ └── array_map_symmetry.out
│ ├── arrays/
│ │ ├── arrays.bal
│ │ ├── arrays.md
│ │ ├── arrays.metatags
│ │ └── arrays.out
│ ├── asynchronize-message-passing/
│ │ ├── asynchronize_message_passing.bal
│ │ ├── asynchronize_message_passing.md
│ │ ├── asynchronize_message_passing.metatags
│ │ └── asynchronize_message_passing.out
│ ├── asynchronous-function-calls/
│ │ ├── asynchronous_function_calls.bal
│ │ ├── asynchronous_function_calls.md
│ │ ├── asynchronous_function_calls.metatags
│ │ └── asynchronous_function_calls.out
│ ├── avro-serdes/
│ │ ├── avro_serdes.bal
│ │ ├── avro_serdes.md
│ │ ├── avro_serdes.metatags
│ │ └── avro_serdes.out
│ ├── aws-lambda-dynamodb-trigger/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_dynamodb_trigger.bal
│ │ ├── aws_lambda_dynamodb_trigger.md
│ │ ├── aws_lambda_dynamodb_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── aws-lambda-execution-context/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_execution_context.bal
│ │ ├── aws_lambda_execution_context.md
│ │ ├── aws_lambda_execution_context.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── invoke_functions.out
│ ├── aws-lambda-hello-world/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_hello_world.bal
│ │ ├── aws_lambda_hello_world.md
│ │ ├── aws_lambda_hello_world.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── invoke_functions.out
│ ├── aws-lambda-s3-trigger/
│ │ ├── aws_deploy.out
│ │ ├── aws_lambda_s3_trigger.bal
│ │ ├── aws_lambda_s3_trigger.md
│ │ ├── aws_lambda_s3_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── azure-functions-cosmosdb-trigger/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_cosmosdb_trigger.bal
│ │ ├── azure_functions_cosmosdb_trigger.md
│ │ ├── azure_functions_cosmosdb_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── azure-functions-hello-world/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_hello_world.bal
│ │ ├── azure_functions_hello_world.md
│ │ ├── azure_functions_hello_world.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── execute_function.out
│ ├── azure-functions-http-trigger-with-queue/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_http_trigger_with_queue.bal
│ │ ├── azure_functions_http_trigger_with_queue.md
│ │ ├── azure_functions_http_trigger_with_queue.metatags
│ │ ├── bal_build.out
│ │ ├── bal_new.out
│ │ └── execute_function.out
│ ├── azure-functions-timer-trigger/
│ │ ├── az_deploy.out
│ │ ├── azure_functions_timer_trigger.bal
│ │ ├── azure_functions_timer_trigger.md
│ │ ├── azure_functions_timer_trigger.metatags
│ │ ├── bal_build.out
│ │ └── bal_new.out
│ ├── binary-data/
│ │ ├── binary_data.bal
│ │ ├── binary_data.md
│ │ ├── binary_data.metatags
│ │ └── binary_data.out
│ ├── binary-operators/
│ │ ├── binary_operators.bal
│ │ ├── binary_operators.md
│ │ ├── binary_operators.metatags
│ │ └── binary_operators.out
│ ├── binding-patterns/
│ │ ├── binding_patterns.bal
│ │ ├── binding_patterns.md
│ │ ├── binding_patterns.metatags
│ │ └── binding_patterns.out
│ ├── binding-patterns-in-match-statement/
│ │ ├── binding_patterns_in_match_statement.bal
│ │ ├── binding_patterns_in_match_statement.md
│ │ ├── binding_patterns_in_match_statement.metatags
│ │ └── binding_patterns_in_match_statement.out
│ ├── boolean/
│ │ ├── boolean.bal
│ │ ├── boolean.md
│ │ ├── boolean.metatags
│ │ └── boolean.out
│ ├── break-statement/
│ │ ├── break_statement.bal
│ │ ├── break_statement.md
│ │ ├── break_statement.metatags
│ │ └── break_statement.out
│ ├── built-in-integer-subtypes/
│ │ ├── built_in_integer_subtypes.bal
│ │ ├── built_in_integer_subtypes.md
│ │ ├── built_in_integer_subtypes.metatags
│ │ └── built_in_integer_subtypes.out
│ ├── built-in-string-subtype/
│ │ ├── built_in_string_subtype.bal
│ │ ├── built_in_string_subtype.md
│ │ ├── built_in_string_subtype.metatags
│ │ └── built_in_string_subtype.out
│ ├── byte-type/
│ │ ├── byte_type.bal
│ │ ├── byte_type.md
│ │ ├── byte_type.metatags
│ │ └── byte_type.out
│ ├── c2c-docker-deployment/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── c2c_docker_deployment.bal
│ │ ├── c2c_docker_deployment.md
│ │ ├── docker_images.out
│ │ ├── docker_run.out
│ │ └── execute_curl.out
│ ├── c2c-k8s-deployment/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── c2c_k8s_deployment.bal
│ │ ├── c2c_k8s_deployment.md
│ │ ├── docker_push.out
│ │ ├── execute_curl.out
│ │ ├── kubectl_apply.out
│ │ ├── kubectl_expose.out
│ │ ├── kubectl_pods.out
│ │ ├── kubectl_svc.out
│ │ └── minikube_ip.out
│ ├── cache-basics/
│ │ ├── cache_basics.bal
│ │ ├── cache_basics.md
│ │ ├── cache_basics.metatags
│ │ ├── cache_basics.out
│ │ └── tests/
│ │ └── cache_test.bal
│ ├── cache-invalidation/
│ │ ├── cache_invalidation.bal
│ │ ├── cache_invalidation.md
│ │ ├── cache_invalidation.metatags
│ │ ├── cache_invalidation.out
│ │ └── tests/
│ │ └── cache_test.bal
│ ├── casting-json-to-user-defined-type/
│ │ ├── casting_json_to_user_defined_type.bal
│ │ ├── casting_json_to_user_defined_type.md
│ │ ├── casting_json_to_user_defined_type.metatags
│ │ └── casting_json_to_user_defined_type.out
│ ├── cdc-advanced-service/
│ │ ├── cdc_advanced_service.bal
│ │ ├── cdc_advanced_service.md
│ │ ├── cdc_advanced_service.metatags
│ │ └── cdc_advanced_service.out
│ ├── cdc-prerequisite/
│ │ ├── README.md
│ │ ├── setup_finance_db.bal
│ │ ├── setup_store_db.bal
│ │ ├── test_cdc_advanced_service.bal
│ │ └── test_cdc_service.bal
│ ├── cdc-service/
│ │ ├── cdc_service.bal
│ │ ├── cdc_service.md
│ │ ├── cdc_service.metatags
│ │ └── cdc_service.out
│ ├── chat-agents/
│ │ ├── chat_agents.bal
│ │ ├── chat_agents.md
│ │ ├── chat_agents.metatags
│ │ └── chat_agents.out
│ ├── check-expression/
│ │ ├── check_expression.bal
│ │ ├── check_expression.md
│ │ ├── check_expression.metatags
│ │ └── check_expression.out
│ ├── check-semantics/
│ │ ├── check_semantics.bal
│ │ ├── check_semantics.md
│ │ ├── check_semantics.metatags
│ │ └── check_semantics.out
│ ├── child-loggers-with-context/
│ │ ├── child_loggers_with_context.bal
│ │ ├── child_loggers_with_context.md
│ │ ├── child_loggers_with_context.metatags
│ │ └── child_loggers_with_context.out
│ ├── client-class/
│ │ ├── client_class.bal
│ │ ├── client_class.md
│ │ ├── client_class.metatags
│ │ └── client_class.out
│ ├── combining-isolated-functions-and-lock/
│ │ ├── combining_isolated_functions_and_lock.bal
│ │ ├── combining_isolated_functions_and_lock.md
│ │ ├── combining_isolated_functions_and_lock.metatags
│ │ └── combining_isolated_functions_and_lock.out
│ ├── commit-rollback-handlers/
│ │ ├── commit_rollback_handlers.bal
│ │ ├── commit_rollback_handlers.md
│ │ ├── commit_rollback_handlers.metatags
│ │ └── commit_rollback_handlers.out
│ ├── computed-field-key/
│ │ ├── computed_field_key.bal
│ │ ├── computed_field_key.md
│ │ ├── computed_field_key.metatags
│ │ └── computed_field_key.out
│ ├── conditional-send/
│ │ ├── conditional_send.bal
│ │ ├── conditional_send.md
│ │ ├── conditional_send.metatags
│ │ └── conditional_send.out
│ ├── configurable-variables/
│ │ ├── configurable_variables.bal
│ │ ├── configurable_variables.md
│ │ ├── configurable_variables.metatags
│ │ └── configurable_variables.out
│ ├── configuring-via-cli/
│ │ ├── configuring_via_cli.bal
│ │ ├── configuring_via_cli.md
│ │ ├── configuring_via_cli.metatags
│ │ └── configuring_via_cli.out
│ ├── configuring-via-toml/
│ │ ├── configuring-via-toml.md
│ │ ├── configuring_via_toml.bal
│ │ ├── configuring_via_toml.metatags
│ │ └── configuring_via_toml.out
│ ├── const-and-final/
│ │ ├── const_and_final.bal
│ │ ├── const_and_final.md
│ │ ├── const_and_final.metatags
│ │ └── const_and_final.out
│ ├── constraint-validations/
│ │ ├── constraint_validations.bal
│ │ ├── constraint_validations.md
│ │ ├── constraint_validations.metatags
│ │ └── constraint_validations.out
│ ├── consuming-services/
│ │ ├── consuming_services.bal
│ │ ├── consuming_services.md
│ │ ├── consuming_services.metatags
│ │ └── consuming_services.out
│ ├── continue-statement/
│ │ ├── continue_statement.bal
│ │ ├── continue_statement.md
│ │ ├── continue_statement.metatags
│ │ └── continue_statement.out
│ ├── controlling-openness/
│ │ ├── controlling_openness.bal
│ │ ├── controlling_openness.md
│ │ ├── controlling_openness.metatags
│ │ └── controlling_openness.out
│ ├── convert-from-json-to-user-defined-type/
│ │ ├── convert_from_json_to_user_defined_type.bal
│ │ ├── convert_from_json_to_user_defined_type.md
│ │ ├── convert_from_json_to_user_defined_type.metatags
│ │ └── convert_from_json_to_user_defined_type.out
│ ├── converting-from-table-and-xml-to-json/
│ │ ├── converting_from_table_and_xml_to_json.bal
│ │ ├── converting_from_table_and_xml_to_json.md
│ │ ├── converting_from_table_and_xml_to_json.metatags
│ │ └── converting_from_table_and_xml_to_json.out
│ ├── converting-from-user-defined-type-to-json/
│ │ ├── converting_from_user_defined_type_to_json.bal
│ │ ├── converting_from_user_defined_type_to_json.md
│ │ ├── converting_from_user_defined_type_to_json.metatags
│ │ └── converting_from_user_defined_type_to_json.out
│ ├── counter-metrics/
│ │ ├── counter_metrics.bal
│ │ ├── counter_metrics.client.out
│ │ ├── counter_metrics.md
│ │ ├── counter_metrics.metatags
│ │ ├── counter_metrics.server.out
│ │ └── tests/
│ │ └── counter_metrics_test.bal
│ ├── covariance/
│ │ ├── covariance.bal
│ │ ├── covariance.md
│ │ ├── covariance.metatags
│ │ └── covariance.out
│ ├── create-maps-with-query/
│ │ ├── create_maps_with_query.bal
│ │ ├── create_maps_with_query.md
│ │ ├── create_maps_with_query.metatags
│ │ └── create_maps_with_query.out
│ ├── create-streams-with-query/
│ │ ├── create_streams_with_query.bal
│ │ ├── create_streams_with_query.md
│ │ ├── create_streams_with_query.metatags
│ │ └── create_streams_with_query.out
│ ├── create-tables-with-query/
│ │ ├── create_tables_with_query.bal
│ │ ├── create_tables_with_query.md
│ │ ├── create_tables_with_query.metatags
│ │ └── create_tables_with_query.out
│ ├── csv-streams-to-record-array/
│ │ ├── csv_streams_to_record_array.bal
│ │ ├── csv_streams_to_record_array.md
│ │ ├── csv_streams_to_record_array.metatags
│ │ └── csv_streams_to_record_array.out
│ ├── csv-string-to-anydata-array/
│ │ ├── csv_string_to_anydata_array.bal
│ │ ├── csv_string_to_anydata_array.md
│ │ ├── csv_string_to_anydata_array.metatags
│ │ └── csv_string_to_anydata_array.out
│ ├── csv-string-to-record-array/
│ │ ├── csv_string_to_record_array.bal
│ │ ├── csv_string_to_record_array.md
│ │ ├── csv_string_to_record_array.metatags
│ │ └── csv_string_to_record_array.out
│ ├── csv-user-configurations/
│ │ ├── csv_user_configurations.bal
│ │ ├── csv_user_configurations.md
│ │ ├── csv_user_configurations.metatags
│ │ └── csv_user_configurations.out
│ ├── custom-logger/
│ │ ├── custom_logger.bal
│ │ ├── custom_logger.md
│ │ ├── custom_logger.metatags
│ │ └── custom_logger.out
│ ├── custom-prefetch-methods/
│ │ ├── custom_prefetch_methods.bal
│ │ ├── custom_prefetch_methods.client.out
│ │ ├── custom_prefetch_methods.graphql
│ │ ├── custom_prefetch_methods.md
│ │ ├── custom_prefetch_methods.metatags
│ │ └── custom_prefetch_methods.server.out
│ ├── decimal-type/
│ │ ├── decimal_type.bal
│ │ ├── decimal_type.md
│ │ ├── decimal_type.metatags
│ │ └── decimal_type.out
│ ├── default-values-for-function-parameters/
│ │ ├── default_values_for_function_parameters.bal
│ │ ├── default_values_for_function_parameters.md
│ │ ├── default_values_for_function_parameters.metatags
│ │ └── default_values_for_function_parameters.out
│ ├── default-values-for-record-fields/
│ │ ├── default_values_for_record_fields.bal
│ │ ├── default_values_for_record_fields.md
│ │ ├── default_values_for_record_fields.metatags
│ │ └── default_values_for_record_fields.out
│ ├── defining-classes/
│ │ ├── defining_classes.bal
│ │ ├── defining_classes.md
│ │ ├── defining_classes.metatags
│ │ └── defining_classes.out
│ ├── dependent-types/
│ │ ├── dependent_types.bal
│ │ ├── dependent_types.md
│ │ ├── dependent_types.metatags
│ │ └── dependent_types.out
│ ├── destructure-records-using-query/
│ │ ├── destructure_records_using_query.bal
│ │ ├── destructure_records_using_query.md
│ │ ├── destructure_records_using_query.metatags
│ │ └── destructure_records_using_query.out
│ ├── direct-llm-calls/
│ │ ├── direct_llm_calls.bal
│ │ ├── direct_llm_calls.md
│ │ ├── direct_llm_calls.metatags
│ │ └── direct_llm_calls.out
│ ├── direct-llm-calls-with-history/
│ │ ├── direct_llm_calls_with_history.bal
│ │ ├── direct_llm_calls_with_history.md
│ │ ├── direct_llm_calls_with_history.metatags
│ │ └── direct_llm_calls_with_history.out
│ ├── direct-llm-calls-with-multimodal-input/
│ │ ├── direct_llm_calls_with_multimodal_input.bal
│ │ ├── direct_llm_calls_with_multimodal_input.md
│ │ ├── direct_llm_calls_with_multimodal_input.metatags
│ │ └── direct_llm_calls_with_multimodal_input.out
│ ├── directories/
│ │ ├── directories.bal
│ │ ├── directories.md
│ │ ├── directories.metatags
│ │ └── directories.out
│ ├── directory-listener/
│ │ ├── directory_listener.bal
│ │ ├── directory_listener.md
│ │ ├── directory_listener.metatags
│ │ └── directory_listener.out
│ ├── distinct-object-types/
│ │ ├── distinct_object_types.bal
│ │ ├── distinct_object_types.md
│ │ ├── distinct_object_types.metatags
│ │ └── distinct_object_types.out
│ ├── docker-hello-world/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── docker_hello_world.bal
│ │ ├── docker_hello_world.md
│ │ ├── docker_images.out
│ │ ├── docker_run.out
│ │ └── execute_curl.out
│ ├── documentation/
│ │ ├── documentation.bal
│ │ ├── documentation.md
│ │ ├── documentation.metatags
│ │ └── documentation.out
│ ├── dynamic-listener/
│ │ ├── dynamic_listener.bal
│ │ ├── dynamic_listener.client.out
│ │ ├── dynamic_listener.md
│ │ ├── dynamic_listener.metatags
│ │ └── dynamic_listener.server.out
│ ├── edi-to-record/
│ │ ├── bal_project.out
│ │ ├── codegen_command.out
│ │ ├── edi_to_record.bal
│ │ ├── edi_to_record.md
│ │ ├── edi_to_record.metatags
│ │ ├── order.edi
│ │ ├── output.out
│ │ ├── package_structure.out
│ │ ├── schema.json
│ │ └── tool_pull_command.out
│ ├── email-client-ssl-tls/
│ │ ├── email_client_ssl_tls.bal
│ │ ├── email_client_ssl_tls.md
│ │ ├── email_client_ssl_tls.metatags
│ │ └── email_client_ssl_tls.out
│ ├── email-service-ssl-tls/
│ │ ├── email_service_ssl_tls.bal
│ │ ├── email_service_ssl_tls.md
│ │ ├── email_service_ssl_tls.metatags
│ │ └── email_service_ssl_tls.out
│ ├── ensureType-function/
│ │ ├── ensureType_function.bal
│ │ ├── ensureType_function.md
│ │ ├── ensureType_function.metatags
│ │ └── ensureType_function.out
│ ├── enumerations/
│ │ ├── enumerations.bal
│ │ ├── enumerations.md
│ │ ├── enumerations.metatags
│ │ └── enumerations.out
│ ├── environment-variables/
│ │ ├── environment_variables.bal
│ │ ├── environment_variables.md
│ │ ├── environment_variables.metatags
│ │ └── environment_variables.out
│ ├── error-binding-pattern/
│ │ ├── error_binding_pattern.bal
│ │ ├── error_binding_pattern.md
│ │ ├── error_binding_pattern.metatags
│ │ └── error_binding_pattern.out
│ ├── error-binding-pattern-in-match-statement/
│ │ ├── error_binding_pattern_in_match_statement.bal
│ │ ├── error_binding_pattern_in_match_statement.md
│ │ ├── error_binding_pattern_in_match_statement.metatags
│ │ └── error_binding_pattern_in_match_statement.out
│ ├── error-cause/
│ │ ├── error_cause.bal
│ │ ├── error_cause.md
│ │ ├── error_cause.metatags
│ │ └── error_cause.out
│ ├── error-detail/
│ │ ├── error_detail.bal
│ │ ├── error_detail.md
│ │ ├── error_detail.metatags
│ │ └── error_detail.out
│ ├── error-handling/
│ │ ├── error_handling.bal
│ │ ├── error_handling.md
│ │ ├── error_handling.metatags
│ │ └── error_handling.out
│ ├── error-logging/
│ │ ├── error_logging.bal
│ │ ├── error_logging.md
│ │ ├── error_logging.metatags
│ │ └── error_logging.out
│ ├── error-reporting/
│ │ ├── error_reporting.bal
│ │ ├── error_reporting.md
│ │ ├── error_reporting.metatags
│ │ └── error_reporting.out
│ ├── error-subtyping/
│ │ ├── error_subtyping.bal
│ │ ├── error_subtyping.md
│ │ ├── error_subtyping.metatags
│ │ └── error_subtyping.out
│ ├── error-type-intersection/
│ │ ├── error_type_intersection.bal
│ │ ├── error_type_intersection.md
│ │ ├── error_type_intersection.metatags
│ │ └── error_type_intersection.out
│ ├── expression-equality/
│ │ ├── expression_equality.bal
│ │ ├── expression_equality.md
│ │ ├── expression_equality.metatags
│ │ └── expression_equality.out
│ ├── expression-oriented-style/
│ │ ├── expression_oriented_style.bal
│ │ ├── expression_oriented_style.md
│ │ ├── expression_oriented_style.metatags
│ │ └── expression_oriented_style.out
│ ├── filepaths/
│ │ ├── filepaths.bal
│ │ ├── filepaths.md
│ │ ├── filepaths.metatags
│ │ ├── filepaths.out
│ │ └── tests/
│ │ └── filepath_test.bal
│ ├── files/
│ │ ├── files.bal
│ │ ├── files.md
│ │ ├── files.metatags
│ │ └── files.out
│ ├── filler-values-of-a-list/
│ │ ├── filler_values_of_a_list.bal
│ │ ├── filler_values_of_a_list.md
│ │ ├── filler_values_of_a_list.metatags
│ │ └── filler_values_of_a_list.out
│ ├── floating-point-numbers/
│ │ ├── floating_point_numbers.bal
│ │ ├── floating_point_numbers.md
│ │ ├── floating_point_numbers.metatags
│ │ └── floating_point_numbers.out
│ ├── flush/
│ │ ├── flush.bal
│ │ ├── flush.md
│ │ ├── flush.metatags
│ │ └── flush.out
│ ├── foreach-statement/
│ │ ├── foreach_statement.bal
│ │ ├── foreach_statement.md
│ │ ├── foreach_statement.metatags
│ │ └── foreach_statement.out
│ ├── fork/
│ │ ├── fork.bal
│ │ ├── fork.md
│ │ ├── fork.metatags
│ │ └── fork.out
│ ├── ftp-client-receive-file/
│ │ ├── ftp_client_receive_file.bal
│ │ ├── ftp_client_receive_file.md
│ │ ├── ftp_client_receive_file.metatags
│ │ └── ftp_client_receive_file.out
│ ├── ftp-client-send-file/
│ │ ├── ftp_client_send_file.bal
│ │ ├── ftp_client_send_file.md
│ │ ├── ftp_client_send_file.metatags
│ │ └── ftp_client_send_file.out
│ ├── ftp-service-receive-file/
│ │ ├── ftp_service_receive_file.bal
│ │ ├── ftp_service_receive_file.md
│ │ ├── ftp_service_receive_file.metatags
│ │ └── ftp_service_receive_file.out
│ ├── ftp-service-send-file/
│ │ ├── ftp_service_send_file.bal
│ │ ├── ftp_service_send_file.md
│ │ ├── ftp_service_send_file.metatags
│ │ └── ftp_service_send_file.out
│ ├── function-closure/
│ │ ├── function_closure.bal
│ │ ├── function_closure.md
│ │ ├── function_closure.metatags
│ │ └── function_closure.out
│ ├── function-pointers/
│ │ ├── function_pointers.bal
│ │ ├── function_pointers.md
│ │ ├── function_pointers.metatags
│ │ └── function_pointers.out
│ ├── function-types/
│ │ ├── function_types.bal
│ │ ├── function_types.md
│ │ ├── function_types.metatags
│ │ └── function_types.out
│ ├── function-values/
│ │ ├── function_values.bal
│ │ ├── function_values.md
│ │ ├── function_values.metatags
│ │ └── function_values.out
│ ├── functions/
│ │ ├── functions.bal
│ │ ├── functions.md
│ │ ├── functions.metatags
│ │ └── functions.out
│ ├── gauge-metrics/
│ │ ├── gauge_metrics.bal
│ │ ├── gauge_metrics.client.out
│ │ ├── gauge_metrics.md
│ │ ├── gauge_metrics.metatags
│ │ ├── gauge_metrics.server.out
│ │ └── tests/
│ │ └── gauge_metrics_test.bal
│ ├── graphql-client-error-handling/
│ │ ├── graphql_client_error_handling.bal
│ │ ├── graphql_client_error_handling.md
│ │ ├── graphql_client_error_handling.metatags
│ │ └── graphql_client_error_handling.out
│ ├── graphql-client-handle-partial-response/
│ │ ├── graphql_client_handle_partial_response.bal
│ │ ├── graphql_client_handle_partial_response.md
│ │ ├── graphql_client_handle_partial_response.metatags
│ │ └── graphql_client_handle_partial_response.out
│ ├── graphql-client-query-endpoint/
│ │ ├── graphql_client_query_endpoint.bal
│ │ ├── graphql_client_query_endpoint.md
│ │ ├── graphql_client_query_endpoint.metatags
│ │ └── graphql_client_query_endpoint.out
│ ├── graphql-client-security-basic-auth/
│ │ ├── graphql_client_security_basic_auth.bal
│ │ ├── graphql_client_security_basic_auth.md
│ │ ├── graphql_client_security_basic_auth.metatags
│ │ └── graphql_client_security_basic_auth.out
│ ├── graphql-client-security-jwt-authentication/
│ │ ├── graphql_client_security_jwt_authentication.bal
│ │ ├── graphql_client_security_jwt_authentication.md
│ │ ├── graphql_client_security_jwt_authentication.metatags
│ │ └── graphql_client_security_jwt_authentication.out
│ ├── graphql-client-security-mutual-ssl/
│ │ ├── graphql_client_security_mutual_ssl.bal
│ │ ├── graphql_client_security_mutual_ssl.md
│ │ ├── graphql_client_security_mutual_ssl.metatags
│ │ └── graphql_client_security_mutual_ssl.out
│ ├── graphql-client-security-oauth2-password-grant-type/
│ │ ├── graphql_client_security_oauth2_password_grant_type.bal
│ │ ├── graphql_client_security_oauth2_password_grant_type.md
│ │ ├── graphql_client_security_oauth2_password_grant_type.metatags
│ │ └── graphql_client_security_oauth2_password_grant_type.out
│ ├── graphql-client-security-ssl-tls/
│ │ ├── graphql_client_security_ssl_tls.bal
│ │ ├── graphql_client_security_ssl_tls.md
│ │ ├── graphql_client_security_ssl_tls.metatags
│ │ └── graphql_client_security_ssl_tls.out
│ ├── graphql-context/
│ │ ├── graphql_context.1.client.out
│ │ ├── graphql_context.2.client.out
│ │ ├── graphql_context.bal
│ │ ├── graphql_context.graphql
│ │ ├── graphql_context.md
│ │ ├── graphql_context.metatags
│ │ └── graphql_context.server.out
│ ├── graphql-dataloader/
│ │ ├── graphql_dataloader.bal
│ │ ├── graphql_dataloader.client.out
│ │ ├── graphql_dataloader.graphql
│ │ ├── graphql_dataloader.md
│ │ ├── graphql_dataloader.metatags
│ │ └── graphql_dataloader.server.out
│ ├── graphql-directives/
│ │ ├── graphql_directives.1.client.out
│ │ ├── graphql_directives.1.graphql
│ │ ├── graphql_directives.2.client.out
│ │ ├── graphql_directives.2.graphql
│ │ ├── graphql_directives.3.client.out
│ │ ├── graphql_directives.3.graphql
│ │ ├── graphql_directives.bal
│ │ ├── graphql_directives.md
│ │ ├── graphql_directives.metatags
│ │ └── graphql_directives.server.out
│ ├── graphql-documentation/
│ │ ├── graphql_documentation.bal
│ │ ├── graphql_documentation.client.out
│ │ ├── graphql_documentation.graphql
│ │ ├── graphql_documentation.md
│ │ ├── graphql_documentation.metatags
│ │ └── graphql_documentation.server.out
│ ├── graphql-field-interceptors/
│ │ ├── graphql_field_interceptors.bal
│ │ ├── graphql_field_interceptors.client.out
│ │ ├── graphql_field_interceptors.graphql
│ │ ├── graphql_field_interceptors.md
│ │ ├── graphql_field_interceptors.metatags
│ │ └── graphql_field_interceptors.server.out
│ ├── graphql-file-upload/
│ │ ├── graphql_file_upload.bal
│ │ ├── graphql_file_upload.client.out
│ │ ├── graphql_file_upload.md
│ │ ├── graphql_file_upload.metatags
│ │ └── graphql_file_upload.server.out
│ ├── graphql-graphiql/
│ │ ├── graphql_graphiql.bal
│ │ ├── graphql_graphiql.md
│ │ ├── graphql_graphiql.metatags
│ │ └── graphql_graphiql.out
│ ├── graphql-hello-world/
│ │ ├── graphql_hello_world.bal
│ │ ├── graphql_hello_world.client.out
│ │ ├── graphql_hello_world.graphql
│ │ ├── graphql_hello_world.md
│ │ ├── graphql_hello_world.metatags
│ │ └── graphql_hello_world.server.out
│ ├── graphql-hierarchical-resource-paths/
│ │ ├── graphql_hierarchical_resource_paths.bal
│ │ ├── graphql_hierarchical_resource_paths.client.out
│ │ ├── graphql_hierarchical_resource_paths.graphql
│ │ ├── graphql_hierarchical_resource_paths.md
│ │ ├── graphql_hierarchical_resource_paths.metatags
│ │ └── graphql_hierarchical_resource_paths.server.out
│ ├── graphql-id-scalar-type/
│ │ ├── graphql_id_scalar_type.bal
│ │ ├── graphql_id_scalar_type.client.out
│ │ ├── graphql_id_scalar_type.graphql
│ │ ├── graphql_id_scalar_type.md
│ │ ├── graphql_id_scalar_type.metatags
│ │ └── graphql_id_scalar_type.server.out
│ ├── graphql-input-constraint-validation/
│ │ ├── graphql_input_constraint_validation.bal
│ │ ├── graphql_input_constraint_validation.client.out
│ │ ├── graphql_input_constraint_validation.graphql
│ │ ├── graphql_input_constraint_validation.md
│ │ ├── graphql_input_constraint_validation.metatags
│ │ └── graphql_input_constraint_validation.server.out
│ ├── graphql-input-objects/
│ │ ├── graphql_input_objects.bal
│ │ ├── graphql_input_objects.client.out
│ │ ├── graphql_input_objects.graphql
│ │ ├── graphql_input_objects.md
│ │ ├── graphql_input_objects.metatags
│ │ └── graphql_input_objects.server.out
│ ├── graphql-input-types/
│ │ ├── graphql_input_types.bal
│ │ ├── graphql_input_types.client.out
│ │ ├── graphql_input_types.graphql
│ │ ├── graphql_input_types.md
│ │ ├── graphql_input_types.metatags
│ │ └── graphql_input_types.server.out
│ ├── graphql-interceptor-configurations/
│ │ ├── graphql_interceptor_configurations.bal
│ │ ├── graphql_interceptor_configurations.client.out
│ │ ├── graphql_interceptor_configurations.graphql
│ │ ├── graphql_interceptor_configurations.md
│ │ ├── graphql_interceptor_configurations.metatags
│ │ └── graphql_interceptor_configurations.server.out
│ ├── graphql-interfaces/
│ │ ├── graphql_interfaces.bal
│ │ ├── graphql_interfaces.client.out
│ │ ├── graphql_interfaces.graphql
│ │ ├── graphql_interfaces.md
│ │ ├── graphql_interfaces.metatags
│ │ └── graphql_interfaces.server.out
│ ├── graphql-interfaces-implementing-interfaces/
│ │ ├── graphql_interfaces_implementing_interfaces.bal
│ │ ├── graphql_interfaces_implementing_interfaces.client.out
│ │ ├── graphql_interfaces_implementing_interfaces.graphql
│ │ ├── graphql_interfaces_implementing_interfaces.md
│ │ ├── graphql_interfaces_implementing_interfaces.metatags
│ │ └── graphql_interfaces_implementing_interfaces.server.out
│ ├── graphql-mutations/
│ │ ├── graphql_mutations.bal
│ │ ├── graphql_mutations.client.out
│ │ ├── graphql_mutations.graphql
│ │ ├── graphql_mutations.md
│ │ ├── graphql_mutations.metatags
│ │ └── graphql_mutations.server.out
│ ├── graphql-returning-record-values/
│ │ ├── graphql_returning_record_values.bal
│ │ ├── graphql_returning_record_values.client.out
│ │ ├── graphql_returning_record_values.graphql
│ │ ├── graphql_returning_record_values.md
│ │ ├── graphql_returning_record_values.metatags
│ │ └── graphql_returning_record_values.server.out
│ ├── graphql-returning-service-objects/
│ │ ├── graphql_returning_service_objects.bal
│ │ ├── graphql_returning_service_objects.client.out
│ │ ├── graphql_returning_service_objects.graphql
│ │ ├── graphql_returning_service_objects.md
│ │ ├── graphql_returning_service_objects.metatags
│ │ └── graphql_returning_service_objects.server.out
│ ├── graphql-service-basic-auth-file-user-store/
│ │ ├── graphql_service_basic_auth_file_user_store.bal
│ │ ├── graphql_service_basic_auth_file_user_store.md
│ │ ├── graphql_service_basic_auth_file_user_store.metatags
│ │ └── graphql_service_basic_auth_file_user_store.server.out
│ ├── graphql-service-basic-auth-ldap-user-store/
│ │ ├── graphql_service_basic_auth_ldap_user_store.bal
│ │ ├── graphql_service_basic_auth_ldap_user_store.md
│ │ ├── graphql_service_basic_auth_ldap_user_store.metatags
│ │ └── graphql_service_basic_auth_ldap_user_store.server.out
│ ├── graphql-service-cache-invalidation/
│ │ ├── graphql_service_cache_invalidation.bal
│ │ ├── graphql_service_cache_invalidation.client.out
│ │ ├── graphql_service_cache_invalidation.graphql
│ │ ├── graphql_service_cache_invalidation.md
│ │ ├── graphql_service_cache_invalidation.metatags
│ │ └── graphql_service_cache_invalidation.server.out
│ ├── graphql-service-error-handling/
│ │ ├── graphql_service_error_handling.1.client.out
│ │ ├── graphql_service_error_handling.1.graphql
│ │ ├── graphql_service_error_handling.2.client.out
│ │ ├── graphql_service_error_handling.2.graphql
│ │ ├── graphql_service_error_handling.bal
│ │ ├── graphql_service_error_handling.md
│ │ ├── graphql_service_error_handling.metatags
│ │ └── graphql_service_error_handling.server.out
│ ├── graphql-service-field-level-caching/
│ │ ├── graphql_service_field_level_caching.bal
│ │ ├── graphql_service_field_level_caching.client.out
│ │ ├── graphql_service_field_level_caching.graphql
│ │ ├── graphql_service_field_level_caching.md
│ │ ├── graphql_service_field_level_caching.metatags
│ │ └── graphql_service_field_level_caching.server.out
│ ├── graphql-service-field-object/
│ │ ├── graphql_service_field_object.1.client.out
│ │ ├── graphql_service_field_object.1.graphql
│ │ ├── graphql_service_field_object.2.client.out
│ │ ├── graphql_service_field_object.2.graphql
│ │ ├── graphql_service_field_object.bal
│ │ ├── graphql_service_field_object.md
│ │ ├── graphql_service_field_object.metatags
│ │ ├── graphql_service_field_object.server.1.out
│ │ ├── graphql_service_field_object.server.2.out
│ │ └── graphql_service_field_object.server.3.out
│ ├── graphql-service-interceptors/
│ │ ├── graphql_service_interceptors.bal
│ │ ├── graphql_service_interceptors.client.out
│ │ ├── graphql_service_interceptors.graphql
│ │ ├── graphql_service_interceptors.md
│ │ ├── graphql_service_interceptors.metatags
│ │ └── graphql_service_interceptors.server.out
│ ├── graphql-service-jwt-auth/
│ │ ├── graphql_service_jwt_auth.bal
│ │ ├── graphql_service_jwt_auth.md
│ │ ├── graphql_service_jwt_auth.metatags
│ │ └── graphql_service_jwt_auth.server.out
│ ├── graphql-service-mutual-ssl/
│ │ ├── graphql_service_mutual_ssl.bal
│ │ ├── graphql_service_mutual_ssl.md
│ │ ├── graphql_service_mutual_ssl.metatags
│ │ └── graphql_service_mutual_ssl.server.out
│ ├── graphql-service-oauth2/
│ │ ├── graphql_service_oauth2.bal
│ │ ├── graphql_service_oauth2.md
│ │ ├── graphql_service_oauth2.metatags
│ │ └── graphql_service_oauth2.server.out
│ ├── graphql-service-operation-level-caching/
│ │ ├── graphql_service_operation_level_caching.bal
│ │ ├── graphql_service_operation_level_caching.client.out
│ │ ├── graphql_service_operation_level_caching.graphql
│ │ ├── graphql_service_operation_level_caching.md
│ │ ├── graphql_service_operation_level_caching.metatags
│ │ └── graphql_service_operation_level_caching.server.out
│ ├── graphql-service-query-complexity/
│ │ ├── graphql_service_query_complexity.1.graphql
│ │ ├── graphql_service_query_complexity.2.graphql
│ │ ├── graphql_service_query_complexity.bal
│ │ ├── graphql_service_query_complexity.client.1.out
│ │ ├── graphql_service_query_complexity.client.2.out
│ │ ├── graphql_service_query_complexity.md
│ │ ├── graphql_service_query_complexity.metatags
│ │ └── graphql_service_query_complexity.server.out
│ ├── graphql-service-ssl-tls/
│ │ ├── graphql_service_ssl_tls.bal
│ │ ├── graphql_service_ssl_tls.md
│ │ ├── graphql_service_ssl_tls.metatags
│ │ └── graphql_service_ssl_tls.server.out
│ ├── graphql-service-union-types/
│ │ ├── graphql_service_union_types.bal
│ │ ├── graphql_service_union_types.client.out
│ │ ├── graphql_service_union_types.graphql
│ │ ├── graphql_service_union_types.md
│ │ ├── graphql_service_union_types.metatags
│ │ └── graphql_service_union_types.server.out
│ ├── graphql-subscriptions/
│ │ ├── graphql_subscriptions.bal
│ │ ├── graphql_subscriptions.client.out
│ │ ├── graphql_subscriptions.graphql
│ │ ├── graphql_subscriptions.md
│ │ ├── graphql_subscriptions.metatags
│ │ └── graphql_subscriptions.server.out
│ ├── grpc-client-basic-auth/
│ │ ├── grpc_client_basic_auth.bal
│ │ ├── grpc_client_basic_auth.md
│ │ ├── grpc_client_basic_auth.metatags
│ │ ├── grpc_client_basic_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-bearer-token-auth/
│ │ ├── grpc_client_bearer_token_auth.bal
│ │ ├── grpc_client_bearer_token_auth.md
│ │ ├── grpc_client_bearer_token_auth.metatags
│ │ ├── grpc_client_bearer_token_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-bidirectional-streaming/
│ │ ├── grpc_bidirectional_streaming.md
│ │ ├── grpc_bidirectional_streaming.metatags
│ │ ├── grpc_bidirectional_streaming.out
│ │ ├── grpc_bidirectional_streaming.proto
│ │ ├── grpc_bidirectional_streaming_service_client.bal
│ │ └── grpc_bidirectional_streaming_service_client.out
│ ├── grpc-client-client-streaming/
│ │ ├── grpc_client_streaming.md
│ │ ├── grpc_client_streaming.metatags
│ │ ├── grpc_client_streaming.out
│ │ ├── grpc_client_streaming.proto
│ │ ├── grpc_client_streaming_service_client.bal
│ │ └── grpc_client_streaming_service_client.out
│ ├── grpc-client-headers/
│ │ ├── grpc_simple.proto
│ │ ├── grpc_simple_with_headers.md
│ │ ├── grpc_simple_with_headers.metatags
│ │ ├── grpc_simple_with_headers_service_client.bal
│ │ └── grpc_simple_with_headers_service_client.out
│ ├── grpc-client-mutual-ssl/
│ │ ├── grpc_client_mutual_ssl.bal
│ │ ├── grpc_client_mutual_ssl.md
│ │ ├── grpc_client_mutual_ssl.metatags
│ │ ├── grpc_client_mutual_ssl.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-client-credentials-grant-type/
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.bal
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.md
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.metatags
│ │ ├── grpc_client_oauth2_client_credentials_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-jwt-bearer-grant-type/
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.metatags
│ │ ├── grpc_client_oauth2_jwt_bearer_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-password-grant-type/
│ │ ├── grpc_client_oauth2_password_grant_type.bal
│ │ ├── grpc_client_oauth2_password_grant_type.md
│ │ ├── grpc_client_oauth2_password_grant_type.metatags
│ │ ├── grpc_client_oauth2_password_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-oauth2-refresh-token-grant-type/
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.bal
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.md
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.metatags
│ │ ├── grpc_client_oauth2_refresh_token_grant_type.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-self-signed-jwt-auth/
│ │ ├── grpc_client_self_signed_jwt_auth.bal
│ │ ├── grpc_client_self_signed_jwt_auth.md
│ │ ├── grpc_client_self_signed_jwt_auth.metatags
│ │ ├── grpc_client_self_signed_jwt_auth.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-server-streaming/
│ │ ├── grpc_server_streaming.md
│ │ ├── grpc_server_streaming.metatags
│ │ ├── grpc_server_streaming.out
│ │ ├── grpc_server_streaming.proto
│ │ ├── grpc_server_streaming_service_client.bal
│ │ └── grpc_server_streaming_service_client.out
│ ├── grpc-client-set-deadline/
│ │ ├── grpc_client_set_deadline.bal
│ │ ├── grpc_client_set_deadline.md
│ │ ├── grpc_client_set_deadline.metatags
│ │ ├── grpc_client_set_deadline.out
│ │ └── grpc_simple.proto
│ ├── grpc-client-simple/
│ │ ├── grpc_client_simple.bal
│ │ ├── grpc_client_simple.md
│ │ ├── grpc_client_simple.metatags
│ │ ├── grpc_client_simple.out
│ │ ├── grpc_client_simple.proto
│ │ └── grpc_simple.out
│ ├── grpc-client-ssl-tls/
│ │ ├── grpc_client_ssl_tls.bal
│ │ ├── grpc_client_ssl_tls.md
│ │ ├── grpc_client_ssl_tls.metatags
│ │ ├── grpc_client_ssl_tls.out
│ │ └── grpc_simple.proto
│ ├── grpc-server-reflection/
│ │ ├── grpc_server_reflection.bal
│ │ ├── grpc_server_reflection.md
│ │ ├── grpc_server_reflection.metatags
│ │ ├── grpc_server_reflection.out
│ │ ├── grpc_server_reflection_grpcurl.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-basic-auth-file-user-store/
│ │ ├── grpc_service_basic_auth_file_user_store.bal
│ │ ├── grpc_service_basic_auth_file_user_store.md
│ │ ├── grpc_service_basic_auth_file_user_store.metatags
│ │ ├── grpc_service_basic_auth_file_user_store.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-basic-auth-ldap-user-store/
│ │ ├── grpc_service_basic_auth_ldap_user_store.bal
│ │ ├── grpc_service_basic_auth_ldap_user_store.md
│ │ ├── grpc_service_basic_auth_ldap_user_store.metatags
│ │ ├── grpc_service_basic_auth_ldap_user_store.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-bidirectional-streaming/
│ │ ├── grpc_bidirectional_streaming.md
│ │ ├── grpc_bidirectional_streaming.metatags
│ │ ├── grpc_bidirectional_streaming.out
│ │ ├── grpc_bidirectional_streaming.proto
│ │ ├── grpc_bidirectional_streaming_service.bal
│ │ ├── grpc_bidirectional_streaming_service.out
│ │ └── tests/
│ │ └── grpc_bidirectional_streaming_test.bal
│ ├── grpc-service-check-deadline/
│ │ ├── grpc_service_check_deadline.bal
│ │ ├── grpc_service_check_deadline.md
│ │ ├── grpc_service_check_deadline.metatags
│ │ ├── grpc_service_check_deadline.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-client-streaming/
│ │ ├── grpc_client_streaming.md
│ │ ├── grpc_client_streaming.metatags
│ │ ├── grpc_client_streaming.out
│ │ ├── grpc_client_streaming.proto
│ │ ├── grpc_client_streaming_service.bal
│ │ ├── grpc_client_streaming_service.out
│ │ └── tests/
│ │ └── grpc_client_streaming_test.bal
│ ├── grpc-service-headers/
│ │ ├── grpc_simple.proto
│ │ ├── grpc_simple_with_headers.md
│ │ ├── grpc_simple_with_headers.metatags
│ │ ├── grpc_simple_with_headers_service.bal
│ │ ├── grpc_simple_with_headers_service.out
│ │ └── tests/
│ │ └── grpc_simple_with_headers_test.bal
│ ├── grpc-service-jwt-auth/
│ │ ├── grpc_service_jwt_auth.bal
│ │ ├── grpc_service_jwt_auth.md
│ │ ├── grpc_service_jwt_auth.metatags
│ │ ├── grpc_service_jwt_auth.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-mutual-ssl/
│ │ ├── grpc_service_mutual_ssl.bal
│ │ ├── grpc_service_mutual_ssl.md
│ │ ├── grpc_service_mutual_ssl.metatags
│ │ ├── grpc_service_mutual_ssl.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-oauth2/
│ │ ├── grpc_service_oauth2.bal
│ │ ├── grpc_service_oauth2.md
│ │ ├── grpc_service_oauth2.metatags
│ │ ├── grpc_service_oauth2.server.out
│ │ └── grpc_simple.proto
│ ├── grpc-service-server-streaming/
│ │ ├── grpc_server_streaming.md
│ │ ├── grpc_server_streaming.metatags
│ │ ├── grpc_server_streaming.out
│ │ ├── grpc_server_streaming.proto
│ │ ├── grpc_server_streaming_service.bal
│ │ ├── grpc_server_streaming_service.out
│ │ └── tests/
│ │ └── grpc_server_streaming_test.bal
│ ├── grpc-service-simple/
│ │ ├── grpc_service_simple.bal
│ │ ├── grpc_service_simple.md
│ │ ├── grpc_service_simple.metatags
│ │ ├── grpc_service_simple.out
│ │ ├── grpc_service_simple.proto
│ │ ├── grpc_simple.out
│ │ └── tests/
│ │ └── grpc_simple_test.bal
│ ├── grpc-service-ssl-tls/
│ │ ├── grpc_service_ssl_tls.bal
│ │ ├── grpc_service_ssl_tls.md
│ │ ├── grpc_service_ssl_tls.metatags
│ │ ├── grpc_service_ssl_tls.server.out
│ │ └── grpc_simple.proto
│ ├── hello-world/
│ │ ├── hello_world.bal
│ │ ├── hello_world.md
│ │ ├── hello_world.metatags
│ │ └── hello_world.out
│ ├── hello-world-service/
│ │ ├── hello_world_service.bal
│ │ ├── hello_world_service.client.out
│ │ ├── hello_world_service.md
│ │ ├── hello_world_service.metatags
│ │ └── hello_world_service.server.out
│ ├── hierarchical-resources/
│ │ ├── hierarchical_resources.bal
│ │ ├── hierarchical_resources.client.out
│ │ ├── hierarchical_resources.md
│ │ ├── hierarchical_resources.metatags
│ │ └── hierarchical_resources.server.out
│ ├── http-1-1-to-2-0-protocol-switch/
│ │ └── http_1_1_to_2_0_protocol_switch.md
│ ├── http-100-continue/
│ │ ├── http_100_continue.bal
│ │ ├── http_100_continue.client.out
│ │ ├── http_100_continue.md
│ │ ├── http_100_continue.metatags
│ │ ├── http_100_continue.server.out
│ │ └── tests/
│ │ └── http_100_continue_test.bal
│ ├── http-2-0-client-server-push/
│ │ ├── http_2_0_client_server_push.bal
│ │ ├── http_2_0_client_server_push.md
│ │ ├── http_2_0_client_server_push.metatags
│ │ └── http_2_0_client_server_push.out
│ ├── http-2-0-server-push/
│ │ ├── http_2_0_server_push.bal
│ │ ├── http_2_0_server_push.md
│ │ ├── http_2_0_server_push.metatags
│ │ └── http_2_0_server_push.out
│ ├── http-2-prior-knowledge-client/
│ │ ├── http_2_prior_knowledge_client.bal
│ │ ├── http_2_prior_knowledge_client.md
│ │ ├── http_2_prior_knowledge_client.metatags
│ │ └── http_2_prior_knowledge_client.out
│ ├── http-2-to-1-1-downgrade-client/
│ │ ├── http_2_to_1_1_downgrade_client.bal
│ │ ├── http_2_to_1_1_downgrade_client.md
│ │ ├── http_2_to_1_1_downgrade_client.metatags
│ │ └── http_2_to_1_1_downgrade_client.out
│ ├── http-2-to-1-1-downgrade-service/
│ │ ├── http_2_to_1_1_downgrade_service.bal
│ │ ├── http_2_to_1_1_downgrade_service.client.out
│ │ ├── http_2_to_1_1_downgrade_service.md
│ │ ├── http_2_to_1_1_downgrade_service.metatags
│ │ ├── http_2_to_1_1_downgrade_service.server.out
│ │ └── tests/
│ │ └── http_2_0_to_1_1_downgrade_service_test.bal
│ ├── http-access-logs/
│ │ ├── http_access_logs.bal
│ │ ├── http_access_logs.client.out
│ │ ├── http_access_logs.md
│ │ ├── http_access_logs.metatags
│ │ └── http_access_logs.server.out
│ ├── http-basic-rest-service/
│ │ ├── http_basic_rest_service.bal
│ │ ├── http_basic_rest_service.client.1.out
│ │ ├── http_basic_rest_service.client.2.out
│ │ ├── http_basic_rest_service.md
│ │ ├── http_basic_rest_service.metatags
│ │ ├── http_basic_rest_service.server.out
│ │ └── tests/
│ │ └── http_basic_rest_service_test.bal
│ ├── http-caching-client/
│ │ ├── http_caching_client.bal
│ │ ├── http_caching_client.md
│ │ ├── http_caching_client.metatags
│ │ ├── http_caching_client.out
│ │ └── tests/
│ │ └── http_caching_client_test.bal
│ ├── http-caller/
│ │ ├── http_caller.bal
│ │ ├── http_caller.client.out
│ │ ├── http_caller.md
│ │ ├── http_caller.metatags
│ │ ├── http_caller.server.out
│ │ └── tests/
│ │ └── http_caller_test.bal
│ ├── http-circuit-breaker/
│ │ ├── http_circuit_breaker.bal
│ │ ├── http_circuit_breaker.md
│ │ ├── http_circuit_breaker.metatags
│ │ ├── http_circuit_breaker.out
│ │ └── tests/
│ │ └── http_circuit_breaker_test.bal
│ ├── http-client-basic-authentication/
│ │ ├── http_client_basic_authentication.bal
│ │ ├── http_client_basic_authentication.md
│ │ ├── http_client_basic_authentication.metatags
│ │ └── http_client_basic_authentication.out
│ ├── http-client-bearer-token-authentication/
│ │ ├── http_client_bearer_token_authentication.bal
│ │ ├── http_client_bearer_token_authentication.md
│ │ ├── http_client_bearer_token_authentication.metatags
│ │ └── http_client_bearer_token_authentication.out
│ ├── http-client-chunking/
│ │ ├── http_client_chunking.bal
│ │ ├── http_client_chunking.md
│ │ ├── http_client_chunking.metatags
│ │ ├── http_client_chunking.out
│ │ └── tests/
│ │ └── http_client_chunking_test.bal
│ ├── http-client-data-binding/
│ │ ├── http_client_data_binding.bal
│ │ ├── http_client_data_binding.md
│ │ ├── http_client_data_binding.metatags
│ │ └── http_client_data_binding.out
│ ├── http-client-file-upload/
│ │ ├── http_client_file_upload.bal
│ │ ├── http_client_file_upload.md
│ │ ├── http_client_file_upload.metatags
│ │ └── http_client_file_upload.out
│ ├── http-client-header-parameter/
│ │ ├── http_client_header_parameter.bal
│ │ ├── http_client_header_parameter.md
│ │ ├── http_client_header_parameter.metatags
│ │ ├── http_client_header_parameter.out
│ │ └── http_client_header_parameter_post.bal
│ ├── http-client-mutual-ssl/
│ │ ├── http_client_mutual_ssl.bal
│ │ ├── http_client_mutual_ssl.md
│ │ ├── http_client_mutual_ssl.metatags
│ │ └── http_client_mutual_ssl.out
│ ├── http-client-oauth2-client-credentials-grant-type/
│ │ ├── http_client_oauth2_client_credentials_grant_type.bal
│ │ ├── http_client_oauth2_client_credentials_grant_type.md
│ │ ├── http_client_oauth2_client_credentials_grant_type.metatags
│ │ └── http_client_oauth2_client_credentials_grant_type.out
│ ├── http-client-oauth2-jwt-bearer-grant-type/
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── http_client_oauth2_jwt_bearer_grant_type.metatags
│ │ └── http_client_oauth2_jwt_bearer_grant_type.out
│ ├── http-client-oauth2-password-grant-type/
│ │ ├── http_client_oauth2_password_grant_type.bal
│ │ ├── http_client_oauth2_password_grant_type.md
│ │ ├── http_client_oauth2_password_grant_type.metatags
│ │ └── http_client_oauth2_password_grant_type.out
│ ├── http-client-oauth2-refresh-token-grant-type/
│ │ ├── http_client_oauth2_refresh_token_grant_type.bal
│ │ ├── http_client_oauth2_refresh_token_grant_type.md
│ │ ├── http_client_oauth2_refresh_token_grant_type.metatags
│ │ └── http_client_oauth2_refresh_token_grant_type.out
│ ├── http-client-path-parameter/
│ │ ├── http_client_path_parameter.bal
│ │ ├── http_client_path_parameter.md
│ │ ├── http_client_path_parameter.metatags
│ │ └── http_client_path_parameter.out
│ ├── http-client-payload-constraint-validation/
│ │ ├── http_client_payload_constraint_validation.bal
│ │ ├── http_client_payload_constraint_validation.md
│ │ ├── http_client_payload_constraint_validation.metatags
│ │ └── http_client_payload_constraint_validation.out
│ ├── http-client-query-parameter/
│ │ ├── http_client_query_parameter.bal
│ │ ├── http_client_query_parameter.md
│ │ ├── http_client_query_parameter.metatags
│ │ ├── http_client_query_parameter.out
│ │ └── http_client_query_parameter_post.bal
│ ├── http-client-redirects/
│ │ ├── http_client_redirects.bal
│ │ ├── http_client_redirects.md
│ │ ├── http_client_redirects.metatags
│ │ ├── http_client_redirects.out
│ │ └── tests/
│ │ └── http_client_redirects_test.bal
│ ├── http-client-self-signed-jwt-authentication/
│ │ ├── http_client_self_signed_jwt_authentication.bal
│ │ ├── http_client_self_signed_jwt_authentication.md
│ │ ├── http_client_self_signed_jwt_authentication.metatags
│ │ └── http_client_self_signed_jwt_authentication.out
│ ├── http-client-send-request-receive-response/
│ │ ├── http_client_send_request_receive_response.bal
│ │ ├── http_client_send_request_receive_response.md
│ │ ├── http_client_send_request_receive_response.metatags
│ │ ├── http_client_send_request_receive_response.out
│ │ └── tests/
│ │ └── http_client_send_request_receive_response_test.bal
│ ├── http-client-ssl-tls/
│ │ ├── http_client_ssl_tls.bal
│ │ ├── http_client_ssl_tls.md
│ │ ├── http_client_ssl_tls.metatags
│ │ └── http_client_ssl_tls.out
│ ├── http-compression/
│ │ ├── http_compression.bal
│ │ ├── http_compression.client.out
│ │ ├── http_compression.md
│ │ ├── http_compression.metatags
│ │ ├── http_compression.server.out
│ │ └── tests/
│ │ └── http_compression_test.bal
│ ├── http-cookies-client/
│ │ ├── http_cookies_client.bal
│ │ ├── http_cookies_client.md
│ │ ├── http_cookies_client.metatags
│ │ └── http_cookies_client.out
│ ├── http-cookies-service/
│ │ ├── http_cookies_service.bal
│ │ ├── http_cookies_service.md
│ │ ├── http_cookies_service.metatags
│ │ └── http_cookies_service.out
│ ├── http-cors/
│ │ ├── http_cors.bal
│ │ ├── http_cors.client.out
│ │ ├── http_cors.md
│ │ ├── http_cors.metatags
│ │ ├── http_cors.server.out
│ │ └── tests/
│ │ └── http_cors_test.bal
│ ├── http-default-error-handling/
│ │ ├── http_default_error_handling.bal
│ │ ├── http_default_error_handling.client.out
│ │ ├── http_default_error_handling.md
│ │ ├── http_default_error_handling.metatags
│ │ ├── http_default_error_handling.server.out
│ │ └── tests/
│ │ └── http_default_error_handling_test.bal
│ ├── http-default-resource/
│ │ ├── http_default_resource.bal
│ │ ├── http_default_resource.client.out
│ │ ├── http_default_resource.md
│ │ ├── http_default_resource.metatags
│ │ ├── http_default_resource.server.out
│ │ └── tests/
│ │ └── http_default_resource_test.bal
│ ├── http-error-handling/
│ │ ├── http_error_handling.bal
│ │ ├── http_error_handling.client.out
│ │ ├── http_error_handling.md
│ │ ├── http_error_handling.metatags
│ │ ├── http_error_handling.server.out
│ │ └── tests/
│ │ └── http_error_handling_test.bal
│ ├── http-failover/
│ │ ├── http_failover.bal
│ │ ├── http_failover.md
│ │ ├── http_failover.metatags
│ │ ├── http_failover.out
│ │ └── tests/
│ │ └── http_failover_test.bal
│ ├── http-header-param/
│ │ ├── http_header_param.bal
│ │ ├── http_header_param.client.out
│ │ ├── http_header_param.md
│ │ ├── http_header_param.metatags
│ │ ├── http_header_param.server.out
│ │ └── tests/
│ │ └── http_header_param_test.bal
│ ├── http-interceptor-error-handling/
│ │ ├── http_interceptor_error_handling.bal
│ │ ├── http_interceptor_error_handling.client.out
│ │ ├── http_interceptor_error_handling.md
│ │ ├── http_interceptor_error_handling.metatags
│ │ ├── http_interceptor_error_handling.server.out
│ │ └── tests/
│ │ └── http_interceptor_error_handling_test.bal
│ ├── http-load-balancer/
│ │ ├── http_load_balancer.bal
│ │ ├── http_load_balancer.md
│ │ ├── http_load_balancer.metatags
│ │ ├── http_load_balancer.out
│ │ └── tests/
│ │ └── http_load_balancer_test.bal
│ ├── http-matrix-param/
│ │ ├── http_matrix_param.bal
│ │ ├── http_matrix_param.client.out
│ │ ├── http_matrix_param.md
│ │ ├── http_matrix_param.metatags
│ │ ├── http_matrix_param.server.out
│ │ └── tests/
│ │ └── http_matrix_param_test.bal
│ ├── http-passthrough/
│ │ ├── http_passthrough.bal
│ │ ├── http_passthrough.client.out
│ │ ├── http_passthrough.md
│ │ ├── http_passthrough.metatags
│ │ ├── http_passthrough.server.out
│ │ └── tests/
│ │ └── http_passthrough_test.bal
│ ├── http-path-param/
│ │ ├── http_path_param.bal
│ │ ├── http_path_param.client.out
│ │ ├── http_path_param.md
│ │ ├── http_path_param.metatags
│ │ ├── http_path_param.server.out
│ │ └── tests/
│ │ └── http_path_param_test.bal
│ ├── http-query-parameter/
│ │ ├── http_query_parameter.bal
│ │ ├── http_query_parameter.client.out
│ │ ├── http_query_parameter.md
│ │ ├── http_query_parameter.metatags
│ │ ├── http_query_parameter.server.out
│ │ └── tests/
│ │ └── http_query_parameter_test.bal
│ ├── http-request-interceptor/
│ │ ├── http_request_interceptor.bal
│ │ ├── http_request_interceptor.client.out
│ │ ├── http_request_interceptor.md
│ │ ├── http_request_interceptor.metatags
│ │ ├── http_request_interceptor.server.out
│ │ └── tests/
│ │ └── http_request_interceptor_test.bal
│ ├── http-request-response/
│ │ ├── http_request_response.bal
│ │ ├── http_request_response.client.out
│ │ ├── http_request_response.md
│ │ ├── http_request_response.metatags
│ │ ├── http_request_response.server.out
│ │ └── tests/
│ │ └── http_request_response_test.bal
│ ├── http-request-with-multiparts/
│ │ ├── files/
│ │ │ └── test.xml
│ │ ├── http_request_with_multiparts.1.client.out
│ │ ├── http_request_with_multiparts.2.client.out
│ │ ├── http_request_with_multiparts.bal
│ │ ├── http_request_with_multiparts.md
│ │ ├── http_request_with_multiparts.metatags
│ │ ├── http_request_with_multiparts.server.out
│ │ └── tests/
│ │ └── http_request_with_multiparts_test.bal
│ ├── http-response-interceptor/
│ │ ├── http_response_interceptor.bal
│ │ ├── http_response_interceptor.client.out
│ │ ├── http_response_interceptor.md
│ │ ├── http_response_interceptor.metatags
│ │ ├── http_response_interceptor.server.out
│ │ └── tests/
│ │ └── http_response_interceptor_test.bal
│ ├── http-response-with-multiparts/
│ │ ├── files/
│ │ │ └── test.xml
│ │ ├── http_response_with_multiparts.1.client.out
│ │ ├── http_response_with_multiparts.2.client.out
│ │ ├── http_response_with_multiparts.bal
│ │ ├── http_response_with_multiparts.md
│ │ ├── http_response_with_multiparts.metatags
│ │ ├── http_response_with_multiparts.server.out
│ │ └── tests/
│ │ └── http_response_with_multiparts_test.bal
│ ├── http-restrict-by-media-type/
│ │ ├── http_restrict_by_media_type.bal
│ │ ├── http_restrict_by_media_type.client.out
│ │ ├── http_restrict_by_media_type.md
│ │ ├── http_restrict_by_media_type.metatags
│ │ ├── http_restrict_by_media_type.server.out
│ │ └── tests/
│ │ └── http_restrict_by_media_type_test.bal
│ ├── http-retry/
│ │ ├── http_retry.bal
│ │ ├── http_retry.md
│ │ ├── http_retry.metatags
│ │ ├── http_retry.out
│ │ └── tests/
│ │ └── http_retry_test.bal
│ ├── http-send-different-status-codes/
│ │ ├── http_send_different_status_codes.bal
│ │ ├── http_send_different_status_codes.client.out
│ │ ├── http_send_different_status_codes.md
│ │ ├── http_send_different_status_codes.metatags
│ │ ├── http_send_different_status_codes.server.out
│ │ └── tests/
│ │ └── http_send_different_status_codes_test.bal
│ ├── http-send-different-status-codes-with-payload/
│ │ ├── http_send_different_status_codes_with_payload.bal
│ │ ├── http_send_different_status_codes_with_payload.client.out
│ │ ├── http_send_different_status_codes_with_payload.md
│ │ ├── http_send_different_status_codes_with_payload.metatags
│ │ ├── http_send_different_status_codes_with_payload.server.out
│ │ └── tests/
│ │ └── http_send_different_status_codes_with_payload_test.bal
│ ├── http-send-header/
│ │ ├── http_send_header.bal
│ │ ├── http_send_header.client.out
│ │ ├── http_send_header.md
│ │ ├── http_send_header.metatags
│ │ ├── http_send_header.server.out
│ │ └── tests/
│ │ └── http_send_header_test.bal
│ ├── http-send-response/
│ │ ├── http_send_response.bal
│ │ ├── http_send_response.client.out
│ │ ├── http_send_response.md
│ │ ├── http_send_response.metatags
│ │ ├── http_send_response.server.out
│ │ └── tests/
│ │ └── http_send_response_test.bal
│ ├── http-service-and-resource-paths/
│ │ ├── http_service_and_resource_paths.bal
│ │ ├── http_service_and_resource_paths.client.out
│ │ ├── http_service_and_resource_paths.md
│ │ ├── http_service_and_resource_paths.metatags
│ │ ├── http_service_and_resource_paths.server.out
│ │ └── tests/
│ │ └── http_service_and_resource_paths_test.bal
│ ├── http-service-basic-authentication-file-user-store/
│ │ ├── http_service_basic_authentication_file_user_store.bal
│ │ ├── http_service_basic_authentication_file_user_store.md
│ │ ├── http_service_basic_authentication_file_user_store.metatags
│ │ └── http_service_basic_authentication_file_user_store.server.out
│ ├── http-service-basic-authentication-ldap-user-store/
│ │ ├── http_service_basic_authentication_ldap_user_store.bal
│ │ ├── http_service_basic_authentication_ldap_user_store.md
│ │ ├── http_service_basic_authentication_ldap_user_store.metatags
│ │ └── http_service_basic_authentication_ldap_user_store.server.out
│ ├── http-service-cache-response/
│ │ ├── http_service_cache_response.bal
│ │ ├── http_service_cache_response.md
│ │ ├── http_service_cache_response.metatags
│ │ ├── http_service_cache_response.server.out
│ │ └── tests/
│ │ └── http_service_cache_response_test.bal
│ ├── http-service-chunking/
│ │ ├── http_service_chunking.bal
│ │ ├── http_service_chunking.client.out
│ │ ├── http_service_chunking.md
│ │ ├── http_service_chunking.metatags
│ │ ├── http_service_chunking.server.out
│ │ └── tests/
│ │ └── http_service_chunking_test.bal
│ ├── http-service-data-binding/
│ │ ├── http_service_data_binding.bal
│ │ ├── http_service_data_binding.client.out
│ │ ├── http_service_data_binding.md
│ │ ├── http_service_data_binding.metatags
│ │ ├── http_service_data_binding.server.out
│ │ └── tests/
│ │ └── http_service_data_binding_test.bal
│ ├── http-service-file-upload/
│ │ ├── http_service_file_upload.bal
│ │ ├── http_service_file_upload.md
│ │ ├── http_service_file_upload.metatags
│ │ └── http_service_file_upload.server.out
│ ├── http-service-jwt-authentication/
│ │ ├── http_service_jwt_authentication.bal
│ │ ├── http_service_jwt_authentication.md
│ │ ├── http_service_jwt_authentication.metatags
│ │ └── http_service_jwt_authentication.server.out
│ ├── http-service-mutual-ssl/
│ │ ├── http_service_mutual_ssl.bal
│ │ ├── http_service_mutual_ssl.client.out
│ │ ├── http_service_mutual_ssl.md
│ │ ├── http_service_mutual_ssl.metatags
│ │ └── http_service_mutual_ssl.server.out
│ ├── http-service-oauth2/
│ │ ├── http_service_oauth2.bal
│ │ ├── http_service_oauth2.md
│ │ ├── http_service_oauth2.metatags
│ │ └── http_service_oauth2.server.out
│ ├── http-service-payload-constraint-validation/
│ │ ├── http_service_payload_constraint_validation.bal
│ │ ├── http_service_payload_constraint_validation.client.out
│ │ ├── http_service_payload_constraint_validation.md
│ │ ├── http_service_payload_constraint_validation.metatags
│ │ ├── http_service_payload_constraint_validation.server.out
│ │ └── tests/
│ │ └── http_service_payload_constraint_validation.bal
│ ├── http-service-redirects/
│ │ ├── http_service_redirects.bal
│ │ ├── http_service_redirects.client.out
│ │ ├── http_service_redirects.md
│ │ ├── http_service_redirects.metatags
│ │ ├── http_service_redirects.server.out
│ │ └── tests/
│ │ └── http_service_redirects_test.bal
│ ├── http-service-ssl-tls/
│ │ ├── http_service_ssl_tls.bal
│ │ ├── http_service_ssl_tls.client.out
│ │ ├── http_service_ssl_tls.md
│ │ ├── http_service_ssl_tls.metatags
│ │ └── http_service_ssl_tls.server.out
│ ├── http-sse-client/
│ │ ├── http_sse_client.bal
│ │ ├── http_sse_client.client.out
│ │ ├── http_sse_client.md
│ │ └── http_sse_client.metatags
│ ├── http-sse-service/
│ │ ├── http_sse_service.bal
│ │ ├── http_sse_service.client.out
│ │ ├── http_sse_service.md
│ │ ├── http_sse_service.metatags
│ │ └── http_sse_service.server.out
│ ├── http-timeout/
│ │ ├── http_timeout.bal
│ │ ├── http_timeout.md
│ │ ├── http_timeout.metatags
│ │ ├── http_timeout.out
│ │ └── tests/
│ │ └── http_timeout_test.bal
│ ├── http-trace-logs/
│ │ ├── http_trace_logs.bal
│ │ ├── http_trace_logs.client.out
│ │ ├── http_trace_logs.md
│ │ ├── http_trace_logs.metatags
│ │ └── http_trace_logs.server.out
│ ├── identifiers/
│ │ ├── identifiers.bal
│ │ ├── identifiers.md
│ │ ├── identifiers.metatags
│ │ └── identifiers.out
│ ├── identity/
│ │ ├── identity.bal
│ │ ├── identity.md
│ │ ├── identity.metatags
│ │ └── identity.out
│ ├── if-statement/
│ │ ├── if_statement.bal
│ │ ├── if_statement.md
│ │ ├── if_statement.metatags
│ │ └── if_statement.out
│ ├── ignoring-return-values-and-errors/
│ │ ├── ignoring_return_values_and_errors.bal
│ │ ├── ignoring_return_values_and_errors.md
│ │ ├── ignoring_return_values_and_errors.metatags
│ │ └── ignoring_return_values_and_errors.out
│ ├── immutability/
│ │ ├── immutability.bal
│ │ ├── immutability.md
│ │ ├── immutability.metatags
│ │ └── immutability.out
│ ├── in-memory-message-store/
│ │ ├── in_memory_message_store.bal
│ │ ├── in_memory_message_store.md
│ │ ├── in_memory_message_store.metatags
│ │ └── in_memory_message_store.out
│ ├── included-record-parameters/
│ │ ├── included_record_parameters.bal
│ │ ├── included_record_parameters.md
│ │ ├── included_record_parameters.metatags
│ │ └── included_record_parameters.out
│ ├── index.json
│ ├── inferring-isolated/
│ │ ├── inferring_isolated.bal
│ │ ├── inferring_isolated.md
│ │ ├── inferring_isolated.metatags
│ │ └── inferring_isolated.out
│ ├── init-function/
│ │ ├── init_function.bal
│ │ ├── init_function.md
│ │ ├── init_function.metatags
│ │ └── init_function.out
│ ├── init-return-type/
│ │ ├── init_return_type.bal
│ │ ├── init_return_type.md
│ │ ├── init_return_type.metatags
│ │ └── init_return_type.out
│ ├── int-range/
│ │ ├── int_range.bal
│ │ ├── int_range.md
│ │ ├── int_range.metatags
│ │ └── int_range.out
│ ├── integers/
│ │ ├── integers.bal
│ │ ├── integers.md
│ │ ├── integers.metatags
│ │ └── integers.out
│ ├── inter-worker-failure-propagation/
│ │ ├── inter_worker_failure_propagation.bal
│ │ ├── inter_worker_failure_propagation.md
│ │ ├── inter_worker_failure_propagation.metatags
│ │ └── inter_worker_failure_propagation.out
│ ├── inter-worker-message-passing/
│ │ ├── inter_worker_message_passing.bal
│ │ ├── inter_worker_message_passing.md
│ │ ├── inter_worker_message_passing.metatags
│ │ └── inter_worker_message_passing.out
│ ├── interface-to-external-code/
│ │ ├── interface_to_external_code.bal
│ │ ├── interface_to_external_code.md
│ │ ├── interface_to_external_code.metatags
│ │ └── interface_to_external_code.out
│ ├── io-bytes/
│ │ ├── io_bytes.bal
│ │ ├── io_bytes.md
│ │ ├── io_bytes.metatags
│ │ └── io_bytes.out
│ ├── io-csv/
│ │ ├── io_csv.bal
│ │ ├── io_csv.md
│ │ ├── io_csv.metatags
│ │ └── io_csv.out
│ ├── io-csv-datamapping/
│ │ ├── io_csv_datamapping.bal
│ │ ├── io_csv_datamapping.md
│ │ ├── io_csv_datamapping.metatags
│ │ └── io_csv_datamapping.out
│ ├── io-json/
│ │ ├── io_json.bal
│ │ ├── io_json.md
│ │ ├── io_json.metatags
│ │ └── io_json.out
│ ├── io-strings/
│ │ ├── io_strings.bal
│ │ ├── io_strings.md
│ │ ├── io_strings.metatags
│ │ └── io_strings.out
│ ├── io-xml/
│ │ ├── io_xml.bal
│ │ ├── io_xml.md
│ │ ├── io_xml.metatags
│ │ └── io_xml.out
│ ├── isolated-functions/
│ │ ├── isolated_functions.bal
│ │ ├── isolated_functions.md
│ │ ├── isolated_functions.metatags
│ │ └── isolated_functions.out
│ ├── isolated-methods/
│ │ ├── isolated_methods.bal
│ │ ├── isolated_methods.md
│ │ ├── isolated_methods.metatags
│ │ └── isolated_methods.out
│ ├── isolated-objects/
│ │ ├── isolated_objects.bal
│ │ ├── isolated_objects.md
│ │ ├── isolated_objects.metatags
│ │ └── isolated_objects.out
│ ├── isolated-variables/
│ │ ├── isolated_variables.bal
│ │ ├── isolated_variables.md
│ │ ├── isolated_variables.metatags
│ │ └── isolated_variables.out
│ ├── iterating-over-xml-with-query/
│ │ ├── iterating_over_xml_with_query.bal
│ │ ├── iterating_over_xml_with_query.md
│ │ ├── iterating_over_xml_with_query.metatags
│ │ └── iterating_over_xml_with_query.out
│ ├── iterative-use-of-typed-binding/
│ │ ├── iterative_use_of_typed_binding.bal
│ │ ├── iterative_use_of_typed_binding.md
│ │ ├── iterative_use_of_typed_binding.metatags
│ │ └── iterative_use_of_typed_binding.out
│ ├── jdbc-atomic-transaction/
│ │ └── jdbc_atomic_transaction.out
│ ├── jms-consumer-acknowledgement/
│ │ ├── jms_consumer_acknowledgement.bal
│ │ ├── jms_consumer_acknowledgement.md
│ │ ├── jms_consumer_acknowledgement.metatags
│ │ └── jms_consumer_acknowledgement.out
│ ├── jms-consumer-consume-message/
│ │ ├── jms_consumer_consume_message.bal
│ │ ├── jms_consumer_consume_message.md
│ │ ├── jms_consumer_consume_message.metatags
│ │ └── jms_consumer_consume_message.out
│ ├── jms-producer-produce-message/
│ │ ├── jms_producer_produce_message.bal
│ │ ├── jms_producer_produce_message.curl.out
│ │ ├── jms_producer_produce_message.md
│ │ ├── jms_producer_produce_message.metatags
│ │ └── jms_producer_produce_message.out
│ ├── jms-producer-transaction/
│ │ ├── jms_producer_transaction.bal
│ │ ├── jms_producer_transaction.curl.out
│ │ ├── jms_producer_transaction.md
│ │ ├── jms_producer_transaction.metatags
│ │ └── jms_producer_transaction.out
│ ├── jms-service-consume-message/
│ │ ├── jms_service_consume_message.bal
│ │ ├── jms_service_consume_message.md
│ │ ├── jms_service_consume_message.metatags
│ │ └── jms_service_consume_message.out
│ ├── joining-iterable-objects/
│ │ ├── joining_iterable_objects.bal
│ │ ├── joining_iterable_objects.md
│ │ ├── joining_iterable_objects.metatags
│ │ └── joining_iterable_objects.out
│ ├── json-numbers/
│ │ ├── json_numbers.bal
│ │ ├── json_numbers.md
│ │ ├── json_numbers.metatags
│ │ └── json_numbers.out
│ ├── json-to-record/
│ │ ├── json_to_record.bal
│ │ ├── json_to_record.md
│ │ ├── json_to_record.metatags
│ │ └── json_to_record.out
│ ├── json-to-record-with-projection/
│ │ ├── json_to_record_with_projection.bal
│ │ ├── json_to_record_with_projection.md
│ │ ├── json_to_record_with_projection.metatags
│ │ └── json_to_record_with_projection.out
│ ├── json-type/
│ │ ├── json_type.bal
│ │ ├── json_type.md
│ │ ├── json_type.metatags
│ │ └── json_type.out
│ ├── jsonpath-expressions/
│ │ ├── jsonpath_expressions.bal
│ │ ├── jsonpath_expressions.md
│ │ ├── jsonpath_expressions.metatags
│ │ └── jsonpath_expressions.out
│ ├── kafka-consumer-constraint-validation/
│ │ ├── kafka_consumer_constraint_validation.bal
│ │ ├── kafka_consumer_constraint_validation.md
│ │ ├── kafka_consumer_constraint_validation.metatags
│ │ └── kafka_consumer_constraint_validation.out
│ ├── kafka-consumer-consumer-record-data-binding/
│ │ ├── kafka_consumer_consumer_record_data_binding.bal
│ │ ├── kafka_consumer_consumer_record_data_binding.md
│ │ ├── kafka_consumer_consumer_record_data_binding.metatags
│ │ └── kafka_consumer_consumer_record_data_binding.out
│ ├── kafka-consumer-payload-data-binding/
│ │ ├── kafka_consumer_payload_data_binding.bal
│ │ ├── kafka_consumer_payload_data_binding.md
│ │ ├── kafka_consumer_payload_data_binding.metatags
│ │ └── kafka_consumer_payload_data_binding.out
│ ├── kafka-consumer-sasl/
│ │ ├── kafka_consumer_sasl.bal
│ │ ├── kafka_consumer_sasl.md
│ │ ├── kafka_consumer_sasl.metatags
│ │ └── kafka_consumer_sasl.out
│ ├── kafka-consumer-ssl/
│ │ ├── kafka_consumer_ssl.bal
│ │ ├── kafka_consumer_ssl.md
│ │ ├── kafka_consumer_ssl.metatags
│ │ └── kafka_consumer_ssl.out
│ ├── kafka-producer-produce-message/
│ │ ├── kafka_producer_produce_message.bal
│ │ ├── kafka_producer_produce_message.curl.out
│ │ ├── kafka_producer_produce_message.md
│ │ ├── kafka_producer_produce_message.metatags
│ │ └── kafka_producer_produce_message.out
│ ├── kafka-producer-sasl/
│ │ ├── kafka_producer_sasl.bal
│ │ ├── kafka_producer_sasl.curl.out
│ │ ├── kafka_producer_sasl.md
│ │ ├── kafka_producer_sasl.metatags
│ │ └── kafka_producer_sasl.out
│ ├── kafka-producer-ssl/
│ │ ├── kafka_producer_ssl.bal
│ │ ├── kafka_producer_ssl.curl.out
│ │ ├── kafka_producer_ssl.md
│ │ ├── kafka_producer_ssl.metatags
│ │ └── kafka_producer_ssl.out
│ ├── kafka-service-constraint-validation/
│ │ ├── kafka_service_constraint_validation.bal
│ │ ├── kafka_service_constraint_validation.md
│ │ ├── kafka_service_constraint_validation.metatags
│ │ └── kafka_service_constraint_validation.out
│ ├── kafka-service-consume-message/
│ │ ├── kafka_service_consume_message.bal
│ │ ├── kafka_service_consume_message.md
│ │ ├── kafka_service_consume_message.metatags
│ │ └── kafka_service_consume_message.out
│ ├── kafka-service-error-handling/
│ │ ├── kafka_service_error_handling.bal
│ │ ├── kafka_service_error_handling.md
│ │ ├── kafka_service_error_handling.metatags
│ │ └── kafka_service_error_handling.out
│ ├── kafka-service-sasl/
│ │ ├── kafka_service_sasl.bal
│ │ ├── kafka_service_sasl.md
│ │ ├── kafka_service_sasl.metatags
│ │ └── kafka_service_sasl.out
│ ├── kafka-service-ssl/
│ │ ├── kafka_service_ssl.bal
│ │ ├── kafka_service_ssl.md
│ │ ├── kafka_service_ssl.metatags
│ │ └── kafka_service_ssl.out
│ ├── kubernetes-hello-world/
│ │ ├── Cloud.toml
│ │ ├── build_output.out
│ │ ├── docker_push.out
│ │ ├── execute_curl.out
│ │ ├── kubectl_apply.out
│ │ ├── kubectl_expose.out
│ │ ├── kubectl_pods.out
│ │ ├── kubectl_svc.out
│ │ ├── kubernetes_hello_world.bal
│ │ ├── kubernetes_hello_world.md
│ │ └── minikube_ip.out
│ ├── langlib-functions/
│ │ ├── langlib_functions.bal
│ │ ├── langlib_functions.md
│ │ ├── langlib_functions.metatags
│ │ └── langlib_functions.out
│ ├── ldap-add-remove-entry/
│ │ ├── ldap_add_remove_entry.bal
│ │ ├── ldap_add_remove_entry.md
│ │ ├── ldap_add_remove_entry.metatags
│ │ └── ldap_add_remove_entry.server.out
│ ├── ldap-search-entry/
│ │ ├── ldap_search_entry.bal
│ │ ├── ldap_search_entry.md
│ │ ├── ldap_search_entry.metatags
│ │ └── ldap_search_entry.server.out
│ ├── let-clause/
│ │ ├── let_clause.bal
│ │ ├── let_clause.md
│ │ ├── let_clause.metatags
│ │ └── let_clause.out
│ ├── limit-clause/
│ │ ├── limit_clause.bal
│ │ ├── limit_clause.md
│ │ ├── limit_clause.metatags
│ │ └── limit_clause.out
│ ├── list-binding-pattern/
│ │ ├── list_binding_pattern.bal
│ │ ├── list_binding_pattern.md
│ │ ├── list_binding_pattern.metatags
│ │ └── list_binding_pattern.out
│ ├── list-binding-pattern-in-match-statement/
│ │ ├── list_binding_pattern_in_match_statement.bal
│ │ ├── list_binding_pattern_in_match_statement.md
│ │ ├── list_binding_pattern_in_match_statement.metatags
│ │ └── list_binding_pattern_in_match_statement.out
│ ├── list-equality/
│ │ ├── list_equality.bal
│ │ ├── list_equality.md
│ │ ├── list_equality.metatags
│ │ └── list_equality.out
│ ├── list-subtyping/
│ │ ├── list_subtyping.bal
│ │ ├── list_subtyping.md
│ │ ├── list_subtyping.metatags
│ │ └── list_subtyping.out
│ ├── lock-statement/
│ │ ├── lock_statement.bal
│ │ ├── lock_statement.md
│ │ ├── lock_statement.metatags
│ │ └── lock_statement.out
│ ├── log-file-rotation/
│ │ ├── app_log_rotation.out
│ │ ├── log_file_rotation.bal
│ │ ├── log_file_rotation.md
│ │ ├── log_file_rotation.metatags
│ │ └── log_file_rotation.out
│ ├── logger-from-config/
│ │ ├── audit_logs.out
│ │ ├── logger_from_config.bal
│ │ ├── logger_from_config.md
│ │ ├── logger_from_config.metatags
│ │ ├── logger_from_config.out
│ │ └── metrics_logs.out
│ ├── logging/
│ │ ├── logging.bal
│ │ ├── logging.md
│ │ ├── logging.metatags
│ │ ├── logging.out
│ │ └── tests/
│ │ └── log_api_test.bal
│ ├── logging-configuration/
│ │ ├── ModuleConfig.toml
│ │ ├── logging_configuration.bal
│ │ ├── logging_configuration.md
│ │ ├── logging_configuration.metatags
│ │ └── logging_configuration.out
│ ├── logging-with-context/
│ │ ├── logging_with_context.bal
│ │ ├── logging_with_context.md
│ │ ├── logging_with_context.metatags
│ │ └── logging_with_context.out
│ ├── main-function/
│ │ ├── main_function.bal
│ │ ├── main_function.md
│ │ ├── main_function.metatags
│ │ └── main_function.out
│ ├── manage-scheduled-jobs/
│ │ ├── manage_scheduled_jobs.bal
│ │ ├── manage_scheduled_jobs.md
│ │ ├── manage_scheduled_jobs.metatags
│ │ └── manage_scheduled_jobs.out
│ ├── mapping-binding-pattern/
│ │ ├── mapping_binding_pattern.bal
│ │ ├── mapping_binding_pattern.md
│ │ ├── mapping_binding_pattern.metatags
│ │ └── mapping_binding_pattern.out
│ ├── mapping-binding-pattern-in-match-statement/
│ │ ├── mapping_binding_pattern_in_match_statement.bal
│ │ ├── mapping_binding_pattern_in_match_statement.md
│ │ ├── mapping_binding_pattern_in_match_statement.metatags
│ │ └── mapping_binding_pattern_in_match_statement.out
│ ├── maps/
│ │ ├── maps.bal
│ │ ├── maps.md
│ │ ├── maps.metatags
│ │ └── maps.out
│ ├── match-guard-in-match-statement/
│ │ ├── match_guard_in_match_statement.bal
│ │ ├── match_guard_in_match_statement.md
│ │ ├── match_guard_in_match_statement.metatags
│ │ └── match_guard_in_match_statement.out
│ ├── match-statement/
│ │ ├── match_statement.bal
│ │ ├── match_statement.md
│ │ ├── match_statement.metatags
│ │ └── match_statement.out
│ ├── match-statement-with-maps/
│ │ ├── match_statement_with_maps.bal
│ │ ├── match_statement_with_maps.md
│ │ ├── match_statement_with_maps.metatags
│ │ └── match_statement_with_maps.out
│ ├── mcp-service/
│ │ ├── mcp_service.bal
│ │ ├── mcp_service.md
│ │ ├── mcp_service.metatags
│ │ └── mcp_service.out
│ ├── mcp-service-advanced/
│ │ ├── mcp_service_advanced.bal
│ │ ├── mcp_service_advanced.md
│ │ ├── mcp_service_advanced.metatags
│ │ └── mcp_service_advanced.out
│ ├── message-store-listener/
│ │ ├── message_store_listener.bal
│ │ ├── message_store_listener.md
│ │ ├── message_store_listener.metatags
│ │ └── message_store_listener.out
│ ├── message-store-type/
│ │ ├── message_store_type.bal
│ │ ├── message_store_type.md
│ │ ├── message_store_type.metatags
│ │ └── message_store_type.out
│ ├── meta.json
│ ├── module-lifecycle/
│ │ ├── module_lifecycle.bal
│ │ ├── module_lifecycle.md
│ │ ├── module_lifecycle.metatags
│ │ └── module_lifecycle.out
│ ├── mqtt-client-basic-authentication/
│ │ ├── mqtt_client_basic_authentication.bal
│ │ ├── mqtt_client_basic_authentication.curl.out
│ │ ├── mqtt_client_basic_authentication.md
│ │ ├── mqtt_client_basic_authentication.metatags
│ │ └── mqtt_client_basic_authentication.out
│ ├── mqtt-client-publish-message/
│ │ ├── mqtt_client_publish_message.bal
│ │ ├── mqtt_client_publish_message.curl.out
│ │ ├── mqtt_client_publish_message.md
│ │ ├── mqtt_client_publish_message.metatags
│ │ └── mqtt_client_publish_message.out
│ ├── mqtt-client-ssl/
│ │ ├── mqtt_client_ssl.bal
│ │ ├── mqtt_client_ssl.curl.out
│ │ ├── mqtt_client_ssl.md
│ │ ├── mqtt_client_ssl.metatags
│ │ └── mqtt_client_ssl.out
│ ├── mqtt-service-basic-authentication/
│ │ ├── mqtt_service_basic_authentication.bal
│ │ ├── mqtt_service_basic_authentication.md
│ │ ├── mqtt_service_basic_authentication.metatags
│ │ └── mqtt_service_basic_authentication.out
│ ├── mqtt-service-ssl/
│ │ ├── mqtt_service_ssl.bal
│ │ ├── mqtt_service_ssl.md
│ │ ├── mqtt_service_ssl.metatags
│ │ └── mqtt_service_ssl.out
│ ├── mqtt-service-subscribe-message/
│ │ ├── mqtt_service_subscribe_message.bal
│ │ ├── mqtt_service_subscribe_message.md
│ │ ├── mqtt_service_subscribe_message.metatags
│ │ └── mqtt_service_subscribe_message.out
│ ├── multiple-key-fields/
│ │ ├── multiple_key_fields.bal
│ │ ├── multiple_key_fields.md
│ │ ├── multiple_key_fields.metatags
│ │ └── multiple_key_fields.out
│ ├── multiple-receive/
│ │ ├── multiple_receive.bal
│ │ ├── multiple_receive.md
│ │ ├── multiple_receive.metatags
│ │ └── multiple_receive.out
│ ├── multiple-wait/
│ │ ├── multiple_wait.bal
│ │ ├── multiple_wait.md
│ │ ├── multiple_wait.metatags
│ │ └── multiple_wait.out
│ ├── mysql-atomic-transaction/
│ │ ├── mysql_atomic_transaction.bal
│ │ ├── mysql_atomic_transaction.client.out
│ │ ├── mysql_atomic_transaction.md
│ │ ├── mysql_atomic_transaction.metatags
│ │ ├── mysql_atomic_transaction.server.out
│ │ └── mysql_atomic_xa_transaction.bal
│ ├── mysql-batch-execute-operation/
│ │ ├── mysql_batch_execute_operation.bal
│ │ ├── mysql_batch_execute_operation.client.out
│ │ ├── mysql_batch_execute_operation.md
│ │ ├── mysql_batch_execute_operation.metatags
│ │ └── mysql_batch_execute_operation.server.out
│ ├── mysql-call-stored-procedures/
│ │ ├── mysql_call_stored_procedures.bal
│ │ ├── mysql_call_stored_procedures.client.out
│ │ ├── mysql_call_stored_procedures.md
│ │ ├── mysql_call_stored_procedures.metatags
│ │ └── mysql_call_stored_procedures.server.out
│ ├── mysql-execute-operation/
│ │ ├── mysql_execute_operation.bal
│ │ ├── mysql_execute_operation.client.out
│ │ ├── mysql_execute_operation.md
│ │ ├── mysql_execute_operation.metatags
│ │ └── mysql_execute_operation.server.out
│ ├── mysql-prerequisite/
│ │ ├── README.md
│ │ ├── create_stored_procedure.bal
│ │ └── setup_database.bal
│ ├── mysql-query-column-mapping/
│ │ ├── mysql_query_column_mapping.bal
│ │ ├── mysql_query_column_mapping.client.out
│ │ ├── mysql_query_column_mapping.md
│ │ ├── mysql_query_column_mapping.metatags
│ │ └── mysql_query_column_mapping.server.out
│ ├── mysql-query-operation/
│ │ ├── mysql_query_operation.md
│ │ ├── mysql_query_operation.metatags
│ │ ├── mysql_simple_query.bal
│ │ ├── mysql_simple_query.client.out
│ │ └── mysql_simple_query.server.out
│ ├── mysql-query-row-operation/
│ │ ├── mysql_query_row.bal
│ │ ├── mysql_query_row.client.out
│ │ ├── mysql_query_row.server.out
│ │ ├── mysql_query_row_operation.md
│ │ └── mysql_query_row_operation.metatags
│ ├── named-worker-return-values/
│ │ ├── named_worker_return_values.bal
│ │ ├── named_worker_return_values.md
│ │ ├── named_worker_return_values.metatags
│ │ └── named_worker_return_values.out
│ ├── named-worker-with-on-fail-clause/
│ │ ├── named_worker_with_on_fail_clause.bal
│ │ ├── named_worker_with_on_fail_clause.md
│ │ ├── named_worker_with_on_fail_clause.metatags
│ │ └── named_worker_with_on_fail_clause.out
│ ├── named-workers/
│ │ ├── named_workers.bal
│ │ ├── named_workers.md
│ │ ├── named_workers.metatags
│ │ └── named_workers.out
│ ├── named-workers-and-futures/
│ │ ├── named_workers_and_futures.bal
│ │ ├── named_workers_and_futures.md
│ │ ├── named_workers_and_futures.metatags
│ │ └── named_workers_and_futures.out
│ ├── nats-basic-pub/
│ │ ├── nats_basic_pub.bal
│ │ ├── nats_basic_pub.client.out
│ │ ├── nats_basic_pub.md
│ │ ├── nats_basic_pub.metatags
│ │ └── nats_basic_pub.server.out
│ ├── nats-basic-reply/
│ │ ├── nats_basic_reply.bal
│ │ ├── nats_basic_reply.md
│ │ ├── nats_basic_reply.metatags
│ │ └── nats_basic_reply.out
│ ├── nats-basic-request/
│ │ ├── nats_basic_request.bal
│ │ ├── nats_basic_request.client.out
│ │ ├── nats_basic_request.md
│ │ ├── nats_basic_request.metatags
│ │ └── nats_basic_request.server.out
│ ├── nats-basic-sub/
│ │ ├── nats_basic_sub.bal
│ │ ├── nats_basic_sub.md
│ │ ├── nats_basic_sub.metatags
│ │ └── nats_basic_sub.out
│ ├── nats-client-basic-auth/
│ │ ├── nats_client_basic_auth.bal
│ │ ├── nats_client_basic_auth.client.out
│ │ ├── nats_client_basic_auth.md
│ │ ├── nats_client_basic_auth.metatags
│ │ └── nats_client_basic_auth.server.out
│ ├── nats-client-secure-connection/
│ │ ├── nats_client_secure_connection.bal
│ │ ├── nats_client_secure_connection.client.out
│ │ ├── nats_client_secure_connection.md
│ │ ├── nats_client_secure_connection.metatags
│ │ └── nats_client_secure_connection.server.out
│ ├── nats-jetstream-pub/
│ │ ├── nats_jetstream_pub.bal
│ │ ├── nats_jetstream_pub.client.out
│ │ ├── nats_jetstream_pub.md
│ │ ├── nats_jetstream_pub.metatags
│ │ └── nats_jetstream_pub.server.out
│ ├── nats-jetstream-sub/
│ │ ├── nats_jestream_sub.bal
│ │ ├── nats_jestream_sub.md
│ │ ├── nats_jestream_sub.metatags
│ │ └── nats_jestream_sub.out
│ ├── nats-service-basic-auth/
│ │ ├── nats_service_basic_auth.bal
│ │ ├── nats_service_basic_auth.md
│ │ ├── nats_service_basic_auth.metatags
│ │ └── nats_service_basic_auth.out
│ ├── nats-service-constraint-validation/
│ │ ├── nats_service_constraint_validation.bal
│ │ ├── nats_service_constraint_validation.md
│ │ ├── nats_service_constraint_validation.metatags
│ │ └── nats_service_constraint_validation.out
│ ├── nats-service-secure-connection/
│ │ ├── nats_service_secure_connection.bal
│ │ ├── nats_service_secure_connection.md
│ │ ├── nats_service_secure_connection.metatags
│ │ └── nats_service_secure_connection.out
│ ├── natural-expressions/
│ │ ├── natural_expressions.bal
│ │ ├── natural_expressions.md
│ │ ├── natural_expressions.metatags
│ │ └── natural_expressions.out
│ ├── nested-arrays/
│ │ ├── nested_arrays.bal
│ │ ├── nested_arrays.md
│ │ ├── nested_arrays.metatags
│ │ └── nested_arrays.out
│ ├── nested-query-expressions/
│ │ ├── nested_query_expressions.bal
│ │ ├── nested_query_expressions.md
│ │ ├── nested_query_expressions.metatags
│ │ └── nested_query_expressions.out
│ ├── never-type/
│ │ ├── never_type.bal
│ │ ├── never_type.md
│ │ ├── never_type.metatags
│ │ └── never_type.out
│ ├── nil/
│ │ ├── nil.bal
│ │ ├── nil.md
│ │ ├── nil.metatags
│ │ └── nil.out
│ ├── object/
│ │ ├── object.bal
│ │ ├── object.md
│ │ ├── object.metatags
│ │ └── object.out
│ ├── object-closure/
│ │ ├── object_closure.bal
│ │ ├── object_closure.md
│ │ ├── object_closure.metatags
│ │ └── object_closure.out
│ ├── object-constructor/
│ │ ├── object_constructor.bal
│ │ ├── object_constructor.md
│ │ ├── object_constructor.metatags
│ │ └── object_constructor.out
│ ├── object-type-inclusion/
│ │ ├── object_type_inclusion.bal
│ │ ├── object_type_inclusion.md
│ │ ├── object_type_inclusion.metatags
│ │ └── object_type_inclusion.out
│ ├── object-types/
│ │ ├── object_types.bal
│ │ ├── object_types.md
│ │ ├── object_types.metatags
│ │ └── object_types.out
│ ├── object-value-from-class-definition/
│ │ ├── object_value_from_class_definition.bal
│ │ ├── object_value_from_class_definition.md
│ │ ├── object_value_from_class_definition.metatags
│ │ └── object_value_from_class_definition.out
│ ├── on-conflict-clause/
│ │ ├── on_conflict_clause.bal
│ │ ├── on_conflict_clause.md
│ │ ├── on_conflict_clause.metatags
│ │ └── on_conflict_clause.out
│ ├── open-records/
│ │ ├── open_records.bal
│ │ ├── open_records.md
│ │ ├── open_records.metatags
│ │ └── open_records.out
│ ├── optional-fields/
│ │ ├── optional_fields.bal
│ │ ├── optional_fields.md
│ │ ├── optional_fields.metatags
│ │ └── optional_fields.out
│ ├── outer-join-clause/
│ │ ├── outer_join_clause.bal
│ │ ├── outer_join_clause.md
│ │ ├── outer_join_clause.metatags
│ │ └── outer_join_clause.out
│ ├── panics/
│ │ ├── panics.bal
│ │ ├── panics.md
│ │ ├── panics.metatags
│ │ └── panics.out
│ ├── parse-csv-lists/
│ │ ├── parse_csv_lists.bal
│ │ ├── parse_csv_lists.md
│ │ ├── parse_csv_lists.metatags
│ │ └── parse_csv_lists.out
│ ├── persist-create/
│ │ ├── persist_create.bal
│ │ ├── persist_create.md
│ │ ├── persist_create.metatags
│ │ ├── persist_create.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-delete/
│ │ ├── persist_create.metatags
│ │ ├── persist_delete.bal
│ │ ├── persist_delete.md
│ │ ├── persist_delete.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-filtering/
│ │ ├── persist_filtering.bal
│ │ ├── persist_filtering.md
│ │ ├── persist_filtering.metatags
│ │ ├── persist_filtering.out
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-get-all/
│ │ ├── persist_generate.out
│ │ ├── persist_get_all.bal
│ │ ├── persist_get_all.md
│ │ ├── persist_get_all.metatags
│ │ ├── persist_get_all.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-get-by-key/
│ │ ├── persist_generate.out
│ │ ├── persist_get_by_key.bal
│ │ ├── persist_get_by_key.md
│ │ ├── persist_get_by_key.metatags
│ │ ├── persist_get_by_key.out
│ │ ├── persist_init.out
│ │ └── persist_model.bal
│ ├── persist-relation-queries/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_relation_queries.bal
│ │ ├── persist_relation_queries.md
│ │ ├── persist_relation_queries.metatags
│ │ └── persist_relation_queries.out
│ ├── persist-select-fields/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_select_fields.bal
│ │ ├── persist_select_fields.md
│ │ ├── persist_select_fields.metatags
│ │ └── persist_select_fields.out
│ ├── persist-update/
│ │ ├── persist_generate.out
│ │ ├── persist_init.out
│ │ ├── persist_model.bal
│ │ ├── persist_update.bal
│ │ ├── persist_update.md
│ │ ├── persist_update.metatags
│ │ └── persist_update.out
│ ├── programs-and-modules/
│ │ ├── programs_and_modules.bal
│ │ ├── programs_and_modules.md
│ │ ├── programs_and_modules.metatags
│ │ └── programs_and_modules.out
│ ├── provide-function-arguments-by-name/
│ │ ├── provide_function_arguments_by_name.bal
│ │ ├── provide_function_arguments_by_name.md
│ │ ├── provide_function_arguments_by_name.metatags
│ │ └── provide_function_arguments_by_name.out
│ ├── providing-services/
│ │ ├── providing_services.bal
│ │ ├── providing_services.md
│ │ ├── providing_services.metatags
│ │ └── providing_services.out
│ ├── query-actions/
│ │ ├── query_actions.bal
│ │ ├── query_actions.md
│ │ ├── query_actions.metatags
│ │ └── query_actions.out
│ ├── query-expressions/
│ │ ├── query_expressions.bal
│ │ ├── query_expressions.md
│ │ ├── query_expressions.metatags
│ │ └── query_expressions.out
│ ├── querying-tables/
│ │ ├── querying_tables.bal
│ │ ├── querying_tables.md
│ │ ├── querying_tables.metatags
│ │ └── querying_tables.out
│ ├── querying-with-streams/
│ │ ├── querying_with_streams.bal
│ │ ├── querying_with_streams.md
│ │ ├── querying_with_streams.metatags
│ │ └── querying_with_streams.out
│ ├── rabbitmq-client-basic-auth/
│ │ ├── rabbitmq_client_basic_auth.bal
│ │ ├── rabbitmq_client_basic_auth.client.out
│ │ ├── rabbitmq_client_basic_auth.md
│ │ ├── rabbitmq_client_basic_auth.metatags
│ │ └── rabbitmq_client_basic_auth.server.out
│ ├── rabbitmq-client-constraint-validation/
│ │ ├── rabbitmq_client_constraint_validation.bal
│ │ ├── rabbitmq_client_constraint_validation.md
│ │ ├── rabbitmq_client_constraint_validation.metatags
│ │ └── rabbitmq_client_constraint_validation.out
│ ├── rabbitmq-client-secure-connection/
│ │ ├── rabbitmq_client_secure_connection.bal
│ │ ├── rabbitmq_client_secure_connection.client.out
│ │ ├── rabbitmq_client_secure_connection.md
│ │ ├── rabbitmq_client_secure_connection.metatags
│ │ └── rabbitmq_client_secure_connection.server.out
│ ├── rabbitmq-consumer/
│ │ ├── rabbitmq_consumer.bal
│ │ ├── rabbitmq_consumer.md
│ │ ├── rabbitmq_consumer.metatags
│ │ └── rabbitmq_consumer.out
│ ├── rabbitmq-consumer-with-client-acknowledgement/
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.bal
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.md
│ │ ├── rabbitmq_consumer_with_client_acknowledgement.metatags
│ │ └── rabbitmq_consumer_with_client_acknowledgement.out
│ ├── rabbitmq-producer/
│ │ ├── rabbitmq_producer.bal
│ │ ├── rabbitmq_producer.client.out
│ │ ├── rabbitmq_producer.md
│ │ ├── rabbitmq_producer.metatags
│ │ └── rabbitmq_producer.server.out
│ ├── rabbitmq-queue-declare/
│ │ ├── rabbitmq_queue_declare.bal
│ │ ├── rabbitmq_queue_declare.md
│ │ ├── rabbitmq_queue_declare.metatags
│ │ └── rabbitmq_queue_declare.out
│ ├── rabbitmq-service-basic-auth/
│ │ ├── rabbitmq_service_basic_auth.bal
│ │ ├── rabbitmq_service_basic_auth.md
│ │ ├── rabbitmq_service_basic_auth.metatags
│ │ └── rabbitmq_service_basic_auth.out
│ ├── rabbitmq-service-constraint-validation/
│ │ ├── rabbitmq_service_constraint_validation.bal
│ │ ├── rabbitmq_service_constraint_validation.md
│ │ ├── rabbitmq_service_constraint_validation.metatags
│ │ └── rabbitmq_service_constraint_validation.out
│ ├── rabbitmq-service-secure-connection/
│ │ ├── rabbitmq_service_secure_connection.bal
│ │ ├── rabbitmq_service_secure_connection.md
│ │ ├── rabbitmq_service_secure_connection.metatags
│ │ └── rabbitmq_service_secure_connection.out
│ ├── rabbitmq-sync-consumer/
│ │ ├── rabbitmq_sync_consumer.bal
│ │ ├── rabbitmq_sync_consumer.md
│ │ ├── rabbitmq_sync_consumer.metatags
│ │ └── rabbitmq_sync_consumer.out
│ ├── rabbitmq-transaction-consumer/
│ │ ├── rabbitmq_transaction_consumer.bal
│ │ ├── rabbitmq_transaction_consumer.md
│ │ ├── rabbitmq_transaction_consumer.metatags
│ │ └── rabbitmq_transaction_consumer.out
│ ├── rabbitmq-transaction-producer/
│ │ ├── rabbitmq_transaction_producer.bal
│ │ ├── rabbitmq_transaction_producer.md
│ │ ├── rabbitmq_transaction_producer.metatags
│ │ └── rabbitmq_transaction_producer.out
│ ├── rag-ingestion-with-external-vector-store/
│ │ ├── rag_ingestion_with_external_vector_store.bal
│ │ ├── rag_ingestion_with_external_vector_store.md
│ │ ├── rag_ingestion_with_external_vector_store.metatags
│ │ └── rag_ingestion_with_external_vector_store.out
│ ├── rag-query-with-external-vector-store/
│ │ ├── rag_query_with_external_vector_store.bal
│ │ ├── rag_query_with_external_vector_store.md
│ │ ├── rag_query_with_external_vector_store.metatags
│ │ └── rag_query_with_external_vector_store.out
│ ├── rag-with-in-memory-vector-store/
│ │ ├── leave_policy.md
│ │ ├── rag_with_in_memory_vector_store.bal
│ │ ├── rag_with_in_memory_vector_store.md
│ │ ├── rag_with_in_memory_vector_store.metatags
│ │ └── rag_with_in_memory_vector_store.out
│ ├── random-numbers/
│ │ ├── random_numbers.bal
│ │ ├── random_numbers.md
│ │ ├── random_numbers.metatags
│ │ └── random_numbers.out
│ ├── raw-templates/
│ │ ├── raw_templates.bal
│ │ ├── raw_templates.md
│ │ ├── raw_templates.metatags
│ │ └── raw_templates.out
│ ├── readonly-and-isolated/
│ │ ├── readonly_and_isolated.bal
│ │ ├── readonly_and_isolated.md
│ │ ├── readonly_and_isolated.metatags
│ │ └── readonly_and_isolated.out
│ ├── readonly-objects-and-classes/
│ │ ├── readonly_objects_and_classes.bal
│ │ ├── readonly_objects_and_classes.md
│ │ ├── readonly_objects_and_classes.metatags
│ │ └── readonly_objects_and_classes.out
│ ├── readonly-type/
│ │ ├── readonly_type.bal
│ │ ├── readonly_type.md
│ │ ├── readonly_type.metatags
│ │ └── readonly_type.out
│ ├── receive-email-using-client/
│ │ ├── receive_email_using_client.bal
│ │ ├── receive_email_using_client.md
│ │ ├── receive_email_using_client.metatags
│ │ └── receive_email_using_client.out
│ ├── receive-email-using-service/
│ │ ├── receive_email_using_service.bal
│ │ ├── receive_email_using_service.md
│ │ ├── receive_email_using_service.metatags
│ │ └── receive_email_using_service.out
│ ├── record-to-edi/
│ │ ├── bal_project.out
│ │ ├── codegen_command.out
│ │ ├── output.out
│ │ ├── package_structure.out
│ │ ├── record_to_edi.bal
│ │ ├── record_to_edi.md
│ │ ├── record_to_edi.metatags
│ │ ├── schema.json
│ │ └── tool_pull_command.out
│ ├── records/
│ │ ├── records.bal
│ │ ├── records.md
│ │ ├── records.metatags
│ │ └── records.out
│ ├── regexp-find-operations/
│ │ ├── regexp_find_operations.bal
│ │ ├── regexp_find_operations.md
│ │ ├── regexp_find_operations.metatags
│ │ └── regexp_find_operations.out
│ ├── regexp-match-operations/
│ │ ├── regexp_match_operations.bal
│ │ ├── regexp_match_operations.md
│ │ ├── regexp_match_operations.metatags
│ │ └── regexp_match_operations.out
│ ├── regexp-operations-overview/
│ │ ├── regexp_operations_overview.bal
│ │ ├── regexp_operations_overview.md
│ │ ├── regexp_operations_overview.metatags
│ │ └── regexp_operations_overview.out
│ ├── regexp-replace-operations/
│ │ ├── regexp_replace_operations.bal
│ │ ├── regexp_replace_operations.md
│ │ ├── regexp_replace_operations.metatags
│ │ └── regexp_replace_operations.out
│ ├── regexp-type/
│ │ ├── regexp_type.bal
│ │ ├── regexp_type.md
│ │ ├── regexp_type.metatags
│ │ └── regexp_type.out
│ ├── resource/
│ │ └── path/
│ │ └── to/
│ │ ├── ballerinaKeystore.p12
│ │ ├── ballerinaTruststore.p12
│ │ ├── client-private.key
│ │ ├── client-public.crt
│ │ ├── encryptedPrivate.key
│ │ ├── private.key
│ │ ├── public.crt
│ │ ├── server-private.key
│ │ └── server-public.crt
│ ├── resource-method-typing/
│ │ ├── resource_method_typing.bal
│ │ ├── resource_method_typing.client.out
│ │ ├── resource_method_typing.md
│ │ ├── resource_method_typing.metatags
│ │ └── resource_method_typing.server.out
│ ├── resource-methods/
│ │ ├── resource_methods.bal
│ │ ├── resource_methods.client.out
│ │ ├── resource_methods.md
│ │ ├── resource_methods.metatags
│ │ └── resource_methods.server.out
│ ├── resource-path-parameters/
│ │ ├── resource_path_parameters.bal
│ │ ├── resource_path_parameters.client.out
│ │ ├── resource_path_parameters.md
│ │ ├── resource_path_parameters.metatags
│ │ └── resource_path_parameters.server.out
│ ├── rest-arguments/
│ │ ├── rest_arguments.bal
│ │ ├── rest_arguments.md
│ │ ├── rest_arguments.metatags
│ │ └── rest_arguments.out
│ ├── rest-binding-pattern-in-error-binding-pattern/
│ │ ├── rest_binding_pattern_in_error_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_error_binding_pattern.md
│ │ ├── rest_binding_pattern_in_error_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_error_binding_pattern.out
│ ├── rest-binding-pattern-in-list-binding-pattern/
│ │ ├── rest_binding_pattern_in_list_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_list_binding_pattern.md
│ │ ├── rest_binding_pattern_in_list_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_list_binding_pattern.out
│ ├── rest-binding-pattern-in-mapping-binding-pattern/
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.bal
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.md
│ │ ├── rest_binding_pattern_in_mapping_binding_pattern.metatags
│ │ └── rest_binding_pattern_in_mapping_binding_pattern.out
│ ├── rest-parameters/
│ │ ├── rest_parameters.bal
│ │ ├── rest_parameters.md
│ │ ├── rest_parameters.metatags
│ │ └── rest_parameters.out
│ ├── rest-type-in-tuples/
│ │ ├── rest_type_in_tuples.bal
│ │ ├── rest_type_in_tuples.md
│ │ ├── rest_type_in_tuples.metatags
│ │ └── rest_type_in_tuples.out
│ ├── retry-transaction-statement/
│ │ ├── retry_transaction_statement.bal
│ │ ├── retry_transaction_statement.md
│ │ ├── retry_transaction_statement.metatags
│ │ └── retry_transaction_statement.out
│ ├── rollback/
│ │ ├── rollback.bal
│ │ ├── rollback.md
│ │ ├── rollback.metatags
│ │ └── rollback.out
│ ├── run-strands-safely-on-separate-threads/
│ │ ├── run_strands_safely_on_separate_threads.bal
│ │ ├── run_strands_safely_on_separate_threads.md
│ │ ├── run_strands_safely_on_separate_threads.metatags
│ │ └── run_strands_safely_on_separate_threads.out
│ ├── security-crypto/
│ │ ├── security_crypto.bal
│ │ ├── security_crypto.md
│ │ ├── security_crypto.metatags
│ │ ├── security_crypto.out
│ │ └── tests/
│ │ └── security_crypto_test.bal
│ ├── security-jwt-issue-validate/
│ │ ├── security_jwt_issue_validate.bal
│ │ ├── security_jwt_issue_validate.md
│ │ ├── security_jwt_issue_validate.metatags
│ │ ├── security_jwt_issue_validate.out
│ │ └── tests/
│ │ └── security_jwt_issue_validate_test.bal
│ ├── send-email/
│ │ ├── send_email.bal
│ │ ├── send_email.md
│ │ ├── send_email.metatags
│ │ └── send_email.out
│ ├── sensitive-data-logging/
│ │ ├── sensitive_data_logging.bal
│ │ ├── sensitive_data_logging.md
│ │ ├── sensitive_data_logging.metatags
│ │ └── sensitive_data_logging.out
│ ├── sequence-diagrams/
│ │ ├── sequence_diagrams.bal
│ │ ├── sequence_diagrams.md
│ │ ├── sequence_diagrams.metatags
│ │ └── sequence_diagrams.out
│ ├── service-declaration/
│ │ ├── service_declaration.bal
│ │ ├── service_declaration.client.out
│ │ ├── service_declaration.md
│ │ ├── service_declaration.metatags
│ │ └── service_declaration.server.out
│ ├── sftp-client-receive-file/
│ │ ├── sftp_client_receive_file.bal
│ │ ├── sftp_client_receive_file.md
│ │ ├── sftp_client_receive_file.metatags
│ │ └── sftp_client_receive_file.out
│ ├── sftp-client-send-file/
│ │ ├── sftp_client_send_file.bal
│ │ ├── sftp_client_send_file.md
│ │ ├── sftp_client_send_file.metatags
│ │ └── sftp_client_send_file.out
│ ├── sftp-service-receive-file/
│ │ ├── sftp_service_receive_file.bal
│ │ ├── sftp_service_receive_file.md
│ │ ├── sftp_service_receive_file.metatags
│ │ └── sftp_service_receive_file.out
│ ├── sftp-service-send-file/
│ │ ├── sftp_service_send_file.bal
│ │ ├── sftp_service_send_file.md
│ │ ├── sftp_service_send_file.metatags
│ │ └── sftp_service_send_file.out
│ ├── single-use-of-typed-binding/
│ │ ├── single_use_of_typed_binding.bal
│ │ ├── single_use_of_typed_binding.md
│ │ ├── single_use_of_typed_binding.metatags
│ │ └── single_use_of_typed_binding.out
│ ├── single-use-with-on-fail-clause/
│ │ ├── single_use_with_on_fail_clause.bal
│ │ ├── single_use_with_on_fail_clause.md
│ │ ├── single_use_with_on_fail_clause.metatags
│ │ └── single_use_with_on_fail_clause.out
│ ├── singleton-types/
│ │ ├── singleton_types.bal
│ │ ├── singleton_types.md
│ │ ├── singleton_types.metatags
│ │ └── singleton_types.out
│ ├── soap-client-security-inbound-security-config/
│ │ ├── soap_client_security_inbound_security_config.bal
│ │ ├── soap_client_security_inbound_security_config.md
│ │ ├── soap_client_security_inbound_security_config.metatags
│ │ └── soap_client_security_inbound_security_config.out
│ ├── soap-client-security-outbound-security-config/
│ │ ├── soap_client_security_outbound_security_config.bal
│ │ ├── soap_client_security_outbound_security_config.md
│ │ ├── soap_client_security_outbound_security_config.metatags
│ │ └── soap_client_security_outbound_security_config.out
│ ├── soap-client-security-ssl-tsl/
│ │ ├── soap_client_security_ssl_tls.bal
│ │ ├── soap_client_security_ssl_tls.md
│ │ ├── soap_client_security_ssl_tls.metatags
│ │ └── soap_client_security_ssl_tls.out
│ ├── soap-client-send-receive/
│ │ ├── soap_client_send_receive.bal
│ │ ├── soap_client_send_receive.md
│ │ ├── soap_client_send_receive.metatags
│ │ └── soap_client_send_receive.out
│ ├── sort-iterable-objects/
│ │ ├── sort_iterable_objects.bal
│ │ ├── sort_iterable_objects.md
│ │ ├── sort_iterable_objects.metatags
│ │ └── sort_iterable_objects.out
│ ├── start-service-from-service-class-definition/
│ │ ├── start_service_from_service_class_definition.bal
│ │ ├── start_service_from_service_class_definition.client.out
│ │ ├── start_service_from_service_class_definition.md
│ │ ├── start_service_from_service_class_definition.metatags
│ │ └── start_service_from_service_class_definition.server.out
│ ├── stop-handler/
│ │ ├── stop_handler.bal
│ │ ├── stop_handler.client.out
│ │ ├── stop_handler.md
│ │ ├── stop_handler.metatags
│ │ └── stop_handler.server.out
│ ├── strands/
│ │ ├── strands.bal
│ │ ├── strands.md
│ │ ├── strands.metatags
│ │ └── strands.out
│ ├── stream-type/
│ │ ├── stream_type.bal
│ │ ├── stream_type.md
│ │ ├── stream_type.metatags
│ │ └── stream_type.out
│ ├── string-templates/
│ │ ├── string_templates.bal
│ │ ├── string_templates.md
│ │ ├── string_templates.metatags
│ │ └── string_templates.out
│ ├── strings/
│ │ ├── strings.bal
│ │ ├── strings.md
│ │ ├── strings.metatags
│ │ └── strings.out
│ ├── structural-typing/
│ │ ├── structural_typing.bal
│ │ ├── structural_typing.md
│ │ ├── structural_typing.metatags
│ │ └── structural_typing.out
│ ├── structured-keys/
│ │ ├── structured_keys.bal
│ │ ├── structured_keys.md
│ │ ├── structured_keys.metatags
│ │ └── structured_keys.out
│ ├── synchronize-message-passing/
│ │ ├── synchronize_message_passing.bal
│ │ ├── synchronize_message_passing.md
│ │ ├── synchronize_message_passing.metatags
│ │ └── synchronize_message_passing.out
│ ├── table/
│ │ ├── table.bal
│ │ ├── table.md
│ │ ├── table.metatags
│ │ └── table.out
│ ├── table-types/
│ │ ├── table_types.bal
│ │ ├── table_types.md
│ │ ├── table_types.metatags
│ │ └── table_types.out
│ ├── task-frequency-job-execution/
│ │ ├── task_frequency_job_execution.bal
│ │ ├── task_frequency_job_execution.md
│ │ ├── task_frequency_job_execution.metatags
│ │ └── task_frequency_job_execution.out
│ ├── task-one-time-job-execution/
│ │ ├── task_one_time_job_execution.bal
│ │ ├── task_one_time_job_execution.md
│ │ ├── task_one_time_job_execution.metatags
│ │ └── task_one_time_job_execution.out
│ ├── tcp-client/
│ │ ├── tcp_client.bal
│ │ ├── tcp_client.md
│ │ ├── tcp_client.metatags
│ │ └── tcp_client.out
│ ├── tcp-client-ssl-tls/
│ │ ├── tcp_client_ssl_tls.bal
│ │ ├── tcp_client_ssl_tls.md
│ │ ├── tcp_client_ssl_tls.metatags
│ │ └── tcp_client_ssl_tls.out
│ ├── tcp-listener/
│ │ ├── tcp_listener.bal
│ │ ├── tcp_listener.md
│ │ ├── tcp_listener.metatags
│ │ └── tcp_listener.out
│ ├── tcp-service-ssl-tls/
│ │ ├── tcp_service_ssl_tls.bal
│ │ ├── tcp_service_ssl_tls.md
│ │ ├── tcp_service_ssl_tls.metatags
│ │ └── tcp_service_ssl_tls.out
│ ├── temp-files-directories/
│ │ ├── temp_files_directories.bal
│ │ ├── temp_files_directories.md
│ │ ├── temp_files_directories.metatags
│ │ └── temp_files_directories.out
│ ├── testerina-assertions/
│ │ ├── testerina_assertions.bal
│ │ ├── testerina_assertions.md
│ │ ├── testerina_assertions.metatags
│ │ └── testerina_assertions.out
│ ├── testerina-before-and-after-each/
│ │ ├── testerina_before_and_after_each.bal
│ │ ├── testerina_before_and_after_each.md
│ │ ├── testerina_before_and_after_each.metatags
│ │ └── testerina_before_and_after_each.out
│ ├── testerina-before-and-after-groups/
│ │ ├── testerina_before_and_after_groups.bal
│ │ ├── testerina_before_and_after_groups.md
│ │ ├── testerina_before_and_after_groups.metatags
│ │ └── testerina_before_and_after_groups.out
│ ├── testerina-before-and-after-suite/
│ │ ├── testerina_before_and_after_suite.bal
│ │ ├── testerina_before_and_after_suite.md
│ │ ├── testerina_before_and_after_suite.metatags
│ │ └── testerina_before_and_after_suite.out
│ ├── testerina-before-and-after-test/
│ │ ├── testerina_before_and_after_test.bal
│ │ ├── testerina_before_and_after_test.md
│ │ ├── testerina_before_and_after_test.metatags
│ │ └── testerina_before_and_after_test.out
│ ├── testerina-data-driven-tests/
│ │ ├── testerina_data_driven_tests.bal
│ │ ├── testerina_data_driven_tests.md
│ │ ├── testerina_data_driven_tests.metadata
│ │ └── testerina_data_driven_tests.out
│ ├── testerina-group-tests/
│ │ ├── testerina_group_disable_groups.out
│ │ ├── testerina_group_tests.bal
│ │ ├── testerina_group_tests.md
│ │ ├── testerina_group_tests.metadata
│ │ ├── testerina_group_tests_groups_g1.out
│ │ └── testerina_group_tests_groups_g1_g2.out
│ ├── testerina-guarantee-test-execution-order/
│ │ ├── testerina_guarantee_test_execution_order.bal
│ │ ├── testerina_guarantee_test_execution_order.md
│ │ ├── testerina_guarantee_test_execution_order.metadata
│ │ └── testerina_guarantee_test_execution_order.out
│ ├── testerina-mocking-functions/
│ │ ├── testerina_mocking_functions.md
│ │ ├── testerina_mocking_functions.metatags
│ │ ├── testerina_mocking_functions_main.bal
│ │ ├── testerina_mocking_functions_test.bal
│ │ └── testerina_mocking_functions_test.out
│ ├── testerina-mocking-objects/
│ │ ├── testerina_mocking_objects.md
│ │ ├── testerina_mocking_objects.metatags
│ │ ├── testerina_mocking_objects_main.bal
│ │ ├── testerina_mocking_objects_test.bal
│ │ └── testerina_mocking_objects_test.out
│ ├── time-formatting-and-parsing/
│ │ ├── tests/
│ │ │ └── time_formatting_and_parsing_test.bal
│ │ ├── time_formatting_and_parsing.bal
│ │ ├── time_formatting_and_parsing.md
│ │ ├── time_formatting_and_parsing.metatags
│ │ └── time_formatting_and_parsing.out
│ ├── time-utc/
│ │ ├── tests/
│ │ │ └── time_utc_test.bal
│ │ ├── time_utc.bal
│ │ ├── time_utc.md
│ │ ├── time_utc.metatags
│ │ └── time_utc.out
│ ├── time-utc-and-civil/
│ │ ├── tests/
│ │ │ └── time_utc_and_civil_test.bal
│ │ ├── time_utc_and_civil.bal
│ │ ├── time_utc_and_civil.md
│ │ ├── time_utc_and_civil.metatags
│ │ └── time_utc_and_civil.out
│ ├── time-zone/
│ │ ├── time_zone.bal
│ │ ├── time_zone.md
│ │ ├── time_zone.metatags
│ │ └── time_zone.out
│ ├── tracing/
│ │ ├── tests/
│ │ │ └── tracing_test.bal
│ │ ├── tracing.bal
│ │ ├── tracing.client.out
│ │ ├── tracing.md
│ │ ├── tracing.metatags
│ │ └── tracing.server.out
│ ├── transaction-statement/
│ │ ├── transaction_statement.bal
│ │ ├── transaction_statement.md
│ │ ├── transaction_statement.metatags
│ │ └── transaction_statement.out
│ ├── transactional-named-workers/
│ │ ├── transactional_named_workers.bal
│ │ ├── transactional_named_workers.md
│ │ ├── transactional_named_workers.metatags
│ │ └── transactional_named_workers.out
│ ├── transactional-qualifier/
│ │ ├── transactional_qualifier.bal
│ │ ├── transactional_qualifier.md
│ │ ├── transactional_qualifier.metatags
│ │ └── transactional_qualifier.out
│ ├── transform-csv-records-to-custom-types/
│ │ ├── transform_csv_records_to_custom_types.bal
│ │ ├── transform_csv_records_to_custom_types.md
│ │ ├── transform_csv_records_to_custom_types.metatags
│ │ └── transform_csv_records_to_custom_types.out
│ ├── trap-expression/
│ │ ├── trap_expression.bal
│ │ ├── trap_expression.md
│ │ ├── trap_expression.metatags
│ │ └── trap_expression.out
│ ├── tuples/
│ │ ├── tuples.bal
│ │ ├── tuples.md
│ │ ├── tuples.metatags
│ │ └── tuples.out
│ ├── type-definitions/
│ │ ├── type_definitions.bal
│ │ ├── type_definitions.md
│ │ ├── type_definitions.metatags
│ │ └── type_definitions.out
│ ├── type-inclusion-for-records/
│ │ ├── type_inclusion_for_records.bal
│ │ ├── type_inclusion_for_records.md
│ │ ├── type_inclusion_for_records.metatags
│ │ └── type_inclusion_for_records.out
│ ├── type-inference/
│ │ ├── type_inference.bal
│ │ ├── type_inference.md
│ │ ├── type_inference.metatags
│ │ └── type_inference.out
│ ├── typed-binding-pattern/
│ │ ├── typed_binding_pattern.bal
│ │ ├── typed_binding_pattern.md
│ │ ├── typed_binding_pattern.metatags
│ │ └── typed_binding_pattern.out
│ ├── typedesc-type/
│ │ ├── typedesc_type.bal
│ │ ├── typedesc_type.md
│ │ ├── typedesc_type.metatags
│ │ └── typedesc_type.out
│ ├── udp-client/
│ │ ├── udp_client.bal
│ │ ├── udp_client.md
│ │ ├── udp_client.metatags
│ │ └── udp_client.out
│ ├── udp-connect-client/
│ │ ├── udp_connect_client.bal
│ │ ├── udp_connect_client.md
│ │ ├── udp_connect_client.metatags
│ │ └── udp_connect_client.out
│ ├── udp-listener/
│ │ ├── udp_listener.bal
│ │ ├── udp_listener.md
│ │ ├── udp_listener.metatags
│ │ └── udp_listener.out
│ ├── unary-operators/
│ │ ├── unary_operators.bal
│ │ ├── unary_operators.md
│ │ ├── unary_operators.metatags
│ │ └── unary_operators.out
│ ├── unions/
│ │ ├── unions.bal
│ │ ├── unions.md
│ │ ├── unions.metatags
│ │ └── unions.out
│ ├── url-encode-decode/
│ │ ├── tests/
│ │ │ └── url_encode_decode_test.bal
│ │ ├── url_encode_decode.bal
│ │ ├── url_encode_decode.md
│ │ ├── url_encode_decode.metatags
│ │ └── url_encode_decode.out
│ ├── uuid-generation/
│ │ ├── uuid_generation.bal
│ │ ├── uuid_generation.md
│ │ ├── uuid_generation.metatags
│ │ └── uuid_generation.out
│ ├── uuid-operations/
│ │ ├── uuid_operations.bal
│ │ ├── uuid_operations.md
│ │ ├── uuid_operations.metatags
│ │ └── uuid_operations.out
│ ├── variables-and-types/
│ │ ├── variables_and_types.bal
│ │ ├── variables_and_types.md
│ │ ├── variables_and_types.metatags
│ │ └── variables_and_types.out
│ ├── visibility-of-object-fields-and-methods/
│ │ ├── visibility_of_object_fields_and_methods.bal
│ │ ├── visibility_of_object_fields_and_methods.md
│ │ ├── visibility_of_object_fields_and_methods.metatags
│ │ └── visibility_of_object_fields_and_methods.out
│ ├── waiting-for-workers/
│ │ ├── waiting_for_workers.bal
│ │ ├── waiting_for_workers.md
│ │ ├── waiting_for_workers.metatags
│ │ └── waiting_for_workers.out
│ ├── websocket-basic-sample/
│ │ ├── tests/
│ │ │ └── websocket_basic_sample_test.bal
│ │ ├── websocket_basic_sample.bal
│ │ ├── websocket_basic_sample.md
│ │ ├── websocket_basic_sample.metatags
│ │ └── websocket_basic_sample.out
│ ├── websocket-binary-client/
│ │ └── websocket_binary_client.md
│ ├── websocket-client/
│ │ ├── websocket_client.bal
│ │ ├── websocket_client.md
│ │ ├── websocket_client.metatags
│ │ └── websocket_client.out
│ ├── websocket-client-basic-auth/
│ │ ├── websocket_client_basic_auth.bal
│ │ ├── websocket_client_basic_auth.md
│ │ ├── websocket_client_basic_auth.metatags
│ │ └── websocket_client_basic_auth.out
│ ├── websocket-client-bearer-token-auth/
│ │ ├── websocket_client_bearer_token_auth.bal
│ │ ├── websocket_client_bearer_token_auth.md
│ │ ├── websocket_client_bearer_token_auth.metatags
│ │ └── websocket_client_bearer_token_auth.out
│ ├── websocket-client-mutual-ssl/
│ │ ├── websocket_client_mutual_ssl.bal
│ │ ├── websocket_client_mutual_ssl.md
│ │ ├── websocket_client_mutual_ssl.metatags
│ │ └── websocket_client_mutual_ssl.out
│ ├── websocket-client-oauth2-client-cred-grant-type/
│ │ ├── websocket_client_oauth2_client_cred_grant_type.bal
│ │ ├── websocket_client_oauth2_client_cred_grant_type.md
│ │ ├── websocket_client_oauth2_client_cred_grant_type.metatags
│ │ └── websocket_client_oauth2_client_cred_grant_type.out
│ ├── websocket-client-oauth2-jwt-bearer-grant-type/
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.bal
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.md
│ │ ├── websocket_client_oauth2_jwt_bearer_grant_type.metatags
│ │ └── websocket_client_oauth2_jwt_bearer_grant_type.out
│ ├── websocket-client-oauth2-password-grant-type/
│ │ ├── websocket_client_oauth2_password_grant_type.bal
│ │ ├── websocket_client_oauth2_password_grant_type.md
│ │ ├── websocket_client_oauth2_password_grant_type.metatags
│ │ └── websocket_client_oauth2_password_grant_type.out
│ ├── websocket-client-oauth2-refresh-token-grant-type/
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.bal
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.md
│ │ ├── websocket_client_oauth2_refresh_token_grant_type.metatags
│ │ └── websocket_client_oauth2_refresh_token_grant_type.out
│ ├── websocket-client-payload-constraint-validation/
│ │ ├── websocket_client_payload_constraint_validation.bal
│ │ ├── websocket_client_payload_constraint_validation.md
│ │ ├── websocket_client_payload_constraint_validation.metatags
│ │ └── websocket_client_payload_constraint_validation.out
│ ├── websocket-client-self-signed-jwt-auth/
│ │ ├── websocket_client_self_signed_jwt_auth.bal
│ │ ├── websocket_client_self_signed_jwt_auth.md
│ │ ├── websocket_client_self_signed_jwt_auth.metatags
│ │ └── websocket_client_self_signed_jwt_auth.out
│ ├── websocket-client-ssl-tls/
│ │ ├── websocket_client_ssl_tls.bal
│ │ ├── websocket_client_ssl_tls.md
│ │ ├── websocket_client_ssl_tls.metatags
│ │ └── websocket_client_ssl_tls.out
│ ├── websocket-query-parameter/
│ │ ├── websocket_query_parameter.bal
│ │ ├── websocket_query_parameter.md
│ │ ├── websocket_query_parameter.metatags
│ │ └── websocket_query_parameter.server.out
│ ├── websocket-retry-client/
│ │ ├── websocket_retry_client.bal
│ │ ├── websocket_retry_client.md
│ │ ├── websocket_retry_client.metatags
│ │ └── websocket_retry_client.out
│ ├── websocket-service-basic-auth-file-user-store/
│ │ ├── websocket_service_basic_auth_file_user_store.bal
│ │ ├── websocket_service_basic_auth_file_user_store.md
│ │ ├── websocket_service_basic_auth_file_user_store.metatags
│ │ └── websocket_service_basic_auth_file_user_store.server.out
│ ├── websocket-service-basic-auth-ldap-user-store/
│ │ ├── websocket_service_basic_auth_ldap_user_store.bal
│ │ ├── websocket_service_basic_auth_ldap_user_store.md
│ │ ├── websocket_service_basic_auth_ldap_user_store.metatags
│ │ └── websocket_service_basic_auth_ldap_user_store.server.out
│ ├── websocket-service-error-handling/
│ │ ├── websocket_service_error_handling.bal
│ │ ├── websocket_service_error_handling.md
│ │ ├── websocket_service_error_handling.metatags
│ │ └── websocket_service_error_handling.out
│ ├── websocket-service-jwt-auth/
│ │ ├── websocket_service_jwt_auth.bal
│ │ ├── websocket_service_jwt_auth.md
│ │ ├── websocket_service_jwt_auth.metatags
│ │ └── websocket_service_jwt_auth.server.out
│ ├── websocket-service-mutual-ssl/
│ │ ├── websocket_service_mutual_ssl.bal
│ │ ├── websocket_service_mutual_ssl.md
│ │ ├── websocket_service_mutual_ssl.metatags
│ │ └── websocket_service_mutual_ssl.server.out
│ ├── websocket-service-oauth2/
│ │ ├── websocket_service_oauth2.bal
│ │ ├── websocket_service_oauth2.md
│ │ ├── websocket_service_oauth2.metatags
│ │ └── websocket_service_oauth2.server.out
│ ├── websocket-service-payload-constraint-validation/
│ │ ├── websocket_service_payload_constraint_validation.bal
│ │ ├── websocket_service_payload_constraint_validation.md
│ │ ├── websocket_service_payload_constraint_validation.metatags
│ │ └── websocket_service_payload_constraint_validation.out
│ ├── websocket-service-ssl-tls/
│ │ ├── websocket_service_ssl_tls.bal
│ │ ├── websocket_service_ssl_tls.md
│ │ ├── websocket_service_ssl_tls.metatags
│ │ └── websocket_service_ssl_tls.server.out
│ ├── websocket-text-client/
│ │ └── websocket_text_client.md
│ ├── websocket-timeout-client/
│ │ ├── websocket_timeout_client.bal
│ │ ├── websocket_timeout_client.md
│ │ ├── websocket_timeout_client.metatags
│ │ └── websocket_timeout_client.out
│ ├── websub-webhook-sample/
│ │ ├── websub_webhook_sample.bal
│ │ ├── websub_webhook_sample.md
│ │ ├── websub_webhook_sample.metatags
│ │ └── websub_webhook_sample.out
│ ├── while-statement/
│ │ ├── while_statement.bal
│ │ ├── while_statement.md
│ │ ├── while_statement.metatags
│ │ └── while_statement.out
│ ├── wildcard-binding-pattern/
│ │ ├── wildcard_binding_pattern.bal
│ │ ├── wildcard_binding_pattern.md
│ │ ├── wildcard_binding_pattern.metatags
│ │ └── wildcard_binding_pattern.out
│ ├── xml-access/
│ │ ├── xml_access.bal
│ │ ├── xml_access.md
│ │ ├── xml_access.metatags
│ │ └── xml_access.out
│ ├── xml-data-model/
│ │ ├── xml_data_model.bal
│ │ ├── xml_data_model.md
│ │ ├── xml_data_model.metatags
│ │ └── xml_data_model.out
│ ├── xml-from-json-conversion/
│ │ ├── xml_from_json_conversion.bal
│ │ ├── xml_from_json_conversion.md
│ │ ├── xml_from_json_conversion.metatags
│ │ └── xml_from_json_conversion.out
│ ├── xml-from-record-conversion/
│ │ ├── xml_from_record_conversion.bal
│ │ ├── xml_from_record_conversion.md
│ │ ├── xml_from_record_conversion.metatags
│ │ └── xml_from_record_conversion.out
│ ├── xml-iteration/
│ │ ├── xml_iteration.bal
│ │ ├── xml_iteration.md
│ │ ├── xml_iteration.metatags
│ │ └── xml_iteration.out
│ ├── xml-mutation/
│ │ ├── xml_mutation.bal
│ │ ├── xml_mutation.md
│ │ ├── xml_mutation.metatags
│ │ └── xml_mutation.out
│ ├── xml-namespaces/
│ │ ├── xml_namespaces.bal
│ │ ├── xml_namespaces.md
│ │ ├── xml_namespaces.metatags
│ │ └── xml_namespaces.out
│ ├── xml-navigation/
│ │ ├── xml_navigation.bal
│ │ ├── xml_navigation.md
│ │ ├── xml_navigation.metatags
│ │ └── xml_navigation.out
│ ├── xml-operations/
│ │ ├── xml_operations.bal
│ │ ├── xml_operations.md
│ │ ├── xml_operations.metatags
│ │ └── xml_operations.out
│ ├── xml-subtyping/
│ │ ├── xml_subtyping.bal
│ │ ├── xml_subtyping.md
│ │ ├── xml_subtyping.metatags
│ │ └── xml_subtyping.out
│ ├── xml-templates/
│ │ ├── xml_templates.bal
│ │ ├── xml_templates.md
│ │ ├── xml_templates.metatags
│ │ └── xml_templates.out
│ ├── xml-templates-and-query/
│ │ ├── xml_templates_and_query.bal
│ │ ├── xml_templates_and_query.md
│ │ ├── xml_templates_and_query.metatags
│ │ └── xml_templates_and_query.out
│ ├── xml-to-json-conversion/
│ │ ├── xml_to_json_conversion.bal
│ │ ├── xml_to_json_conversion.md
│ │ ├── xml_to_json_conversion.metatags
│ │ └── xml_to_json_conversion.out
│ ├── xml-to-record/
│ │ ├── xml_to_record.bal
│ │ ├── xml_to_record.md
│ │ ├── xml_to_record.metatags
│ │ └── xml_to_record.out
│ ├── xml-to-record-conversion/
│ │ ├── xml_to_record_conversion.bal
│ │ ├── xml_to_record_conversion.md
│ │ ├── xml_to_record_conversion.metatags
│ │ └── xml_to_record_conversion.out
│ ├── xml-to-record-with-projection/
│ │ ├── xml_to_record_with_projection.bal
│ │ ├── xml_to_record_with_projection.md
│ │ ├── xml_to_record_with_projection.metatags
│ │ └── xml_to_record_with_projection.out
│ ├── xmlns-declarations/
│ │ ├── xmlns_declarations.bal
│ │ ├── xmlns_declarations.md
│ │ ├── xmlns_declarations.metatags
│ │ └── xmlns_declarations.out
│ ├── xslt-transformation/
│ │ ├── xslt_transformation.bal
│ │ ├── xslt_transformation.md
│ │ ├── xslt_transformation.metatags
│ │ └── xslt_transformation.out
│ ├── yaml-to-anydata/
│ │ ├── yaml_to_anydata.bal
│ │ ├── yaml_to_anydata.md
│ │ ├── yaml_to_anydata.metatags
│ │ └── yaml_to_anydata.out
│ └── yaml-to-anydata-with-projection/
│ ├── yaml_to_anydata_with_projection.bal
│ ├── yaml_to_anydata_with_projection.md
│ ├── yaml_to_anydata_with_projection.metatags
│ └── yaml_to_anydata_with_projection.out
├── gradle/
│ ├── javaProject.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── installers/
│ ├── linux-deb/
│ │ ├── README.md
│ │ ├── build-ballerina-linux-deb-x64.sh
│ │ └── resources/
│ │ ├── amd/
│ │ │ └── DEBIAN/
│ │ │ ├── control
│ │ │ ├── postinst
│ │ │ └── postrm
│ │ └── arm/
│ │ └── DEBIAN/
│ │ ├── control
│ │ ├── postinst
│ │ └── postrm
│ ├── linux-rpm/
│ │ ├── build-ballerina-linux-rpm-x64.sh
│ │ ├── resources/
│ │ │ ├── ballerina-runtime.spec
│ │ │ └── ballerina-tools.spec
│ │ └── rpmbuild/
│ │ ├── BUILDROOT/
│ │ │ └── .gitkeep
│ │ ├── RPMS/
│ │ │ └── .gitkeep
│ │ ├── SOURCES/
│ │ │ └── .gitkeep
│ │ ├── SPECS/
│ │ │ └── .gitkeep
│ │ └── SRPMS/
│ │ └── .gitkeep
│ ├── mac/
│ │ ├── build-ballerina-macos-x64.sh
│ │ └── darwin/
│ │ ├── Distribution
│ │ ├── app.plist
│ │ └── scripts/
│ │ └── postinstall
│ └── windows/
│ ├── build-ballerina-windows-x64.bat
│ └── resources/
│ ├── cert/
│ │ └── ballerina-cert.pfx
│ ├── en-us.wxl
│ └── installer.wxs
├── issue_template.md
├── language-server-simulator/
│ ├── build.gradle
│ ├── gradle.properties
│ └── src/
│ └── main/
│ ├── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── ballerinalang/
│ │ └── langserver/
│ │ └── simulator/
│ │ ├── Editor.java
│ │ ├── EditorOutputStream.java
│ │ ├── EditorSimulator.java
│ │ ├── EditorTab.java
│ │ └── generators/
│ │ ├── ClassGenerator.java
│ │ ├── CodeSnippetGenerator.java
│ │ ├── FunctionGenerator.java
│ │ ├── Generators.java
│ │ ├── ImportStatementGenerator.java
│ │ ├── MatchStatementGenerator.java
│ │ ├── ServiceGenerator.java
│ │ ├── StatementGenerator.java
│ │ ├── TypeDefinitionGenerator.java
│ │ └── VarDeclarationStatementGenerator.java
│ └── resources/
│ └── META-INF/
│ └── services/
│ └── org.ballerinalang.langserver.simulator.generators.CodeSnippetGenerator
├── project-api-tests/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── ballerina/
│ │ └── projectapi/
│ │ ├── BalToolTest.java
│ │ ├── BuildTimeTest.java
│ │ ├── CentralNegativeTest.java
│ │ ├── CentralTest.java
│ │ ├── CentralTestUtils.java
│ │ ├── DistributionCompatibilityTest.java
│ │ ├── HierarchicalPackagesTest.java
│ │ ├── MavenCustomRepoTest.java
│ │ ├── MavenCustomRepoTestUtils.java
│ │ └── TestUtils.java
│ └── resources/
│ ├── bal-tool/
│ │ ├── DistTestCommand/
│ │ │ ├── build.gradle
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── settings.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── disttest/
│ │ │ │ └── cli/
│ │ │ │ └── DistTestCommand.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ └── io.ballerina.cli.BLauncherCmd
│ │ │ └── disttest.help
│ │ ├── cmd-outputs/
│ │ │ ├── tool-execute-general-help.txt
│ │ │ ├── tool-execute-specific-help-1.0.0.txt
│ │ │ ├── tool-execute-specific-help-1.1.0.txt
│ │ │ ├── tool-execute-tool.txt
│ │ │ ├── tool-execute-unknown-cmd-non-existing.txt
│ │ │ ├── tool-execute-unknown-cmd.txt
│ │ │ ├── tool-list-with-multiple-tool-versions.txt
│ │ │ ├── tool-list-with-no-tools.txt
│ │ │ ├── tool-pull-again-with-specific-version.txt
│ │ │ ├── tool-pull-again-without-version.txt
│ │ │ ├── tool-pull-with-incompatible-dist.txt
│ │ │ ├── tool-pull-with-non-existing-version.txt
│ │ │ ├── tool-pull-with-specific-version.txt
│ │ │ ├── tool-pull-without-version.txt
│ │ │ ├── tool-remove-active-version.txt
│ │ │ ├── tool-remove-all.txt
│ │ │ ├── tool-remove-non-existing-tool.txt
│ │ │ ├── tool-remove-non-existing-version.txt
│ │ │ ├── tool-remove-specific-version.txt
│ │ │ ├── tool-remove-with-incompatible-dist.txt
│ │ │ ├── tool-search-with-tool-id.txt
│ │ │ ├── tool-update-non-existing.txt
│ │ │ ├── tool-update-with-new-patch-and-minor.txt
│ │ │ ├── tool-update-with-no-new-version.txt
│ │ │ ├── tool-use-active-version.txt
│ │ │ ├── tool-use-new-version.txt
│ │ │ ├── tool-use-non-existent-version.txt
│ │ │ ├── tool-use-old-version.txt
│ │ │ └── tool-use-with-incompatible-dist.txt
│ │ ├── v1.0.0/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── README.md
│ │ ├── v1.0.1/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── Package.md
│ │ ├── v1.0.4/
│ │ │ └── disttestpackage/
│ │ │ ├── BalTool.toml
│ │ │ ├── Ballerina.toml
│ │ │ └── README.md
│ │ └── v1.1.0/
│ │ └── disttestpackage/
│ │ ├── BalTool.toml
│ │ ├── Ballerina.toml
│ │ └── README.md
│ ├── build-time/
│ │ ├── Project1/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── Project2/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ └── Project3/
│ │ ├── Ballerina.toml
│ │ ├── main.bal
│ │ └── tests/
│ │ └── test.bal
│ ├── central/
│ │ ├── projectA/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectB/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectC/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectD/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectE/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectF/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── projectG/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ └── projectSnapshot/
│ │ ├── Ballerina.toml
│ │ ├── Package.md
│ │ └── main.bal
│ ├── distribution-tests/
│ │ ├── disttestmultiples/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── bctestorg-disttestmultiples-any-1.1.0.bala
│ │ │ └── disttestmultiples.bal
│ │ ├── disttestpack1/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── disttestpack1.bal
│ │ ├── disttestpack2/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack3/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack4/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpack5/
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── disttestpackbeta6/
│ │ │ └── bctestorg-disttestpackbeta6-any-1.1.0.bala
│ │ └── forwardpack1/
│ │ └── bctestorg-forwardpack1-any-1.1.0.bala
│ ├── hierarchical-packages/
│ │ ├── PackageH.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageH.test.mod/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── api/
│ │ │ │ ├── Module.md
│ │ │ │ ├── Package.md
│ │ │ │ └── api.bal
│ │ │ └── api.doc/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── api.doc.bal
│ │ ├── PackageI/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageJ.test/
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageK/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageL.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageM/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageN/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageO.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageP/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── PackageQ.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ ├── lib.bal
│ │ │ └── modules/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api/
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── mod.api.bal
│ │ ├── PackageR/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ └── main.bal
│ │ ├── PackageR.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageS/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ ├── PackageT.test/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Module.md
│ │ │ ├── Package.md
│ │ │ └── lib.bal
│ │ ├── PackageU/
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Dependencies-template.toml
│ │ │ └── main.bal
│ │ └── Transitive.PackageH.test/
│ │ ├── .gitignore
│ │ ├── Ballerina.toml
│ │ ├── Module.md
│ │ ├── Package.md
│ │ └── lib.bal
│ ├── maven-repos/
│ │ ├── myproject1/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pact/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg1/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg2/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ ├── pkg3/
│ │ │ ├── .devcontainer.json
│ │ │ ├── .gitignore
│ │ │ ├── Ballerina.toml
│ │ │ ├── Package.md
│ │ │ └── main.bal
│ │ └── test-resolution/
│ │ ├── .devcontainer.json
│ │ ├── .gitignore
│ │ ├── Ballerina.toml
│ │ └── main.bal
│ └── testng.xml
├── pull_request_template.md
├── release-notes.md
├── resources/
│ └── tools/
│ ├── COPYRIGHT.txt
│ ├── INSTALL.txt
│ ├── LICENSE.txt
│ ├── PATENTS.txt
│ ├── README.txt
│ ├── distributions/
│ │ ├── ballerina-version
│ │ └── installer-version
│ └── scripts/
│ ├── install
│ └── install.bat
├── settings.gradle
└── stdlib-integration-tests/
├── auth/
│ └── tests/
│ ├── Config.toml
│ ├── auth_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── crypto/
│ └── tests/
│ ├── crypto_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── email/
│ └── tests/
│ └── email_test.bal
├── ftp/
│ └── tests/
│ └── ftp_test.bal
├── http/
│ └── tests/
│ ├── http_1_1_passthrough_test.bal
│ ├── http_2_0_server_push_test.bal
│ └── rest_introspection_test.bal
├── index.json
├── jwt/
│ └── tests/
│ ├── jwt_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ ├── ballerinaTruststore.p12
│ └── expiredTruststore.p12
├── library_package_test/
│ ├── Ballerina.toml
│ └── main.bal
├── mime/
│ └── tests/
│ └── mime_test.bal
├── oauth2/
│ └── tests/
│ ├── oauth2_test.bal
│ └── resources/
│ └── keystore/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── task/
│ └── tests/
│ └── http_service.bal
├── tcp/
│ └── tests/
│ ├── mock_servers.bal
│ ├── resources/
│ │ ├── private.key
│ │ └── public.crt
│ └── tcp_tests.bal
├── transaction/
│ └── tests/
│ └── xa_transactions_test.bal
├── udp/
│ └── tests/
│ ├── mock_servers.bal
│ └── udp_tests.bal
├── url/
│ └── tests/
│ └── url_test.bal
├── websocket/
│ └── tests/
│ └── web_socket_test.bal
├── websub/
│ └── tests/
│ └── web_sub_test.bal
├── websub-advance/
│ └── tests/
│ ├── constants.bal
│ ├── resources/
│ │ └── security/
│ │ ├── ballerinaKeystore.p12
│ │ └── ballerinaTruststore.p12
│ ├── test_subscribers_at_basic_auth_secured_hub.bal
│ ├── test_subscribers_at_persistence_enabled_hub.bal
│ └── utils.bal
└── websub-generic/
└── tests/
├── 01_websub_publisher.bal
├── 02_redirection_publishers.bal
├── constants.bal
├── resources/
│ └── security/
│ ├── ballerinaKeystore.p12
│ └── ballerinaTruststore.p12
├── test_content_negotiation.bal
├── test_custom_subscribers.bal
├── test_different_content_type_subscribers.bal
├── test_multiple_subscribers.bal
├── test_redirected_subscribers.bal
├── test_subscriber.bal
├── test_subscriber_startup.bal
├── test_unsubscription_client.bal
└── utils.bal
SYMBOL INDEX (497 symbols across 56 files)
FILE: ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/CentralTest.java
class CentralTest (line 25) | public class CentralTest {
method dataProviderMethod (line 30) | @DataProvider(name = "getExecutors")
method testPull (line 37) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/InstallerTest.java
class InstallerTest (line 24) | public class InstallerTest {
method dataProviderMethod (line 29) | @DataProvider(name = "getExecutors")
method testSmoke (line 36) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/ProjectTest.java
class ProjectTest (line 24) | public class ProjectTest {
method dataProviderMethod (line 29) | @DataProvider(name = "getExecutors")
method testProject (line 36) | @Test(dataProvider = "getExecutors")
method testBBEs (line 53) | @Test(dataProvider = "getExecutors")
method testDirectoryPath (line 68) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/TestUtils.java
class TestUtils (line 40) | public class TestUtils {
method getVersionOutput (line 54) | public static String getVersionOutput(String jBallerinaVersion, String...
method getExecutor (line 71) | public static Executor getExecutor(String version) {
method testDistCommands (line 88) | public static void testDistCommands(Executor executor, String version,...
method testInstallation (line 152) | public static void testInstallation(Executor executor, String version,...
method testDependencyFetch (line 166) | public static void testDependencyFetch(Executor executor, String toolV...
method verifyDistList (line 212) | public static void verifyDistList(Executor executor, String toolVersio...
method isSupportedRelease (line 225) | public static boolean isSupportedRelease(String version) {
method isOldToolVersion (line 240) | public static boolean isOldToolVersion(String toolVersion) {
method testProject (line 252) | public static void testProject(Executor executor, String previousVersi...
method testBBEs (line 276) | public static void testBBEs(Executor executor, String previousVersion,...
method getSupportedVersion (line 322) | private static String getSupportedVersion(String toolVersion, String v...
method testDirectoryPath (line 337) | public static void testDirectoryPath(Executor executor, String toolVer...
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/CentOS.java
class CentOS (line 19) | public class CentOS implements Executor {
method CentOS (line 24) | public CentOS(String version) {
method transferArtifacts (line 30) | @Override
method install (line 36) | @Override
method executeCommand (line 41) | @Override
method uninstall (line 48) | @Override
method cleanArtifacts (line 53) | @Override
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Executor.java
type Executor (line 19) | public interface Executor {
method transferArtifacts (line 20) | String transferArtifacts();
method install (line 22) | String install();
method executeCommand (line 24) | String executeCommand(String command, boolean isAdminMode, String tool...
method uninstall (line 26) | String uninstall();
method cleanArtifacts (line 28) | String cleanArtifacts();
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/MacOS.java
class MacOS (line 20) | public class MacOS implements Executor {
method MacOS (line 24) | public MacOS(String version) {
method transferArtifacts (line 30) | @Override
method install (line 36) | @Override
method executeCommand (line 41) | @Override
method uninstall (line 51) | @Override
method cleanArtifacts (line 56) | @Override
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Ubuntu.java
class Ubuntu (line 20) | public class Ubuntu implements Executor {
method Ubuntu (line 25) | public Ubuntu(String version) {
method transferArtifacts (line 32) | @Override
method install (line 38) | @Override
method executeCommand (line 43) | @Override
method uninstall (line 50) | @Override
method cleanArtifacts (line 55) | @Override
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Utils.java
class Utils (line 36) | public class Utils {
method downloadFile (line 44) | public static void downloadFile(String version, String installerName) {
method executeCommand (line 70) | public static String executeCommand(String command) {
method isUnix (line 106) | private static boolean isUnix() {
method isWindows (line 110) | private static boolean isWindows() {
method getUserHome (line 119) | public static String getUserHome() {
method getCommandName (line 136) | public static String getCommandName(String toolVersion) {
FILE: ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Windows.java
class Windows (line 19) | public class Windows implements Executor {
method Windows (line 23) | public Windows(String version) {
method transferArtifacts (line 28) | @Override
method install (line 34) | @Override
method executeCommand (line 40) | @Override
method uninstall (line 45) | @Override
method cleanArtifacts (line 50) | @Override
FILE: ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/FetchDependencyTest.java
class FetchDependencyTest (line 25) | public class FetchDependencyTest {
method dataProviderMethod (line 31) | @DataProvider(name = "getExecutors")
method testFetchDependency (line 38) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/UpdateDistTest.java
class UpdateDistTest (line 25) | public class UpdateDistTest {
method dataProviderMethod (line 35) | @DataProvider(name = "getExecutors")
method testDistCommands (line 42) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/UpdateToolTest.java
class UpdateToolTest (line 25) | public class UpdateToolTest {
method dataProviderMethod (line 36) | @DataProvider(name = "getExecutors")
method testUpdateTool (line 43) | @Test(dataProvider = "getExecutors")
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/lengthValidation/LengthValidator.java
class LengthValidator (line 38) | public class LengthValidator {
method logger (line 46) | public static void logger(String message) {
method validateLineLength (line 53) | public static void validateLineLength(String path, String fileName) th...
method validateFileExtension (line 89) | public static void validateFileExtension(File fileEntry, String[] exte...
method listFilesForFolder (line 100) | public static void listFilesForFolder(final File folder) throws LineL...
method validateLength (line 110) | @Test
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/lengthValidation/LineLengthExceededException.java
class LineLengthExceededException (line 19) | public class LineLengthExceededException extends Exception{
method LineLengthExceededException (line 21) | LineLengthExceededException(String message) {
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/ArtifactBuildTest.java
class ArtifactBuildTest (line 34) | public class ArtifactBuildTest {
method distributionNameProvider (line 36) | @DataProvider(name = "distribution-provider")
method setupDistributions (line 45) | @BeforeClass
method cleanUp (line 54) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/BallerinaCommandTest.java
class BallerinaCommandTest (line 34) | public class BallerinaCommandTest {
method setupDistributions (line 43) | @BeforeClass
method testVersionCommand (line 49) | @Test(description = "Execute smoke testing to verify installation.")
method testBuildCommand (line 54) | @Test(description = "Execute smoke testing to verify build command.", ...
method testDistCommands (line 67) | @Test(description = "Execute smoke testing to verify dist commands.", ...
method cleanUp (line 131) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/DistributionArtifactCheckTest.java
class DistributionArtifactCheckTest (line 38) | public class DistributionArtifactCheckTest {
method setupDistributions (line 41) | @BeforeClass
method c2cExistsTest (line 47) | @Test()
method c2cToolingExistsTest (line 78) | @Test()
method cleanUp (line 90) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/GraphqlToolTest.java
class GraphqlToolTest (line 36) | public class GraphqlToolTest {
method setupDistributions (line 38) | @BeforeClass
method testGraphqlClientGenerationUsingEndpoint (line 44) | @Test(description = "Check GraphQL client generation")
method testGraphqlClientGenerationUsingSchemaFile (line 60) | @Test(description = "Check GraphQL client generation")
method testGraphqlSchemaGeneration (line 76) | @Test(description = "Check GraphQL schema generation")
method testGraphqlSchemaGenerationWithServicePathFlag (line 89) | @Test(description = "Check GraphQL schema generation")
method testGraphqlServiceGeneration (line 104) | @Test(description = "Check GraphQL service generation")
method testGraphqlServiceGenerationWithRecordFlag (line 118) | @Test(description = "Check GraphQL service generation")
method cleanUp (line 133) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/GrpcToolingTest.java
class GrpcToolingTest (line 42) | public class GrpcToolingTest {
method setupDistributions (line 46) | @BeforeClass
method grpcCommandWithoutInputOptionTest (line 52) | @Test
method grpcCommandWithoutInputValueTest (line 62) | @Test
method grpcCommandWithValidInputTest (line 73) | @Test
method grpcHelpCommandTest (line 91) | @Test
method grpcHCommandTest (line 101) | @Test
method readOutputFromStreamAsString (line 111) | private String readOutputFromStreamAsString(InputStream result) throws...
method cleanUp (line 121) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/OpenAPIArtifactBuildTest.java
class OpenAPIArtifactBuildTest (line 46) | public class OpenAPIArtifactBuildTest {
method setupDistributions (line 48) | @BeforeClass
method buildOpenAPIToBallerinaTest (line 54) | @Test(description = "Check openapi to ballerina generator command")
method buildOpenAPIToBallerinaServiceFileGenerationTest (line 68) | @Test(description = "Check openapi to ballerina generator command with...
method buildOpenAPIToBallerinaWithFilterTagsTest (line 84) | @Test(description = "Check openapi to ballerina generator command for ...
method buildOpenAPIToBallerinaClientGenerationTests (line 121) | @Test(description = "Check openapi to ballerina client generator comma...
method buildBallerinaToOpenAPITest (line 158) | @Test(description = "Check ballerina to openapi generator command")
method buildOpenAPIValidatorOffTest (line 172) | @Test(description = "Test for openapi validator off")
method buildOpenAPIValidatorONTest (line 197) | @Test(description = "Tests for openapi validator on")
method cleanUp (line 222) | @AfterClass
method replaceContractPath (line 228) | public String replaceContractPath(Stream<String> expectedServiceLines,...
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/OpenAPIDistributionArtifactCheck.java
class OpenAPIDistributionArtifactCheck (line 39) | public class OpenAPIDistributionArtifactCheck {
method setupDistributions (line 44) | @BeforeClass
method openapiAnnotationExistsTest (line 50) | @Test
method cleanUp (line 103) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/test/PlatformDistributionArtifactCheckTest.java
class PlatformDistributionArtifactCheckTest (line 38) | public class PlatformDistributionArtifactCheckTest {
method distributionNameProvider (line 42) | @DataProvider(name = "distribution-provider")
method setupDistributions (line 52) | @BeforeClass
method c2cExistsTest (line 61) | @Test(dataProvider = "distribution-provider", enabled = false)
method c2cToolingExistsTest (line 97) | @Test(dataProvider = "distribution-provider")
method cleanUp (line 113) | @AfterClass
FILE: ballerina-test/src/test/java/org/ballerinalang/distribution/utils/TestUtils.java
class TestUtils (line 49) | public class TestUtils {
method logOutput (line 74) | private static void logOutput(InputStream inputStream) throws IOExcept...
method executeBuild (line 90) | public static boolean executeBuild(String distributionName, Path sourc...
method executeOpenapiBuild (line 117) | public static InputStream executeOpenapiBuild(String distributionName,...
method executeGrpcCommand (line 134) | public static InputStream executeGrpcCommand(String distributionName, ...
method executeOpenAPI (line 153) | public static boolean executeOpenAPI(String distributionName, Path sou...
method executeGraphql (line 173) | public static boolean executeGraphql(String distributionName, Path sou...
method getProcessBuilderResults (line 192) | public static Process getProcessBuilderResults(String distributionName...
method prepareDistribution (line 213) | public static void prepareDistribution(Path distributionZipPath) throw...
method cleanDistribution (line 224) | public static void cleanDistribution() throws IOException {
method getResource (line 234) | public static Path getResource(Path resource) {
method findFileOrDirectory (line 246) | public static String findFileOrDirectory(Path dir, String dirName) {
method deleteGeneratedFiles (line 257) | public static void deleteGeneratedFiles(String generatedFileName, Stri...
method executeCommand (line 284) | public static String executeCommand(String command) throws IOException {
method getUserHome (line 318) | public static String getUserHome() {
method testInstallation (line 335) | public static void testInstallation(String path, String jBallerinaVers...
method getVersionOutput (line 350) | public static String getVersionOutput(String jBallerinaVersion, String...
method isOldToolVersion (line 369) | public static boolean isOldToolVersion(String toolVersion) {
method isSupportedRelease (line 378) | public static boolean isSupportedRelease(String version) {
method getContent (line 393) | public static String getContent(Path filePath) throws IOException {
method getStringFromGivenBalFile (line 397) | public static String getStringFromGivenBalFile(Path expectedServiceFil...
FILE: build-time-tests/src/main/java/org/ballerina/packages/buildtime/GenerateBuildDataCsv.java
class GenerateBuildDataCsv (line 43) | public class GenerateBuildDataCsv {
method main (line 44) | public static void main(String[] args) throws IOException {
method getJsonFiles (line 76) | private static List<Path> getJsonFiles(Path artefactsDir) throws IOExc...
FILE: cache-generator/src/main/java/io/ballerina/gencache/cmd/GenCacheCmd.java
class GenCacheCmd (line 32) | @CommandLine.Command(
method GenCacheCmd (line 49) | public GenCacheCmd() {
method execute (line 55) | @Override
method getName (line 99) | @Override
method printLongDesc (line 104) | @Override
method printUsage (line 115) | @Override
method setParentCmdParser (line 120) | @Override
method exitError (line 124) | private void exitError(boolean exitWhenFinish) {
FILE: devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/BaseTestCase.java
class BaseTestCase (line 32) | public class BaseTestCase {
method initialize (line 34) | @BeforeSuite(alwaysRun = true)
method destroy (line 41) | @AfterSuite(alwaysRun = true)
FILE: devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ExpressionEvaluationTest.java
class ExpressionEvaluationTest (line 36) | public class ExpressionEvaluationTest extends BaseTestCase {
method setup (line 41) | @BeforeClass
method testRemoteCallEvaluation (line 46) | @Test(description = "Test Ballerina standard library related remote me...
method testObjectMethodEvaluation (line 52) | @Test(description = "Test Ballerina standard library related object me...
method cleanUp (line 60) | @AfterClass(alwaysRun = true)
method prepareForEvaluation (line 66) | protected void prepareForEvaluation() throws BallerinaTestException {
FILE: devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ModuleBreakpointTest.java
class ModuleBreakpointTest (line 36) | public class ModuleBreakpointTest extends BaseTestCase {
method setup (line 40) | @BeforeClass
method testMultipleBreakpointsInSameFile (line 47) | @Test
method cleanUp (line 66) | @AfterMethod(alwaysRun = true)
FILE: devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ServiceDebugTest.java
class ServiceDebugTest (line 39) | public class ServiceDebugTest extends BaseTestCase {
method setup (line 43) | @BeforeClass
method testModuleServiceDebugScenarios (line 50) | @Test(description = "Test for service module debug engage")
method serviceCallStackDebugTest (line 75) | @Test(description = "Test for service call stack representation")
method testSingleBalFileServiceDebugScenarios (line 89) | @Test(description = "Test for single bal file debug engage")
method cleanUp (line 102) | @AfterMethod(alwaysRun = true)
FILE: dist-repo-builder/src/main/java/io/ballerina/dist/DistRepoBuilder.java
class DistRepoBuilder (line 43) | public class DistRepoBuilder {
method main (line 51) | public static void main(String args[]) throws Exception {
method getExistingDocs (line 86) | private static List<Path> getExistingDocs(Path jBalToolsDocPath) throw...
method generateDocsFromBala (line 110) | private static void generateDocsFromBala(Path balaPath, Path jBalTools...
method validateCache (line 124) | private static boolean validateCache(Path bala, Path repo) {
method findBalas (line 147) | static List<Path> findBalas(Path repo) throws IOException {
method getJarName (line 169) | private static String getJarName(String orgName, String moduleName, St...
method setFilePermission (line 173) | private static void setFilePermission(Path filepath) {
method isWindows (line 179) | private static boolean isWindows() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/Editor.java
class Editor (line 34) | public class Editor {
method Editor (line 44) | private Editor(BallerinaLanguageServer languageServer, Endpoint endpoi...
method open (line 54) | public static Editor open() {
method openFile (line 64) | public EditorTab openFile(Path filePath) {
method closeFile (line 87) | public void closeFile(Path filePath) {
method closeTab (line 100) | public void closeTab(EditorTab tab) {
method close (line 107) | public void close() {
method activeTab (line 112) | public EditorTab activeTab() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/EditorOutputStream.java
class EditorOutputStream (line 34) | class EditorOutputStream extends ByteArrayOutputStream {
method flush (line 47) | @Override
method process (line 64) | void process(String message) {
method setEditor (line 95) | public void setEditor(Editor editor) {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/EditorSimulator.java
class EditorSimulator (line 45) | public class EditorSimulator {
method main (line 54) | public static void main(String[] args) throws IOException {
method run (line 63) | public static void run() throws IOException {
method getRandomGenerator (line 170) | public static Generators.Type getRandomGenerator() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/EditorTab.java
class EditorTab (line 53) | public class EditorTab {
method EditorTab (line 67) | public EditorTab(Path filePath, Endpoint endpoint, BallerinaLanguageSe...
method type (line 89) | public void type(String content) {
method isDocumentNotInSync (line 151) | private boolean isDocumentNotInSync() {
method completions (line 165) | public void completions() {
method codeActions (line 187) | public void codeActions() {
method cursor (line 193) | public void cursor(int line, int offset) {
method cursor (line 197) | public Position cursor() {
method syntaxTree (line 201) | public SyntaxTree syntaxTree() {
method textDocument (line 205) | public TextDocument textDocument() {
method filePath (line 209) | public Path filePath() {
method close (line 213) | public void close() {
method toString (line 218) | @Override
method equals (line 226) | @Override
method hashCode (line 238) | @Override
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/ClassGenerator.java
class ClassGenerator (line 28) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 31) | @Override
method type (line 36) | @Override
method generateRandomClass (line 41) | private String generateRandomClass() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/CodeSnippetGenerator.java
class CodeSnippetGenerator (line 26) | public abstract class CodeSnippetGenerator {
method generate (line 31) | public abstract String generate();
method type (line 33) | public abstract Generators.Type type();
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/FunctionGenerator.java
class FunctionGenerator (line 25) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 28) | @Override
method type (line 33) | @Override
method generateRandomFunction (line 38) | public String generateRandomFunction() {
method generateRandomFunction (line 44) | public String generateRandomFunction(String name, String returnType) {
method getRandomFunctionBody (line 50) | public String getRandomFunctionBody(String returnType) {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/Generators.java
class Generators (line 32) | public class Generators {
method Generators (line 39) | private Generators() {
method generate (line 64) | public static String generate(Type type) {
method getGenerator (line 72) | public static <T> T getGenerator(Type type) {
method getInstance (line 76) | public static Generators getInstance() {
type Type (line 83) | public enum Type {
method Type (line 95) | Type(boolean topLevelNode) {
method isTopLevelNode (line 99) | public boolean isTopLevelNode() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/ImportStatementGenerator.java
class ImportStatementGenerator (line 34) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 39) | @Override
method type (line 63) | @Override
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/MatchStatementGenerator.java
class MatchStatementGenerator (line 25) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 33) | @Override
method type (line 45) | @Override
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/ServiceGenerator.java
class ServiceGenerator (line 25) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 28) | @Override
method type (line 33) | @Override
method generateRandomService (line 38) | public String generateRandomService() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/StatementGenerator.java
class StatementGenerator (line 25) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 28) | @Override
method type (line 33) | @Override
method getRandomStatement (line 38) | public String getRandomStatement() {
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/TypeDefinitionGenerator.java
class TypeDefinitionGenerator (line 30) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 36) | @Override
method generateRecordType (line 49) | public String generateRecordType() {
method generateUnionType (line 69) | public String generateUnionType() {
method generateObjectTypeDef (line 90) | public String generateObjectTypeDef() {
method type (line 99) | @Override
FILE: language-server-simulator/src/main/java/org/ballerinalang/langserver/simulator/generators/VarDeclarationStatementGenerator.java
class VarDeclarationStatementGenerator (line 25) | @JavaSPIService("org.ballerinalang.langserver.org.ballerinalang.langserv...
method generate (line 30) | public String generate() {
method type (line 36) | @Override
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/BalToolTest.java
class BalToolTest (line 73) | public class BalToolTest {
method setUp (line 93) | @BeforeClass()
method setupPullTests (line 105) | @BeforeGroups(value = "pull")
method testPullToolWithoutVersion (line 121) | @Test(description = "Pull a tool without specifying a version", groups...
method testPullToolAgainWithoutVersion (line 165) | @Test(description = "Pull a tool again without specifying a version",
method testPullToolWithASpecificVersion (line 211) | @Test(description = "Pull a tool with a specific version",
method testPullToolAgainWithASpecificVersion (line 259) | @Test(description = "Pull a tool again with a specific version",
method testPullToolWithANonExistingVersion (line 307) | @Test(description = "Pull a tool with a non existing version",
method testPullAToolVersionWithIncompatibleDistribution (line 344) | @Test(description = "Pull a tool version with incompatible distribution",
method setupRemoveTests (line 366) | @BeforeGroups(value = "remove")
method testRemoveANonExistingTool (line 392) | @Test(description = "Remove a non existing tool", groups = {"remove"})
method testRemoveANonExistingVersionOfATool (line 415) | @Test(description = "Remove a non existing version of a tool", groups ...
method testRemoveToolVersionWithIncompatibleDistribution (line 438) | @Test(description = "Remove a tool version with incompatible distribut...
method testRemoveToolActiveVersion (line 459) | @Test(description = "Remove a tool version with incompatible distribut...
method testRemoveASpecificToolVersion (line 486) | @Test(description = "Remove a specific tool version",
method testRemoveAllToolVersions (line 543) | @Test(description = "Remove all tool versions", dependsOnMethods = {"t...
method setupUpdateTests (line 592) | @BeforeGroups(value = "update")
method testUpdateNonExistingTool (line 607) | @Test(description = "Update a non-existing tool", groups = {"update"})
method testUpdateToolWithNewPatchAndMinor (line 635) | @Test(description = "Update a tool with new patch and minor versions",...
method testUpdateToolWithNoNewVersions (line 688) | @Test(description = "Update a tool with no new versions",
method setupUseTests (line 734) | @BeforeGroups(value = "use")
method testUseNewToolVersion (line 759) | @Test(description = "Use a newer tool version", groups = {"use"})
method testUseOldToolVersion (line 785) | @Test(description = "Use a newer tool version", dependsOnMethods = {"t...
method testUseCurrentlyActiveToolVersion (line 811) | @Test(description = "Use the currently active tool version",
method testUseNonExistentToolVersion (line 838) | @Test(description = "Use a non existent tool version", dependsOnMethod...
method testUseToolVersionWithIncompatibleDistribution (line 860) | @Test(description = "Use a tool version built with incompatible distri...
method testListToolsWhenNoToolsInstalled (line 882) | @Test(description = "List all tools when there are no tools", groups =...
method testListToolsWithMultipleToolVersions (line 905) | @Test(description = "List all tools when there are multiple versions o...
method testSearchAToolWithId (line 934) | @Test(description = "Search a tool with tool id", groups = {"list"})
method setupExecuteToolTests (line 952) | @BeforeGroups(value = "execute_tool")
method testExecuteGeneralHelpWithToolInstalled (line 966) | @Test(description = "Execute bal help with the tool installed", groups...
method testExecuteToolSpecificHelpWithToolInstalled (line 983) | @Test(description = "Execute bal help disttest with the tool installed...
method testExecuteTool (line 1001) | @Test(description = "Execute disstest tool", groups = {"execute_tool"})
method setToolEnvironmentsForSubCommands (line 1018) | private Map<ToolSubCommand, BalToolTest.ToolEnvironment> setToolEnviro...
method getToolEnvironment (line 1030) | private BalToolTest.ToolEnvironment getToolEnvironment(ToolSubCommand ...
method copyTestResourcesToTempWorkspace (line 1040) | private void copyTestResourcesToTempWorkspace() {
method pushToolPackages (line 1051) | private void pushToolPackages(Map<String, String> envVariables) throws...
method getBalaPath (line 1076) | private Optional<Path> getBalaPath(Path packagePath, String version) {
method updateBallerinaVersionOfBala (line 1089) | private void updateBallerinaVersionOfBala(Path balaFilePath, String ba...
method unzipBalaFile (line 1100) | private void unzipBalaFile(Path balaFilePath, Path destDir) throws IOE...
method newFile (line 1125) | private File newFile(File destinationDir, ZipEntry zipEntry) throws IO...
method updatePackageJsonBallerinaVersion (line 1135) | private void updatePackageJsonBallerinaVersion(Path packagePath, Strin...
method zipBalaFile (line 1147) | private void zipBalaFile(Path sourceDirPath, Path zipFilePath) throws ...
method readExpectedCmdOutsAsString (line 1166) | private String readExpectedCmdOutsAsString(String outputFileName) {
method executeHelpFlagOfTool (line 1176) | private Pair<String, String> executeHelpFlagOfTool(String toolId, Map<...
class ToolEnvironment (line 1185) | static class ToolEnvironment {
method ToolEnvironment (line 1191) | public ToolEnvironment(ToolSubCommand subCommand, Map<String, String...
type ToolSubCommand (line 1201) | enum ToolSubCommand {
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/BuildTimeTest.java
class BuildTimeTest (line 53) | public class BuildTimeTest {
method setup (line 60) | @BeforeClass
method testResolutionTimeReduction (line 78) | @Test(enabled = false,
method testCodeGenOfflineResolution (line 91) | @Test(description = "Verify the offline resolution during code generat...
method addEnvVariables (line 108) | private Map<String, String> addEnvVariables(Map<String, String> envVar...
method getPackageResolutionTime (line 122) | private long getPackageResolutionTime(String projectName) throws IOExc...
method getPackageBuildTime (line 153) | private long getPackageBuildTime(String projectName) throws IOExceptio...
method cleanup (line 175) | @AfterClass
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/CentralNegativeTest.java
class CentralNegativeTest (line 59) | public class CentralNegativeTest {
method setUp (line 75) | @BeforeClass()
method testPushPackageWithInvalidAccessToken (line 105) | @Test(description = "Build and push package with invalid access token"...
method cleanup (line 139) | @AfterClass
method addEnvVariablesWithInvalidAccessToken (line 145) | private Map<String, String> addEnvVariablesWithInvalidAccessToken(Map<...
method setupDistributions (line 155) | private void setupDistributions() throws IOException {
method isPkgAvailableInCentral (line 166) | private boolean isPkgAvailableInCentral(String pkg) throws IOException...
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/CentralTest.java
class CentralTest (line 69) | public class CentralTest {
method setUp (line 94) | @BeforeClass()
method testBuildPackageA (line 163) | @Test(description = "Build package A with a native lib dependency")
method testPushPackageA (line 183) | @Test(description = "Push package A to central", dependsOnMethods = "t...
method testBuildPackageB (line 198) | @Test(description = "Build package B which has java21 platform depende...
method testBuildPackageC (line 218) | @Test(description = "Build package C which depends on Package A and B",
method testPushPackageB (line 238) | @Test(description = "Push package B to central", dependsOnMethods = "t...
method testBuildPackageCAgain (line 253) | @Test(description = "Build package C after pushing Package B", depends...
method testPushPackageC (line 274) | @Test(description = "Push package C to central", dependsOnMethods = "t...
method testBuildSnapshotPackage (line 289) | @Test(description = "Build package with pre-release version")
method testPushSnapshotPackage (line 314) | @Test(description = "Push package with pre-release version to central",
method testPullSnapshotPackage (line 334) | @Test(description = "Pull package with pre-release version from central",
method testBuildPackageE (line 355) | @Test(description = "Build package E")
method testPushPackageE (line 373) | @Test(description = "Push package E to the central", dependsOnMethods ...
method testBuildPackageF (line 387) | @Test(description = "Build package F", dependsOnMethods = "testPushPac...
method testPushPackageF (line 405) | @Test(description = "Push package F to the central", dependsOnMethods ...
method testBuildPackageG (line 419) | @Test(description = "Build package G", dependsOnMethods = "testPushPac...
method testPushPackageG (line 437) | @Test(description = "Push package G", dependsOnMethods = "testBuildPac...
method testPullPackageG (line 451) | @Test(description = "Pull package G from central. Should pull both E, ...
method cleanup (line 485) | @AfterClass
class Copy (line 494) | static class Copy extends SimpleFileVisitor<Path> {
method Copy (line 499) | Copy(Path fromPath, Path toPath, StandardCopyOption copyOption) {
method Copy (line 505) | Copy(Path fromPath, Path toPath) {
method preVisitDirectory (line 509) | @Override
method visitFile (line 519) | @Override
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/CentralTestUtils.java
class CentralTestUtils (line 55) | public class CentralTestUtils {
method CentralTestUtils (line 57) | private CentralTestUtils() {
method randomPackageName (line 84) | static String randomPackageName(int count) {
method createSettingToml (line 101) | static void createSettingToml(Path dirPath) throws IOException {
method getDevToken (line 112) | private static String getDevToken() {
method getProdToken (line 122) | private static String getProdToken() {
method getBallerinaBotWorkflow (line 131) | public static String getBallerinaBotWorkflow() {
method getEnvVariables (line 140) | static Map<String, String> getEnvVariables() {
method updateFileToken (line 155) | static void updateFileToken(Path filePath, String guessToken, String a...
method getString (line 170) | static String getString(InputStream outputs) throws IOException {
method deleteFiles (line 185) | static void deleteFiles(Path dirPath) throws IOException {
method getGenerateBalaLog (line 207) | static String getGenerateBalaLog(String org, String pkgName, String pl...
method getPushedToCentralLog (line 219) | static String getPushedToCentralLog(String orgName, String pkgName, St...
method getPushedToCentralLog (line 230) | static String getPushedToCentralLog(String orgName, String pkgName) {
method getExecutableJarPath (line 241) | static Path getExecutableJarPath(Path projectPath, String pkgName) {
method getBalaPath (line 255) | static Path getBalaPath(Path projectPath, String org, String pkgName, ...
method isPkgAvailableInCentral (line 270) | static boolean isPkgAvailableInCentral(String pkg, Path tempWorkspaceD...
method isToolAvailableInCentral (line 286) | static boolean isToolAvailableInCentral(String toolId, Path tempWorksp...
method isPkgVersionAvailableInCentral (line 303) | static boolean isPkgVersionAvailableInCentral(String pkg, Path tempWor...
method searchPackageDetails (line 320) | private static String searchPackageDetails(String pkg, Path tempWorksp...
method searchToolDetails (line 343) | private static String searchToolDetails(String toolId, Path tempWorksp...
method buildPackageBala (line 369) | static void buildPackageBala(Path tempWorkspaceDirectory, Map<String, ...
method testPushPackage (line 403) | static void testPushPackage(Path tempWorkspaceDirectory, String projec...
method testPushPackageToLocal (line 430) | static void testPushPackageToLocal(Path tempWorkspaceDirectory, String...
method testPushPackageUsingBalaPath (line 458) | public static void testPushPackageUsingBalaPath(Path tempWorkspaceDire...
method deleteBalaOfPackage (line 474) | public static void deleteBalaOfPackage(String orgName, String packageN...
method getFileListByExtension (line 482) | public static List<Path> getFileListByExtension(Path filesDirectory, S...
method replacePackageName (line 491) | public static void replacePackageName(List<Path> filesToChange, String...
method getNewDirectoryName (line 511) | public static String getNewDirectoryName(String currentPackageName, St...
method replaceRandomPackageName (line 517) | public static void replaceRandomPackageName(Path tempWorkspaceDirector...
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/DistributionCompatibilityTest.java
class DistributionCompatibilityTest (line 66) | public class DistributionCompatibilityTest {
method setUp (line 76) | @BeforeClass()
method replaceContainingDir (line 130) | private void replaceContainingDir(String packageName, String updatedPa...
method testDependencyResolutionWithSameDist (line 138) | @Test(description = "Verify dependency resolution with a dependency bu...
method testDependencyResolutionBackwardCompatibility (line 149) | @Test(description = "Verify dependency resolution with a dependency bu...
method testDependencyResolutionForwardCompatibility (line 160) | @Test(description = "Verify dependency resolution with a dependency bu...
method testWithMultipleDistDependencyVersions (line 165) | @Test(description = "Verify dependency resolution with multiple depend...
method buildPackage (line 188) | private void buildPackage(String packageName, LinkedList args) throws ...
method pushToCentral (line 202) | private void pushToCentral(String packageName, String version) throws ...
method verifyUpdatedDependencies (line 214) | private void verifyUpdatedDependencies(String packageName, String depe...
method verifyBuildPackage (line 220) | private void verifyBuildPackage(String packageName, String dependencyP...
method modifyBala (line 235) | private void modifyBala(String packageName, String updatedPackageName)...
method createBala (line 304) | private void createBala(List<File> listFiles, String destZipFile) thro...
method zipFile (line 318) | private void zipFile(File file, ZipOutputStream out)
method zipDirectory (line 333) | private void zipDirectory(File folder, String parentFolder,
method cleanup (line 354) | @AfterClass
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/HierarchicalPackagesTest.java
class HierarchicalPackagesTest (line 77) | public class HierarchicalPackagesTest {
method setUp (line 89) | @BeforeClass()
method pushToCentral (line 169) | private void pushToCentral(String packageName, String version) throws ...
method pushUpdatedVersion (line 181) | private void pushUpdatedVersion(List<String> previousVersions, int i, ...
method testConsecutiveBuilds (line 198) | @Test(description = "Verify build package behaviour for hierarchical p...
method testUpdatedVersionInRemote (line 208) | @Test(description = "Verify build package behaviour when there is an u...
method testUpdatedPackage (line 221) | @Test(description = "When a new module is added and published to remot...
method testTwoPossiblePackages (line 252) | @Test(description = "Verify whether the correct packages are picked wh...
method testPackageFromLocal (line 269) | @Test(description = "Verify build package behaviour if hierarchical pa...
method testUpdateTransitiveDependency (line 292) | @Test(description = "Verify build package behaviour when there is an u...
method pushPreRequisites (line 323) | private void pushPreRequisites(String transitivePackagePrefix, String ...
method copyProject (line 341) | private void copyProject(String packagePrefix, String packageName) thr...
method testTwoPossibleTransitiveDependencies (line 351) | @Test(description = "Verify build package behaviour when there is dire...
method testUpdateToPreReleaseVersionInRemote (line 369) | @Test(description = "Verify build package behaviour when there is an u...
method buildPackage (line 379) | private void buildPackage(String packageName, LinkedList args) throws ...
method verifyUpdatedDependencies (line 393) | private void verifyUpdatedDependencies(String packageName, String depe...
method addNewModule (line 399) | private void addNewModule(String packageName, String newModule, String...
method updateBallerinaToml (line 410) | private void updateBallerinaToml(String packageName, String previousVe...
method addExports (line 425) | private void addExports(String packageName, String[] moduleNames) thro...
method updateImports (line 437) | private void updateImports(String packageName, String s, String fileNa...
method getDependencyUpdate (line 447) | private String getDependencyUpdate(String orgName, String packageName,...
method replaceDependenciesTomlVersion (line 452) | private void replaceDependenciesTomlVersion(Path projectPath) throws I...
method cleanup (line 470) | @AfterClass
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/MavenCustomRepoTest.java
class MavenCustomRepoTest (line 61) | public class MavenCustomRepoTest {
method setUp (line 73) | @BeforeClass()
method testPushBalaGithub (line 104) | @Test(description = "Push package to Github packages", enabled = false)
method testPullBalaGithub (line 139) | @Test(description = "Pull package from Github packages", dependsOnMeth...
method testBuildBalaGithubOffline (line 160) | @Test(description = "Build a package offline using a module from Githu...
method testBuildBalaGithubOnline (line 172) | @Test(description = "Build a package Online using a module from Github...
method publishBalaPackagesBeforeTests (line 192) | private void publishBalaPackagesBeforeTests() throws IOException, Inte...
method testCase1_buildMyProject_assertDependenciesToml (line 215) | @Test(description = "Build a package with multiple dependencies from G...
method beforeGroupTestCase2 (line 249) | @BeforeGroups("testCase2")
method testCase2_publishAdditionalVersionsForDeps (line 263) | @Test(description = "Push more packages to Github to test locking mode...
method testCase2_1_softLockingMode_resolvesLatestCompatible (line 307) | @Test(description = "Build package with soft locking mode",
method testCase2_2_mediumLockingMode_resolvesConservative (line 353) | @Test(description = "Build package with medium locking mode",
method testCase2_3_hardLockingMode_enforcesExact (line 401) | @Test(description = "Build package with hard locking mode",
method testCase2_4_lockedMode_usesLockedVersions (line 451) | @Test(description = "Build package with locked mode", dependsOnMethods...
method testCase3_backwardCompatibility_legacyBallerinaToml (line 484) | @Test(description = "Build package with backwards compatibility", depe...
method pinPkg1AndPkg2To100 (line 524) | private void pinPkg1AndPkg2To100() throws IOException, InterruptedExce...
method beforeGroupTestCase4 (line 556) | @BeforeGroups("testCase4")
method testCase4_1_addDep3_softLocking (line 561) | @Test(description = "Test case 4.1: Add dep3 and build with SOFT locki...
method testCase4_2_addDep3_mediumLocking (line 592) | @Test(description = "Test case 4.2: Add dep3 and build with MEDIUM (de...
method testCase4_3_addDep3_hardLocking (line 636) | @Test(description = "Test case 4.3: Add dep3 and build with HARD locki...
method testCase4_4_addDep3_lockedLocking (line 679) | @Test(description = "Test case 4.4: Add dep3 and build with LOCKED loc...
method testCase5_addVersionInBallerinaToml_buildSucceeds (line 724) | @Test(description = "Add a new version for an existing dependency and ...
method testCase5_addIncompatibleVersion_buildFails (line 753) | @Test(description = "Add an incompatible version for an existing depen...
method cleanup (line 787) | @AfterClass(alwaysRun = true)
class Copy (line 802) | static class Copy extends SimpleFileVisitor<Path> {
method Copy (line 807) | Copy(Path fromPath, Path toPath, StandardCopyOption copyOption) {
method Copy (line 813) | Copy(Path fromPath, Path toPath) {
method preVisitDirectory (line 817) | @Override
method visitFile (line 827) | @Override
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/MavenCustomRepoTestUtils.java
class MavenCustomRepoTestUtils (line 52) | public class MavenCustomRepoTestUtils {
method createSettingToml (line 59) | static void createSettingToml(Path dirPath) throws IOException {
method getGithubToken (line 74) | private static String getGithubToken() {
method getEnvVariables (line 83) | static Map<String, String> getEnvVariables() {
method getString (line 97) | static String getString(InputStream outputs) throws IOException {
method deleteFiles (line 113) | static void deleteFiles(Path dirPath, boolean deleteDirContentOnly) th...
method deleteArtifacts (line 128) | static void deleteArtifacts(String org, String packagename) throws IOE...
method packTrigger (line 150) | static Process packTrigger(String packageName, Path sourceDirectory, M...
method pushTrigger (line 173) | static Process pushTrigger(String packageName, Path sourceDirectory, M...
method editVersionBallerinaToml (line 197) | static void editVersionBallerinaToml(Path sourceDirectory, String vers...
method updateVersionForPackage (line 249) | static boolean updateVersionForPackage(Path sourceDirectory, String pa...
method getPackageVersionFromDependencies (line 291) | static Optional<String> getPackageVersionFromDependencies(Path depende...
method ensureLegacyDependency (line 313) | public static void ensureLegacyDependency(Path projectDir, String org,...
method pasteStaticMainBalWithPkg1AndPkg2 (line 365) | public static void pasteStaticMainBalWithPkg1AndPkg2(Path projectDir) ...
method pasteStaticMainBalWithAllPkgs (line 400) | public static void pasteStaticMainBalWithAllPkgs(Path projectDir) thro...
FILE: project-api-tests/src/test/java/org/ballerina/projectapi/TestUtils.java
class TestUtils (line 39) | public class TestUtils {
method TestUtils (line 41) | private TestUtils() {
method executeCommand (line 63) | public static Process executeCommand(String command, String distributi...
method executeBuildCommand (line 92) | public static Process executeBuildCommand(String distributionName, Pat...
method executePackCommand (line 97) | public static Process executePackCommand(String distributionName, Path...
method executePushCommand (line 102) | public static Process executePushCommand(String distributionName, Path...
method executePullCommand (line 107) | public static Process executePullCommand(String distributionName, Path...
method executeSearchCommand (line 112) | public static Process executeSearchCommand(String distributionName, Pa...
method executeToolCommand (line 117) | public static Process executeToolCommand(String distributionName, Path...
method executeHelpCommand (line 122) | public static Process executeHelpCommand(String distributionName, Path...
method executeCleanCommand (line 127) | public static Process executeCleanCommand(String distributionName, Pat...
method executeNewCommand (line 132) | public static Process executeNewCommand(String distributionName, Path ...
method setupDistributions (line 143) | static void setupDistributions() throws IOException {
method prepareDistribution (line 154) | public static void prepareDistribution(Path distributionZipPath) throw...
method cleanDistribution (line 165) | public static void cleanDistribution() throws IOException {
method addEnvVariables (line 174) | static Map<String, String> addEnvVariables(Map<String, String> envVari...
FILE: project-api-tests/src/test/resources/bal-tool/DistTestCommand/src/main/java/disttest/cli/DistTestCommand.java
class DistTestCommand (line 14) | @CommandLine.Command(name = "disttest", description = "The tool implemen...
method DistTestCommand (line 24) | public DistTestCommand() {
method DistTestCommand (line 28) | public DistTestCommand(PrintStream printStream) {
method execute (line 32) | @Override
method getName (line 47) | @Override
method printLongDesc (line 52) | @Override
method printUsage (line 57) | @Override
method setParentCmdParser (line 62) | @Override
method appendHelpText (line 66) | private void appendHelpText(StringBuilder out) {
Condensed preview — 3128 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,316K chars).
[
{
"path": ".gitattributes",
"chars": 46,
"preview": "# Ensure all Java files use LF.\n*.java eol=lf\n"
},
{
"path": ".github/CODEOWNERS",
"chars": 634,
"preview": "# This is a comment.\n# Each line is a file pattern followed by one or more owners.\n\n# See: https://help.github.com/artic"
},
{
"path": ".github/ISSUE_TEMPLATE/bug.yml",
"chars": 979,
"preview": "name: \"🐞 Report a Bug\"\ndescription: Create an issue if something does not work as expected.\nlabels: [\"Type/Bug\"]\nbody:\n "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 597,
"preview": "blank_issues_enabled: false\ncontact_links:\n- name: '📚 Documentation Issue'\n about: Request a new article, missing topic"
},
{
"path": ".github/ISSUE_TEMPLATE/improvement.yml",
"chars": 637,
"preview": "name: \"🚀 Improvement Request\"\ndescription: Suggest an improvement to the product.\nlabels: [\"Type/Improvement\"]\nbody:\n -"
},
{
"path": ".github/ISSUE_TEMPLATE/new-feature.yml",
"chars": 835,
"preview": "name: \"💡 New Feature Request\"\ndescription: Suggest new functionality and features for the product.\nlabels: [\"Type/NewFea"
},
{
"path": ".github/ISSUE_TEMPLATE/task.yml",
"chars": 428,
"preview": "name: \"✍️ Create a Task\"\ndescription: Create a new task.\nlabels: [\"Type/Task\"]\nbody:\n - type: textarea\n id: descript"
},
{
"path": ".github/workflows/add_reason_labels.yml",
"chars": 1675,
"preview": "on:\n issues:\n types: [closed]\njobs:\n check-resolution-label:\n runs-on: ubuntu-latest\n if:\n ${{ contains("
},
{
"path": ".github/workflows/bbe-on-demand.yml",
"chars": 2148,
"preview": "name: Run BBE On Demand\n\non:\n workflow_dispatch:\n inputs:\n branch:\n description: 'Branch to run BBE test"
},
{
"path": ".github/workflows/daily-build-2201.12.x.yml",
"chars": 20501,
"preview": "name: Daily build (2201.12.x)\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 2 * * *' # 07:30 in LK time (GMT+"
},
{
"path": ".github/workflows/daily-build-2201.13.x.yml",
"chars": 20501,
"preview": "name: Daily build (2201.13.x)\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 2 * * *' # 07:30 in LK time (GMT+"
},
{
"path": ".github/workflows/daily-build-editor.yml",
"chars": 7576,
"preview": "name: Daily build editor\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)"
},
{
"path": ".github/workflows/daily-build.yml",
"chars": 24237,
"preview": "name: Daily build\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 2 * * *' # 07:30 in LK time (GMT+5:30)\n\njobs:"
},
{
"path": ".github/workflows/fossa_scan.yml",
"chars": 441,
"preview": "name: Fossa Scan\non:\n workflow_dispatch:\n schedule:\n - cron: '30 18 * * *' # 00:00 in LK time (GMT+5:30)\njobs:\n "
},
{
"path": ".github/workflows/language_server_simulator_fhir.yml",
"chars": 2599,
"preview": "name: Language Server Simulator on FHIR\n\non:\n schedule:\n - cron: '0 */12 * * *'\n workflow_dispatch:\n\njobs:\n run_si"
},
{
"path": ".github/workflows/language_server_simulator_nballerina.yml",
"chars": 2611,
"preview": "name: Language Server Simulator on nBallerina\n\non:\n schedule:\n - cron: '0 */12 * * *'\n workflow_dispatch:\n\njobs:\n "
},
{
"path": ".github/workflows/main.yml",
"chars": 3087,
"preview": "name: Build \n\non:\n push:\n branches:\n - master\n - stage\n - ballerina-1.1.x\n workflow_dispatch:\n in"
},
{
"path": ".github/workflows/publish-release-artifacts-1.2.x.yml",
"chars": 5920,
"preview": "name: Publish Release Artifacts (1.2.x)\n\non:\n workflow_dispatch:\n inputs:\n release_version:\n description"
},
{
"path": ".github/workflows/publish-release-artifacts.yml",
"chars": 8444,
"preview": "name: Publish Release Artifacts\n\non:\n workflow_dispatch:\n inputs:\n release_version:\n description: 'Relea"
},
{
"path": ".github/workflows/publish-release.yml",
"chars": 50367,
"preview": "name: Publish release\n\non:\n workflow_dispatch:\n inputs:\n isPreRelease:\n description: \"Tag created is a p"
},
{
"path": ".github/workflows/publish_release_bi.yml",
"chars": 31350,
"preview": "name: Publish Release Kola Distribution\n\non:\n workflow_dispatch:\n schedule:\n - cron: '0 2 * * *' # 07:30 in LK "
},
{
"path": ".github/workflows/pull-request.yml",
"chars": 3364,
"preview": "name: Pull Request\n\non:\n pull_request:\n branches:\n - master\n - ballerina-1.1.x\n "
},
{
"path": ".github/workflows/sign-installers.yml",
"chars": 5351,
"preview": "name: Sign release artifacts\n\non:\n workflow_dispatch:\n inputs:\n versionName:\n description: 'Specify the "
},
{
"path": ".github/workflows/test-installers.yml",
"chars": 1653,
"preview": "name: Test Installers\n\non:\n workflow_dispatch:\n inputs:\n releaseVersion:\n description: 'Version of the r"
},
{
"path": ".github/workflows/trigger-bbe-generation.yml",
"chars": 837,
"preview": "name: Generate Ballerina By Examples\non:\n push:\n branches:\n - '2201.0.x'\n paths:\n "
},
{
"path": ".gitignore",
"chars": 775,
"preview": "*.class\n*.log\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.ear\n\n# virtual machine crash lo"
},
{
"path": ".trivyignore",
"chars": 66,
"preview": "# False positive\nCVE-2020-7768\n\n# Need to be fixed\nCVE-2025-48924\n"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 3885,
"preview": "# Ballerina Distribution\n\n[ 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n\nThis product includes software developed at W"
},
{
"path": "ballerina/LICENSE",
"chars": 49647,
"preview": "\nThis product is licensed by WSO2 LLC. under Apache License 2.0. The license\ncan be downloaded from the following locati"
},
{
"path": "ballerina/README",
"chars": 1302,
"preview": "Hello, I'm Ballerina.\n=====================\nBallerina is a general purpose, concurrent, and strongly typed programming l"
},
{
"path": "ballerina/build.gradle",
"chars": 67122,
"preview": "/*\n ~ * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache Lic"
},
{
"path": "ballerina/lib/run.bat",
"chars": 568,
"preview": "@echo off\r\n\r\nREM Change directory to provided path\r\ncd %1\r\n\r\nREM run ballerina file as background process\r\nSTART \"\" /b "
},
{
"path": "ballerina/lib/run.sh",
"chars": 523,
"preview": "#!/bin/bash\n\nkill_service() {\n case \"$(uname -s)\" in\n Darwin)\n kill $(lsof -ti:$1)\n ;;\n\n Linux)\n fuser -k $1"
},
{
"path": "ballerina/lib/version.txt",
"chars": 38,
"preview": "Ballerina Platform version: @version@\n"
},
{
"path": "ballerina-test/build.gradle",
"chars": 2959,
"preview": "/*\n ~ * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache "
},
{
"path": "ballerina-test/gradle.properties",
"chars": 60,
"preview": "filePath=/../examples\ndebug=true\nfileExtensions=.java, .bal\n"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/lengthValidation/LengthValidator.java",
"chars": 4948,
"preview": "/*\n ~ * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache "
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/lengthValidation/LineLengthExceededException.java",
"chars": 882,
"preview": "/*\n ~ * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache "
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/ArtifactBuildTest.java",
"chars": 1914,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/BallerinaCommandTest.java",
"chars": 7598,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/DistributionArtifactCheckTest.java",
"chars": 3175,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/GraphqlToolTest.java",
"chars": 6715,
"preview": "/*\n * Copyright (c) 2023, WSO2 LLC. (http://www.wso2.com) All Rights Reserved.\n *\n * WSO2 LLC. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/GrpcToolingTest.java",
"chars": 6746,
"preview": "/*\n * Copyright (c) 2022, WSO2 LLC. (http://www.wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/OpenAPIArtifactBuildTest.java",
"chars": 11109,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/OpenAPIDistributionArtifactCheck.java",
"chars": 4183,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/test/PlatformDistributionArtifactCheckTest.java",
"chars": 4384,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/java/org/ballerinalang/distribution/utils/TestUtils.java",
"chars": 17437,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "ballerina-test/src/test/resources/graphql/client-gen/project_1/graphql_endpoint.config.yaml",
"chars": 228,
"preview": "## The GraphQL schema. E.g., https://countries.trevorblades.com or ./schemas/country.graphql\nschema: https://countries.t"
},
{
"path": "ballerina-test/src/test/resources/graphql/client-gen/project_1/query_country.graphql",
"chars": 82,
"preview": "query countryByCode($code: ID!) {\n country(code: $code) {\n name\n }\n}\n"
},
{
"path": "ballerina-test/src/test/resources/graphql/client-gen/project_2/graphql_schema.config.yaml",
"chars": 226,
"preview": "## The GraphQL schema. E.g., https://countries.trevorblades.com or ./schemas/country.graphql\nschema: ./schema_country.gr"
},
{
"path": "ballerina-test/src/test/resources/graphql/client-gen/project_2/queries/query_country.graphql",
"chars": 82,
"preview": "query countryByCode($code: ID!) {\n country(code: $code) {\n name\n }\n}\n"
},
{
"path": "ballerina-test/src/test/resources/graphql/client-gen/project_2/schema_country.graphql",
"chars": 2250,
"preview": "schema {\n query: Query\n}\n\n\"Directs the executor to include this field or fragment only when the `if` argument is true"
},
{
"path": "ballerina-test/src/test/resources/graphql/schema-gen/project_1/Ballerina.toml",
"chars": 89,
"preview": "[package]\norg = \"ballerina_sdl_file_generator_test\"\nname = \"project_1\"\nversion = \"0.1.0\"\n"
},
{
"path": "ballerina-test/src/test/resources/graphql/schema-gen/project_1/main.bal",
"chars": 1410,
"preview": "// Copyright (c) 2023 WSO2 LLC. (http://www.wso2.org). All Rights Reserved.\n//\n// WSO2 LLC. licenses this file to you un"
},
{
"path": "ballerina-test/src/test/resources/graphql/schema-gen/service.bal",
"chars": 5109,
"preview": "// Copyright (c) 2023 WSO2 LLC. (http://www.wso2.org). All Rights Reserved.\n//\n// WSO2 LLC. licenses this file to you un"
},
{
"path": "ballerina-test/src/test/resources/graphql/service-gen/schema_book.graphql",
"chars": 188,
"preview": "type Query {\n \"Fetch all the books from database\"\n books: [Book]\n \"Fetch a book by its id\"\n book(\n id"
},
{
"path": "ballerina-test/src/test/resources/graphql/service-gen/schema_starwars.graphql",
"chars": 3067,
"preview": "type Query {\n \"Fetch the hero of the Star Wars\"\n hero(episode: Episode): Character!\n \"Returns reviews of the St"
},
{
"path": "ballerina-test/src/test/resources/grpc/expected-files/route_guide_pb.bal",
"chars": 13322,
"preview": "import ballerina/grpc;\nimport ballerina/protobuf;\n\npublic const string ROUTE_GUIDE_DESC = \"0A11726F7574655F67756964652E7"
},
{
"path": "ballerina-test/src/test/resources/grpc/proto-files/route_guide.proto",
"chars": 3644,
"preview": "// Copyright 2015 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use"
},
{
"path": "ballerina-test/src/test/resources/openapi/expected/client.bal",
"chars": 3788,
"preview": "// AUTO-GENERATED FILE. DO NOT MODIFY.\n// This file is auto-generated by the Ballerina OpenAPI tool.\nimport ballerina/ht"
},
{
"path": "ballerina-test/src/test/resources/openapi/expected/filtered_tags.bal",
"chars": 541,
"preview": "// AUTO-GENERATED FILE.\n// This file is auto-generated by the Ballerina OpenAPI tool.\n\nimport ballerina/http;\n\nlistener "
},
{
"path": "ballerina-test/src/test/resources/openapi/expected/types.bal",
"chars": 4053,
"preview": "// AUTO-GENERATED FILE. DO NOT MODIFY.\n// This file is auto-generated by the Ballerina OpenAPI tool.\nimport ballerina/co"
},
{
"path": "ballerina-test/src/test/resources/openapi/expected/utils.bal",
"chars": 9351,
"preview": "// AUTO-GENERATED FILE. DO NOT MODIFY.\n// This file is auto-generated by the Ballerina OpenAPI tool.\n\nimport ballerina/h"
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/Ballerina.toml",
"chars": 59,
"preview": "[package]\norg= \"ballerina\"\nname= \"openAPI\"\nversion= \"0.1.0\""
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/Package.md",
"chars": 0,
"preview": ""
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/testFiles/openapi-validator-off.bal",
"chars": 571,
"preview": "import ballerina/http;\nimport ballerina/log;\nimport ballerina/openapi;\n\nlistener http:Listener ep0 = new (9090, config ="
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/testFiles/openapi-validator-on.bal",
"chars": 585,
"preview": "import ballerina/http;\nimport ballerina/log;\nimport ballerina/openapi;\n\nlistener http:Listener ep0 = new(9090, config = "
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/testFiles/openapi_validator_off.yaml",
"chars": 587,
"preview": "openapi: 3.0.1\ninfo:\n title: Openapi validator off\n description: test 2 or more uri parameters\n version: 1.0.0\nserver"
},
{
"path": "ballerina-test/src/test/resources/openapi/integration-tests/testFiles/openapi_validator_on.yaml",
"chars": 587,
"preview": "openapi: 3.0.1\ninfo:\n title: Openapi validator off\n description: test 2 or more uri parameters\n version: 1.0.0\nserver"
},
{
"path": "ballerina-test/src/test/resources/openapi/openapi_client.yaml",
"chars": 3743,
"preview": "openapi: 3.0.0\ninfo:\n contact:\n email: dev-platform@stripe.com\n name: Stripe Dev Platform Team\n url: https://s"
},
{
"path": "ballerina-test/src/test/resources/openapi/petstore.bal",
"chars": 414,
"preview": "import ballerina/http;\nimport ballerina/log;\n\nlistener http:Listener helloEp = new (9090);\n\nservice /hello on helloEp {\n"
},
{
"path": "ballerina-test/src/test/resources/openapi/petstore.yaml",
"chars": 3394,
"preview": "openapi: \"3.0.0\"\ninfo:\n version: 1.0.0\n title: OpenApi Petstore\n license:\n name: MIT\nservers:\n - url: http://pets"
},
{
"path": "ballerina-test/src/test/resources/openapi/petstoreTags.yaml",
"chars": 3381,
"preview": "openapi: \"3.0.0\"\ninfo:\n version: 1.0.0\n title: OpenApi Petstore\n license:\n name: MIT\nservers:\n - url: http://pets"
},
{
"path": "ballerina-test/src/test/resources/testing-line-length.xml",
"chars": 1031,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n"
},
{
"path": "ballerina-test/src/test/resources/testng.xml",
"chars": 1603,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n"
},
{
"path": "ballerina-test-automation/build.gradle",
"chars": 1405,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test-automation/gradle.properties",
"chars": 265,
"preview": "swan-lake-latest-version=swan-lake-2201.13.0\nswan-lake-latest-spec-version=2024R1\nswan-lake-latest-version-display-text="
},
{
"path": "ballerina-test-automation/gradlew",
"chars": 5919,
"preview": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0"
},
{
"path": "ballerina-test-automation/gradlew.bat",
"chars": 2944,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "ballerina-test-automation/installer-test/build.gradle",
"chars": 2243,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/CentralTest.java",
"chars": 1837,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/InstallerTest.java",
"chars": 1760,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/ProjectTest.java",
"chars": 2896,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/installer-test/src/test/java/io/ballerina/installer/test/TestUtils.java",
"chars": 18509,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/installer-test/src/test/resources/testng.xml",
"chars": 1148,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved."
},
{
"path": "ballerina-test-automation/settings.gradle",
"chars": 995,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test-automation/test-automation/build.gradle",
"chars": 883,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/CentOS.java",
"chars": 1961,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Executor.java",
"chars": 887,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/MacOS.java",
"chars": 2128,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Ubuntu.java",
"chars": 2005,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Utils.java",
"chars": 5253,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/test-automation/src/main/java/io/ballerina/test/Windows.java",
"chars": 1763,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/update-tool-test/build.gradle",
"chars": 1795,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/FetchDependencyTest.java",
"chars": 1781,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/UpdateDistTest.java",
"chars": 1954,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/update-tool-test/src/test/java/io/ballerina/tool/test/UpdateToolTest.java",
"chars": 2515,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "ballerina-test-automation/update-tool-test/src/test/resources/testng.xml",
"chars": 1227,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved."
},
{
"path": "build-time-tests/build.gradle",
"chars": 1859,
"preview": "/*\n ~ * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache Lic"
},
{
"path": "build-time-tests/samples/build-samples.sh",
"chars": 1491,
"preview": "#!/bin/bash\n# ---------------------------------------------------------------------------\n# Copyright (c) 2021, WSO2 In"
},
{
"path": "build-time-tests/samples/helloservice/Ballerina.toml",
"chars": 45,
"preview": "[build-options]\nobservabilityIncluded = true\n"
},
{
"path": "build-time-tests/samples/helloservice/service.bal",
"chars": 674,
"preview": "import ballerina/http;\nimport ballerina/io;\n\n# A service representing a network-accessible API\n# bound to absolute path "
},
{
"path": "build-time-tests/samples/helloworld/Ballerina.toml",
"chars": 45,
"preview": "[build-options]\nobservabilityIncluded = true\n"
},
{
"path": "build-time-tests/samples/helloworld/helloworld.bal",
"chars": 81,
"preview": "import ballerina/io;\n\npublic function main() {\n io:println(\"Hello World!\");\n}\n"
},
{
"path": "build-time-tests/src/main/java/org/ballerina/packages/buildtime/GenerateBuildDataCsv.java",
"chars": 3473,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to y"
},
{
"path": "build.gradle",
"chars": 9366,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "cache-generator/build.gradle",
"chars": 2835,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "cache-generator/src/main/java/io/ballerina/gencache/cmd/GenCacheCmd.java",
"chars": 4932,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to y"
},
{
"path": "cache-generator/src/main/java/module-info.java",
"chars": 1670,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://wso2.com) All Rights Reserved.\n *\n * Licensed under the Apache License, Vers"
},
{
"path": "cache-generator/src/main/resources/META-INF/services/io.ballerina.cli.BLauncherCmd",
"chars": 37,
"preview": "io.ballerina.gencache.cmd.GenCacheCmd"
},
{
"path": "config/checkstyle/build.gradle",
"chars": 1334,
"preview": "/*\n * Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * Licensed under the Apache License, "
},
{
"path": "config/checkstyle/checkstyle.xml",
"chars": 15634,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n # Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserve"
},
{
"path": "config/checkstyle/suppressions.xml",
"chars": 1820,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n # Copyright (c) 2021, WSO2 Inc. (http://www.wso2.org) All Rights Reserve"
},
{
"path": "devtools-integration-tests/build.gradle",
"chars": 3043,
"preview": " /*\n ~ * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n ~ *\n ~ * Licensed under the Apache"
},
{
"path": "devtools-integration-tests/index.json",
"chars": 114,
"preview": "[\n {\n \"name\": \"Testerina Object mocking test\",\n \"path\": \"testerina-object-mocking-test\"\n } \n]\n"
},
{
"path": "devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/BaseTestCase.java",
"chars": 1649,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ExpressionEvaluationTest.java",
"chars": 3202,
"preview": "/*\n * Copyright (c) 2022 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you "
},
{
"path": "devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ModuleBreakpointTest.java",
"chars": 3043,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you"
},
{
"path": "devtools-integration-tests/src/test/java/org/ballerina/devtools/debug/ServiceDebugTest.java",
"chars": 4732,
"preview": "/*\n * Copyright (c) 2020 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to you "
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/breakpoint-tests/Ballerina.toml",
"chars": 84,
"preview": "[package]\norg = \"debug_test_resources\"\nname = \"breakpoint_tests\"\nversion = \"0.1.0\"\n\n"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/breakpoint-tests/main.bal",
"chars": 924,
"preview": "// Copyright (c) 2020 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n//\n// WSO2 Inc. licenses this file to you und"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/evaluation-tests/Ballerina.toml",
"chars": 84,
"preview": "[package]\norg = \"debug_test_resources\"\nname = \"evaluation_tests\"\nversion = \"0.1.0\"\n\n"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/evaluation-tests/main.bal",
"chars": 996,
"preview": "// Copyright (c) 2022 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n//\n// WSO2 Inc. licenses this file to you und"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/service-tests/Ballerina.toml",
"chars": 81,
"preview": "[package]\norg = \"debug_test_resources\"\nname = \"service_tests\"\nversion = \"0.1.0\"\n\n"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/service-tests/hello_service.bal",
"chars": 888,
"preview": "// Copyright (c) 2020 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n//\n// WSO2 Inc. licenses this file to you und"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/project-based-tests/service-tests/tests/hello_service_test.bal",
"chars": 1427,
"preview": "// Copyright (c) 2020 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n//\n// WSO2 Inc. licenses this file to you und"
},
{
"path": "devtools-integration-tests/src/test/resources/debug/single-file-tests/hello_service.bal",
"chars": 1311,
"preview": "// Copyright (c) 2020 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n//\n// WSO2 Inc. licenses this file to you und"
},
{
"path": "devtools-integration-tests/src/test/resources/testng.xml",
"chars": 1062,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n ~ Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n"
},
{
"path": "devtools-integration-tests/testerina-object-mocking-test/client.bal",
"chars": 1382,
"preview": "import ballerina/http;\n\nhttp:Client orderManagementClient = checkpanic new (\"http://localhost:9117/ordermgt\");\n\njson res"
},
{
"path": "devtools-integration-tests/testerina-object-mocking-test/service.bal",
"chars": 1906,
"preview": "import ballerina/http;\nimport ballerina/log;\n\nlistener http:Listener httpListener = new(9117);\n\nmap<json> ordersMap = {}"
},
{
"path": "devtools-integration-tests/testerina-object-mocking-test/tests/main_test.bal",
"chars": 3352,
"preview": "import ballerina/test;\nimport ballerina/http;\n\npublic client class MockHttpClient {\n public string url = \"http://mock"
},
{
"path": "dist-repo-builder/build.gradle",
"chars": 239,
"preview": "plugins {\n id 'java'\n}\n\ngroup 'org.ballerinalang'\nversion '1.0.0'\n\ndependencies {\n implementation \"org.ballerinala"
},
{
"path": "dist-repo-builder/src/main/java/io/ballerina/dist/DistRepoBuilder.java",
"chars": 7630,
"preview": "/*\n * Copyright (c) 2020, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.\n *\n * WSO2 Inc. licenses this file to y"
},
{
"path": "doc-guidelines.md",
"chars": 13157,
"preview": "# Ballerina Doc Guidelines\n\n- [Ballerina Documentation Components](#ballerina-documentation-components)\n- [Ballerina By "
},
{
"path": "docs/build-ballerina-from-source.md",
"chars": 6593,
"preview": "# Build Ballerina from source\n\n## Overview\n\n[Building the complete Ballerina distribution](#building-the-complete-baller"
},
{
"path": "examples/access-json-elements/access_json_elements.bal",
"chars": 949,
"preview": "import ballerina/io;\nimport ballerina/lang.value;\n \npublic function main() returns error? {\n json[] users = [\n "
},
{
"path": "examples/access-json-elements/access_json_elements.md",
"chars": 1113,
"preview": "# Access JSON elements\n\nBallerina defines certain types as lax types for which static typing rules are less strict. `jso"
},
{
"path": "examples/access-json-elements/access_json_elements.metatags",
"chars": 323,
"preview": "description: This BBE demonstrates how to get elements in JSON, check whether a given element is available in JSON, hand"
},
{
"path": "examples/access-json-elements/access_json_elements.out",
"chars": 87,
"preview": "$ bal run access_json_elements.bal\nValue of first name: John\nValue of first name: John\n"
},
{
"path": "examples/access-optional-json-elements/access_optional_json_elements.bal",
"chars": 602,
"preview": "import ballerina/io;\n\npublic function main() returns error? {\n json user = {\n name: {\n firstName: \"John\""
},
{
"path": "examples/access-optional-json-elements/access_optional_json_elements.md",
"chars": 536,
"preview": "# Accessing optional JSON elements\n\nIf there is no prior knowledge of the availability of a particular field, optional f"
},
{
"path": "examples/access-optional-json-elements/access_optional_json_elements.metatags",
"chars": 322,
"preview": "description: This BBE demonstrates how to get elements in json, check whether given element is available in json, handle"
},
{
"path": "examples/access-optional-json-elements/access_optional_json_elements.out",
"chars": 61,
"preview": "$ bal run access_optional_json_elements.bal\nFirst name: John\n"
},
{
"path": "examples/advanced-conflict-handling/advanced_conflict_handling.bal",
"chars": 1426,
"preview": "import ballerina/io;\n\ntype Student record {|\n string name;\n int score;\n|};\n\npublic function main() {\n Student[]"
},
{
"path": "examples/advanced-conflict-handling/advanced_conflict_handling.md",
"chars": 1109,
"preview": "# Advanced conflict handling\n\nWe can implement a custom conflict-handling policy to determine whether to replace a value"
},
{
"path": "examples/advanced-conflict-handling/advanced_conflict_handling.metatags",
"chars": 212,
"preview": "description: This BBE demonstrates writing custom conflict handling logic when constructing a map or a table.\nkeywords: "
},
{
"path": "examples/advanced-conflict-handling/advanced_conflict_handling.out",
"chars": 128,
"preview": "$ bal run advanced_conflict_handling.bal\n{\"John\":200,\"Jane\":150}\nerror(\"Key Conflict\",message=\"Duplicate key has an odd "
},
{
"path": "examples/aggregation/aggregation.bal",
"chars": 1315,
"preview": "import ballerina/io;\n\npublic function main() returns error? {\n var orders = [\n {orderId: 1, itemName: \"A\", pri"
},
{
"path": "examples/aggregation/aggregation.md",
"chars": 1494,
"preview": "# Aggregation\n\nThe `group by` clause in the query expression can group the elements in a collection. Grouping happens ba"
},
{
"path": "examples/aggregation/aggregation.metatags",
"chars": 188,
"preview": "description: This BBE demonstrates how to group a collection, how to handle non grouping keys.\nkeywords: ballerina, ball"
},
{
"path": "examples/aggregation/aggregation.out",
"chars": 116,
"preview": "$ bal run aggregation.bal\n[[\"A\",\"A\",\"B\"],[\"B\"]]\n[{\"itemName\":\"A\",\"quantity\":3},{\"itemName\":\"B\",\"quantity\":6}]\n196.2\n"
},
{
"path": "examples/ai-agent-external-endpoint-integration/ai_agent_external_endpoint_integration.bal",
"chars": 3457,
"preview": "import ballerina/ai;\nimport ballerina/io;\nimport ballerinax/googleapis.calendar;\nimport ballerinax/googleapis.gmail;\n\n//"
},
{
"path": "examples/ai-agent-external-endpoint-integration/ai_agent_external_endpoint_integration.md",
"chars": 2417,
"preview": "# AI agents with external endpoints as tools\n\nBallerina enables developers to easily create intelligent AI agents powere"
},
{
"path": "examples/ai-agent-external-endpoint-integration/ai_agent_external_endpoint_integration.metatags",
"chars": 169,
"preview": "description: This BBE demonstrates AI agents integrated with external endpoints as tools.\nkeywords: ballerina, ballerina"
},
{
"path": "examples/ai-agent-external-endpoint-integration/ai_agent_external_endpoint_integration.out",
"chars": 1502,
"preview": "$ bal run ai_agent_external_endpoint_integration.bal\nUser (or 'exit' to quit): Do I have any meetings today?\nAgent: You "
},
{
"path": "examples/ai-agent-local-tools/ai_agent_local_tools.bal",
"chars": 2258,
"preview": "import ballerina/ai;\nimport ballerina/io;\nimport ballerina/time;\nimport ballerina/uuid;\n\ntype Task record {|\n string "
},
{
"path": "examples/ai-agent-local-tools/ai_agent_local_tools.md",
"chars": 2121,
"preview": "# AI agents with local tools\n\nBallerina enables developers to easily create intelligent AI agents powered by large langu"
},
{
"path": "examples/ai-agent-local-tools/ai_agent_local_tools.metatags",
"chars": 125,
"preview": "description: This BBE demonstrates AI agents.\nkeywords: ballerina, ballerina by example, BBE, ai, llm, model-provider, a"
},
{
"path": "examples/ai-agent-local-tools/ai_agent_local_tools.out",
"chars": 1025,
"preview": "$ bal run ai_agent_local_tools.bal\nUser (or 'exit' to quit): What do I have on my plate today?\nAgent: You have the follo"
},
{
"path": "examples/ai-agent-mcp-integration/ai_agent_mcp_integration.bal",
"chars": 1219,
"preview": "import ballerina/ai;\nimport ballerina/io;\n\n// Define an MCP toolkit to connect to the MCP service.\n// This allows using "
},
{
"path": "examples/ai-agent-mcp-integration/ai_agent_mcp_integration.md",
"chars": 2234,
"preview": "# AI agents with MCP tools\n\nBallerina enables developers to easily create intelligent AI agents powered by large languag"
},
{
"path": "examples/ai-agent-mcp-integration/ai_agent_mcp_integration.metatags",
"chars": 156,
"preview": "description: This BBE demonstrates AI agents integrated with MCP tools.\nkeywords: ballerina, ballerina by example, BBE, "
},
{
"path": "examples/ai-agent-mcp-integration/ai_agent_mcp_integration.out",
"chars": 669,
"preview": "$ bal run ai_agent_mcp_integration.bal\nUser (or 'exit' to quit): Should I go for a walk in Colombo today?\nAgent: The cur"
},
{
"path": "examples/ai-agent-tool-kit/ai_agent_tool_kit.bal",
"chars": 2494,
"preview": "import ballerina/ai;\nimport ballerina/io;\nimport ballerina/time;\nimport ballerina/uuid;\n\ntype Task record {|\n string "
},
{
"path": "examples/ai-agent-tool-kit/ai_agent_tool_kit.md",
"chars": 2269,
"preview": "# AI agents with tool kits\n\nBallerina enables developers to easily create intelligent AI agents powered by large languag"
},
{
"path": "examples/ai-agent-tool-kit/ai_agent_tool_kit.metatags",
"chars": 140,
"preview": "description: This BBE demonstrates AI agents with tool kits.\nkeywords: ballerina, ballerina by example, BBE, ai, llm, mo"
},
{
"path": "examples/ai-agent-tool-kit/ai_agent_tool_kit.out",
"chars": 719,
"preview": "$ bal run ai_agent_tool_kit.bal\nUser (or 'exit' to quit): Hello\nAgent: Hello! How can I assist you today? Do you need he"
},
{
"path": "examples/alternate-receive/alternate_receive.bal",
"chars": 2131,
"preview": "import ballerina/http;\nimport ballerina/io;\nimport ballerina/lang.runtime;\n\ntype Response record {\n record {\n "
},
{
"path": "examples/alternate-receive/alternate_receive.md",
"chars": 520,
"preview": "# Alternate receive\n\nThe alternate receive action can be used to receive one of multiple values corresponding to multipl"
},
{
"path": "examples/alternate-receive/alternate_receive.metatags",
"chars": 179,
"preview": "description: This BBE demonstrates the use of the alternate receive action in inter-worker communication\nkeywords: balle"
},
{
"path": "examples/alternate-receive/alternate_receive.out",
"chars": 38,
"preview": "$ bal run alternate_receive.bal\nw1\nw5\n"
},
{
"path": "examples/alternate-wait/alternate_wait.bal",
"chars": 875,
"preview": "import ballerina/http;\nimport ballerina/io;\n\n// Fetch from A or B.\nfunction altFetch(string urlA, string urlB) returns s"
},
{
"path": "examples/alternate-wait/alternate_wait.md",
"chars": 148,
"preview": "# Alternate wait\n\nThe `wait` action can be used to wait for one of several workers.\n\n::: code alternate_wait.bal :::\n\n::"
},
{
"path": "examples/alternate-wait/alternate_wait.metatags",
"chars": 132,
"preview": "description: This BBE demonstrates the alternate wait action\nkeywords: ballerina, ballerina by example, bbe, worker, alt"
},
{
"path": "examples/alternate-wait/alternate_wait.out",
"chars": 50,
"preview": "$ bal run alternate_wait.bal\n{\"lang\":\"ballerina\"}\n"
},
{
"path": "examples/annotations/annotations.bal",
"chars": 668,
"preview": "import ballerina/io;\n\n// The `@display` annotation is applied to the `transform` function.\n@display {\n label: \"Transf"
},
{
"path": "examples/annotations/annotations.md",
"chars": 330,
"preview": "# Annotations\n\nAnnotations start with `@tag` and they come before what they apply to. Unprefixed tags refer to standard "
},
{
"path": "examples/annotations/annotations.metatags",
"chars": 133,
"preview": "description: This BBE demonstrates how to use annotations in Ballerina\nkeywords: ballerina, ballerina by example, bbe, "
},
{
"path": "examples/annotations/annotations.out",
"chars": 41,
"preview": "$ bal run annotations.bal\n{\"value\":\"T1\"}\n"
},
{
"path": "examples/anonymous-function/anonymous_function.bal",
"chars": 872,
"preview": "import ballerina/io;\n\npublic function main() {\n // Infer anonymous function.\n // The type of `x` is inferred from "
},
{
"path": "examples/anonymous-function/anonymous_function.md",
"chars": 596,
"preview": "# Anonymous function\n\nThe anonymous function is used to create function values. There are two different kinds of syntaxe"
},
{
"path": "examples/anonymous-function/anonymous_function.metatags",
"chars": 263,
"preview": "description: This BBE demonstrates creating an anonymous function, which is commonly known as an arrow function or lambd"
},
{
"path": "examples/anonymous-function/anonymous_function.out",
"chars": 41,
"preview": "$ bal run anonymous_function.bal\n2\n3\n3\n1\n"
},
{
"path": "examples/any-type/any_type.bal",
"chars": 533,
"preview": "import ballerina/io;\n\n// A variable of type `any` can hold any value except an `error` value.\nany x = 1;\n\npublic functio"
},
{
"path": "examples/any-type/any_type.md",
"chars": 290,
"preview": "# Any type\n\n`any` means any value except an `error` value. Equivalent to a union of all non-error basic types. Use `any|"
},
{
"path": "examples/any-type/any_type.metatags",
"chars": 124,
"preview": "description: This BBE demonstrates the any type in Ballerina\nkeywords: ballerina, ballerina by example, bbe, any, any t"
},
{
"path": "examples/any-type/any_type.out",
"chars": 34,
"preview": "$ bal run any_type.bal\n1\ntrue\n1.0\n"
},
{
"path": "examples/anydata-to-yaml-string/anydata_to_yaml_string.bal",
"chars": 615,
"preview": "import ballerina/data.yaml;\nimport ballerina/io;\n\ntype ServerConfig record {|\n string host;\n int port;\n Databas"
},
{
"path": "examples/anydata-to-yaml-string/anydata_to_yaml_string.md",
"chars": 404,
"preview": "# Serialize a Ballerina value to a string in YAML format\n\nThe `data.yaml` library provides the `toYamlString` function t"
},
{
"path": "examples/anydata-to-yaml-string/anydata_to_yaml_string.metatags",
"chars": 196,
"preview": "description: This BBE demonstrates how to serialize a value belonging to `anydata` to a string in YAML format.\nkeywords:"
},
{
"path": "examples/anydata-to-yaml-string/anydata_to_yaml_string.out",
"chars": 112,
"preview": "$ bal run anydata_to_yaml_string.bal\nhost: localhost\nport: 3000\ndatabase:\n dbName: userDB\n username: testUser\n"
},
{
"path": "examples/anydata-type/anydata_type.bal",
"chars": 262,
"preview": "import ballerina/io;\n\nanydata x1 = [1, \"string\", true];\n// `x1.clone()` returns a deep copy with the same mutability.\nan"
},
{
"path": "examples/anydata-type/anydata_type.md",
"chars": 504,
"preview": "# Anydata type\n\nThe type for plain data is `anydata`. It is a subtype of `any`. `==` and `!=` operators test for deep eq"
},
{
"path": "examples/anydata-type/anydata_type.metatags",
"chars": 123,
"preview": "description: This BBE demonstrates anydata type in Ballerina.\nkeywords: ballerina, ballerina by example, bbe, anydata ty"
},
{
"path": "examples/anydata-type/anydata_type.out",
"chars": 50,
"preview": "$ bal run anydata_type.bal\n[1,\"string\",true]\ntrue\n"
},
{
"path": "examples/array-map-symmetry/array_map_symmetry.bal",
"chars": 2067,
"preview": "import ballerina/io;\n\npublic function main() {\n // List constructors are used to construct list values.\n // Arrays"
},
{
"path": "examples/array-map-symmetry/array_map_symmetry.md",
"chars": 1090,
"preview": "# Array/map symmetry\n\nBallerina provides a fine symmetry between lists and mappings. Lists are indexed by integers and m"
},
{
"path": "examples/array-map-symmetry/array_map_symmetry.metatags",
"chars": 147,
"preview": "description: This BBE demonstrates array map symmetry in Ballerina.\nkeywords: ballerina, ballerina by example, bbe, arra"
}
]
// ... and 2928 more files (download for full content)
About this extraction
This page contains the full source code of the ballerina-platform/ballerina-distribution GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3128 files (2.8 MB), approximately 913.5k tokens, and a symbol index with 497 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.