From 4ed405556e5fe546cad389676c272ff29534e375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Gorej?= Date: Thu, 29 Sep 2022 08:49:37 +0200 Subject: [PATCH 01/18] feat: release for version 2.5.0 of the spec (#842) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sergio Moya <1083296+smoya@users.noreply.github.com> Co-authored-by: Maciej Urbańczyk Co-authored-by: Jeremy Whitlock Co-authored-by: Lukasz Gornicki --- .github/workflows/if-nodejs-release.yml | 9 +-- README.md | 3 +- examples/anyof.yml | 2 +- examples/application-headers.yml | 2 +- examples/correlation-id.yml | 2 +- examples/gitter-streaming.yml | 2 +- examples/mercure.yml | 2 +- examples/not.yml | 2 +- examples/oneof.yml | 2 +- examples/operation-security.yml | 2 +- examples/rpc-client.yml | 2 +- examples/rpc-server.yml | 2 +- examples/simple.yml | 2 +- examples/slack-rtm.yml | 2 +- examples/social-media/backend/asyncapi.yaml | 7 +++ .../comments-service/asyncapi.yaml | 7 +++ .../notification-service/asyncapi.yaml | 7 +++ .../social-media/public-api/asyncapi.yaml | 7 +++ examples/streetlights-kafka.yml | 16 +++++- examples/streetlights-mqtt.yml | 9 ++- examples/streetlights-operation-security.yml | 2 +- examples/websocket-gemini.yml | 2 +- spec/asyncapi.md | 55 +++++++++++++++---- 23 files changed, 114 insertions(+), 34 deletions(-) diff --git a/.github/workflows/if-nodejs-release.yml b/.github/workflows/if-nodejs-release.yml index bc5b53766..4a34feb03 100644 --- a/.github/workflows/if-nodejs-release.yml +++ b/.github/workflows/if-nodejs-release.yml @@ -9,12 +9,9 @@ on: branches: - master # below lines are not enough to have release supported for these branches - # make sure configuration of `semantic-release` package mentiones these branches - - next - - next-major - - beta - - alpha - - '**-release' # custom + # make sure configuration of `semantic-release` package mentions these branches + - next-spec + - next-major-spec jobs: diff --git a/README.md b/README.md index c1588d431..c3079baa5 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,8 @@ The latest draft specification can be found at [spec/asyncapi.md](./spec/asyncapi.md) which tracks the latest commit to the master branch in this repository. The human-readable markdown file is the source of truth for the specification. -- [Version 2.4.0](https://github.com/asyncapi/spec/blob/v2.4.0/spec/asyncapi.md) (latest) +- [Version 2.5.0](https://github.com/asyncapi/spec/blob/v2.5.0/spec/asyncapi.md) (latest) +- [Version 2.4.0](https://github.com/asyncapi/spec/blob/v2.4.0/spec/asyncapi.md) - [Version 2.3.0](https://github.com/asyncapi/spec/blob/v2.3.0/spec/asyncapi.md) - [Version 2.2.0](https://github.com/asyncapi/spec/blob/v2.2.0/spec/asyncapi.md) - [Version 2.1.0](https://github.com/asyncapi/spec/blob/v2.1.0/spec/asyncapi.md) diff --git a/examples/anyof.yml b/examples/anyof.yml index b17799752..a73ac4090 100644 --- a/examples/anyof.yml +++ b/examples/anyof.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: AnyOf example version: '1.0.0' diff --git a/examples/application-headers.yml b/examples/application-headers.yml index c66bcef3a..0ebe339d1 100644 --- a/examples/application-headers.yml +++ b/examples/application-headers.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Application Headers example version: '1.0.0' diff --git a/examples/correlation-id.yml b/examples/correlation-id.yml index f501c59a6..33bb2770e 100644 --- a/examples/correlation-id.yml +++ b/examples/correlation-id.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Correlation ID Example version: '1.0.0' diff --git a/examples/gitter-streaming.yml b/examples/gitter-streaming.yml index 2305245df..1d53a01bb 100644 --- a/examples/gitter-streaming.yml +++ b/examples/gitter-streaming.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' id: 'tag:stream.gitter.im,2022:api' info: title: Gitter Streaming API diff --git a/examples/mercure.yml b/examples/mercure.yml index 32f2a4ad3..388f4dbc1 100644 --- a/examples/mercure.yml +++ b/examples/mercure.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Mercure Hub Example version: '1.0.0' diff --git a/examples/not.yml b/examples/not.yml index 957add7d4..0b4e2e716 100644 --- a/examples/not.yml +++ b/examples/not.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Not example version: '1.0.0' diff --git a/examples/oneof.yml b/examples/oneof.yml index d0697f49b..6bc4c92e3 100644 --- a/examples/oneof.yml +++ b/examples/oneof.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: OneOf example version: '1.0.0' diff --git a/examples/operation-security.yml b/examples/operation-security.yml index 0ee3c26cc..f853072b2 100644 --- a/examples/operation-security.yml +++ b/examples/operation-security.yml @@ -1,4 +1,4 @@ -asyncapi: 2.4.0 +asyncapi: 2.5.0 info: title: Notifications version: 1.0.0 diff --git a/examples/rpc-client.yml b/examples/rpc-client.yml index 5cbf1116f..68f5d8014 100644 --- a/examples/rpc-client.yml +++ b/examples/rpc-client.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' id: 'urn:example:rpcclient' defaultContentType: application/json diff --git a/examples/rpc-server.yml b/examples/rpc-server.yml index e7103e52f..de4896eb6 100644 --- a/examples/rpc-server.yml +++ b/examples/rpc-server.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' id: 'urn:example:rpcserver' defaultContentType: application/json diff --git a/examples/simple.yml b/examples/simple.yml index cb8529497..329d5073b 100644 --- a/examples/simple.yml +++ b/examples/simple.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Account Service version: 1.0.0 diff --git a/examples/slack-rtm.yml b/examples/slack-rtm.yml index b4bef83b4..20234a2bb 100644 --- a/examples/slack-rtm.yml +++ b/examples/slack-rtm.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' id: 'wss://wss-primary.slack.com/websocket' info: title: Slack Real Time Messaging API diff --git a/examples/social-media/backend/asyncapi.yaml b/examples/social-media/backend/asyncapi.yaml index cefc2f98c..5f7cb94e5 100644 --- a/examples/social-media/backend/asyncapi.yaml +++ b/examples/social-media/backend/asyncapi.yaml @@ -13,6 +13,13 @@ servers: bindings: mqtt: clientId: websocketServer + tags: + - name: "env:production" + description: "This environment is meant for production use case" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:public" + description: "This resource is public and available to everyone" channels: comment/liked: diff --git a/examples/social-media/comments-service/asyncapi.yaml b/examples/social-media/comments-service/asyncapi.yaml index 0c0bddfd4..ce8f93a9e 100644 --- a/examples/social-media/comments-service/asyncapi.yaml +++ b/examples/social-media/comments-service/asyncapi.yaml @@ -12,6 +12,13 @@ servers: bindings: mqtt: clientId: comment-service + tags: + - name: "env:production" + description: "This environment is meant for production use case" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:public" + description: "This resource is public and available to everyone" channels: comment/liked: diff --git a/examples/social-media/notification-service/asyncapi.yaml b/examples/social-media/notification-service/asyncapi.yaml index 9952c962d..be78362c9 100644 --- a/examples/social-media/notification-service/asyncapi.yaml +++ b/examples/social-media/notification-service/asyncapi.yaml @@ -11,6 +11,13 @@ servers: bindings: mqtt: clientId: notification-service + tags: + - name: "env:production" + description: "This environment is meant for production use case" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:public" + description: "This resource is public and available to everyone" channels: comment/liked: diff --git a/examples/social-media/public-api/asyncapi.yaml b/examples/social-media/public-api/asyncapi.yaml index 9e9ea1efa..0a7cdde79 100644 --- a/examples/social-media/public-api/asyncapi.yaml +++ b/examples/social-media/public-api/asyncapi.yaml @@ -12,6 +12,13 @@ servers: bindings: mqtt: clientId: public-api + tags: + - name: "env:production" + description: "This environment is meant for production use case" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:public" + description: "This resource is public and available to everyone" channels: comment/liked: diff --git a/examples/streetlights-kafka.yml b/examples/streetlights-kafka.yml index d08cf6393..916111154 100644 --- a/examples/streetlights-kafka.yml +++ b/examples/streetlights-kafka.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Streetlights Kafka API version: '1.0.0' @@ -21,12 +21,26 @@ servers: description: Test broker secured with scramSha256 security: - saslScram: [] + tags: + - name: "env:test-scram" + description: "This environment is meant for running internal tests through scramSha256" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:private" + description: "This resource is private and only available to certain users" mtls-connections: url: test.mykafkacluster.org:28092 protocol: kafka-secure description: Test broker secured with X509 security: - certs: [] + tags: + - name: "env:test-mtls" + description: "This environment is meant for running internal tests through mtls" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:private" + description: "This resource is private and only available to certain users" defaultContentType: application/json diff --git a/examples/streetlights-mqtt.yml b/examples/streetlights-mqtt.yml index 5a000bd05..b3721d878 100644 --- a/examples/streetlights-mqtt.yml +++ b/examples/streetlights-mqtt.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Streetlights MQTT API version: '1.0.0' @@ -33,6 +33,13 @@ servers: - streetlights:off - streetlights:dim - openIdConnectWellKnown: [] + tags: + - name: "env:production" + description: "This environment is meant for production use case" + - name: "kind:remote" + description: "This server is a remote server. Not exposed by the application" + - name: "visibility:public" + description: "This resource is public and available to everyone" defaultContentType: application/json diff --git a/examples/streetlights-operation-security.yml b/examples/streetlights-operation-security.yml index d75d9a371..faf122763 100644 --- a/examples/streetlights-operation-security.yml +++ b/examples/streetlights-operation-security.yml @@ -1,4 +1,4 @@ -asyncapi: '2.4.0' +asyncapi: '2.5.0' info: title: Streetlights Kafka API version: '1.0.0' diff --git a/examples/websocket-gemini.yml b/examples/websocket-gemini.yml index b4fc46dfc..75af8d4d6 100644 --- a/examples/websocket-gemini.yml +++ b/examples/websocket-gemini.yml @@ -12,7 +12,7 @@ # - Live stream about topics mentioned in part 1 and 2 articles: https://www.youtube.com/watch?v=8tFBcf31e_c # -asyncapi: '2.4.0' +asyncapi: '2.5.0' # # Overal information for users of the application diff --git a/spec/asyncapi.md b/spec/asyncapi.md index 56fdd0687..a2799ffbb 100644 --- a/spec/asyncapi.md +++ b/spec/asyncapi.md @@ -4,7 +4,7 @@ Part of this content has been taken from the great work done by the folks at the [OpenAPI Initiative](https://openapis.org). Mainly because **it's a great work** and we want to keep as much compatibility as possible with the [OpenAPI Specification](https://github.com/OAI/OpenAPI-Specification). -#### Version 2.4.0 +#### Version 2.5.0 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). @@ -361,11 +361,12 @@ An object representing a message broker, a server or any other kind of computer Field Name | Type | Description ---|:---:|--- url | `string` | **REQUIRED**. A URL to the target host. This URL supports Server Variables and MAY be relative, to indicate that the host location is relative to the location where the AsyncAPI document is being served. Variable substitutions will be made when a variable is named in `{`braces`}`. -protocol | `string` | **REQUIRED**. The protocol this URL supports for connection. Supported protocol include, but are not limited to: `amqp`, `amqps`, `http`, `https`, `ibmmq`, `jms`, `kafka`, `kafka-secure`, `anypointmq`, `mqtt`, `secure-mqtt`, `solace`, `stomp`, `stomps`, `ws`, `wss`, `mercure`. +protocol | `string` | **REQUIRED**. The protocol this URL supports for connection. Supported protocol include, but are not limited to: `amqp`, `amqps`, `http`, `https`, `ibmmq`, `jms`, `kafka`, `kafka-secure`, `anypointmq`, `mqtt`, `secure-mqtt`, `solace`, `stomp`, `stomps`, `ws`, `wss`, `mercure`, `googlepubsub`. protocolVersion | `string` | The version of the protocol used for connection. For instance: AMQP `0.9.1`, HTTP `2.0`, Kafka `1.0.0`, etc. description | `string` | An optional string describing the host designated by the URL. [CommonMark syntax](https://spec.commonmark.org/) MAY be used for rich text representation. -variables | Map[`string`, [Server Variable Object](#serverVariableObject)] | A map between a variable name and its value. The value is used for substitution in the server's URL template. +variables | Map[`string`, [Server Variable Object](#serverVariableObject) \| [Reference Object](#referenceObject)]] | A map between a variable name and its value. The value is used for substitution in the server's URL template. security | [[Security Requirement Object](#securityRequirementObject)] | A declaration of which security mechanisms can be used with this server. The list of values includes alternative security requirement objects that can be used. Only one of the security requirement objects need to be satisfied to authorize a connection or operation. +tags | [Tags Object](#tagsObject) | A list of tags for logical grouping and categorization of servers. bindings | [Server Bindings Object](#serverBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the server. This object MAY be extended with [Specification Extensions](#specificationExtensions). @@ -399,19 +400,37 @@ The following shows how multiple servers can be described, for example, at the A "url": "development.gigantic-server.com", "description": "Development server", "protocol": "amqp", - "protocolVersion": "0.9.1" + "protocolVersion": "0.9.1", + "tags": [ + { + "name": "env:development", + "description": "This environment is meant for developers to run their own tests" + } + ] }, "staging": { "url": "staging.gigantic-server.com", "description": "Staging server", "protocol": "amqp", - "protocolVersion": "0.9.1" + "protocolVersion": "0.9.1", + "tags": [ + { + "name": "env:staging", + "description": "This environment is a replica of the production environment" + } + ] }, "production": { "url": "api.gigantic-server.com", "description": "Production server", "protocol": "amqp", - "protocolVersion": "0.9.1" + "protocolVersion": "0.9.1", + "tags": [ + { + "name": "env:production", + "description": "This environment is the live environment available for final users" + } + ] } } } @@ -424,16 +443,25 @@ servers: description: Development server protocol: amqp protocolVersion: 0.9.1 + tags: + - name: "env:development" + description: "This environment is meant for developers to run their own tests" staging: url: staging.gigantic-server.com description: Staging server protocol: amqp protocolVersion: 0.9.1 + tags: + - name: "env:staging" + description: "This environment is a replica of the production environment" production: url: api.gigantic-server.com description: Production server protocol: amqp protocolVersion: 0.9.1 + tags: + - name: "env:production" + description: "This environment is the live environment available for final users" ``` The following shows how variables can be used for a server configuration: @@ -714,7 +742,7 @@ Field Name | Type | Description summary | `string` | A short summary of what the operation is about. description | `string` | A verbose explanation of the operation. [CommonMark syntax](http://spec.commonmark.org/) can be used for rich text representation. security | [[Security Requirement Object](#securityRequirementObject)]| A declaration of which security mechanisms are associated with this operation. Only one of the security requirement objects MUST be satisfied to authorize an operation. In cases where Server Security also applies, it MUST also be satisfied. -tags | [Tags Object](#tagsObject) | A list of tags for API documentation control. Tags can be used for logical grouping of operations. +tags | [Tags Object](#tagsObject) | A list of tags for logical grouping and categorization of operations. externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this operation. bindings | [Operation Bindings Object](#operationBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the operation. traits | [[Operation Trait Object](#operationTraitObject) | [Reference Object](#referenceObject) ] | A list of traits to apply to the operation object. Traits MUST be merged into the operation object using the [JSON Merge Patch](https://tools.ietf.org/html/rfc7386) algorithm in the same order they are defined here. @@ -825,7 +853,7 @@ Field Name | Type | Description summary | `string` | A short summary of what the operation is about. description | `string` | A verbose explanation of the operation. [CommonMark syntax](https://spec.commonmark.org/) can be used for rich text representation. security | [[Security Requirement Object](#securityRequirementObject)]| A declaration of which security mechanisms are associated with this operation. Only one of the security requirement objects MUST be satisfied to authorize an operation. In cases where Server Security also applies, it MUST also be satisfied. -tags | [Tags Object](#tagsObject) | A list of tags for API documentation control. Tags can be used for logical grouping of operations. +tags | [Tags Object](#tagsObject) | A list of tags for logical grouping and categorization of operations. externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this operation. bindings | [Operation Bindings Object](#operationBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the operation. @@ -980,6 +1008,7 @@ Field Name | Type | Description `redis` | [Redis Server Binding](https://github.com/asyncapi/bindings/blob/master/redis#server) | Protocol-specific information for a Redis server. `mercure` | [Mercure Server Binding](https://github.com/asyncapi/bindings/blob/master/mercure#server) | Protocol-specific information for a Mercure server. `ibmmq` | [IBM MQ Server Binding](https://github.com/asyncapi/bindings/blob/master/ibmmq#server-binding-object) | Protocol-specific information for an IBM MQ server. +`googlepubsub` | [Google Cloud Pub/Sub Server Binding](https://github.com/asyncapi/bindings/blob/master/googlepubsub#server) | Protocol-specific information for a Google Cloud Pub/Sub server. This object MAY be extended with [Specification Extensions](#specificationExtensions). @@ -1010,6 +1039,7 @@ Field Name | Type | Description `redis` | [Redis Channel Binding](https://github.com/asyncapi/bindings/blob/master/redis#channel) | Protocol-specific information for a Redis channel. `mercure` | [Mercure Channel Binding](https://github.com/asyncapi/bindings/blob/master/mercure#channel) | Protocol-specific information for a Mercure channel. `ibmmq` | [IBM MQ Channel Binding](https://github.com/asyncapi/bindings/tree/master/ibmmq#channel-binding-object) | Protocol-specific information for an IBM MQ channel. +`googlepubsub` | [Google Cloud Pub/Sub Channel Binding](https://github.com/asyncapi/bindings/tree/master/googlepubsub#channel) | Protocol-specific information for a Google Cloud Pub/Sub channel. This object MAY be extended with [Specification Extensions](#specificationExtensions). @@ -1039,6 +1069,8 @@ Field Name | Type | Description `stomp` | [STOMP Operation Binding](https://github.com/asyncapi/bindings/blob/master/stomp/README.md#operation) | Protocol-specific information for a STOMP operation. `redis` | [Redis Operation Binding](https://github.com/asyncapi/bindings/blob/master/redis#operation) | Protocol-specific information for a Redis operation. `mercure` | [Mercure Operation Binding](https://github.com/asyncapi/bindings/blob/master/mercure#operation) | Protocol-specific information for a Mercure operation. +`googlepubsub` | [Google Cloud Pub/Sub Operation Binding](https://github.com/asyncapi/bindings/blob/master/googlepubsub#operation) | Protocol-specific information for a Google Cloud Pub/Sub operation. +`ibmmq` | [IBM MQ Operation Binding](https://github.com/asyncapi/bindings/blob/master/ibmmq#operation-binding-object) | Protocol-specific information for an IBM MQ operation. This object MAY be extended with [Specification Extensions](#specificationExtensions). @@ -1070,6 +1102,7 @@ Field Name | Type | Description `redis` | [Redis Message Binding](https://github.com/asyncapi/bindings/blob/master/redis#message) | Protocol-specific information for a Redis message. `mercure` | [Mercure Message Binding](https://github.com/asyncapi/bindings/blob/master/mercure#message) | Protocol-specific information for a Mercure message. `ibmmq` | [IBM MQ Message Binding](https://github.com/asyncapi/bindings/tree/master/ibmmq#message-binding-object) | Protocol-specific information for an IBM MQ message. +`googlepubsub` | [Google Cloud Pub/Sub Message Binding](https://github.com/asyncapi/bindings/tree/master/googlepubsub#message) | Protocol-specific information for a Google Cloud Pub/Sub message. This object MAY be extended with [Specification Extensions](#specificationExtensions). @@ -1097,7 +1130,7 @@ Field Name | Type | Description title | `string` | A human-friendly title for the message. summary | `string` | A short summary of what the message is about. description | `string` | A verbose explanation of the message. [CommonMark syntax](https://spec.commonmark.org/) can be used for rich text representation. -tags | [Tags Object](#tagsObject) | A list of tags for API documentation control. Tags can be used for logical grouping of messages. +tags | [Tags Object](#tagsObject) | A list of tags for logical grouping and categorization of messages. externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this message. bindings | [Message Bindings Object](#messageBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the message. examples | [[Message Example Object](#messageExampleObject)] | List of examples. @@ -1111,7 +1144,7 @@ The following table contains a set of values that every implementation MUST supp Name | Allowed values | Notes ---|:---:|--- -[AsyncAPI 2.4.0 Schema Object](#schemaObject) | `application/vnd.aai.asyncapi;version=2.4.0`, `application/vnd.aai.asyncapi+json;version=2.4.0`, `application/vnd.aai.asyncapi+yaml;version=2.4.0` | This is the default when a `schemaFormat` is not provided. +[AsyncAPI 2.5.0 Schema Object](#schemaObject) | `application/vnd.aai.asyncapi;version=2.5.0`, `application/vnd.aai.asyncapi+json;version=2.5.0`, `application/vnd.aai.asyncapi+yaml;version=2.5.0` | This is the default when a `schemaFormat` is not provided. [JSON Schema Draft 07](https://json-schema.org/specification-links.html#draft-7) | `application/schema+json;version=draft-07`, `application/schema+yaml;version=draft-07` | The following table contains a set of values that every implementation is RECOMMENDED to support. @@ -1296,7 +1329,7 @@ Field Name | Type | Description title | `string` | A human-friendly title for the message. summary | `string` | A short summary of what the message is about. description | `string` | A verbose explanation of the message. [CommonMark syntax](https://spec.commonmark.org/) can be used for rich text representation. -tags | [Tags Object](#tagsObject) | A list of tags for API documentation control. Tags can be used for logical grouping of messages. +tags | [Tags Object](#tagsObject) | A list of tags for logical grouping and categorization of messages. externalDocs | [External Documentation Object](#externalDocumentationObject) | Additional external documentation for this message. bindings | [Message Bindings Object](#messageBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the message. examples | [[Message Example Object](#messageExampleObject)] | List of examples. From 949a9ffa6e0d6a6966ea12f0296b2d1e02cef951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20M=C3=A9ndez?= Date: Mon, 10 Oct 2022 13:38:33 +0200 Subject: [PATCH 02/18] chore: add Sergio and Vladimir as code owners (#846) --- CODEOWNERS | 2 +- CONTRIBUTING.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 351b2fdc5..c20380469 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -5,4 +5,4 @@ # For more details, read the following article on GitHub: https://help.github.com/articles/about-codeowners/. # The default owners are automatically added as reviewers when you open a pull request unless different owners are specified in the file. -* @fmvilas @derberg @dalelane @asyncapi-bot-eve \ No newline at end of file +* @fmvilas @derberg @dalelane @smoya @char0n @asyncapi-bot-eve \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 512804f76..c82242d80 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -236,7 +236,12 @@ may or may not know about JS, relying on the help of other community members to implement the RFC on the [AsyncAPI JS Parser](https://www.github.com/asyncapi/parser-js) and the [AsyncAPI JSON Schema](https://github.com/asyncapi/spec-json-schemas). +## Merging pull requests +A pull request can be merged if all the following conditions are met: + +* There is, at least, a mininum of 3 approvals from the [repository code owners](./CODEOWNERS). +* Sufficient time has passed to let all code owners review the pull request. As of now, it should be a minimum of 1 week. If all code owners have already approved a pull request, it's ok not to wait for this period of time. ## References From 529cc062da17e9354d02b83c1b845fa10d2ff02a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 25 Oct 2022 12:19:50 +0200 Subject: [PATCH 03/18] ci: update generic workflows (#851) Co-authored-by: asyncapi-bot --- .github/workflows/lint-pr-title.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml index 618352880..778136605 100644 --- a/.github/workflows/lint-pr-title.yml +++ b/.github/workflows/lint-pr-title.yml @@ -26,7 +26,7 @@ jobs: The subject "{subject}" found in the pull request title "{title}" should start with a lowercase character. # Comments the error message from the above lint_pr_title action - - if: ${{always() && !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor)}} + - if: ${{steps.lint_pr_title.outputs.error_message != null && !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor)}} name: Comment on PR uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 with: From 6476aafbcf44fe2236994b7a9b4b02faac38a446 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 25 Oct 2022 16:11:51 +0200 Subject: [PATCH 04/18] ci: update generic workflows (#855) Co-authored-by: asyncapi-bot Co-authored-by: Lukasz Gornicki --- .github/workflows/lint-pr-title.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml index 778136605..0440d87e6 100644 --- a/.github/workflows/lint-pr-title.yml +++ b/.github/workflows/lint-pr-title.yml @@ -26,7 +26,7 @@ jobs: The subject "{subject}" found in the pull request title "{title}" should start with a lowercase character. # Comments the error message from the above lint_pr_title action - - if: ${{steps.lint_pr_title.outputs.error_message != null && !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor)}} + - if: ${{ always() && steps.lint_pr_title.outputs.error_message != null && !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor)}} name: Comment on PR uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 with: From d1109322bd55a34d47715385d4e9452ce996ab94 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 25 Oct 2022 16:14:39 +0200 Subject: [PATCH 05/18] ci: update generic workflows (#857) Co-authored-by: asyncapi-bot-eve Co-authored-by: asyncapi-bot Co-authored-by: Lukasz Gornicki --- .github/workflows/add-good-first-issue-labels.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/add-good-first-issue-labels.yml b/.github/workflows/add-good-first-issue-labels.yml index dee10e726..202345269 100644 --- a/.github/workflows/add-good-first-issue-labels.yml +++ b/.github/workflows/add-good-first-issue-labels.yml @@ -28,8 +28,10 @@ jobs: break; case 'js': values[1] = 'javascript'; + break; case 'markdown': values[1] = 'docs'; + break; } if(values.length != 2 || !areas.includes(values[1])){ const message = `Hey @${context.payload.sender.login}, your message doesn't follow the requirements, you can try \`/help\`.` From f2e0ed756ed6f7e5758ff3fe84e4d21b889c191e Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 27 Oct 2022 16:26:56 +0200 Subject: [PATCH 06/18] ci: update generic workflows (#866) --- .../workflows/notify-tsc-members-mention.yml | 166 ++++- .github/workflows/scripts/README.md | 1 + .../scripts/mailchimp/htmlContent.js | 495 +++++++++++++++ .github/workflows/scripts/mailchimp/index.js | 73 +++ .../scripts/mailchimp/package-lock.json | 597 ++++++++++++++++++ .../workflows/scripts/mailchimp/package.json | 9 + 6 files changed, 1339 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/scripts/README.md create mode 100644 .github/workflows/scripts/mailchimp/htmlContent.js create mode 100644 .github/workflows/scripts/mailchimp/index.js create mode 100644 .github/workflows/scripts/mailchimp/package-lock.json create mode 100644 .github/workflows/scripts/mailchimp/package.json diff --git a/.github/workflows/notify-tsc-members-mention.yml b/.github/workflows/notify-tsc-members-mention.yml index e33b26251..1cdb371c6 100644 --- a/.github/workflows/notify-tsc-members-mention.yml +++ b/.github/workflows/notify-tsc-members-mention.yml @@ -2,7 +2,7 @@ # Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo # This action notifies community on slack whenever there is a new issue, PR or discussion started in given repository -name: Notify slack whenever TSC members are mentioned in GitHub +name: Notify slack and email subscribers whenever TSC members are mentioned in GitHub on: issue_comment: @@ -38,6 +38,9 @@ jobs: name: TSC notification on every new issue runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: issuemarkdown @@ -50,12 +53,39 @@ jobs: SLACK_TITLE: 🆘 New issue that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.issue.html_url}}'); pull_request: if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.body, '@asyncapi/tsc_members') name: TSC notification on every new pull request runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: prmarkdown @@ -68,12 +98,39 @@ jobs: SLACK_TITLE: 🆘 New PR that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.pull_request.html_url}}'); discussion: if: github.event_name == 'discussion' && contains(github.event.discussion.body, '@asyncapi/tsc_members') name: TSC notification on every new discussion runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: discussionmarkdown @@ -86,12 +143,39 @@ jobs: SLACK_TITLE: 🆘 New discussion that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.discussion.html_url}}'); issue_comment: if: ${{ github.event_name == 'issue_comment' && !github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') }} name: TSC notification on every new comment in issue runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: issuemarkdown @@ -104,12 +188,39 @@ jobs: SLACK_TITLE: 🆘 New comment under existing issue that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); pr_comment: if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') name: TSC notification on every new comment in pr runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: prmarkdown @@ -122,12 +233,39 @@ jobs: SLACK_TITLE: 🆘 New comment under existing PR that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); discussion_comment: if: github.event_name == 'discussion_comment' && contains(github.event.comment.body, '@asyncapi/tsc_members') name: TSC notification on every new comment in discussion runs-on: ubuntu-latest steps: + ######### + # Handling Slack notifications + ######### - name: Convert markdown to slack markdown uses: LoveToKnow/slackify-markdown-action@v1.0.0 id: discussionmarkdown @@ -139,4 +277,28 @@ jobs: SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} SLACK_TITLE: 🆘 New comment under existing discussion that requires TSC Members attention 🆘 SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} - MSG_MINIMAL: true \ No newline at end of file + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); \ No newline at end of file diff --git a/.github/workflows/scripts/README.md b/.github/workflows/scripts/README.md new file mode 100644 index 000000000..ba97dca07 --- /dev/null +++ b/.github/workflows/scripts/README.md @@ -0,0 +1 @@ +The entire `scripts` directory is centrally managed in [.github](https://github.com/asyncapi/.github/) repository. Any changes in this folder should be done in central repository. \ No newline at end of file diff --git a/.github/workflows/scripts/mailchimp/htmlContent.js b/.github/workflows/scripts/mailchimp/htmlContent.js new file mode 100644 index 000000000..e3eadc979 --- /dev/null +++ b/.github/workflows/scripts/mailchimp/htmlContent.js @@ -0,0 +1,495 @@ +/** + * This code is centrally managed in https://github.com/asyncapi/.github/ + * Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + */ +module.exports = (link) => { + + return ` + + + + + + + + *|MC:SUBJECT|* + + + + + + +
+ + + + +
+ + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + +
+ + Hey *|FNAME|*,
+
+There is a new topic at AsyncAPI Initiative that requires Technical Steering Committee attention. +
+Please have a look if it is just something you need to be aware of, or maybe your vote is needed. +
+Click here to see more details on GitHub. +
+ + + +
+ + + + + + + +
+ + + + + + + + +
+ + Cheers,
+AsyncAPI Initiative +
+ + + +
+ + + + + +
+ + + + + + + + +
+ + Want to change how you receive these emails?
+You can update your preferences or unsubscribe from this list.
+  +
+ + + +
+ + +
+
+ + +` +} \ No newline at end of file diff --git a/.github/workflows/scripts/mailchimp/index.js b/.github/workflows/scripts/mailchimp/index.js new file mode 100644 index 000000000..a7b6f78fb --- /dev/null +++ b/.github/workflows/scripts/mailchimp/index.js @@ -0,0 +1,73 @@ +/** + * This code is centrally managed in https://github.com/asyncapi/.github/ + * Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + */ +const mailchimp = require('@mailchimp/mailchimp_marketing'); +const core = require('@actions/core'); +const htmlContent = require('./htmlContent.js'); + +/** + * Sending API request to mailchimp to schedule email to subscribers + * Input is the URL to issue/discussion or other resource + */ +module.exports = async (link) => { + + let newCampaign; + + mailchimp.setConfig({ + apiKey: process.env.MAILCHIMP_API_KEY, + server: 'us12' + }); + + /* + * First we create campaign + */ + try { + newCampaign = await mailchimp.campaigns.create({ + type: 'regular', + recipients: { + list_id: '6e3e437abe', + segments_opts: { + saved_segment_id: 'tsc-voting-email' + } + }, + settings: { + subject_line: 'AsyncAPI TSC members attention required', + preview_text: 'Check out the latest topic that TSC members have to be aware of', + title: `New topic info - ${ new Date(Date.now()).toUTCString()}`, + from_name: 'AsyncAPI Initiative', + reply_to: 'info@asyncapi.io', + } + }); + } catch (error) { + return core.setFailed(`Failed creating campaign: ${ JSON.stringify(error) }`); + } + + /* + * Content of the email is added separately after campaign creation + */ + try { + await mailchimp.campaigns.setContent(newCampaign.id, { html: htmlContent(link) }); + } catch (error) { + return core.setFailed(`Failed adding content to campaign: ${ JSON.stringify(error) }`); + } + + /* + * We schedule an email to send it immediately + */ + try { + //schedule for next hour + //so if this code was created by new issue creation at 9:46, the email is scheduled for 10:00 + //is it like this as schedule has limitiations and you cannot schedule email for 9:48 + const scheduleDate = new Date(Date.parse(new Date(Date.now()).toISOString()) + 1 * 1 * 60 * 60 * 1000); + scheduleDate.setUTCMinutes(00); + + await mailchimp.campaigns.schedule(newCampaign.id, { + schedule_time: scheduleDate.toISOString(), + }); + } catch (error) { + return core.setFailed(`Failed scheduling email: ${ JSON.stringify(error) }`); + } + + core.info(`New email campaign created`); +} \ No newline at end of file diff --git a/.github/workflows/scripts/mailchimp/package-lock.json b/.github/workflows/scripts/mailchimp/package-lock.json new file mode 100644 index 000000000..7ee7d84f8 --- /dev/null +++ b/.github/workflows/scripts/mailchimp/package-lock.json @@ -0,0 +1,597 @@ +{ + "name": "schedule-email", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "schedule-email", + "license": "Apache 2.0", + "dependencies": { + "@actions/core": "1.6.0", + "@mailchimp/mailchimp_marketing": "3.0.74" + } + }, + "node_modules/@actions/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", + "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "dependencies": { + "@actions/http-client": "^1.0.11" + } + }, + "node_modules/@actions/http-client": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", + "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "dependencies": { + "tunnel": "0.0.6" + } + }, + "node_modules/@mailchimp/mailchimp_marketing": { + "version": "3.0.74", + "resolved": "https://registry.npmjs.org/@mailchimp/mailchimp_marketing/-/mailchimp_marketing-3.0.74.tgz", + "integrity": "sha512-039iu4GRr7wpXqweBLuS05wvOBtPxSa31cjxgftBYSt7031f0sHEi8Up2DicfbSuQK0AynPDeVyuxrb31Lx+yQ==", + "dependencies": { + "dotenv": "^8.2.0", + "superagent": "3.8.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/superagent": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.1.tgz", + "integrity": "sha512-VMBFLYgFuRdfeNQSMLbxGSLfmXL/xc+OO+BZp41Za/NRDBet/BNbkRJrYzCUu0u4GU0i/ml2dtT8b9qgkw9z6Q==", + "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.1.1", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + }, + "dependencies": { + "@actions/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", + "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "requires": { + "@actions/http-client": "^1.0.11" + } + }, + "@actions/http-client": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", + "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "requires": { + "tunnel": "0.0.6" + } + }, + "@mailchimp/mailchimp_marketing": { + "version": "3.0.74", + "resolved": "https://registry.npmjs.org/@mailchimp/mailchimp_marketing/-/mailchimp_marketing-3.0.74.tgz", + "integrity": "sha512-039iu4GRr7wpXqweBLuS05wvOBtPxSa31cjxgftBYSt7031f0sHEi8Up2DicfbSuQK0AynPDeVyuxrb31Lx+yQ==", + "requires": { + "dotenv": "^8.2.0", + "superagent": "3.8.1" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "superagent": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.1.tgz", + "integrity": "sha512-VMBFLYgFuRdfeNQSMLbxGSLfmXL/xc+OO+BZp41Za/NRDBet/BNbkRJrYzCUu0u4GU0i/ml2dtT8b9qgkw9z6Q==", + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.1.1", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + } + } +} \ No newline at end of file diff --git a/.github/workflows/scripts/mailchimp/package.json b/.github/workflows/scripts/mailchimp/package.json new file mode 100644 index 000000000..cc50e43e0 --- /dev/null +++ b/.github/workflows/scripts/mailchimp/package.json @@ -0,0 +1,9 @@ +{ + "name": "schedule-email", + "description": "This code is responsible for scheduling an email campaign. This file is centrally managed in https://github.com/asyncapi/.github/", + "license": "Apache 2.0", + "dependencies": { + "@actions/core": "1.6.0", + "@mailchimp/mailchimp_marketing": "3.0.74" + } +} \ No newline at end of file From 8912e4b29625a8e02ac3cde232b3e939e8feb89f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Oct 2022 17:40:45 +0200 Subject: [PATCH 07/18] chore(deps): bump @actions/core from 1.6.0 to 1.9.1 in /.github/workflows/scripts/mailchimp (#867) --- .../scripts/mailchimp/package-lock.json | 51 ++++++++++++------- .../workflows/scripts/mailchimp/package.json | 2 +- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/.github/workflows/scripts/mailchimp/package-lock.json b/.github/workflows/scripts/mailchimp/package-lock.json index 7ee7d84f8..e7f570381 100644 --- a/.github/workflows/scripts/mailchimp/package-lock.json +++ b/.github/workflows/scripts/mailchimp/package-lock.json @@ -7,24 +7,25 @@ "name": "schedule-email", "license": "Apache 2.0", "dependencies": { - "@actions/core": "1.6.0", + "@actions/core": "1.9.1", "@mailchimp/mailchimp_marketing": "3.0.74" } }, "node_modules/@actions/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", - "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", + "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", "dependencies": { - "@actions/http-client": "^1.0.11" + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" } }, "node_modules/@actions/http-client": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", - "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", + "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", "dependencies": { - "tunnel": "0.0.6" + "tunnel": "^0.0.6" } }, "node_modules/@mailchimp/mailchimp_marketing": { @@ -331,23 +332,32 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } } }, "dependencies": { "@actions/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", - "integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", + "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", "requires": { - "@actions/http-client": "^1.0.11" + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" } }, "@actions/http-client": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-1.0.11.tgz", - "integrity": "sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", + "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", "requires": { - "tunnel": "0.0.6" + "tunnel": "^0.0.6" } }, "@mailchimp/mailchimp_marketing": { @@ -592,6 +602,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } -} \ No newline at end of file +} diff --git a/.github/workflows/scripts/mailchimp/package.json b/.github/workflows/scripts/mailchimp/package.json index cc50e43e0..28b447ff7 100644 --- a/.github/workflows/scripts/mailchimp/package.json +++ b/.github/workflows/scripts/mailchimp/package.json @@ -3,7 +3,7 @@ "description": "This code is responsible for scheduling an email campaign. This file is centrally managed in https://github.com/asyncapi/.github/", "license": "Apache 2.0", "dependencies": { - "@actions/core": "1.6.0", + "@actions/core": "1.9.1", "@mailchimp/mailchimp_marketing": "3.0.74" } } \ No newline at end of file From 9549230a2b716943ca908b7fd3916cf77d019be3 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:21:28 +0200 Subject: [PATCH 08/18] docs: set proper indentation for the TOC (#853) --- spec/asyncapi.md | 78 ++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/spec/asyncapi.md b/spec/asyncapi.md index a2799ffbb..f78e94b1c 100644 --- a/spec/asyncapi.md +++ b/spec/asyncapi.md @@ -42,45 +42,45 @@ It means that the [application](#definitionsApplication) allows [consumers](#def - [Channel](#definitionsChannel) - [Protocol](#definitionsProtocol) - [Specification](#specification) - - [Format](#format) - - [File Structure](#file-structure) - - [Absolute URLs](#absolute-urls) - - [Schema](#schema) - - [AsyncAPI Object](#A2SObject) - - [AsyncAPI Version String](#A2SVersionString) - - [Identifier](#A2SIdString) - - [Info Object](#infoObject) - - [Contact Object](#contactObject) - - [License Object](#licenseObject) - - [Servers Object](#serversObject) - - [Server Object](#serverObject) - - [Server Variable Object](#serverVariableObject) - - [Default Content Type](#defaultContentTypeString) - - [Channels Object](#channelsObject) - - [Channel Item Object](#channelItemObject) - - [Operation Object](#operationObject) - - [Operation Trait Object](#operationTraitObject) - - [Message Object](#messageObject) - - [Message Trait Object](#messageTraitObject) - - [Message Example Object](#messageExampleObject) - - [Tags Object](#tagsObject) - - [Tag Object](#tag-object) - - [External Documentation Object](#externalDocumentationObject) - - [Components Object](#componentsObject) - - [Reference Object](#referenceObject) - - [Schema Object](#schemaObject) - - [Security Scheme Object](#securitySchemeObject) - - [Security Requirement Object](#security-requirement-object) - - [OAuth Flows Object](#oauth-flows-object) - - [OAuth Flow Object](#oauth-flow-object) - - [Server Bindings Object](#serverBindingsObject) - - [Parameters Object](#parametersObject) - - [Parameter Object](#parameterObject) - - [Channel Bindings Object](#channelBindingsObject) - - [Operation Bindings Object](#operationBindingsObject) - - [Message Bindings Object](#messageBindingsObject) - - [Correlation ID Object](#correlationIdObject) - - [Specification Extensions](#specificationExtensions) + - [Format](#format) + - [File Structure](#file-structure) + - [Absolute URLs](#absolute-urls) + - [Schema](#schema) + - [AsyncAPI Object](#A2SObject) + - [AsyncAPI Version String](#A2SVersionString) + - [Identifier](#A2SIdString) + - [Info Object](#infoObject) + - [Contact Object](#contactObject) + - [License Object](#licenseObject) + - [Servers Object](#serversObject) + - [Server Object](#serverObject) + - [Server Variable Object](#serverVariableObject) + - [Default Content Type](#defaultContentTypeString) + - [Channels Object](#channelsObject) + - [Channel Item Object](#channelItemObject) + - [Operation Object](#operationObject) + - [Operation Trait Object](#operationTraitObject) + - [Message Object](#messageObject) + - [Message Trait Object](#messageTraitObject) + - [Message Example Object](#messageExampleObject) + - [Tags Object](#tagsObject) + - [Tag Object](#tag-object) + - [External Documentation Object](#externalDocumentationObject) + - [Components Object](#componentsObject) + - [Reference Object](#referenceObject) + - [Schema Object](#schemaObject) + - [Security Scheme Object](#securitySchemeObject) + - [Security Requirement Object](#security-requirement-object) + - [OAuth Flows Object](#oauth-flows-object) + - [OAuth Flow Object](#oauth-flow-object) + - [Server Bindings Object](#serverBindingsObject) + - [Parameters Object](#parametersObject) + - [Parameter Object](#parameterObject) + - [Channel Bindings Object](#channelBindingsObject) + - [Operation Bindings Object](#operationBindingsObject) + - [Message Bindings Object](#messageBindingsObject) + - [Correlation ID Object](#correlationIdObject) + - [Specification Extensions](#specificationExtensions) From 226447a01966bca188bec83da2c001f96fed39cf Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 9 Nov 2022 19:29:03 +0100 Subject: [PATCH 09/18] ci: update generic workflows (#871) --- ...d-ready-to-merge-or-do-not-merge-label.yml | 17 +- ...ns-remove-ready-to-merge-label-on-edit.yml | 5 +- .../workflows/issues-prs-notifications.yml | 104 ++-- .github/workflows/link-check-cron.yml | 38 +- .github/workflows/link-check-pr.yml | 27 +- .github/workflows/lint-pr-title.yml | 36 +- .../workflows/notify-tsc-members-mention.yml | 575 +++++++++--------- 7 files changed, 397 insertions(+), 405 deletions(-) diff --git a/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml b/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml index e00a45fa3..79c8079ec 100644 --- a/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml +++ b/.github/workflows/automerge-for-humans-add-ready-to-merge-or-do-not-merge-label.yml @@ -7,14 +7,14 @@ name: Label PRs # if proper comment added -on: - issue_comment: - types: - - created +on: + issue_comment: + types: + - created jobs: add-ready-to-merge-label: - if: > + if: > github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot' && @@ -25,7 +25,6 @@ jobs: runs-on: ubuntu-latest steps: - - name: Add ready-to-merge label uses: actions/github-script@v5 with: @@ -64,7 +63,7 @@ jobs: Thanks 😄` }) } - + add-do-not-merge-label: if: > github.event.issue.pull_request && @@ -86,7 +85,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, labels: ['do-not-merge'] - }) + }) add-autoupdate-label: if: > github.event.issue.pull_request && @@ -108,4 +107,4 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, labels: ['autoupdate'] - }) + }) diff --git a/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml b/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml index f38296c8d..b8fc9904d 100644 --- a/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml +++ b/.github/workflows/automerge-for-humans-remove-ready-to-merge-label-on-edit.yml @@ -22,14 +22,11 @@ jobs: script: | const labelToRemove = 'ready-to-merge'; const labels = context.payload.pull_request.labels; - const isLabelPresent = labels.some(label => label.name === labelToRemove) - if(!isLabelPresent) return; - github.rest.issues.removeLabel({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, name: labelToRemove - }) + }) diff --git a/.github/workflows/issues-prs-notifications.yml b/.github/workflows/issues-prs-notifications.yml index 576b2bac8..ca665404b 100644 --- a/.github/workflows/issues-prs-notifications.yml +++ b/.github/workflows/issues-prs-notifications.yml @@ -5,7 +5,6 @@ name: Notify slack on: - issues: types: [opened, reopened] @@ -16,57 +15,56 @@ on: types: [created] jobs: + issue: + if: github.event_name == 'issues' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' + name: Notify slack on every new issue + runs-on: ubuntu-latest + steps: + - name: Convert markdown to slack markdown for issue + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: issuemarkdown + with: + text: "[${{github.event.issue.title}}](${{github.event.issue.html_url}}) \n ${{github.event.issue.body}}" + - name: Send info about issue + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} + SLACK_TITLE: 🐛 New Issue in ${{github.repository}} 🐛 + SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} + MSG_MINIMAL: true - issue: - if: github.event_name == 'issues' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' - name: Notify slack on every new issue - runs-on: ubuntu-latest - steps: - - name: Convert markdown to slack markdown for issue - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: issuemarkdown - with: - text: "[${{github.event.issue.title}}](${{github.event.issue.html_url}}) \n ${{github.event.issue.body}}" - - name: Send info about issue - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} - SLACK_TITLE: 🐛 New Issue in ${{github.repository}} 🐛 - SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} - MSG_MINIMAL: true + pull_request: + if: github.event_name == 'pull_request_target' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' + name: Notify slack on every new pull request + runs-on: ubuntu-latest + steps: + - name: Convert markdown to slack markdown for pull request + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: prmarkdown + with: + text: "[${{github.event.pull_request.title}}](${{github.event.pull_request.html_url}}) \n ${{github.event.pull_request.body}}" + - name: Send info about pull request + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} + SLACK_TITLE: 💪 New Pull Request in ${{github.repository}} 💪 + SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} + MSG_MINIMAL: true - pull_request: - if: github.event_name == 'pull_request_target' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' - name: Notify slack on every new pull request - runs-on: ubuntu-latest - steps: - - name: Convert markdown to slack markdown for pull request - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: prmarkdown - with: - text: "[${{github.event.pull_request.title}}](${{github.event.pull_request.html_url}}) \n ${{github.event.pull_request.body}}" - - name: Send info about pull request - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} - SLACK_TITLE: 💪 New Pull Request in ${{github.repository}} 💪 - SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} - MSG_MINIMAL: true - - discussion: - if: github.event_name == 'discussion' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' - name: Notify slack on every new pull request - runs-on: ubuntu-latest - steps: - - name: Convert markdown to slack markdown for pull request - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: discussionmarkdown - with: - text: "[${{github.event.discussion.title}}](${{github.event.discussion.html_url}}) \n ${{github.event.discussion.body}}" - - name: Send info about pull request - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} - SLACK_TITLE: 💬 New Discussion in ${{github.repository}} 💬 - SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} - MSG_MINIMAL: true + discussion: + if: github.event_name == 'discussion' && github.actor != 'asyncapi-bot' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]' + name: Notify slack on every new pull request + runs-on: ubuntu-latest + steps: + - name: Convert markdown to slack markdown for pull request + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: discussionmarkdown + with: + text: "[${{github.event.discussion.title}}](${{github.event.discussion.html_url}}) \n ${{github.event.discussion.body}}" + - name: Send info about pull request + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_GITHUB_NEWISSUEPR}} + SLACK_TITLE: 💬 New Discussion in ${{github.repository}} 💬 + SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} + MSG_MINIMAL: true diff --git a/.github/workflows/link-check-cron.yml b/.github/workflows/link-check-cron.yml index e992e2d6f..873d4297f 100644 --- a/.github/workflows/link-check-cron.yml +++ b/.github/workflows/link-check-cron.yml @@ -8,30 +8,30 @@ on: schedule: # At 00:00 UTC on every Monday - cron: '0 0 * * 0' - + jobs: External-link-validation-weekly: if: startsWith(github.repository, 'asyncapi/') runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v3 + + # Checks the status of hyperlinks in .md files + - name: Check links + uses: gaurav-nelson/github-action-markdown-link-check@0a51127e9955b855a9bbfa1ff5577f1d1338c9a5 #1.0.14 but pointing to commit for security reasons + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'yes' - # Checks the status of hyperlinks in .md files - - name: Check links - uses: gaurav-nelson/github-action-markdown-link-check@0a51127e9955b855a9bbfa1ff5577f1d1338c9a5 #1.0.14 but pointing to commit for security reasons - with: - use-quiet-mode: 'yes' - use-verbose-mode: 'yes' - - # A configuration file can be included, indicating the properties of the link check action - # More information can be found here: https://github.com/tcort/markdown-link-check#config-file-format - # Create mlc_config.json file in the root of the directory + # A configuration file can be included, indicating the properties of the link check action + # More information can be found here: https://github.com/tcort/markdown-link-check#config-file-format + # Create mlc_config.json file in the root of the directory - - name: Report workflow run status to Slack - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,action,workflow - env: + - name: Report workflow run status to Slack + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,action,workflow + env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel + if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel diff --git a/.github/workflows/link-check-pr.yml b/.github/workflows/link-check-pr.yml index deb425cbf..51f6cf780 100644 --- a/.github/workflows/link-check-pr.yml +++ b/.github/workflows/link-check-pr.yml @@ -3,7 +3,7 @@ name: Check Markdown links -on: +on: pull_request_target: types: [synchronize, ready_for_review, opened, reopened] paths: @@ -13,15 +13,16 @@ jobs: External-link-validation-on-PR: runs-on: ubuntu-latest steps: - - name: Checkout repo - uses: actions/checkout@v3 - - name: Check links - uses: gaurav-nelson/github-action-markdown-link-check@0a51127e9955b855a9bbfa1ff5577f1d1338c9a5 #1.0.14 but pointing to commit for security reasons - with: - use-quiet-mode: 'yes' - use-verbose-mode: 'yes' - check-modified-files-only: 'yes' # Only modified files are checked on PRs - - # A configuration file can be included, indicating the properties of the link check action - # More information can be found here: https://github.com/tcort/markdown-link-check#config-file-format - # Create mlc_config.json file in the root of the directory + - name: Checkout repo + uses: actions/checkout@v3 + - name: Check links + uses: gaurav-nelson/github-action-markdown-link-check@0a51127e9955b855a9bbfa1ff5577f1d1338c9a5 #1.0.14 but pointing to commit for security reasons + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'yes' + check-modified-files-only: 'yes' # Only modified files are checked on PRs + + + # A configuration file can be included, indicating the properties of the link check action + # More information can be found here: https://github.com/tcort/markdown-link-check#config-file-format + # Create mlc_config.json file in the root of the directory diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml index 0440d87e6..c4a942a91 100644 --- a/.github/workflows/lint-pr-title.yml +++ b/.github/workflows/lint-pr-title.yml @@ -1,22 +1,20 @@ # This action is centrally managed in https://github.com/asyncapi/.github/ # Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - - name: Lint PR title on: pull_request_target: types: [opened, reopened, synchronize, edited, ready_for_review] - + jobs: lint-pr-title: - name: Lint PR title - runs-on: ubuntu-latest - steps: + name: Lint PR title + runs-on: ubuntu-latest + steps: # Since this workflow is REQUIRED for a PR to be mergable, we have to have this 'if' statement in step level instead of job level. - if: ${{ !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor) }} - uses: amannn/action-semantic-pull-request@505e44b4f33b4c801f063838b3f053990ee46ea7 #version 4.6.0 + uses: amannn/action-semantic-pull-request@505e44b4f33b4c801f063838b3f053990ee46ea7 #version 4.6.0 id: lint_pr_title env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN}} @@ -24,26 +22,26 @@ jobs: subjectPattern: ^(?![A-Z]).+$ subjectPatternError: | The subject "{subject}" found in the pull request title "{title}" should start with a lowercase character. - - # Comments the error message from the above lint_pr_title action + + # Comments the error message from the above lint_pr_title action - if: ${{ always() && steps.lint_pr_title.outputs.error_message != null && !contains(fromJson('["asyncapi-bot", "dependabot[bot]", "dependabot-preview[bot]", "allcontributors"]'), github.actor)}} name: Comment on PR - uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 + uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 with: header: pr-title-lint-error GITHUB_TOKEN: ${{ secrets.GH_TOKEN}} message: | - - We require all PRs to follow [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/). - More details 👇🏼 - ``` - ${{ steps.lint_pr_title.outputs.error_message}} - ``` - # deletes the error comment if the title is correct + + We require all PRs to follow [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/). + More details 👇🏼 + ``` + ${{ steps.lint_pr_title.outputs.error_message}} + ``` + # deletes the error comment if the title is correct - if: ${{ steps.lint_pr_title.outputs.error_message == null }} name: delete the comment - uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 - with: + uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443 #version 2.2 + with: header: pr-title-lint-error delete: true GITHUB_TOKEN: ${{ secrets.GH_TOKEN}} diff --git a/.github/workflows/notify-tsc-members-mention.yml b/.github/workflows/notify-tsc-members-mention.yml index 1cdb371c6..f7abce318 100644 --- a/.github/workflows/notify-tsc-members-mention.yml +++ b/.github/workflows/notify-tsc-members-mention.yml @@ -5,300 +5,299 @@ name: Notify slack and email subscribers whenever TSC members are mentioned in GitHub on: - issue_comment: - types: - - created - - edited - - discussion_comment: - types: - - created - - edited - - issues: - types: - - opened - - reopened + issue_comment: + types: + - created + - edited - pull_request_target: - types: - - opened - - reopened - - ready_for_review + discussion_comment: + types: + - created + - edited - discussion: - types: - - created - - edited + issues: + types: + - opened + - reopened + + pull_request_target: + types: + - opened + - reopened + - ready_for_review + + discussion: + types: + - created + - edited jobs: + issue: + if: github.event_name == 'issues' && contains(github.event.issue.body, '@asyncapi/tsc_members') + name: TSC notification on every new issue + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: issuemarkdown + with: + text: "[${{github.event.issue.title}}](${{github.event.issue.html_url}}) \n ${{github.event.issue.body}}" + - name: Send info about issue + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New issue that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.issue.html_url}}'); - issue: - if: github.event_name == 'issues' && contains(github.event.issue.body, '@asyncapi/tsc_members') - name: TSC notification on every new issue - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: issuemarkdown - with: - text: "[${{github.event.issue.title}}](${{github.event.issue.html_url}}) \n ${{github.event.issue.body}}" - - name: Send info about issue - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New issue that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.issue.html_url}}'); + pull_request: + if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.body, '@asyncapi/tsc_members') + name: TSC notification on every new pull request + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: prmarkdown + with: + text: "[${{github.event.pull_request.title}}](${{github.event.pull_request.html_url}}) \n ${{github.event.pull_request.body}}" + - name: Send info about pull request + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New PR that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.pull_request.html_url}}'); - pull_request: - if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.body, '@asyncapi/tsc_members') - name: TSC notification on every new pull request - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: prmarkdown - with: - text: "[${{github.event.pull_request.title}}](${{github.event.pull_request.html_url}}) \n ${{github.event.pull_request.body}}" - - name: Send info about pull request - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New PR that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.pull_request.html_url}}'); - - discussion: - if: github.event_name == 'discussion' && contains(github.event.discussion.body, '@asyncapi/tsc_members') - name: TSC notification on every new discussion - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: discussionmarkdown - with: - text: "[${{github.event.discussion.title}}](${{github.event.discussion.html_url}}) \n ${{github.event.discussion.body}}" - - name: Send info about pull request - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New discussion that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.discussion.html_url}}'); + discussion: + if: github.event_name == 'discussion' && contains(github.event.discussion.body, '@asyncapi/tsc_members') + name: TSC notification on every new discussion + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: discussionmarkdown + with: + text: "[${{github.event.discussion.title}}](${{github.event.discussion.html_url}}) \n ${{github.event.discussion.body}}" + - name: Send info about pull request + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New discussion that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.discussion.html_url}}'); - issue_comment: - if: ${{ github.event_name == 'issue_comment' && !github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') }} - name: TSC notification on every new comment in issue - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: issuemarkdown - with: - text: "[${{github.event.issue.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" - - name: Send info about issue comment - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New comment under existing issue that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); + issue_comment: + if: ${{ github.event_name == 'issue_comment' && !github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') }} + name: TSC notification on every new comment in issue + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: issuemarkdown + with: + text: "[${{github.event.issue.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" + - name: Send info about issue comment + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New comment under existing issue that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.issuemarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); - pr_comment: - if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') - name: TSC notification on every new comment in pr - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: prmarkdown - with: - text: "[${{github.event.issue.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" - - name: Send info about PR comment - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New comment under existing PR that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); + pr_comment: + if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') + name: TSC notification on every new comment in pr + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: prmarkdown + with: + text: "[${{github.event.issue.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" + - name: Send info about PR comment + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New comment under existing PR that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.prmarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); - discussion_comment: - if: github.event_name == 'discussion_comment' && contains(github.event.comment.body, '@asyncapi/tsc_members') - name: TSC notification on every new comment in discussion - runs-on: ubuntu-latest - steps: - ######### - # Handling Slack notifications - ######### - - name: Convert markdown to slack markdown - uses: LoveToKnow/slackify-markdown-action@v1.0.0 - id: discussionmarkdown - with: - text: "[${{github.event.discussion.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" - - name: Send info about discussion comment - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} - SLACK_TITLE: 🆘 New comment under existing discussion that requires TSC Members attention 🆘 - SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} - MSG_MINIMAL: true - ######### - # Handling Mailchimp notifications - ######### - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - name: Install deps - run: npm install - working-directory: ./.github/workflows/scripts/mailchimp - - name: Send email with MailChimp - uses: actions/github-script@v4 - env: - CALENDAR_ID: ${{ secrets.CALENDAR_ID }} - CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} - MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} - with: - script: | - const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); \ No newline at end of file + discussion_comment: + if: github.event_name == 'discussion_comment' && contains(github.event.comment.body, '@asyncapi/tsc_members') + name: TSC notification on every new comment in discussion + runs-on: ubuntu-latest + steps: + ######### + # Handling Slack notifications + ######### + - name: Convert markdown to slack markdown + uses: LoveToKnow/slackify-markdown-action@v1.0.0 + id: discussionmarkdown + with: + text: "[${{github.event.discussion.title}}](${{github.event.comment.html_url}}) \n ${{github.event.comment.body}}" + - name: Send info about discussion comment + uses: rtCamp/action-slack-notify@v2 + env: + SLACK_WEBHOOK: ${{secrets.SLACK_TSC_MEMBERS_NOTIFY}} + SLACK_TITLE: 🆘 New comment under existing discussion that requires TSC Members attention 🆘 + SLACK_MESSAGE: ${{steps.discussionmarkdown.outputs.text}} + MSG_MINIMAL: true + ######### + # Handling Mailchimp notifications + ######### + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install deps + run: npm install + working-directory: ./.github/workflows/scripts/mailchimp + - name: Send email with MailChimp + uses: actions/github-script@v4 + env: + CALENDAR_ID: ${{ secrets.CALENDAR_ID }} + CALENDAR_SERVICE_ACCOUNT: ${{ secrets.CALENDAR_SERVICE_ACCOUNT }} + MAILCHIMP_API_KEY: ${{ secrets.MAILCHIMP_API_KEY }} + with: + script: | + const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); + sendEmail('${{github.event.comment.html_url}}'); From d5c89607624890d2b2c6bd547d3c29500ed04a2d Mon Sep 17 00:00:00 2001 From: Tenshi Codes <116377630+codingtenshi@users.noreply.github.com> Date: Mon, 14 Nov 2022 20:03:02 +0100 Subject: [PATCH 10/18] ci: remove not needed workflow (#872) --- .github/workflows/bump.yml | 34 -------- .github/workflows/if-go-pr-testing.yml | 69 ---------------- .github/workflows/if-nodejs-pr-testing.yml | 61 -------------- .github/workflows/if-nodejs-release.yml | 83 -------------------- .github/workflows/if-nodejs-version-bump.yml | 49 ------------ 5 files changed, 296 deletions(-) delete mode 100644 .github/workflows/bump.yml delete mode 100644 .github/workflows/if-go-pr-testing.yml delete mode 100644 .github/workflows/if-nodejs-pr-testing.yml delete mode 100644 .github/workflows/if-nodejs-release.yml delete mode 100644 .github/workflows/if-nodejs-version-bump.yml diff --git a/.github/workflows/bump.yml b/.github/workflows/bump.yml deleted file mode 100644 index 68daa7c0c..000000000 --- a/.github/workflows/bump.yml +++ /dev/null @@ -1,34 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# Purpose of this action is to update npm package in libraries that use it. It is like dependabot for asyncapi npm modules only. -# It runs in a repo after merge of release commit and searches for other packages that use released package. Every found package gets updated with lates version - -name: Bump package version in dependent repos - if Node project - -on: - # It cannot run on release event as when release is created then version is not yet bumped in package.json - # This means we cannot extract easily latest version and have a risk that package is not yet on npm - push: - branches: - - master - -jobs: - bump-in-dependent-projects: - name: Bump this package in repositories that depend on it - if: startsWith(github.event.commits[0].message, 'chore(release):') - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v2 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - - if: steps.packagejson.outputs.exists == 'true' - name: Bumping latest version of this package in other repositories - uses: derberg/npm-dependency-manager-for-your-github-org@v4 - with: - github_token: ${{ secrets.GH_TOKEN }} - committer_username: asyncapi-bot - committer_email: info@asyncapi.io - repos_to_ignore: html-template # this is temporary until react component releases 1.0, then it can be removed diff --git a/.github/workflows/if-go-pr-testing.yml b/.github/workflows/if-go-pr-testing.yml deleted file mode 100644 index 606e689b3..000000000 --- a/.github/workflows/if-go-pr-testing.yml +++ /dev/null @@ -1,69 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# It does magic only if there is go.mod file in the root of the project -name: PR testing - if Go project - -on: - pull_request: - types: [opened, reopened, synchronize, ready_for_review] - -jobs: - lint-go-pr: - name: Lint Go PR - runs-on: ubuntu-latest - steps: - - if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))" - id: should_run - name: Should Run - run: echo "::set-output name=shouldrun::true" - - if: steps.should_run.outputs.shouldrun == 'true' - name: Checkout repository - uses: actions/checkout@v2 - - if: steps.should_run.outputs.shouldrun == 'true' - name: Check if Go project and has go.mod - id: gomod - run: test -e ./go.mod && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - shell: bash - - if: steps.gomod.outputs.exists == 'true' - name: Setup Go - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.16 - - if: steps.gomod.outputs.exists == 'true' - name: golangci-lint - uses: golangci/golangci-lint-action@v2 # golangci-lint version extracted from go.mod. `latest` if missing. - with: - skip-go-installation: true # we wanna control the version of Go in use - - test-go-pr: - name: Test Go PR - ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - steps: - - if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))" - id: should_run - name: Should Run - run: echo "::set-output name=shouldrun::true" - - if: steps.should_run.outputs.shouldrun == 'true' - name: Checkout repository - uses: actions/checkout@v2 - - if: steps.should_run.outputs.shouldrun == 'true' - name: Check if Go project and has go.mod - id: gomod - run: test -e ./go.mod && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - shell: bash - - if: steps.gomod.outputs.exists == 'true' - name: Setup Go - uses: actions/setup-go@v2.1.3 - with: - go-version: 1.16 - - if: steps.gomod.outputs.exists == 'true' - name: Build - run: go build -v ./... - - if: steps.gomod.outputs.exists == 'true' - name: Test - run: go test -v ./... - diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml deleted file mode 100644 index 1dcccd320..000000000 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ /dev/null @@ -1,61 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# It does magic only if there is package.json file in the root of the project -name: PR testing - if Node project - -on: - pull_request: - types: [opened, reopened, synchronize, ready_for_review] - -jobs: - test-nodejs-pr: - name: Test NodeJS PR - ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - steps: - - if: "github.event.pull_request.draft == false &&!((github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'ci: update global workflows')) || (github.actor == 'asyncapi-bot' && startsWith(github.event.pull_request.title, 'chore(release):')) || (github.actor == 'allcontributors' && startsWith(github.event.pull_request.title, 'docs: add')))" - id: should_run - name: Should Run - run: echo "::set-output name=shouldrun::true" - - if: steps.should_run.outputs.shouldrun == 'true' - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows - run: | - git config --global core.autocrlf false - git config --global core.eol lf - - if: steps.should_run.outputs.shouldrun == 'true' - name: Checkout repository - uses: actions/checkout@v2 - - if: steps.should_run.outputs.shouldrun == 'true' - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - shell: bash - - if: steps.packagejson.outputs.exists == 'true' - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 14 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - id: first-installation - run: npm install --loglevel verbose - continue-on-error: true - - if: steps.first-installation.outputs.status == 'failure' && steps.packagejson.outputs.exists == 'true' - name: Clear NPM cache and install deps again - run: | - npm cache clean --force - npm install --loglevel verbose - - if: steps.packagejson.outputs.exists == 'true' - name: Test - run: npm test - - if: steps.packagejson.outputs.exists == 'true' - name: Run linter - run: npm run lint - - if: steps.packagejson.outputs.exists == 'true' - name: Run release assets generation to make sure PR does not break it - run: npm run generate:assets diff --git a/.github/workflows/if-nodejs-release.yml b/.github/workflows/if-nodejs-release.yml deleted file mode 100644 index 4a34feb03..000000000 --- a/.github/workflows/if-nodejs-release.yml +++ /dev/null @@ -1,83 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# It does magic only if there is package.json file in the root of the project -name: Release - if Node project - -on: - push: - branches: - - master - # below lines are not enough to have release supported for these branches - # make sure configuration of `semantic-release` package mentions these branches - - next-spec - - next-major-spec - -jobs: - - test-nodejs: - name: Test NodeJS release on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - steps: - - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows - run: | - git config --global core.autocrlf false - git config --global core.eol lf - - name: Checkout repository - uses: actions/checkout@v2 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - shell: bash - - if: steps.packagejson.outputs.exists == 'true' - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: 14 - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - run: npm install - - if: steps.packagejson.outputs.exists == 'true' - name: Run test - run: npm test - - release: - needs: [test-nodejs] - name: Publish to any of NPM, Github, and Docker Hub - runs-on: ubuntu-latest - steps: - - name: Set git to use LF #to once and for all finish neverending fight between Unix and Windows - run: | - git config --global core.autocrlf false - git config --global core.eol lf - - name: Checkout repository - uses: actions/checkout@v2 - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - - if: steps.packagejson.outputs.exists == 'true' - name: Setup Node.js - uses: actions/setup-node@v1 - with: - node-version: 14 - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - run: npm install - - if: steps.packagejson.outputs.exists == 'true' - name: Publish to any of NPM, Github, and Docker Hub - id: release - env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - GIT_AUTHOR_NAME: asyncapi-bot - GIT_AUTHOR_EMAIL: info@asyncapi.io - GIT_COMMITTER_NAME: asyncapi-bot - GIT_COMMITTER_EMAIL: info@asyncapi.io - run: npm run release diff --git a/.github/workflows/if-nodejs-version-bump.yml b/.github/workflows/if-nodejs-version-bump.yml deleted file mode 100644 index 721caa9d7..000000000 --- a/.github/workflows/if-nodejs-version-bump.yml +++ /dev/null @@ -1,49 +0,0 @@ -# This action is centrally managed in https://github.com/asyncapi/.github/ -# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo - -# It does magic only if there is package.json file in the root of the project -name: Version bump - if Node.js project - -on: - release: - types: - - published - -jobs: - version_bump: - name: Generate assets and bump NodeJS - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - # target branch of release. More info https://docs.github.com/en/rest/reference/repos#releases - # in case release is created from release branch then we need to checkout from given branch - # if @semantic-release/github is used to publish, the minimum version is 7.2.0 for proper working - ref: ${{ github.event.release.target_commitish }} - - name: Check if Node.js project and has package.json - id: packagejson - run: test -e ./package.json && echo "::set-output name=exists::true" || echo "::set-output name=exists::false" - - if: steps.packagejson.outputs.exists == 'true' - name: Install dependencies - run: npm install - - if: steps.packagejson.outputs.exists == 'true' - name: Assets generation - run: npm run generate:assets - - if: steps.packagejson.outputs.exists == 'true' - name: Bump version in package.json - # There is no need to substract "v" from the tag as version script handles it - # When adding "bump:version" script in package.json, make sure no tags are added by default (--no-git-tag-version) as they are already added by release workflow - # When adding "bump:version" script in package.json, make sure --allow-same-version is set in case someone forgot and updated package.json manually and we want to avoide this action to fail and raise confusion - run: VERSION=${{github.event.release.tag_name}} npm run bump:version - - if: steps.packagejson.outputs.exists == 'true' - name: Create Pull Request with updated asset files including package.json - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ secrets.GH_TOKEN }} - commit-message: 'chore(release): ${{github.event.release.tag_name}}' - committer: asyncapi-bot - author: asyncapi-bot - title: 'chore(release): ${{github.event.release.tag_name}}' - body: 'Version bump in package.json for release [${{github.event.release.tag_name}}](${{github.event.release.html_url}})' - branch: version-bump/${{github.event.release.tag_name}} \ No newline at end of file From eb8bb65f7adff9df78082d47d7c67a94f5a11838 Mon Sep 17 00:00:00 2001 From: Lukasz Gornicki Date: Thu, 17 Nov 2022 16:31:06 +0100 Subject: [PATCH 11/18] chore: fix example for operation security (#873) --- .gitignore | 3 ++- examples/operation-security.yml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 55371e5c8..a85bd49c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -.vscode \ No newline at end of file +.vscode +.github/.DS_Store diff --git a/examples/operation-security.yml b/examples/operation-security.yml index f853072b2..b0d234bf4 100644 --- a/examples/operation-security.yml +++ b/examples/operation-security.yml @@ -22,8 +22,8 @@ channels: enum: - application/json security: - petstore_auth: - - subscribe:auth_revocations + - petstore_auth: + - subscribe:auth_revocations components: messages: message: From 90e6a99fe8e57115f2f33d85d9d7bc7dc8b94d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Urba=C5=84czyk?= Date: Tue, 22 Nov 2022 14:26:04 +0100 Subject: [PATCH 12/18] chore: update asyncapi versions in the social-media example (#876) --- examples/social-media/backend/asyncapi.yaml | 2 +- examples/social-media/comments-service/asyncapi.yaml | 2 +- examples/social-media/frontend/asyncapi.yaml | 2 +- examples/social-media/notification-service/asyncapi.yaml | 2 +- examples/social-media/public-api/asyncapi.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/social-media/backend/asyncapi.yaml b/examples/social-media/backend/asyncapi.yaml index 5f7cb94e5..b2f6a9a31 100644 --- a/examples/social-media/backend/asyncapi.yaml +++ b/examples/social-media/backend/asyncapi.yaml @@ -1,4 +1,4 @@ -asyncapi: 2.2.0 +asyncapi: 2.5.0 info: title: Website Backend diff --git a/examples/social-media/comments-service/asyncapi.yaml b/examples/social-media/comments-service/asyncapi.yaml index ce8f93a9e..308c10b03 100644 --- a/examples/social-media/comments-service/asyncapi.yaml +++ b/examples/social-media/comments-service/asyncapi.yaml @@ -1,4 +1,4 @@ -asyncapi: 2.2.0 +asyncapi: 2.5.0 info: title: Comments Service diff --git a/examples/social-media/frontend/asyncapi.yaml b/examples/social-media/frontend/asyncapi.yaml index 2837fb6ff..1f46ede41 100644 --- a/examples/social-media/frontend/asyncapi.yaml +++ b/examples/social-media/frontend/asyncapi.yaml @@ -1,4 +1,4 @@ -asyncapi: 2.2.0 +asyncapi: 2.5.0 info: title: Website WebSocket Client diff --git a/examples/social-media/notification-service/asyncapi.yaml b/examples/social-media/notification-service/asyncapi.yaml index be78362c9..0789a7b6b 100644 --- a/examples/social-media/notification-service/asyncapi.yaml +++ b/examples/social-media/notification-service/asyncapi.yaml @@ -1,4 +1,4 @@ -asyncapi: 2.2.0 +asyncapi: 2.5.0 info: title: Notifications Service diff --git a/examples/social-media/public-api/asyncapi.yaml b/examples/social-media/public-api/asyncapi.yaml index 0a7cdde79..f97ee0b78 100644 --- a/examples/social-media/public-api/asyncapi.yaml +++ b/examples/social-media/public-api/asyncapi.yaml @@ -1,4 +1,4 @@ -asyncapi: 2.2.0 +asyncapi: 2.5.0 info: title: Public API From 77cb1574631fa0494a1018eb71500abf21086161 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 23 Nov 2022 18:37:58 +0100 Subject: [PATCH 13/18] ci: update generic workflows (#877) --- .../workflows/notify-tsc-members-mention.yml | 18 ++++++------------ .../workflows/scripts/mailchimp/htmlContent.js | 4 ++-- .github/workflows/scripts/mailchimp/index.js | 6 +++--- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/.github/workflows/notify-tsc-members-mention.yml b/.github/workflows/notify-tsc-members-mention.yml index f7abce318..e681c18a0 100644 --- a/.github/workflows/notify-tsc-members-mention.yml +++ b/.github/workflows/notify-tsc-members-mention.yml @@ -8,28 +8,22 @@ on: issue_comment: types: - created - - edited discussion_comment: types: - created - - edited issues: types: - opened - - reopened pull_request_target: types: - opened - - reopened - - ready_for_review discussion: types: - created - - edited jobs: issue: @@ -75,7 +69,7 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.issue.html_url}}'); + sendEmail('${{github.event.issue.html_url}}', '${{github.event.issue.title}}'); pull_request: if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.body, '@asyncapi/tsc_members') @@ -120,7 +114,7 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.pull_request.html_url}}'); + sendEmail('${{github.event.pull_request.html_url}}', '${{github.event.pull_request.title}}'); discussion: if: github.event_name == 'discussion' && contains(github.event.discussion.body, '@asyncapi/tsc_members') @@ -165,7 +159,7 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.discussion.html_url}}'); + sendEmail('${{github.event.discussion.html_url}}', '${{github.event.discussion.title}}'); issue_comment: if: ${{ github.event_name == 'issue_comment' && !github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') }} @@ -210,7 +204,7 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); + sendEmail('${{github.event.comment.html_url}}', '${{github.event.issue.title}}'); pr_comment: if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '@asyncapi/tsc_members') @@ -255,7 +249,7 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); + sendEmail('${{github.event.comment.html_url}}', '${{github.event.issue.title}}'); discussion_comment: if: github.event_name == 'discussion_comment' && contains(github.event.comment.body, '@asyncapi/tsc_members') @@ -300,4 +294,4 @@ jobs: with: script: | const sendEmail = require('./.github/workflows/scripts/mailchimp/index.js'); - sendEmail('${{github.event.comment.html_url}}'); + sendEmail('${{github.event.comment.html_url}}', '${{github.event.discussion.title}}'); diff --git a/.github/workflows/scripts/mailchimp/htmlContent.js b/.github/workflows/scripts/mailchimp/htmlContent.js index e3eadc979..d132c72f1 100644 --- a/.github/workflows/scripts/mailchimp/htmlContent.js +++ b/.github/workflows/scripts/mailchimp/htmlContent.js @@ -2,7 +2,7 @@ * This code is centrally managed in https://github.com/asyncapi/.github/ * Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo */ -module.exports = (link) => { +module.exports = (link, title) => { return ` @@ -386,7 +386,7 @@ There is a new topic at AsyncAPI Initiative that requires Technical Steering Com
Please have a look if it is just something you need to be aware of, or maybe your vote is needed.
-Click here to see more details on GitHub. +Topic: ${ title }. diff --git a/.github/workflows/scripts/mailchimp/index.js b/.github/workflows/scripts/mailchimp/index.js index a7b6f78fb..387176b41 100644 --- a/.github/workflows/scripts/mailchimp/index.js +++ b/.github/workflows/scripts/mailchimp/index.js @@ -10,7 +10,7 @@ const htmlContent = require('./htmlContent.js'); * Sending API request to mailchimp to schedule email to subscribers * Input is the URL to issue/discussion or other resource */ -module.exports = async (link) => { +module.exports = async (link, title) => { let newCampaign; @@ -32,7 +32,7 @@ module.exports = async (link) => { } }, settings: { - subject_line: 'AsyncAPI TSC members attention required', + subject_line: `TSC attention required: ${ title }`, preview_text: 'Check out the latest topic that TSC members have to be aware of', title: `New topic info - ${ new Date(Date.now()).toUTCString()}`, from_name: 'AsyncAPI Initiative', @@ -47,7 +47,7 @@ module.exports = async (link) => { * Content of the email is added separately after campaign creation */ try { - await mailchimp.campaigns.setContent(newCampaign.id, { html: htmlContent(link) }); + await mailchimp.campaigns.setContent(newCampaign.id, { html: htmlContent(link, title) }); } catch (error) { return core.setFailed(`Failed adding content to campaign: ${ JSON.stringify(error) }`); } From 1e3ec47ff4019a3d10a1c09fe4db2922227cef4a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 6 Dec 2022 10:47:35 +0100 Subject: [PATCH 14/18] ci: update generic workflows (#879) --- .github/workflows/scripts/mailchimp/index.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/mailchimp/index.js b/.github/workflows/scripts/mailchimp/index.js index 387176b41..4a200c6c4 100644 --- a/.github/workflows/scripts/mailchimp/index.js +++ b/.github/workflows/scripts/mailchimp/index.js @@ -27,8 +27,14 @@ module.exports = async (link, title) => { type: 'regular', recipients: { list_id: '6e3e437abe', - segments_opts: { - saved_segment_id: 'tsc-voting-email' + segment_opts: { + match: 'any', + conditions: [{ + condition_type: 'Interests', + field: 'interests-2801e38b9f', + op: 'interestcontains', + value: ['f7204f9b90'] + }] } }, settings: { From 95643a73e102b0d97f4f8b5f75c5376ebac0c41c Mon Sep 17 00:00:00 2001 From: Animesh Kumar Date: Mon, 19 Dec 2022 15:52:05 +0530 Subject: [PATCH 15/18] docs: update readme, add sponsors section, review requested (#886) --- README.md | 49 ++++++++++++++++++++++++++++++++++++ assets/bump-sh-white-bg.png | Bin 0 -> 17716 bytes assets/bump-sh.svg | 19 ++++++++++++++ assets/ibm.png | Bin 0 -> 2125 bytes assets/postman.png | Bin 0 -> 28530 bytes assets/redhat.png | Bin 0 -> 3406 bytes 6 files changed, 68 insertions(+) create mode 100644 assets/bump-sh-white-bg.png create mode 100644 assets/bump-sh.svg create mode 100644 assets/ibm.png create mode 100644 assets/postman.png create mode 100644 assets/redhat.png diff --git a/README.md b/README.md index c3079baa5..d37f26308 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@
+ ## Read the specification @@ -85,6 +87,53 @@ Definition of the Gemini Websocket API. Check out the [examples](https://github.com/asyncapi/asyncapi/blob/master/examples) directory for more examples. +## Our Sponsors + +### Platinum + +

+ + + Solace logo + +      + + IBM logo + +      + + IQVIA logo + +      + + Postman logo + +

+ + +### Gold + +

+ + + RedHat logo + +      + +

+ +### Silver + +

+ + + Bump.sh logo + +      + +

+ + ## Contributors Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): diff --git a/assets/bump-sh-white-bg.png b/assets/bump-sh-white-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8414a781954dd0f97861199cedb4d93f751e6a GIT binary patch literal 17716 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 + + + + + + + + + + + + + + + + + + diff --git a/assets/ibm.png b/assets/ibm.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7775d282e7562264fbd21997c1fdc01c8412ea GIT binary patch literal 2125 zcmV-T2(tHyP)i}uKs=?w7Yrmhl-$;YVhN;-vn{(B1Fq@c3Mh&EM$s0A9NQU%Mo8!ub3B09d&ITe{8L?zYP2n6=%0q}Drq#%`L? zuf^nYozhW>%0`07;q3F8000M&NklTVtxc5^Pfe+5G+HhF2p}f@H^AU@=BOx zy8=&f>mhz!q%}o;1%x!+bei|$5%w;Pe#vh z>}~Om&$f?>b~wHg^3(najtw3bf$gKBHIA=0v%efTcP!^v#UpNg=IwFpc@cki?O1qN z$KTeEidH$kcC@U2m9uv2@fp&w{cY^TvG~s%ds5UsK$q4xnVjMje>8DCbb!blhc4m) zY@@oj<+rVUK%C=m`yPh49teUU2!bF8q9+Vo;5eLNpN)HcvLog@;4?d$PZ#k}edZI& zmravUyB}Ebtl>qqD<_mgoN^ZIb3!TM1$I1_%}%wojy;~ck()X8eE4bMS!d^eX|Ln_ z-Ph2uROO{_EE=TTZnW2New?VGV|WgL^_c&i7CX+36E$?~`7z))Z1|{XvttoCb1cVC zd{ngAvBw|j`lgNxFDWICO&=8=3!4-9nd6OvcvynRIMGrz47E|u0pL;7^JH%hSZ0nd zF5+Q1-@BbI8%A1wsT9wehJJff|BVm?K@bE%5CoBu%pg#UVDb#?!@*~A1!${lTA}7s zFE$Q>wX@%GH9KHBdp#dexKAkK#a5p{)3mj^X`*RbWnB$&@(p9`^y`CuSwO2x0&J8A zA5b_BJJ#g9xVmX#oGuGK$}wW&3>SJjb88&uvYQpm9Y^2g7-Qpsybd}BQj+G5Jzjp8 z4vn+(-E$lPDJ=`fK`HsRGEatg&oQ(r$-;5CEQUCkkNJ1du`=sx<=FF!4~wmNgzh=! zzzRki$FeYCXl4-s?|2ib*_gi{`#`ug>=-(eNcuq2WDPY{1f1j}Ou2c44fYOP9j9uJ zCQIdSEWmK!6rC7qI-LTe$t;1JD$XYVu$bEfFt$Sw1VIo4K@bERj3BhDfXc*RI9ny3Uo5j7`*c`E1_{$I(RJsn+qE^06B1p+^Plh2scS zXiDc;eOBR7{iu)!xL{#N9EU^Hd?%e_s3_hs1IPI7YaaIc;#hF)d>o|XGqy6^W3QIJIM$ZaMLWiBCzkDI z=*ICLnmlFke*BENSUcUfNCHhL+hn6DKC-{ZVww?jIq11q@z;l%FXQh#Fq}2O^2cAm zi^y)by=ix_9pf371VIo4K@bE%u+?;~W@=nLUHqkXgx?k(2v{!|CzHy2O z3J13@@Am(x*;I1;4i>;l7vbdSn`7JBV z7G&8mGzXyk$I>^)wlz)5j-i9g+Ir^Lx;AfR53FzX9Dr@r1i8^`5LeKf5* zs#lJ4<7{pmms8HXHm%nu$0Aqe&5h$yre1ip2ldHuewQ#uj*I%TWj1|vEb?POjvO^mSE@)>-(h=*a9pCEPF7&flIMcH|sJ4jJ-a%6moY~X<0$W81bo?)NY zU#(%cv0_Ll$;F8kgKCNKCDz9w2!bF8f*^>VGI2mQ4R|ng5f5TpH>dIZ&n(DEUHu}y zUBO9ROlNU2J!K}E6XwR6dnV(*yN?#dAHC%D6ZS3=M=wNxT1|6}d2V-W@XtXXE^)baH#1^Vd=IR1TIaS_$KzC+2t_m29)k8T}* z)sFeUj^l9n%eIR5`!Al;@;Dx$iWRtZoPZ0!%pLy^=4xtrI_g|!00000NkvXXu0mjf D%#|ko literal 0 HcmV?d00001 diff --git a/assets/postman.png b/assets/postman.png new file mode 100644 index 0000000000000000000000000000000000000000..b3715fdd68bd0f40a10174d8d44bfa1e3a1726a1 GIT binary patch literal 28530 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 GF8>eJ*^~wV literal 0 HcmV?d00001 diff --git a/assets/redhat.png b/assets/redhat.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc1af0f94006c48bdd6acda470786aad1dda28d GIT binary patch literal 3406 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 literal 0 HcmV?d00001 From 6c252c2a34408e300705859feb2e325247e2572c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Urba=C5=84czyk?= Date: Tue, 20 Dec 2022 09:18:36 +0100 Subject: [PATCH 16/18] docs: fix websocket-gemini message's payload example (#884) --- examples/websocket-gemini.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/examples/websocket-gemini.yml b/examples/websocket-gemini.yml index 75af8d4d6..06e632017 100644 --- a/examples/websocket-gemini.yml +++ b/examples/websocket-gemini.yml @@ -122,9 +122,9 @@ components: events: - type: change side: bid - price: '54350.40' - remaining: '0.002' - delta: '0.002' + price: 54350.40 + remaining: 0.002 + delta: 0.002 reason: place - name: heartbeatMessage summary: Example of additional heartbeat message when you enable them. @@ -158,12 +158,10 @@ components: events: $ref: '#/components/schemas/events' timestamp: - type: string - format: date-time + type: number description: The timestamp in seconds for this group of events (included for compatibility reasons). We recommend using the timestampms field instead. timestampms: - type: string - format: time + type: number description: The timestamp in milliseconds for this group of events. required: - type @@ -194,7 +192,7 @@ components: enum: ['trade', 'change', 'auction, block_trade'] price: type: number - multipleOf: 1.000 + multipleOf: 0.01 description: The price of this order book entry. side: type: string @@ -205,9 +203,7 @@ components: description: Indicates why the change has occurred. initial is for the initial response message, which will show the entire existing state of the order book. remaining: type: number - multipleOf: 1.000 description: The quantity remaining at that price level after this change occurred. May be zero if all orders at this price level have been filled or canceled. delta: type: number - multipleOf: 1.000 description: The quantity changed. May be negative, if an order is filled or canceled. For initial messages, delta will equal remaining. \ No newline at end of file From 143ddd0638cf1284f35fc915ddc170bcdf0a5a35 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 30 Jan 2023 17:24:48 +0100 Subject: [PATCH 17/18] ci: update generic workflows (#897) --- .../workflows/add-good-first-issue-labels.yml | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/.github/workflows/add-good-first-issue-labels.yml b/.github/workflows/add-good-first-issue-labels.yml index 202345269..e70a70017 100644 --- a/.github/workflows/add-good-first-issue-labels.yml +++ b/.github/workflows/add-good-first-issue-labels.yml @@ -4,36 +4,37 @@ # Purpose of this workflow is to enable anyone to label issue with 'Good First Issue' and 'area/*' with a single command. name: Add 'Good First Issue' and 'area/*' labels # if proper comment added -on: - issue_comment: - types: - - created +on: + issue_comment: + types: + - created jobs: add-labels: - if: ${{!github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot'}} + if: ${{(!github.event.issue.pull_request && github.event.issue.state != 'closed' && github.actor != 'asyncapi-bot') && (contains(github.event.comment.body, '/good-first-issue') || contains(github.event.comment.body, '/gfi' ))}} runs-on: ubuntu-latest steps: - name: Add label - if: contains(github.event.comment.body, '/good-first-issue') || contains(github.event.comment.body, '/gfi' ) uses: actions/github-script@v5 with: github-token: ${{ secrets.GH_TOKEN }} script: | const areas = ['javascript', 'typescript', 'java' , 'go', 'docs', 'ci-cd', 'design']; - const values = context.payload.comment.body.trim().split(" "); - switch(values[1]){ + const words = context.payload.comment.body.trim().split(" "); + const areaIndex = words.findIndex((word)=> word === '/gfi' || word === '/good-first-issue') + 1 + let area = words[areaIndex]; + switch(area){ case 'ts': - values[1] = 'typescript'; + area = 'typescript'; break; case 'js': - values[1] = 'javascript'; + area = 'javascript'; break; case 'markdown': - values[1] = 'docs'; + area = 'docs'; break; } - if(values.length != 2 || !areas.includes(values[1])){ + if(!areas.includes(area)){ const message = `Hey @${context.payload.sender.login}, your message doesn't follow the requirements, you can try \`/help\`.` await github.rest.issues.createComment({ @@ -44,14 +45,14 @@ jobs: }) } else { - //remove complexity and areas if there are any before adding new labels; + // remove area if there is any before adding new labels. const currentLabels = (await github.rest.issues.listLabelsOnIssue({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, })).data.map(label => label.name); - const shouldBeRemoved = currentLabels.filter(label => (label.startsWith('area/') && !label.endsWith(values[1]))); + const shouldBeRemoved = currentLabels.filter(label => (label.startsWith('area/') && !label.endsWith(area)); shouldBeRemoved.forEach(label => { github.rest.issues.deleteLabel({ owner: context.repo.owner, @@ -60,11 +61,11 @@ jobs: }); }); - //add new labels + // Add new labels. github.rest.issues.addLabels({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - labels: ['good first issue', `area/${values[1]}`] + labels: ['good first issue', `area/${area}`] }); } From 8087feec522e2685172c0ccd729a4d2abc7f1360 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Jan 2023 17:53:01 +0100 Subject: [PATCH 18/18] chore(deps): bump cookiejar from 2.1.3 to 2.1.4 in /.github/workflows/scripts/mailchimp (#898) --- .../workflows/scripts/mailchimp/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/scripts/mailchimp/package-lock.json b/.github/workflows/scripts/mailchimp/package-lock.json index e7f570381..089364fa8 100644 --- a/.github/workflows/scripts/mailchimp/package-lock.json +++ b/.github/workflows/scripts/mailchimp/package-lock.json @@ -74,9 +74,9 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-util-is": { "version": "1.0.3", @@ -397,9 +397,9 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "core-util-is": { "version": "1.0.3",