From 21337bdc48c29be7a02ed037a04ec24ec5064673 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 1 Feb 2024 10:05:10 +0100 Subject: [PATCH 001/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1047) --- tweets/recurring-discuss-ideas/2024-02-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-02-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-02-01.tweet b/tweets/recurring-discuss-ideas/2024-02-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-02-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From fde4da904d01f2d8b454c6e6053ef19de38bc749 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 3 Feb 2024 11:05:08 +0100 Subject: [PATCH 002/124] chore(tweet): recurring tweet about slack link (#1050) --- tweets/recurring-slack-link/2024-02-03.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-02-03.tweet diff --git a/tweets/recurring-slack-link/2024-02-03.tweet b/tweets/recurring-slack-link/2024-02-03.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-02-03.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 0286199dc5eb3cfa2eea67774c197d23817c78ac Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 5 Feb 2024 20:49:43 -0600 Subject: [PATCH 003/124] docs: google summer of code 24 (#1053) Co-authored-by: Quetzalli --- .../2024/asyncapi-ideas-page-gsoc-2024.md | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md diff --git a/mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md b/mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md new file mode 100644 index 000000000..98debe314 --- /dev/null +++ b/mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md @@ -0,0 +1,84 @@ +# AsyncAPI Ideas Page: Google Summer of Code 2024 +Welcome to the **AsyncAPI Ideas Page** with our proposed projects for Google Summer of Code (GSoC) 2024! If you are an interested student/contributor, please don't hesitate to contact our mentors directly to discuss project ideas. + +## 1) [Autofix for Spectral Linting Errors: VS Code Extension](https://github.com/asyncapi/vs-asyncapi-preview/issues/160) +Enhance the [AsyncAPI Preview + Spectral](https://github.com/asyncapi/vs-asyncapi-preview) VS Code extension by introducing an autofix feature. This improvement aims to streamline the editing experience by automatically resolving common Spectral linting errors directly within the IDE. + +- ๐ŸŽฏ **Outcome:** Automate corrections for standard spectral linting issues in AsyncAPI documents. [Learn more](https://docs.stoplight.io/docs/spectral/1e63ffd0220f3-async-api-rules). +- ๐Ÿ› ๏ธ **Skills Required:** TypeScript/JavaScript and understanding of Spectral rules. +- ๐Ÿงฉ **Difficulty:** Easy/Medium +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@ivangsa](https://github.com/ivangsa) +- โณ **Length:** 175 Hours + +## 2) [Script Stability Enhancement for AsyncAPI Website](https://github.com/asyncapi/website/issues/2626) +Improve the [AsyncAPI website](https://github.com/asyncapi/website)'s robustness by enhancing script stability in the `/scripts/*` directory. This project involves selecting a suitable testing framework for JavaScript and Next.js, integrating it with the website, developing detailed test cases for scripts, and setting up a GitHub Actions CI workflow for automated testing. + +- ๐ŸŽฏ **Outcome:** Achieve a stable website framework to support continuous development and updates. +- ๐Ÿ› ๏ธ **Skills:** JavaScript, Next.js, unit testing, and CI/CD practices. +- ๐Ÿงฉ **Difficulty:** Medium/Hard +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@akshatnema](https://github.com/akshatnema), [@anshgoyalevil](https://github.com/anshgoyalevil) +- โณ **Length:** 320 Hours + +## 3) [Integration Testing Library for Code Generators](https://github.com/asyncapi/generator/issues/752) +Enhance the [Generator tool](https://github.com/asyncapi/generator) by introducing a feature or creating a new library to simplify integration testing for code generation templates. This solution facilitates the activation of integration tests, ensuring reliability and robustness with our code generators. + +- ๐ŸŽฏ **Outcome:** Enable template maintainers to easily validate and improve the quality of code-generating templates. +- ๐Ÿ› ๏ธ **Skills:** JavaScript/TypeScript, testing libraries, Docker, virtualization, and test automation. +- ๐Ÿงฉ **Difficulty:** Medium/Hard +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@derberg](https://github.com/derberg) +- โณ **Length:** 175 Hours + +## 4) [Markdown and MermaidJS Diagrams Preview: VS Code Extension](https://github.com/asyncapi/vs-asyncapi-preview/issues/161) +Upgrade the [AsyncAPI Preview](https://github.com/asyncapi/vs-asyncapi-preview) VS Code extension to include a feature for visualizing message payloads through Markdown and MermaidJS Class Diagrams. It also incorporates an export feature for the Markdown preview to facilitate its use in external documentation. This enhancement will work with both AsyncAPI schemas and Avro (.avsc) files to offer a dynamic and interactive view of message structures. + +- ๐ŸŽฏ **Outcome:** Deliver an enriched AsyncAPI preview tool that provides a user-friendly, graphical representation of message payloads, improving comprehension and documentation within the AsyncAPI ecosystem. +- ๐Ÿ› ๏ธ **Skills:** TypeScript/JavaScript, MermaidJS, and AsyncAPI schemas. +- ๐Ÿงฉ **Difficulty:** Easy/Medium +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@ivangsa](https://github.com/ivangsa) +- โณ **Length:** 175 Hours + +## 5) [AsyncAPI Website UI Kit Development](https://github.com/asyncapi-archived-repos/design-system/issues/4) +Create a UI Kit for the AsyncAPI website to ensure brand visual consistency and streamline web development. The project will leverage Tailwind CSS, focusing on component-based class encapsulation to minimize class duplication and promote a modular, easy-to-maintain design system. + +- ๐ŸŽฏ **Outcome:** Establish an AsyncAPI Website UI Kit that aligns with our design principles, facilitating the creation of uniform and manageable website elements. +- ๐Ÿ› ๏ธ **Skills:** JavaScript, React, Storybook, and TailwindCSS. +- ๐Ÿงฉ **Difficulty:** Easy/Medium +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@acethecreator](https://github.com/acethecreator), [@akshatnema](https://github.com/akshatnema) +- โณ **Length:** 320 Hours + +## 6) [Dynamic Open Graph Preview for AsyncAPI Studio](https://github.com/asyncapi/studio/issues/224) +Improve social sharing for [AsyncAPI Studio](https://studio.asyncapi.com/) by implementing a dynamic Open Graph link preview generator. This feature will create context-specific preview images for shared links, incorporating key details like the title, description, and statistics from the shared AsyncAPI document. + +- ๐ŸŽฏ **Outcome:** Provide a richer, more informative link-sharing experience on platforms like Twitter, LinkedIn, Facebook, and Slack with custom preview images. +- ๐Ÿ› ๏ธ **Skills:** TypeScript/JavaScript and React. +- ๐Ÿงฉ **Difficulty:** Easy/Medium +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@smoya](https://github.com/smoya) +- โณ **Length:** 175 Hours + +## 7) [Real-time Collaboration in AsyncAPI Studio](https://github.com/asyncapi/studio/issues/619) +Upgrade [AsyncAPI Studio](https://studio.asyncapi.com/) to support real-time collaborative editing. This enhancement will introduce features for simultaneous document editing, version control, and integrated communication tools, streamlining teamwork on AsyncAPI specifications. + +- ๐ŸŽฏ **Outcome:** Enable efficient, real-time collaboration among users on AsyncAPI documents, improving the co-editing experience. +- ๐Ÿ› ๏ธ **Skills:** TypeScript/JavaScript, React, and WebSocket. +- ๐Ÿงฉ **Difficulty:** Easy/Medium +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@fmvilas](https://github.com/fmvilas) +- โณ **Length:** 175 Hours + +## Contact AsyncAPI Mentors +- Join [our Slack workspace](https://www.asyncapi.com/slack-invite). Observe our [Slack etiquette](https://github.com/asyncapi/.github/blob/master/slack-etiquette.md) and [AsyncAPI code of conduct](https://github.com/asyncapi/.github/blob/master/CODE_OF_CONDUCT.md). +- Join the dedicated Mentorship channel `#mentorships` to meet all other GSoC mentees and mentors. + +## FAQ +1. **How active are previous GSoC contributors in AsyncAPI?** + Although AsyncAPI hasn't directly participated in GSoC, our projects were featured in Postman's proposal last year. Active contributors from that cohort include: + - **[@14Richa](https://github.com/14Richa)** in our [.github](https://github.com/asyncapi/.github), [community](https://github.com/asyncapi/community), and [optimizer](https://github.com/asyncapi/optimizer) repositories. + - **[@reachaadrika](https://github.com/reachaadrika)** in our [AsyncAPI website](https://github.com/asyncapi/website) repository. + - **[@oviecodes](https://github.com/oviecodes)** in our [Glee](https://github.com/asyncapi/glee) and [parser-js](https://github.com/asyncapi/parser-js) repositories. + +2. **Is using ChatGPT for GSoC project proposals allowed?** + We advise against using ChatGPT or similar AI tools for your GSoC project proposals with AsyncAPI. Should you choose to use such tools, we require that this be fully disclosed in your application. + +3. **Where is the AsyncAPI source code located?** + You can find all AsyncAPI source code on GitHub under our organization: [https://github.com/asyncapi](https://github.com/asyncapi). + +>If you have further questions or queries, please create an issue in this `/community` repo (with the prefix `GSoC 2024`) or start an [open AsyncAPI discussion](https://github.com/orgs/asyncapi/discussions). From b21bf649dd17bfce7096f03682169a1d6e992687 Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:26:34 -0600 Subject: [PATCH 004/124] docs: added 2023 gsoc information (#1054) Co-authored-by: Quetzalli --- mentorship/summerofcode/2023/README.md | 155 +++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 mentorship/summerofcode/2023/README.md diff --git a/mentorship/summerofcode/2023/README.md b/mentorship/summerofcode/2023/README.md new file mode 100644 index 000000000..8c589b66b --- /dev/null +++ b/mentorship/summerofcode/2023/README.md @@ -0,0 +1,155 @@ +# Status: Completed +The summary of the program can be found at https://github.com/orgs/asyncapi/discussions/997 + +## Timeline + +- January 23: Organization applications open +- February 7: Accepted GSoC Organizations announced +- February 22 - March 20: Potential GSoC contributors discuss application ideas with mentoring organizations +- March 20 - April 4: GSoC contributor application period +- May 17 - June 7: Accepted GSoC Contributor projects announced +- May 29: Contributors work on their Google Summer of Code projects +- August 28 - September 4: Mentors submit final GSoC contributor evaluations (standard coding period) +- September 5: Initial results of Google Summer of Code 2023 announced + +## Accepted Project Ideas +| No | Project Idea | Mentor/s | Category | Mentee/s | +| --- | --- | --- | --- | --- | +| 1 | [Authentication and Authorization support for websocket adapters: Glee](https://github.com/asyncapi/glee) | @Souvikns @KhudaDad414 | Engineering | @oviecodes | +| 2 | [Automate listing of members of technical steering committee: Community](https://github.com/asyncapi/community) | @derberg | Engineering | @14Richa | +| 3 | [Introduce UI tests and refactoring in the website: Website](https://github.com/asyncapi/website) | @akshatnema @imabp | Engineering | @reachaadrika | +| 4 | [Add "Autofix" feature for common linting errors (w/ spectral): Vs-code Extension](https://github.com/asyncapi/vs-asyncapi-preview) | @ivangsa | Engineering | @Savio629 | + + +## Proposed Project Ideas + + +## 1) Authentication and Authorization support for websocket adapters: Glee + +In particular, Glee allows users to create WebSocket servers, which necessitates the implementation of secure and reliable authentication and authorization mechanisms. This ensures that only authorized parties can access and use the WebSocket servers, thereby enhancing the overall security and privacy of the communication channels. + +**Mentors**: +@Souvikns @KhudaDad414 + +**Project Repo** + +[https://github.com/asyncapi/glee](https://github.com/asyncapi/glee) + + +**Expected Difficulty**: +Easy-Medium + +**Expected Time Commitment**: +175 Hour + +**Technical skills requried** + +Typescript, nodejs, websocket, EDA basics + + +## 2) Automate listing of members of technical steering committee: Community + +Our [open governance model](https://github.com/asyncapi/.github/blob/master/CHARTER.md) introduces a TSC that consists of all the CODEOWNERS that want to use their right to have a vote in TSC decisions making process. + +We need a bot/github action that will read VOTERS files from all repos, maintain single list, and put it on the website + +Description +get a github action that reacts on any push to master and checkes if voters file was edited. Then reads it and add/remove/modify a voter in the list stored on the website +get a github action that on a PR level validates modification in VOTERS file and blocks PR in case VOTERS cannot be added to TSC list as they are affiliated with the company that already reached the limit of representation +decide on structure of VOTERS file +get a mechanism that collects more details about TSC members (social accounts, hire availability, etc) + +Learn more here https://github.com/asyncapi/.github/issues/210 + +**Mentors**: +@derberg @KhudaDad414 + +**Project Repo:** +https://github.com/asyncapi/.github + +**Expected Difficulty**: +Easy-Medium + +**Expected Time Commitment**: +175 Hour + +## 3) Introduce UI tests and refactoring in the website: Website + +We need automation tests to run on the PR level which checks the overall build and codebase of the changes made in the PR. It should cover all the aspects of testing the website and the scripts running inside it. The idea of this project is not only to add UI tests, but also to refactor some parts in code to effectively create tests on it. + +What are UI tests? +User Interface testing, also known as UI testing or GUI testing, tests the applicationโ€™s visual elements to validate proper functionality and expected performance. It ensures that UI functions and application components have no defects, such as icons, radio buttons, text boxes, toolbars, color, fonts, checkboxes, windows, and menus. The primary aspects of UI testing are functionality, performance, usability, compliance, and visual design of the software application to make sure the application works successfully and satisfactorily. + +Why do we need this? +We do need these tests because of following reasons: + +- we have no tests to test the components and the functions inside it. +- more and more scripts are added to the repository +- no tests, means nothing forces us to write clearer and testable small functions. +- soon website maintenance/contribution will become hard as more and more addition of code will make Duplication and inconsistency inside the codebase. + + +Learn more here https://github.com/asyncapi/website/issues/1090 + +**Mentors**: +@akshatnema +@imabp + +**Project Repo:** +https://github.com/asyncapi/website + +**Expected Difficulty**: +Easy-Medium + +**Expected Time Commitment**: +175 Hour + + +## 4) Add "Autofix" feature for common linting errors (w/ spectral): Vs-code Extension + +AsyncAPI-Preview + Spectral for VSCode form a perfect combo in terms of UX/DX for asyncapi editing: + +with this extension, you can navigate and preview your API definition +while Spectral for VSCode provides inline and listed linting error for common and even custom mistakes +VSCode comes with an API for providing quick/autofixes for linting errors (see https://code.visualstudio.com/docs/editor/refactoring https://code.visualstudio.com/api/references/vscode-api#CodeActionProvider and https://github.com/microsoft/vscode-extension-samples/tree/main/code-actions-sample for an example) + +The purpose of this feature is to provide auto-fix refactoring for the most common and standard spectral linting errors for asyncapi: +https://docs.stoplight.io/docs/spectral/1e63ffd0220f3-async-api-rules + +Learn more here https://github.com/asyncapi/vs-asyncapi-preview/issues/160 + +**Mentors**: +@ivangsa + +**Project Repo:** +https://github.com/asyncapi/vs-asyncapi-preview + +**Expected Difficulty**: +Easy-Medium + +**Expected Time Commitment**: +175 Hour + +## 5) AsyncAPI: Add help/{command} endpoint: Server API + +Suggested by Marc DiPasquale in Slack comment https://asyncapi.slack.com/archives/CQVJXFNQL/p1662141074739369?thread_ts=1661395911.924239&cid=CQVJXFNQL + +We should create such an endpoint `help/{command}` to return instruction of given command to the user. For example `help/generate` should return available parameters such an available templates etc. + +`help/{command}` is just a suggestion, we can go with other endpoint(s). + +Also, what is very important, that endpoint should be done in a similar way as in our main CLI - https://github.com/asyncapi/cli#usage, so main help endpoint should return all available endpoints and particular one like `help/generate` should return details about given command. + +Learn more here https://github.com/asyncapi/server-api/issues/144 + +**Mentors**: +@BOLT04 + +**Project Repo:** +https://github.com/asyncapi/server-api + +**Expected Difficulty**: +Easy-Medium + +**Expected Time Commitment**: +175 Hour From df1082f746efc344b5e5e6f8609af124eb2919b0 Mon Sep 17 00:00:00 2001 From: Sambhav Gupta <81870866+sambhavgupta0705@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:40:36 +0530 Subject: [PATCH 005/124] chore(tsc): add Sambhav Gupta as a new TSC member (#1040) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- MAINTAINERS.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 07ae25c4f..5aea27d94 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -543,4 +543,14 @@ availableForHire: true isTscMember: true repos: - - modelina \ No newline at end of file + - modelina + +- name: Sambhav Gupta + g705ithub: sambhavgupta0705 + linkedin: sambhavgupta0705 + twitter: sambhavgupta75 + slack: U04630DU3N3 + availableForHire: true + isTscMember: true + repos: + - website From 269e39bc0d5bd43007ff15d933dc63f08adcceb8 Mon Sep 17 00:00:00 2001 From: Sambhav Gupta <81870866+sambhavgupta0705@users.noreply.github.com> Date: Wed, 7 Feb 2024 13:23:28 +0530 Subject: [PATCH 006/124] fix: minor spelling fix in maintainers.yaml (#1056) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- MAINTAINERS.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 5aea27d94..ed2bf7967 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -546,7 +546,7 @@ - modelina - name: Sambhav Gupta - g705ithub: sambhavgupta0705 + github: sambhavgupta0705 linkedin: sambhavgupta0705 twitter: sambhavgupta75 slack: U04630DU3N3 From 0dd429afe5eea524bc9f875dcb72cc2894c8e442 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 10 Feb 2024 11:05:14 +0100 Subject: [PATCH 007/124] chore(tweet): recurring tweet about slack link (#1060) --- tweets/recurring-slack-link/2024-02-10.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-02-10.tweet diff --git a/tweets/recurring-slack-link/2024-02-10.tweet b/tweets/recurring-slack-link/2024-02-10.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-02-10.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 78073dd8baccb28976f826d2e2bb1f24eeca976a Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Mon, 12 Feb 2024 21:24:01 -0800 Subject: [PATCH 008/124] fix: correct incorrect hours in 2024 GSOC application ideas list (#1063) --- ...-ideas-page-gsoc-2024.md => asyncapi-gsoc-ideas-page.md} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename mentorship/summerofcode/2024/{asyncapi-ideas-page-gsoc-2024.md => asyncapi-gsoc-ideas-page.md} (97%) diff --git a/mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md similarity index 97% rename from mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md rename to mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md index 98debe314..1a6c29848 100644 --- a/mentorship/summerofcode/2024/asyncapi-ideas-page-gsoc-2024.md +++ b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md @@ -17,7 +17,7 @@ Improve the [AsyncAPI website](https://github.com/asyncapi/website)'s robustness - ๐Ÿ› ๏ธ **Skills:** JavaScript, Next.js, unit testing, and CI/CD practices. - ๐Ÿงฉ **Difficulty:** Medium/Hard - ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@akshatnema](https://github.com/akshatnema), [@anshgoyalevil](https://github.com/anshgoyalevil) -- โณ **Length:** 320 Hours +- โณ **Length:** 350 Hours ## 3) [Integration Testing Library for Code Generators](https://github.com/asyncapi/generator/issues/752) Enhance the [Generator tool](https://github.com/asyncapi/generator) by introducing a feature or creating a new library to simplify integration testing for code generation templates. This solution facilitates the activation of integration tests, ensuring reliability and robustness with our code generators. @@ -44,7 +44,7 @@ Create a UI Kit for the AsyncAPI website to ensure brand visual consistency and - ๐Ÿ› ๏ธ **Skills:** JavaScript, React, Storybook, and TailwindCSS. - ๐Ÿงฉ **Difficulty:** Easy/Medium - ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@acethecreator](https://github.com/acethecreator), [@akshatnema](https://github.com/akshatnema) -- โณ **Length:** 320 Hours +- โณ **Length:** 350 Hours ## 6) [Dynamic Open Graph Preview for AsyncAPI Studio](https://github.com/asyncapi/studio/issues/224) Improve social sharing for [AsyncAPI Studio](https://studio.asyncapi.com/) by implementing a dynamic Open Graph link preview generator. This feature will create context-specific preview images for shared links, incorporating key details like the title, description, and statistics from the shared AsyncAPI document. @@ -66,7 +66,7 @@ Upgrade [AsyncAPI Studio](https://studio.asyncapi.com/) to support real-time col ## Contact AsyncAPI Mentors - Join [our Slack workspace](https://www.asyncapi.com/slack-invite). Observe our [Slack etiquette](https://github.com/asyncapi/.github/blob/master/slack-etiquette.md) and [AsyncAPI code of conduct](https://github.com/asyncapi/.github/blob/master/CODE_OF_CONDUCT.md). -- Join the dedicated Mentorship channel `#mentorships` to meet all other GSoC mentees and mentors. +- Join the dedicated Mentorship channel `#09_mentorships` to meet all other GSoC mentees and mentors. ## FAQ 1. **How active are previous GSoC contributors in AsyncAPI?** From c7a83f83d625a998ffb67fb702af3a42b77e47dc Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 13 Feb 2024 18:24:10 +0100 Subject: [PATCH 009/124] ci: update of files from global .github repo (#1066) --- .../workflows/update-docs-on-docs-commits.yml | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/update-docs-on-docs-commits.yml diff --git a/.github/workflows/update-docs-on-docs-commits.yml b/.github/workflows/update-docs-on-docs-commits.yml new file mode 100644 index 000000000..b511e284d --- /dev/null +++ b/.github/workflows/update-docs-on-docs-commits.yml @@ -0,0 +1,57 @@ +# This workflow 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 + +# The given workflow is responsible for generating docs and creating PR with them when there is a commit with docs: prefix + +# This workflow will be updated in all repos with the topic get-global-docs-autoupdate + +name: 'Update generated parts of documentation on docs: commits' + +on: + push: + branches: + - master + +jobs: + docs-gen: + name: 'Generate docs and create PR' + runs-on: ubuntu-latest + # PR should be created within this GH action only if it is a docs: commit + # Otherwise it will conflict with release workflow + if: startsWith(github.event.commits[0].message, 'docs:') + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Check package-lock version + uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master + id: lockversion + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: "${{ steps.lockversion.outputs.version }}" + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - name: Install dependencies + run: npm ci + - name: Regenerate docs + run: npm run generate:assets --if-present + - name: Create Pull Request with updated docs + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # uses 5.0.2 https://github.com/peter-evans/create-pull-request/releases/tag/v5.0.2 + with: + token: ${{ secrets.GH_TOKEN }} + commit-message: 'chore: update generated docs' + committer: asyncapi-bot + author: asyncapi-bot + title: 'chore: update generated docs' + body: 'Update of docs that are generated and were forgotten on PR level.' + branch: gen-docs-update/${{ github.job }} + - name: Report workflow status to Slack + if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel + uses: 8398a7/action-slack@fbd6aa58ba854a740e11a35d0df80cb5d12101d8 #using https://github.com/8398a7/action-slack/releases/tag/v3.15.1 + with: + status: ${{ job.status }} + fields: repo,action,workflow + text: 'AsyncAPI docs generation workflow failed' + author_name: asyncapi-bot + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} \ No newline at end of file From 02ebda07a4fde925843c1ecdc60b2c2ab66188dd Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 17 Feb 2024 11:05:14 +0100 Subject: [PATCH 010/124] chore(tweet): recurring tweet about slack link (#1071) --- tweets/recurring-slack-link/2024-02-17.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-02-17.tweet diff --git a/tweets/recurring-slack-link/2024-02-17.tweet b/tweets/recurring-slack-link/2024-02-17.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-02-17.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 2518901f505fe240e38bbc9feb451ee70eff717a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 24 Feb 2024 11:05:21 +0100 Subject: [PATCH 011/124] chore(tweet): recurring tweet about slack link (#1078) --- tweets/recurring-slack-link/2024-02-24.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-02-24.tweet diff --git a/tweets/recurring-slack-link/2024-02-24.tweet b/tweets/recurring-slack-link/2024-02-24.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-02-24.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 95d898e6e8f453fe3b62db15b6a5d186f94cf738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Garc=C3=ADa=20Sainz-Aja?= Date: Mon, 26 Feb 2024 11:08:15 +0100 Subject: [PATCH 012/124] chore: add Ivan Garcia to Ambassador Program (#1076) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Barbanio Gonzรกlez <77982319+Barbanio@users.noreply.github.com> --- AMBASSADORS_MEMBERS.json | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index c17915eb1..6022f962f 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -154,6 +154,90 @@ } ] }, + { + "name": "Ivan Garcia Sainz-Aja", + "github": "ivangsa", + "twitter": "ivangsa", + "bio": "Java Architect with a deep understanding of Java, Spring-Boot, Spring-Cloud technologies, specializing in Domain-Driven Design (DDD) and Event-Driven Architectures creating Software Easy to Understand. Building ZenWave 360ยบ. ZenWave 360ยบ is a set of tools built on the foundations of Domain Driven Design and API-First principles for Event-Driven Architectures, to help you create software easy to understand. https://www.zenwave360.io/", + "linkedin": "ivangarciasainzaja", + "company": "SNGULAR", + "title": "Java Architect. Speaker. Building ZenWave 360ยฐ.", + "img": "https://avatars.githubusercontent.com/u/1246876?v=4", + "contributions": [ + { + "type": "iniciative_driver", + "title": "AsyncAPI Conference On Tour 2023 - Madrid", + "date": { + "year": 2023, + "month": "October" + }, + "link": "https://www.youtube.com/playlist?list=PLbi1gRlP7pihD-7XYb6c9wcTdkavDzF3_" + }, + { + "type": "iniciative_driver", + "title": "ZenWave SDK - Code Generator for AsyncAPI with Spring Cloud Streams", + "date": { + "year": 2024, + "month": "2022" + }, + "link": "https://www.zenwave360.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/" + }, + { + "type": "article", + "title": "API-First with AsyncAPI", + "date": { + "year": 2023, + "month": "March" + }, + "link": "https://www.zenwave360.io/posts/API-First-with-AsyncAPI-And-ZenWave-SDK/" + }, + { + "type": "article", + "title": "ZenWave AsyncAPI Code Generator", + "date": { + "year": 2023, + "month": "March" + }, + "link": "https://www.zenwave360.io/posts/ZenWave-AsyncAPI-Code-Generator/" + }, + { + "type": "article", + "title": "Generating AsyncAPI definition files from JDL with ZenWaveSDK", + "date": { + "year": 2023, + "month": "April" + }, + "link": "https://www.zenwave360.io/posts/JHipster-As-IDL-for-AsyncAPIv2/" + }, + { + "type": "presentation", + "title": "KIT - API-First with AsyncAPI for Event Driven Architectures", + "date": { + "year": 2023, + "month": "May" + }, + "link": "https://www.youtube.com/watch?v=EoWFZfmspFM" + }, + { + "type": "presentation", + "title": "Practical Event Storming with AsyncAPI v3 and ZenWave SDK", + "date": { + "year": 2023, + "month": "October" + }, + "link": "https://www.youtube.com/watch?v=-uHONzz-a6U" + }, + { + "type": "presentation", + "title": "Code Generation For Enterprise Integration Patterns w/ AsyncAPI & ZenWave SDK", + "date": { + "year": 2023, + "month": "October" + }, + "link": "https://www.youtube.com/watch?v=gUsoD8RaCuw" + } + ] + }, { "name": "Jesse Menning", "github": "jessemenning", From 0361b9e2f7b1b2720ad916a0c8b387633e8dc365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20M=C3=A9ndez?= Date: Tue, 27 Feb 2024 13:32:26 +0100 Subject: [PATCH 013/124] docs: add info about working groups (#1075) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- WORKING_GROUPS.md | 17 +++++++++++++++++ WORKING_GROUPS.yaml | 14 ++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 WORKING_GROUPS.md create mode 100644 WORKING_GROUPS.yaml diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md new file mode 100644 index 000000000..09dcf853c --- /dev/null +++ b/WORKING_GROUPS.md @@ -0,0 +1,17 @@ +### Definition of a Working Group + +A Working Group is a group of people in our community who share a common interest beyond GitHub repositories. + +A Working Group must have at least one of its members appointed as its chairperson. + +Anyone can create a Working Group. The only prerequisites are to have at least 3 founding members and the approval of the TSC (Technical Steering Committee). + +A Working Group should have clearly defined goals that are easily accessible to everyone on the internet, as this helps maintain alignment within the group. + +It is recommended that the Working Group has an associated project management tool like [GitHub Projects](https://docs.github.com/en/issues/planning-and-tracking-with-projects/creating-projects/creating-a-project) (or any other project management tool) to outline their roadmap. It's up to the Working Group to decide the structure of the project. E.g., Kanban, Shape Up, TO-DO list, etc. + +The group's name, members, goals, and other relevant information must be added to the `WORKING_GROUPS.yaml` file in the `community` repository. + +A Working Group has no authority or power over the roadmap of the projects they may impact. It's up to the repositories' maintainers (code owners) to approve or reject the pull requests. Therefore, it's advisable to either have maintainers of the impacted projects in the Working Group or ensure everyone agrees on the roadmap of the different repositories/projects. + +Working Groups should be listed on the [AsyncAPI website](https://www.asyncapi.com), along with their description, goals, members, and anything the Working Group wants to include. diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml new file mode 100644 index 000000000..f1dffe431 --- /dev/null +++ b/WORKING_GROUPS.yaml @@ -0,0 +1,14 @@ +# This file contains the list of the currently active working groups. +# +# To learn more about working groups, read the WORKING_GROUPS.md file. + +working_groups: + # - name: Required. The name of the working group. + # description: Required. Describe what this working group is about. + # chairperson: Required. GitHub handle of the chairperson. Example: @Barbanio. + # members: # Required to have at least 2 members who are not the same as the chairperson. + # - @fmvilas # GitHub handle of the member. + # slack_channel: # Required. The name of the Slack channel in the AsyncAPI workspace. Example: community_growth_wg + # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. + # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. + # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. From 096dec0c000ab655349e369d13ff2a17f71411d5 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Fri, 1 Mar 2024 10:05:21 +0100 Subject: [PATCH 014/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1083) --- tweets/recurring-discuss-ideas/2024-03-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-03-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-03-01.tweet b/tweets/recurring-discuss-ideas/2024-03-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-03-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From aa6ef533023ea5cdfb78f8948c64b2ac3c67ce8b Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 2 Mar 2024 11:05:41 +0100 Subject: [PATCH 015/124] chore(tweet): recurring tweet about slack link (#1085) --- tweets/recurring-slack-link/2024-03-02.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-03-02.tweet diff --git a/tweets/recurring-slack-link/2024-03-02.tweet b/tweets/recurring-slack-link/2024-03-02.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-03-02.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From a5ee0fb5115b4db34bc6b531728ade7ecad3679f Mon Sep 17 00:00:00 2001 From: Viacheslav Turovskyi Date: Wed, 6 Mar 2024 07:15:47 +0200 Subject: [PATCH 016/124] chore: add aeworxet as a maintainer (#1081) Co-authored-by: Quetzalli --- MAINTAINERS.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index ed2bf7967..03133433e 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -544,7 +544,6 @@ isTscMember: true repos: - modelina - - name: Sambhav Gupta github: sambhavgupta0705 linkedin: sambhavgupta0705 @@ -554,3 +553,10 @@ isTscMember: true repos: - website +- name: Viacheslav Turovskyi + github: aeworxet + slack: U01G3U01SVC + availableForHire: false + isTscMember: false + repos: + - bundler From 4a0fac980b0a97416018c2bd494617445c31241b Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 9 Mar 2024 11:05:05 +0100 Subject: [PATCH 017/124] chore(tweet): recurring tweet about slack link (#1091) --- tweets/recurring-slack-link/2024-03-09.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-03-09.tweet diff --git a/tweets/recurring-slack-link/2024-03-09.tweet b/tweets/recurring-slack-link/2024-03-09.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-03-09.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From a8fc7c71b81c4d7b7d99c8188aa154f1b3dcf3e6 Mon Sep 17 00:00:00 2001 From: samz Date: Tue, 12 Mar 2024 06:33:02 +0100 Subject: [PATCH 018/124] feat: add initial DX working group proposal (#1088) Co-authored-by: Quetzalli --- WORKING_GROUPS.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index f1dffe431..d14b9cc28 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -12,3 +12,17 @@ working_groups: # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. + - name: Developer Experience + description: The goal of the Developer Experience Working Group is to empower the AsyncAPI user journey through intuitive onboarding, tools, and a frictionless experience. + chairperson: @Amzani + members: + - @Pakisan + - @KhudaDad414 + - @ivangsa + - @peter-rr + - @Shurtu-gal + - @princerajpoot20 + slack_channel: developer-experience-wg + roadmap_url: https://shapeit.app/projects/org/asyncapi/16 + okrs_url: https://github.com/users/Amzani/projects/12/views/1 + github_team: @asyncapi/developer_experience_wg From 022401ba9de43afee7206ca1f5f8ec2c6e24d069 Mon Sep 17 00:00:00 2001 From: samz Date: Wed, 13 Mar 2024 11:50:43 +0100 Subject: [PATCH 019/124] chore: revert DX working group (#1096) --- WORKING_GROUPS.yaml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index d14b9cc28..d4f54787a 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -11,18 +11,4 @@ working_groups: # slack_channel: # Required. The name of the Slack channel in the AsyncAPI workspace. Example: community_growth_wg # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. - # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. - - name: Developer Experience - description: The goal of the Developer Experience Working Group is to empower the AsyncAPI user journey through intuitive onboarding, tools, and a frictionless experience. - chairperson: @Amzani - members: - - @Pakisan - - @KhudaDad414 - - @ivangsa - - @peter-rr - - @Shurtu-gal - - @princerajpoot20 - slack_channel: developer-experience-wg - roadmap_url: https://shapeit.app/projects/org/asyncapi/16 - okrs_url: https://github.com/users/Amzani/projects/12/views/1 - github_team: @asyncapi/developer_experience_wg + # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. \ No newline at end of file From 9c3c4c935f902df4634eafea36318fca267bfed8 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 16 Mar 2024 11:05:38 +0100 Subject: [PATCH 020/124] chore(tweet): recurring tweet about slack link (#1102) --- tweets/recurring-slack-link/2024-03-16.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-03-16.tweet diff --git a/tweets/recurring-slack-link/2024-03-16.tweet b/tweets/recurring-slack-link/2024-03-16.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-03-16.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 471f15ce79c9fbff3de3e0ba0da1358afb2fdea3 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 18 Mar 2024 09:38:47 +0100 Subject: [PATCH 021/124] ci: update of files from global .github repo (#1106) --- .github/workflows/bounty-program-commands.yml | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 .github/workflows/bounty-program-commands.yml diff --git a/.github/workflows/bounty-program-commands.yml b/.github/workflows/bounty-program-commands.yml new file mode 100644 index 000000000..433f7d953 --- /dev/null +++ b/.github/workflows/bounty-program-commands.yml @@ -0,0 +1,90 @@ +# This workflow is centrally managed at https://github.com/asyncapi/.github/ +# Don't make changes to this file in this repository, as they will be overwritten with +# changes made to the same file in the abovementioned repository. + +# The purpose of this workflow is to allow Bounty Team members +# (https://github.com/orgs/asyncapi/teams/bounty_team) to issue commands to the +# organization's global AsyncAPI bot related to the Bounty Program, while at the +# same time preventing unauthorized users from misusing them. + +name: Bounty Program commands + +on: + issue_comment: + types: + - created + +jobs: + guard-against-unauthorized-use: + if: > + github.actor != ('aeworxet' || 'thulieblack') && + ( + contains(github.event.comment.body, '/bounty' ) + ) + + runs-on: ubuntu-latest + + steps: + - name: โŒ @${{github.actor}} made an unauthorized attempt to use a Bounty Program's command + uses: actions/github-script@v6 + + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const commentText = `โŒ @${{github.actor}} is not authorized to use the Bounty Program's commands. + These commands can only be used by members of the [Bounty Team](https://github.com/orgs/asyncapi/teams/bounty_team).`; + + console.log(`โŒ @${{github.actor}} made an unauthorized attempt to use a Bounty Program's command.`); + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: commentText + }) + + add-label-bounty: + if: > + github.actor == ('aeworxet' || 'thulieblack') && + ( + contains(github.event.comment.body, '/bounty' ) + ) + + runs-on: ubuntu-latest + env: + BOUNTY_PROGRAM_LABELS_JSON: | + [ + {"name": "bounty", "color": "0e8a16", "description": "Participation in the Bounty Program"} + ] + + steps: + - name: Add label `bounty` + uses: actions/github-script@v6 + + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const BOUNTY_PROGRAM_LABELS = JSON.parse(process.env.BOUNTY_PROGRAM_LABELS_JSON); + let LIST_OF_LABELS_FOR_REPO = await github.rest.issues.listLabelsForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + }); + + LIST_OF_LABELS_FOR_REPO = LIST_OF_LABELS_FOR_REPO.data.map(key => key.name); + + if (!LIST_OF_LABELS_FOR_REPO.includes(BOUNTY_PROGRAM_LABELS[0].name)) { + await github.rest.issues.createLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + name: BOUNTY_PROGRAM_LABELS[0].name, + color: BOUNTY_PROGRAM_LABELS[0].color, + description: BOUNTY_PROGRAM_LABELS[0].description + }); + } + + console.log('Adding label `bounty`...'); + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: [BOUNTY_PROGRAM_LABELS[0].name] + }) From cfebcbeaba7b559a469a4d067c5e069ab920e9d7 Mon Sep 17 00:00:00 2001 From: Giri Venkatesan <4477169+gvensan@users.noreply.github.com> Date: Mon, 18 Mar 2024 19:54:59 +0530 Subject: [PATCH 022/124] chore: update AMBASSADORS_MEMBERS.json (#1105) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Barbanio Gonzรกlez <77982319+Barbanio@users.noreply.github.com> --- AMBASSADORS_MEMBERS.json | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 6022f962f..998e0602e 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -97,6 +97,55 @@ } ] }, + { + "name": "Giri Venkatesan", + "github": "gvensan", + "twitter": "giri_venkatesan", + "country": "๐Ÿ‡ฎ๐Ÿ‡ณ", + "bio": "Giri Venkatesan, a follower and proponent of AsyncAPI and teams up with companies & SIs to design event-driven architecture and asynchronous APIs. To guide those discussions, I draw upon years of integration and implementation experience, particularly with Solace platforms. I've been a follower of AsyncAPI since 2022, and written blogs and delivered talks at conferences and AsyncAPI confrence tours.", + "linkedin": "girivenkatesan", + "company": "Solace", + "title": "Developer Advocate, Office of the CTO at Solace", + "img": "https://avatars.githubusercontent.com/u/4477169?s=96&v=4", + "contributions": [ + { + "type": "article", + "title": "Bridging Design and Runtime Gaps: AsyncAPI in Event-Driven Architecture", + "date": { + "year": 2024, + "month": "February" + }, + "link": "https://www.linux.com/news/bridging-design-and-runtime-gaps-asyncapi-in-event-driven-architecture/" + }, + { + "type": "talk", + "title": "Bridging the Gap between Design and Runtime in EDA with AsyncAPI and CI/CD", + "date": { + "year": 2023, + "month": "November" + }, + "link": "https://www.youtube.com/watch?v=CXt-fy82PCk" + }, + { + "type": "talk", + "title": "Bridging the Gap between Design and Runtime in EDA with AsyncAPI", + "date": { + "year": 2023, + "month": "August" + }, + "link": "https://www.youtube.com/watch?v=ewpADLeLNE4" + }, + { + "type": "article", + "title": "AsyncAPI + Spring Cloud Stream = Event-Driven Microservices Made Easy", + "date": { + "year": 2021, + "month": "November" + }, + "link": "https://www.youtube.com/watch?v=3EeMHhbwyOQ&t=4142s" + } + ] + }, { "name": "Hugo Guerrero", "img": "https://avatars.githubusercontent.com/u/1001939?v=4", From 859f5cb98c30836c5cfa5501dffc6896d66102b4 Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Tue, 19 Mar 2024 01:44:56 -0500 Subject: [PATCH 023/124] docs: added all required GSoC documentations (#1101) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- mentorship/summerofcode/README.md | 43 ++++++++++++++++++ .../summerofcode/application-template.md | 45 +++++++++++++++++++ mentorship/summerofcode/mentors-guideline.md | 26 +++++++++++ 3 files changed, 114 insertions(+) create mode 100644 mentorship/summerofcode/README.md create mode 100644 mentorship/summerofcode/application-template.md create mode 100644 mentorship/summerofcode/mentors-guideline.md diff --git a/mentorship/summerofcode/README.md b/mentorship/summerofcode/README.md new file mode 100644 index 000000000..34242bf01 --- /dev/null +++ b/mentorship/summerofcode/README.md @@ -0,0 +1,43 @@ +# Google Summer of Code - Getting Started + +###### Introduction + +Google Summer of Code (GSoC) is an annual program sponsored by Google that offers stipends to contributors for working on open-source projects during the summer. Contributors gain real-world software development experience by working with mentors from participating organizations. The goal is to encourage developers to contribute to open-source projects and improve their coding skills. If you want to develop open-source software, this program is for you! + +AsyncAPI is looking for contributors who are eager to learn, have good coding abilities, and, most importantly, have a strong passion for APIs and open-source development. + + +### Requirement + +Successful GSoC contributors will receive [compensation](https://developers.google.com/open-source/gsoc/help/student-stipends) for their contributions. + +To be eligible as a contributor, you must be at least 18 years old at the time of registration and be new to open-source projects. Group applications are not permitted. + +Please verify your eligibility by visiting the [Google Summer of Code (GSoC) website.](https://summerofcode.withgoogle.com/get-started) + +TL;DR: GSoC exclusively focuses on coding projects. While initiatives like documentation or design are valuable, they are not permitted within the scope of GSoC. You can check out the AsyncAPI Mentorship Program or GSoD for other noncoding-related projects. + +### First Steps + +- **The ideal starting point is [Google's Student Guide](https://google.github.io/gsocguides/student)**! + Carefully read through the guide to familiarize yourself with the initiative. The guide provides a comprehensive program overview and offers valuable advice on starting communication, proposal writing, and beginning your work. Additionally, [refer to Google's FAQ](https://developers.google.com/open-source/gsoc/faq) for more information. + +- **Get familiar with the AsyncAPI project.** + Please be sure to familiarize yourself with the AsyncAPI initiative and its mission and [get involved in the community](https://asyncapi.com/slack-invite). Explore the [AsyncAPI projects](https://github.com/asyncapi), get an idea of the project of your interest, and explore the source code and organization of the project. + +- **Write your project proposal.** + Visit the [ideas page](https://github.com/asyncapi/community/blob/master/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md) to choose a topic that catches your interest. You can also draw inspiration from projects from [previous years](https://github.com/asyncapi/community/tree/master/mentorship/summerofcode). + + We recommend reading [Google's guide for writing a proposal](https://google.github.io/gsocguides/student/writing-a-proposal). + + For feedback, submit your work early! However, due to the influx of applications, feedback may only be available during the final week after the deadline. + +### Getting Started with AsyncAPI +- New to AsyncAPI? Visit the [AsyncAPI website](asyncapi.com) to learn more about the initiative. +- Visit the [Community section](https://www.asyncapi.com/community) of the website to learn about the community behind AsyncAPI. +- Explore all the active projects in the organization by visiting our [GitHub org](https://github.com/asyncapi). +- Consider tackling one of the good first issues, resolving a bug, or enhancing existing features by visiting our [Issues Dashboard](https://www.asyncapi.com/community/dashboard). Include links to your past contributions to AsyncAPI in your proposal. Stay calm! If you're new to navigating a large codebase, we are here to help you ๐Ÿ˜Š. + +### Thanks! + + We appreciate your interest in choosing AsyncAPI for your Google Summer of Code project! diff --git a/mentorship/summerofcode/application-template.md b/mentorship/summerofcode/application-template.md new file mode 100644 index 000000000..c8c5ac500 --- /dev/null +++ b/mentorship/summerofcode/application-template.md @@ -0,0 +1,45 @@ +# GSoC Application Template + +This is the AsyncAPI Project's Google Summer of Code Application Template. We made it to assist contributors in crafting impressive proposals that will impress us. You can submit a draft proposal early to get feedback and iterate early. Be sure to read [Google's guide to writing a proposal](https://google.github.io/gsocguides/student/writing-a-proposal) + +Here's what we want to hear from you: + +### Contact information + +Please provide your most basic contact information, such as: +- Full name +- Email address +- GitHub handle +- Contact Number(include your country code) + +### Project Information + +This section is for you to provide all your understanding of the project, such as: +- What is the aim of your project, and what problem does it aim to address? +- Providing a detailed description of the proposed project. Here's where to add technical explanations, architectural diagrams, or design mockups. +- What will the outcome of your project be at the end of the program? +- How do you plan to finish the project on schedule? For instance, what are the important milestones, and what is your approximate timeline for reaching them? +- What qualities should a suitable mentor for your project possess? +- What are your plans for the project after completion? + +### Your Understanding of AsyncAPI + +AsyncAPI is an initiative with many projects and design patterns. In this section, we assess your familiarity with AsyncAPI. We encourage seasoned users and newcomers to explore and understand AsyncAPI during the application phase. + +- Please share your background as an AsyncAPI user or contributor, or if you're new to AsyncAPI, outline your intentions for learning AsyncAPI. +- If you've submitted bug fixes or patches to any of our projects before, please provide links to the repositories for one or more examples of your work with AsyncAPI. +- Please explain your knowledge of the AsyncAPI development infrastructure and Git(a plus if it's for your chosen project). If you're unfamiliar with them, what do you plan to learn? We'd like to encourage you to use the application period to familiarize yourself with these tools. +- Include or share links to a sample of code unrelated to AsyncAPI demonstrating your development abilities(Optional). + +### Your Involvement with the AsyncAPI community + +We welcome applications from folks new to AsyncAPI. If you have previous experience with the AsyncAPI community, please share it. We encourage newcomers to use this application period to get involved with the AsyncAPI community. + +- How long have you been engaged with the AsyncAPI community? For instance, have you attended community meetings, contributed to the website, or participated in AsyncAPI events in any capacity? +- Have you developed and released any project or offered support or services (voluntary or commercial) to AsyncAPI users independently from the official AsyncAPI project? +- If you have not engaged with the AsyncAPI community, what are your plans for getting involved? +- What are your intentions for contributing to AsyncAPI besides your project work? Do you anticipate continuing your involvement with AsyncAPI after finishing your project? If yes, how do you plan to do so? + +### Bio + +Share a bit about yourself. What are you studying and where? What activities do you enjoy? Why are you the right person for this project? diff --git a/mentorship/summerofcode/mentors-guideline.md b/mentorship/summerofcode/mentors-guideline.md new file mode 100644 index 000000000..c8b610d7b --- /dev/null +++ b/mentorship/summerofcode/mentors-guideline.md @@ -0,0 +1,26 @@ +# GSoC Mentor's Guideline + +##### Introduction + +Hey there! Welcome to the Google Summer of Code (GSoC) mentors' guideline. As a mentor, you are crucial in guiding and supporting contributors throughout their GSoC journey. This guideline outlines key responsibilities, best practices, and tips to ensure a successful mentoring experience. + +### Key Responsibilities + +To participate in the Program, mentors must be contributors or maintainers to any project run by AsyncAPI and not be a participant in the Program. Here are some key responsibilities we expect from our mentors. + +- You'll need to provide guidance, support, and direction to your GSoC contributors throughout the project timeline. It's important to encourage collaboration among GSoC contributors and mentors as well. You'll also need to set reasonable expectations and clearly define project goals, milestones, and expectations at the beginning of the Program. + +- Regular communication is also essential. You'll need to communicate effectively with your contributors through preferred channels such as email, Slack, or video calls. Be readily available and responsive to GSoC contributors' questions, concerns, and requests for assistance. Remember to review code submissions, provide constructive feedback, and help contributors improve their coding skills. + +- Please also encourage contributors to engage with the AsyncAPI community, attend meetings, seek help from fellow community members, and encourage them to share their achievements and milestones with the rest of the community. Make sure that project documentation is up-to-date and accessible for reference to interested contributors. +### Contributors Selection Process + +When it comes to selecting contributors for GSoC, there are a few things you should consider as a mentor: + +- You must ensure their proposal aligns well with the project goals, objectives, and requirements. Assess their technical skills and proficiency in relevant programming languages, tools, and technologies required for the project. And don't hesitate to interview candidates if you need to be more convinced by their proposals. + +- You'll need to assess communication skills, responsiveness, and the ability to collaborate effectively with mentors and the community. These are also important points to consider. You should also evaluate the interested GSoC contributor's commitment level, availability, and willingness to dedicate time and effort to the project throughout the Program. Look at past contributions, code submissions, or involvement in open-source projects to scale the GSoC contributor's experience and dedication to the community. + +### Conclusion + +Thank you for your dedication and commitment as a GSoC mentor. Your guidance and support are invaluable in helping contributors succeed and contribute to AsyncAPI. Best of luck for a productive and rewarding GSoC mentoring experience! From ef901d371c8e7722dd924b0a36c2f950b1df5d82 Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Wed, 20 Mar 2024 04:51:53 -0500 Subject: [PATCH 024/124] docs: updated list of project ideas (#1111) * updated list of project ideas * grammar fixes --------- Co-authored-by: Quetzalli --- .../2024/asyncapi-gsoc-ideas-page.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md index 1a6c29848..c406325a8 100644 --- a/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md +++ b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md @@ -19,14 +19,14 @@ Improve the [AsyncAPI website](https://github.com/asyncapi/website)'s robustness - ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@akshatnema](https://github.com/akshatnema), [@anshgoyalevil](https://github.com/anshgoyalevil) - โณ **Length:** 350 Hours -## 3) [Integration Testing Library for Code Generators](https://github.com/asyncapi/generator/issues/752) -Enhance the [Generator tool](https://github.com/asyncapi/generator) by introducing a feature or creating a new library to simplify integration testing for code generation templates. This solution facilitates the activation of integration tests, ensuring reliability and robustness with our code generators. +## 3) [AsyncAPI Generator Maintainership](https://github.com/asyncapi/generator/issues/1145) +This initiative aims to guide you on a journey from being a contributor to becoming a maintainer of the project. You'll gain insight into the responsibilities of a maintainer, involving tasks beyond mere coding. -- ๐ŸŽฏ **Outcome:** Enable template maintainers to easily validate and improve the quality of code-generating templates. +- ๐ŸŽฏ **Outcome:** Taking responsibility for the project's future and continuous improvement. - ๐Ÿ› ๏ธ **Skills:** JavaScript/TypeScript, testing libraries, Docker, virtualization, and test automation. - ๐Ÿงฉ **Difficulty:** Medium/Hard - ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@derberg](https://github.com/derberg) -- โณ **Length:** 175 Hours +- โณ **Length:** 350 Hours ## 4) [Markdown and MermaidJS Diagrams Preview: VS Code Extension](https://github.com/asyncapi/vs-asyncapi-preview/issues/161) Upgrade the [AsyncAPI Preview](https://github.com/asyncapi/vs-asyncapi-preview) VS Code extension to include a feature for visualizing message payloads through Markdown and MermaidJS Class Diagrams. It also incorporates an export feature for the Markdown preview to facilitate its use in external documentation. This enhancement will work with both AsyncAPI schemas and Avro (.avsc) files to offer a dynamic and interactive view of message structures. @@ -55,14 +55,14 @@ Improve social sharing for [AsyncAPI Studio](https://studio.asyncapi.com/) by im - ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@smoya](https://github.com/smoya) - โณ **Length:** 175 Hours -## 7) [Real-time Collaboration in AsyncAPI Studio](https://github.com/asyncapi/studio/issues/619) -Upgrade [AsyncAPI Studio](https://studio.asyncapi.com/) to support real-time collaborative editing. This enhancement will introduce features for simultaneous document editing, version control, and integrated communication tools, streamlining teamwork on AsyncAPI specifications. +## 7) [Conference Website Maintainance](https://github.com/asyncapi/conference-website/issues/284) +Ensure our conference website remains a dynamic and user-friendly for the upcoming 2024 AsyncAPI Conference. -- ๐ŸŽฏ **Outcome:** Enable efficient, real-time collaboration among users on AsyncAPI documents, improving the co-editing experience. -- ๐Ÿ› ๏ธ **Skills:** TypeScript/JavaScript, React, and WebSocket. +- ๐ŸŽฏ **Outcome:** Improve the website's efficiency and user-friendliness for an improved user experience. +- ๐Ÿ› ๏ธ **Skills:** JavaScript, Tailwind, and any testing framework. - ๐Ÿงฉ **Difficulty:** Easy/Medium -- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@fmvilas](https://github.com/fmvilas) -- โณ **Length:** 175 Hours +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@acethecreator](https://github.com/acethecreator) [@mayaleeeee](https://github.com/Mayaleeeee) +- โณ **Length:** 350 Hours ## Contact AsyncAPI Mentors - Join [our Slack workspace](https://www.asyncapi.com/slack-invite). Observe our [Slack etiquette](https://github.com/asyncapi/.github/blob/master/slack-etiquette.md) and [AsyncAPI code of conduct](https://github.com/asyncapi/.github/blob/master/CODE_OF_CONDUCT.md). From 7c1e69a65141d4ffcc0cc689223133313873c8fd Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 23 Mar 2024 11:05:32 +0100 Subject: [PATCH 025/124] chore(tweet): recurring tweet about slack link (#1119) --- tweets/recurring-slack-link/2024-03-23.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-03-23.tweet diff --git a/tweets/recurring-slack-link/2024-03-23.tweet b/tweets/recurring-slack-link/2024-03-23.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-03-23.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From fe98175898e6e03e5b49e952d275504760b1dc90 Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 25 Mar 2024 07:47:50 -0500 Subject: [PATCH 026/124] docs: update asyncapi-gsoc-ideas-page.md (#1122) * Update asyncapi-gsoc-ideas-page.md * Update asyncapi-gsoc-ideas-page.md --- mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md index c406325a8..e1bd5c717 100644 --- a/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md +++ b/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md @@ -16,7 +16,7 @@ Improve the [AsyncAPI website](https://github.com/asyncapi/website)'s robustness - ๐ŸŽฏ **Outcome:** Achieve a stable website framework to support continuous development and updates. - ๐Ÿ› ๏ธ **Skills:** JavaScript, Next.js, unit testing, and CI/CD practices. - ๐Ÿงฉ **Difficulty:** Medium/Hard -- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@akshatnema](https://github.com/akshatnema), [@anshgoyalevil](https://github.com/anshgoyalevil) +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@sambhavgupta0705](https://github.com/sambhavgupta0705), [@anshgoyalevil](https://github.com/anshgoyalevil) - โณ **Length:** 350 Hours ## 3) [AsyncAPI Generator Maintainership](https://github.com/asyncapi/generator/issues/1145) @@ -61,7 +61,7 @@ Ensure our conference website remains a dynamic and user-friendly for the upcomi - ๐ŸŽฏ **Outcome:** Improve the website's efficiency and user-friendliness for an improved user experience. - ๐Ÿ› ๏ธ **Skills:** JavaScript, Tailwind, and any testing framework. - ๐Ÿงฉ **Difficulty:** Easy/Medium -- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@acethecreator](https://github.com/acethecreator) [@mayaleeeee](https://github.com/Mayaleeeee) +- ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿซ **Mentor(s):** [@acethecreator](https://github.com/acethecreator) [@mayaleeeee](https://github.com/Mayaleeeee) [@thulieblack](https://github.com/thulieblack) - โณ **Length:** 350 Hours ## Contact AsyncAPI Mentors From b2b8f57546781bdaf41b62dbd610b477d910676c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 21:49:58 +0100 Subject: [PATCH 027/124] docs: add gvensan as a contributor for talk, blog, and promotion (#1112) Co-authored-by: Quetzalli <19964402+alequetzalli@users.noreply.github.com> --- .all-contributorsrc | 11 +++++++++++ README.md | 1 + 2 files changed, 12 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 9423d1e4b..c987b201a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -448,6 +448,17 @@ "contributions": [ "doc" ] + }, + { + "login": "gvensan", + "name": "Giri Venkatesan", + "avatar_url": "https://avatars.githubusercontent.com/u/4477169?v=4", + "profile": "https://github.com/gvensan", + "contributions": [ + "talk", + "blog", + "promotion" + ] } ], "commitConvention": "angular", diff --git a/README.md b/README.md index c20b9ecb2..ed64c49f3 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Akshit Gupta
Akshit Gupta

๐Ÿ“– nikhilkalburgi
nikhilkalburgi

๐Ÿ“– + Giri Venkatesan
Giri Venkatesan

๐Ÿ“ข ๐Ÿ“ ๐Ÿ“ฃ From e55f4bfe36b1981fc0914f59676ecb9e3b666886 Mon Sep 17 00:00:00 2001 From: Hassan Bahati <65954740+HassanBahati@users.noreply.github.com> Date: Tue, 26 Mar 2024 02:45:43 +0300 Subject: [PATCH 028/124] docs: add tools and processes docs (#977) Co-authored-by: Quetzalli <19964402+alequetzalli@users.noreply.github.com>%0ACo-authored-by: Quetzalli %0ACo-authored-by: Quetzalli --- docs/onboarding-guide/contribute-to-docs.md | 12 ++++++ docs/onboarding-guide/tools-and-setup.md | 46 +++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 docs/onboarding-guide/contribute-to-docs.md create mode 100644 docs/onboarding-guide/tools-and-setup.md diff --git a/docs/onboarding-guide/contribute-to-docs.md b/docs/onboarding-guide/contribute-to-docs.md new file mode 100644 index 000000000..092fd477e --- /dev/null +++ b/docs/onboarding-guide/contribute-to-docs.md @@ -0,0 +1,12 @@ +--- +title: Contribute to docs +weight: 70 +--- + +## Contribute to docs + +There are several ways to request your first AsyncAPI docs task: + +1. **Connect with a docs maintainer:** Ask for a `good-first-issue` in the `#13_docs` channel of the [AsyncAPI Slack](https://www.asyncapi.com/slack-invite) workspace. +2. **Update current docs:** Surf the existing documentation, look for `typos`, `grammar`, `errors`, create an issue, and submit a Pull Request. +3. **Propose new docs:** If you have any ideas or suggestions for necessary documentation, [create a new docs issue](https://github.com/asyncapi/website/issues/new?labels=%F0%9F%93%91+docs&projects=&template=docs.yml&title=%5B%F0%9F%93%91+Docs%5D%3A+) and propose yourself as the assignee. diff --git a/docs/onboarding-guide/tools-and-setup.md b/docs/onboarding-guide/tools-and-setup.md new file mode 100644 index 000000000..24bc37454 --- /dev/null +++ b/docs/onboarding-guide/tools-and-setup.md @@ -0,0 +1,46 @@ +--- +title: Tools and setup +weight: 60 +--- + +## Tools for technical writers + +Technical writer contributors need the following tools to contribute to AsyncAPI documentation effectively: + +- A laptop or desktop computer capable of running the tools necessary to contribute to the project. +- Stable internet access to clone the project repository, submit contributions, and stay updated on project changes. +- A [GitHub](https://github.com) account. AsyncAPI hosts all its project's source code and documentation on GitHub. You'll need a GitHub account to create issues, fork the repository, submit pull requests, and more. If you're new to GitHub, familiarize yourself with [basic GitHub functionalities and workflows](https://docs.github.com/en/get-started). +- A code editor, such as [VS Code](https://code.visualstudio.com), capable of handling Markdown files. +- [Git](https://git-scm.com), a version control system. + +## Setup your AsyncAPI local environment +1. Fork the repository by clicking the `Fork` option on the top right of the main repository. + +2. Open Command Prompt on your local computer. + +3. Clone the forked repository by adding your GitHub username instead of ``. + For multiple contributions, follow the [proper configuration of a forked AsyncAPI repo](https://github.com/asyncapi/community/blob/master/git-workflow.md). + +```bash + git clone https://github.com//website/ +``` + +4. Navigate to the website directory. + +```bash + cd website +``` + +5. Install all website dependencies. + +```bash + npm install +``` + +6. Run the website locally. + +```bash + npm run dev +``` + +7. Access the live development server at [localhost:3000](http://localhost:3000). From 45af17e6ee39f94da3baab7857d6b65f5df15798 Mon Sep 17 00:00:00 2001 From: Mahendra Dani <116940083+MahendraDani@users.noreply.github.com> Date: Tue, 26 Mar 2024 05:41:52 +0530 Subject: [PATCH 029/124] =?UTF-8?q?docs:=20added=20docs=20for=20creating?= =?UTF-8?q?=20new=20docs=20directories=20and=20opening=20a=20docs=E2=80=A6?= =?UTF-8?q?=20(#984)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Quetzalli <19964402+alequetzalli@users.noreply.github.com>%0ACo-authored-by: Quetzalli --- .../create-new-docs-directories.md | 24 +++++++++++++++++++ .../open-docs-pull-request.md | 15 ++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 docs/onboarding-guide/create-new-docs-directories.md create mode 100644 docs/onboarding-guide/open-docs-pull-request.md diff --git a/docs/onboarding-guide/create-new-docs-directories.md b/docs/onboarding-guide/create-new-docs-directories.md new file mode 100644 index 000000000..e935c2587 --- /dev/null +++ b/docs/onboarding-guide/create-new-docs-directories.md @@ -0,0 +1,24 @@ +--- +title : 'Create new docs directories' +weight : 80 +--- + +### Create new docs directories +Create a new docs directory (folder) via the following steps: +1. Identify the content bucket under which your document falls. +2. Open the project locally in your code editor of choice and navigate to the parent folder. +3. Right-click on the parent folder and click "new folder". +4. Give an appropriate name to the new folder. +5. Add the following two files to the new folder: + 1. `index.md`: Used as the main content for a website's directory or specific webpage. It's named index because many web servers are configured to automatically look for an index file when accessing a directory. When you access a directory on a web server, if an `index.md` file is present, it will be displayed as the default page for that directory. + 2. `_section.md`: Used for reusable components or partial content within a website's structure. It defines the page's `title` and `weight`. The title defines a human-readable title, and weight controls the order in which sections (directories) are displayed. +6. You can edit the index page after successfully creating these pages. + +```mermaid +flowchart LR + A[parent Folder] --> B[new Folder] + B[new Folder] --> C[index.md] + B[new Folder] --> D[_section.md] + B[new Folder] --> E[example-doc-1.md] + B[new Folder] --> F[example-doc-2.md] +``` diff --git a/docs/onboarding-guide/open-docs-pull-request.md b/docs/onboarding-guide/open-docs-pull-request.md new file mode 100644 index 000000000..b426fc704 --- /dev/null +++ b/docs/onboarding-guide/open-docs-pull-request.md @@ -0,0 +1,15 @@ +--- +title : 'Create new docs pull request' +weight : 90 +--- + +## Create a new docs pull request +Create and submit a docs pull request (PR) via the following steps: + +- A Docsโ€™ PR should solve one documentation problem. +- If there is no current issue for the docs task you want to accomplish, please open a docs issue before creating a PR. +- Use the [conventional commit style](https://github.com/asyncapi/.github/blob/master/CONTRIBUTING.md#conventional-commits) when creating PRs. Always create a docs issue or PR with the `docs:` prefix in the title. +- Please check your contribution and ensure it follows the AsyncAPI style guide. +- Tag other technical writers to review your document. +- Tag an engineer or subject matter expert (SME) to review the technical details. +- After implementing all the feedback you requested, please update your PR and wait for further feedback before it can be merged. From a1a8817f91591a8ec3f17fc96da280fd914adc31 Mon Sep 17 00:00:00 2001 From: Animesh Kumar Date: Wed, 27 Mar 2024 19:19:43 +0530 Subject: [PATCH 030/124] chore: bump action version to v2.4.0 (#1129) --- .github/workflows/youtube-to-spotify-for-podcasters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/youtube-to-spotify-for-podcasters.yml b/.github/workflows/youtube-to-spotify-for-podcasters.yml index bd91f7b56..37b779d16 100644 --- a/.github/workflows/youtube-to-spotify-for-podcasters.yml +++ b/.github/workflows/youtube-to-spotify-for-podcasters.yml @@ -26,7 +26,7 @@ jobs: # Verify the content was written successfully cat episode.json - name: Upload Episode from YouTube To Anchor.Fm - uses: Schrodinger-Hat/youtube-to-anchorfm@c722f3edeee94f3173dad36c5a959247973c5253 #commit related to https://github.com/Schrodinger-Hat/youtube-to-anchorfm/commit/c722f3edeee94f3173dad36c5a959247973c5253 || The latest commit which is of Nov 14, 2023 + uses: Schrodinger-Hat/youtube-to-anchorfm@b02b82f809d24db88472a78c51ffa627f46a6dc3 #commit related to https://github.com/Schrodinger-Hat/youtube-to-anchorfm/commit/b02b82f809d24db88472a78c51ffa627f46a6dc3 || The latest commit which refers to v2.4.0 of the action env: ANCHOR_EMAIL: ${{ secrets.ANCHOR_EMAIL }} ANCHOR_PASSWORD: ${{ secrets.ANCHOR_PASSWORD }} From e573c887ae1708cc1bbc0e9ebdf135f58ebf38d9 Mon Sep 17 00:00:00 2001 From: samz Date: Wed, 27 Mar 2024 20:26:36 +0100 Subject: [PATCH 031/124] feat: adding Developer Experience Working group (#1100) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- WORKING_GROUPS.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index d4f54787a..e536ce8b5 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -11,4 +11,19 @@ working_groups: # slack_channel: # Required. The name of the Slack channel in the AsyncAPI workspace. Example: community_growth_wg # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. - # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. \ No newline at end of file + # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. + - name: Developer Experience + description: The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience. + chairperson: @Amzani + members: + - @Pakisan + - @KhudaDad414 + - @ivangsa + - @peter-rr + - @Shurtu-gal + - @princerajpoot20 + - @Mayaleeeee + slack_channel: developer-experience-wg + roadmap_url: https://shapeit.app/projects/org/asyncapi/16 + okrs_url: https://github.com/users/Amzani/projects/12/views/1 + github_team: @asyncapi/developer_experience_wg From a189eff9b95b1dd13517519cfe97dfc3428cd60c Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 30 Mar 2024 11:05:48 +0100 Subject: [PATCH 032/124] chore(tweet): recurring tweet about slack link (#1137) --- tweets/recurring-slack-link/2024-03-30.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-03-30.tweet diff --git a/tweets/recurring-slack-link/2024-03-30.tweet b/tweets/recurring-slack-link/2024-03-30.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-03-30.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 345238df9979ff96ee7e6227155c47f77c2ddb9f Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 1 Apr 2024 11:05:05 +0200 Subject: [PATCH 033/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1142) --- tweets/recurring-discuss-ideas/2024-04-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-04-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-04-01.tweet b/tweets/recurring-discuss-ideas/2024-04-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-04-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From c0fa939c31263baf6c62b1993badf558b3ced3e1 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:52:25 +0200 Subject: [PATCH 034/124] docs: update list of repos owned by smoya (#1113) Co-authored-by: Quetzalli <19964402+alequetzalli@users.noreply.github.com>%0ACo-authored-by: Lukasz Gornicki --- MAINTAINERS.yaml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 03133433e..32db4afec 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -314,16 +314,18 @@ company: Postman isTscMember: true repos: + - spec + - spec-json-schemas - bindings - - converter-go - - event-gateway - - go-watermill-template - - infra - parser-api - - parser-go + - parser-js + - avro-schema-parser + - openapi-schema-parser + - raml-dt-schema-parser - server-api - - spec - - spec-json-schemas + - parser-go + - converter-go + - go-watermill-template - template-for-go-projects - name: Souvik De github: souvikns From bcae9298f43c581792dd5b940e621b66f5cd3006 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 2 Apr 2024 21:53:45 +0200 Subject: [PATCH 035/124] ci: update of files from global .github repo (#1145) --- .github/workflows/help-command.yml | 1 + .../workflows/please-take-a-look-command.yml | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 .github/workflows/please-take-a-look-command.yml diff --git a/.github/workflows/help-command.yml b/.github/workflows/help-command.yml index d4ba4a44c..ada81682e 100644 --- a/.github/workflows/help-command.yml +++ b/.github/workflows/help-command.yml @@ -31,6 +31,7 @@ jobs: At the moment the following comments are supported in pull requests: + - \`/please-take-a-look` or \`/ptal\` - This comment will add a comment to the PR asking for attention from the reviewrs who have not reviewed the PR yet. - \`/ready-to-merge\` or \`/rtm\` - This comment will trigger automerge of PR in case all required checks are green, approvals in place and do-not-merge label is not added - \`/do-not-merge\` or \`/dnm\` - This comment will block automerging even if all conditions are met and ready-to-merge label is added - \`/autoupdate\` or \`/au\` - This comment will add \`autoupdate\` label to the PR and keeps your PR up-to-date to the target branch's future changes. Unless there is a merge conflict or it is a draft PR.` diff --git a/.github/workflows/please-take-a-look-command.yml b/.github/workflows/please-take-a-look-command.yml new file mode 100644 index 000000000..216055ca5 --- /dev/null +++ b/.github/workflows/please-take-a-look-command.yml @@ -0,0 +1,54 @@ +# 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 uses Github actions to listen for comments on issues and pull requests and +# if the comment contains /ping-for-attention or /pfa it will add a comment pinging +# the code-owners who have not yet reviewed the pull request + +name: Please take a Look + +on: + issue_comment: + types: [created] + +jobs: + ping-for-attention: + if: > + github.event.issue.pull_request && + github.event.issue.state != 'closed' && + github.actor != 'asyncapi-bot' && + ( + contains(github.event.comment.body, '/please-take-a-look') || + contains(github.event.comment.body, '/ptal') || + contains(github.event.comment.body, '/PTAL') + ) + runs-on: ubuntu-latest + steps: + - name: Check for Please Take a Look Command + uses: actions/github-script@v6 + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const prDetailsUrl = context.payload.issue.pull_request.url; + const { data: pull } = await github.request(prDetailsUrl); + const reviewers = pull.requested_reviewers.map(reviewer => reviewer.login); + + const { data: reviews } = await github.rest.pulls.listReviews({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + + const reviewersWhoHaveReviewed = reviews.map(review => review.user.login); + + const reviewersWhoHaveNotReviewed = reviewers.filter(reviewer => !reviewersWhoHaveReviewed.includes(reviewer)); + + if (reviewersWhoHaveNotReviewed.length > 0) { + const comment = reviewersWhoHaveNotReviewed.map(reviewer => `@${reviewer}`).join(' '); + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `${comment} Please take a look at this PR. Thanks! :wave:` + }); + } From ae23bba57bf102d4f1d2da33b645f5abfd35c046 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 4 Apr 2024 16:36:41 +0200 Subject: [PATCH 036/124] ci: update of files from global .github repo (#1149) --- .github/workflows/please-take-a-look-command.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/please-take-a-look-command.yml b/.github/workflows/please-take-a-look-command.yml index 216055ca5..b26cbc41a 100644 --- a/.github/workflows/please-take-a-look-command.yml +++ b/.github/workflows/please-take-a-look-command.yml @@ -2,8 +2,8 @@ # 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 uses Github actions to listen for comments on issues and pull requests and -# if the comment contains /ping-for-attention or /pfa it will add a comment pinging -# the code-owners who have not yet reviewed the pull request +# if the comment contains /please-take-a-look or /ptal it will add a comment pinging +# the code-owners who are reviewers for PR name: Please take a Look @@ -44,7 +44,7 @@ jobs: const reviewersWhoHaveNotReviewed = reviewers.filter(reviewer => !reviewersWhoHaveReviewed.includes(reviewer)); if (reviewersWhoHaveNotReviewed.length > 0) { - const comment = reviewersWhoHaveNotReviewed.map(reviewer => `@${reviewer}`).join(' '); + const comment = reviewersWhoHaveNotReviewed.filter(reviewer => reviewer !== 'asyncapi-bot-eve' ).map(reviewer => `@${reviewer}`).join(' '); await github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, From 17d38655f990cae8033fe8dfd130d9aeb9225148 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 6 Apr 2024 12:05:26 +0200 Subject: [PATCH 037/124] chore(tweet): recurring tweet about slack link (#1151) --- tweets/recurring-slack-link/2024-04-06.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-04-06.tweet diff --git a/tweets/recurring-slack-link/2024-04-06.tweet b/tweets/recurring-slack-link/2024-04-06.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-04-06.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 37cddee073ee2c557256298fd3b1009fca2de9f9 Mon Sep 17 00:00:00 2001 From: Jonas Lagoni Date: Mon, 8 Apr 2024 11:25:48 +0200 Subject: [PATCH 038/124] chore: add Essential Building Blocks working group (#1098) Co-authored-by: Alex Wichmann Co-authored-by: Lorenz Simon Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- WORKING_GROUPS.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index e536ce8b5..43c5ea90d 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -12,6 +12,20 @@ working_groups: # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. + - name: Essential Building Blocks + description: The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across languages. + chairperson: @jonaslagoni + members: + - @m-wild + - @lorenzsimon + - @VisualBean + - @Pakisan + - @Souvikns + - @jonaslagoni + slack_channel: essential-building-blocks-wg + roadmap_url: https://github.com/orgs/asyncapi/projects/44 + github_team: @asyncapi/essential_building_blocks_wg + okrs_url: https://github.com/orgs/asyncapi/projects/44 - name: Developer Experience description: The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience. chairperson: @Amzani From 94db8659509d18a082fe1abcda3a1a2eecd5895e Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 8 Apr 2024 14:33:13 +0200 Subject: [PATCH 039/124] ci: update of files from global .github repo (#1153) --- .github/workflows/help-command.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/help-command.yml b/.github/workflows/help-command.yml index ada81682e..55353bb89 100644 --- a/.github/workflows/help-command.yml +++ b/.github/workflows/help-command.yml @@ -31,7 +31,7 @@ jobs: At the moment the following comments are supported in pull requests: - - \`/please-take-a-look` or \`/ptal\` - This comment will add a comment to the PR asking for attention from the reviewrs who have not reviewed the PR yet. + - \`/please-take-a-look\` or \`/ptal\` - This comment will add a comment to the PR asking for attention from the reviewrs who have not reviewed the PR yet. - \`/ready-to-merge\` or \`/rtm\` - This comment will trigger automerge of PR in case all required checks are green, approvals in place and do-not-merge label is not added - \`/do-not-merge\` or \`/dnm\` - This comment will block automerging even if all conditions are met and ready-to-merge label is added - \`/autoupdate\` or \`/au\` - This comment will add \`autoupdate\` label to the PR and keeps your PR up-to-date to the target branch's future changes. Unless there is a merge conflict or it is a draft PR.` From bc65cc343b1e5eb18a62740ef9bce12da432922a Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:22:00 +0530 Subject: [PATCH 040/124] ci: add workflow to enable voting (#1120) --- .github/actions/verifyTSCMember/action.yml | 46 ++++++++++++++++ .github/workflows/vote-verifcation.yml | 63 ++++++++++++++++++++++ .gitvote.yml | 9 ++++ 3 files changed, 118 insertions(+) create mode 100644 .github/actions/verifyTSCMember/action.yml create mode 100644 .github/workflows/vote-verifcation.yml create mode 100644 .gitvote.yml diff --git a/.github/actions/verifyTSCMember/action.yml b/.github/actions/verifyTSCMember/action.yml new file mode 100644 index 000000000..261f34909 --- /dev/null +++ b/.github/actions/verifyTSCMember/action.yml @@ -0,0 +1,46 @@ +name: Verify Member +outputs: + isTSCMember: + description: 'Check whether the person is TSCMember or not' + value: ${{steps.verify_member.outputs.isTSCMember}} +inputs: + authorName: + description: 'Name of the commentor' + required: true + +runs: + using: "composite" + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install the dependencies + run: npm install js-yaml@4.1.0 + shell: bash + + - name: Verify TSC Member + id: verify_member + uses: actions/github-script@v6 + with: + script: | + const yaml = require('js-yaml'); + const fs = require('fs'); + const commenterName = '${{ inputs.authorName }}'; + let isTSCMember = false; + try { + // Load YAML file + const data = yaml.load(fs.readFileSync('MAINTAINERS.yaml', 'utf8')); + + // Filter persons who are TSC members and whose GitHub username matches commenterName + const isTscMember = data.find(person => { + return (person.isTscMember === true || person.isTscMember === "true") && person.github === commenterName; + }); + // Check if a TSC member was found + if (isTscMember) { + isTSCMember = true; + } + + core.setOutput('isTSCMember', isTSCMember); + } catch (e) { + console.log(e); + } \ No newline at end of file diff --git a/.github/workflows/vote-verifcation.yml b/.github/workflows/vote-verifcation.yml new file mode 100644 index 000000000..6689a28a9 --- /dev/null +++ b/.github/workflows/vote-verifcation.yml @@ -0,0 +1,63 @@ +name: Verification of the Vote + +on: + issue_comment: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Verify the person + id: verify_member + uses: ./.github/actions/verifyTSCMember + with: + authorName: "${{github.event.comment.user.login}}" + + - name: Checking the person authenticity. + if: contains(github.event.comment.body, '/vote') || contains(github.event.comment.body, '/cancel-vote') + uses: actions/github-script@v6 + with: + script : | + const isTSCMember = ${{ steps.verify_member.outputs.isTSCMember}} + if(!isTSCMember) { + const commentText = `User โŒ @${{ github.actor }} is not a [TSC Member](https://www.asyncapi.com/community/tsc). Learn more from [guidelines to become a TSC Member](https://github.com/asyncapi/community/blob/master/TSC_MEMBERSHIP.md)`; + console.log(`User โŒ @${{ github.actor }} is not a TSC Member`); + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: commentText + }); + } else if('${{github.actor}}' != 'git-vote[bot]') { + console.log(`User โœ… @${{ github.actor }} is a TSC Member`); + } + + - name: Add the label + run: | + if [ "${{steps.verify_member.outputs.isTSCMember}}" == "true" ]; then + if [ "${{ github.event.comment.body }}" == "/vote" ]; then + if [ "${{ github.event_name }}" != "pull_request" ]; then + gh issue edit ${{ github.event.issue.number }} --add-label "vote" + else + gh pr edit ${{ github.event.issue.number }} --add-label "vote" + fi + fi + fi + env: + GH_TOKEN: ${{ github.token }} + - name: Remove the label + run: | + if [ "${{steps.verify_member.outputs.isTSCMember}}" == "true" ]; then + if [ "${{ github.event.comment.body }}" == "/cancel-vote" ]; then + if [ "${{ github.event_name }}" != "pull_request" ]; then + gh issue edit ${{ github.event.issue.number }} --remove-label "vote" + else + gh pr edit ${{ github.event.issue.number }} --remove-label "vote" + fi + fi + fi + env: + GH_TOKEN: ${{ github.token }} \ No newline at end of file diff --git a/.gitvote.yml b/.gitvote.yml new file mode 100644 index 000000000..c1dffc24b --- /dev/null +++ b/.gitvote.yml @@ -0,0 +1,9 @@ +profiles: + default: + duration: 4w + pass_threshold: 51 + periodic_status_check: "1 week" + close_on_passing: true + allowed_voters: + teams: + - tsc_members \ No newline at end of file From 020c82889c92e535dedf61ebb69a163d05ddf427 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:42:26 +0530 Subject: [PATCH 041/124] ci: update github action and improve comment (#1156) --- .github/workflows/vote-verifcation.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/vote-verifcation.yml b/.github/workflows/vote-verifcation.yml index 6689a28a9..d374b3a2d 100644 --- a/.github/workflows/vote-verifcation.yml +++ b/.github/workflows/vote-verifcation.yml @@ -23,7 +23,7 @@ jobs: script : | const isTSCMember = ${{ steps.verify_member.outputs.isTSCMember}} if(!isTSCMember) { - const commentText = `User โŒ @${{ github.actor }} is not a [TSC Member](https://www.asyncapi.com/community/tsc). Learn more from [guidelines to become a TSC Member](https://github.com/asyncapi/community/blob/master/TSC_MEMBERSHIP.md)`; + const commentText = `Hi @${{ github.actor }}, since you are not a [TSC Member](https://www.asyncapi.com/community/tsc), you cannot start or stop voting. Please [read more about voting process](https://github.com/asyncapi/community/blob/master/voting.md)`; console.log(`User โŒ @${{ github.actor }} is not a TSC Member`); github.rest.issues.createComment({ issue_number: context.issue.number, @@ -47,7 +47,7 @@ jobs: fi fi env: - GH_TOKEN: ${{ github.token }} + GH_TOKEN: ${{ secrets.GH_TOKEN_BOT_EVE }} - name: Remove the label run: | if [ "${{steps.verify_member.outputs.isTSCMember}}" == "true" ]; then @@ -60,4 +60,4 @@ jobs: fi fi env: - GH_TOKEN: ${{ github.token }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GH_TOKEN_BOT_EVE }} \ No newline at end of file From 59db3aa7475b728d6f113214d96e1d79b0883858 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:54:03 +0530 Subject: [PATCH 042/124] ci: add bot github token to workflow for voting verification (#1157) --- .github/workflows/vote-verifcation.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/vote-verifcation.yml b/.github/workflows/vote-verifcation.yml index d374b3a2d..780532d05 100644 --- a/.github/workflows/vote-verifcation.yml +++ b/.github/workflows/vote-verifcation.yml @@ -20,6 +20,7 @@ jobs: if: contains(github.event.comment.body, '/vote') || contains(github.event.comment.body, '/cancel-vote') uses: actions/github-script@v6 with: + github-token: ${{ secrets.GH_TOKEN_BOT_EVE }} script : | const isTSCMember = ${{ steps.verify_member.outputs.isTSCMember}} if(!isTSCMember) { From be76266c8977e5a91cc040ff60354855bbe9a03d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20M=C3=A9ndez?= Date: Fri, 12 Apr 2024 08:59:32 +0200 Subject: [PATCH 043/124] chore: added myself to the DX working group (#1139) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com>%0ACo-authored-by: Lukasz Gornicki --- WORKING_GROUPS.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 43c5ea90d..37d176fc1 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -37,6 +37,7 @@ working_groups: - @Shurtu-gal - @princerajpoot20 - @Mayaleeeee + - @fmvilas slack_channel: developer-experience-wg roadmap_url: https://shapeit.app/projects/org/asyncapi/16 okrs_url: https://github.com/users/Amzani/projects/12/views/1 From ad76265c2ec70262d90fa4e750fb2c17dd36da79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barbanio=20Gonz=C3=A1lez?= <77982319+Barbanio@users.noreply.github.com> Date: Fri, 12 Apr 2024 11:21:03 +0100 Subject: [PATCH 044/124] chore: remove @Barbanio as maintainer (#1167) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- MAINTAINERS.yaml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 32db4afec..582f8e518 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -482,17 +482,6 @@ isTscMember: true repos: - bindings -- name: Barbaรฑo Gonzรกlez - linkedin: barbano-gonzalez-moreno - twitter: BarbanoGonzalez - github: barbanio - slack: U01J42QDSLU - availableForHire: false - company: Postman - isTscMember: true - repos: - - training - - community - name: Kenneth Aasan github: kennethaasan slack: U037S2HK4TS From 14cdee2ee2dcf6565108d745d3fc1fcb3b014151 Mon Sep 17 00:00:00 2001 From: Lukasz Gornicki Date: Fri, 12 Apr 2024 12:25:02 +0200 Subject: [PATCH 045/124] chore: move TSC members arjungarg07 and boyney123 to emeritus (#1161) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- Emeritus.yaml | 2 ++ MAINTAINERS.yaml | 19 ------------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/Emeritus.yaml b/Emeritus.yaml index 100800335..cb2e55f5a 100644 --- a/Emeritus.yaml +++ b/Emeritus.yaml @@ -3,3 +3,5 @@ emeritus: - jotamusik - LouisXhaferi - aeworxet + - arjungarg07 + - boyney123 diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 582f8e518..cd7ffe131 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -42,15 +42,6 @@ isTscMember: true repos: - go-watermill-template -- name: Arjun Garg - github: arjungarg07 - linkedin: arjungarg17 - slack: U01QX79S734 - twitter: ArjunGarg07 - availableForHire: true - isTscMember: true - repos: - - cupid - name: Ashish Padhy github: Shurtu-gal linkedin: ashish-padhy3023 @@ -396,16 +387,6 @@ isTscMember: true repos: - java-template -- name: David Boyne - github: boyney123 - twitter: boyney123 - slack: U020GN9C6FM - availableForHire: false - company: AWS - isTscMember: true - repos: - - studio - - cli - name: Semen Tenishchev github: tenischev linkedin: semen-tenishchev From 1f9a1715471d57e1625c2b6416eeb66f7a88c3c8 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:13:41 +0530 Subject: [PATCH 046/124] fix: change the username to valid one (#1166) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- MAINTAINERS.yaml | 2 +- TSC_MEMBERS.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index cd7ffe131..5e6d0b47b 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -151,7 +151,7 @@ repos: - bindings - name: Ludovic Dussart - github: m3lkior + github: M3lkior linkedin: ludovic-dussart-846a8063 slack: U01BM49KL3Z twitter: ldussart diff --git a/TSC_MEMBERS.json b/TSC_MEMBERS.json index e0577da96..b7c8884b8 100644 --- a/TSC_MEMBERS.json +++ b/TSC_MEMBERS.json @@ -170,7 +170,7 @@ }, { "name": "Ludovic Dussart", - "github": "m3lkior", + "github": "M3lkior", "linkedin": "ludovic-dussart-846a8063", "slack": "U01BM49KL3Z", "twitter": "ldussart", From cd6bc29aa2c40dd47bdd57761ee503ada161f620 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 13 Apr 2024 12:05:18 +0200 Subject: [PATCH 047/124] chore(tweet): recurring tweet about slack link (#1172) --- tweets/recurring-slack-link/2024-04-13.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-04-13.tweet diff --git a/tweets/recurring-slack-link/2024-04-13.tweet b/tweets/recurring-slack-link/2024-04-13.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-04-13.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 274f05721735eb7c03844ec19b1f429acd99d586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barbanio=20Gonz=C3=A1lez?= <77982319+Barbanio@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:45:55 +0100 Subject: [PATCH 048/124] chore: remove `Barbanio` from TSC members (#1168) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com>%0ACo-authored-by: Lukasz Gornicki --- TSC_MEMBERS.json | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/TSC_MEMBERS.json b/TSC_MEMBERS.json index b7c8884b8..77ce9524f 100644 --- a/TSC_MEMBERS.json +++ b/TSC_MEMBERS.json @@ -548,19 +548,6 @@ "bindings" ] }, - { - "name": "Barbaรฑo Gonzรกlez", - "linkedin": "barbano-gonzalez-moreno", - "twitter": "BarbanoGonzalez", - "github":"Barbanio", - "slack":"U01J42QDSLU", - "availableForHire": false, - "company": "Postman", - "repos": [ - "training", - "community" - ] - }, { "name": "Kenneth Aasan", "github": "kennethaasan", From 788d0787d73be6ecfff345d98e67375ad822a2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barbanio=20Gonz=C3=A1lez?= <77982319+Barbanio@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:46:45 +0100 Subject: [PATCH 049/124] chore: add `Barbanio` as emeritus (#1173) Co-authored-by: Lukasz Gornicki --- Emeritus.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Emeritus.yaml b/Emeritus.yaml index cb2e55f5a..c26c5dccd 100644 --- a/Emeritus.yaml +++ b/Emeritus.yaml @@ -5,3 +5,4 @@ emeritus: - aeworxet - arjungarg07 - boyney123 + - Barbanio From fa6e206dfd15c02f833d667f9f3d8ca5fff052bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20M=C3=A9ndez?= Date: Mon, 15 Apr 2024 15:59:04 +0200 Subject: [PATCH 050/124] fix: replace okrs_url with objectives and make it recommended (#1138) Co-authored-by: Quetzalli %0ACo-authored-by: Lukasz Gornicki --- WORKING_GROUPS.md | 4 ++++ WORKING_GROUPS.yaml | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md index 09dcf853c..faee48724 100644 --- a/WORKING_GROUPS.md +++ b/WORKING_GROUPS.md @@ -14,4 +14,8 @@ The group's name, members, goals, and other relevant information must be added t A Working Group has no authority or power over the roadmap of the projects they may impact. It's up to the repositories' maintainers (code owners) to approve or reject the pull requests. Therefore, it's advisable to either have maintainers of the impacted projects in the Working Group or ensure everyone agrees on the roadmap of the different repositories/projects. +A Working Group must discuss ideas and solutions in public, and communicate through official channels all relevant discussions and implementations that want to suggest to others. + +It is recommended that the Working Group schedules meetings using the methods described at https://github.com/asyncapi/community/blob/master/MEETINGS_ORGANIZATION.md. + Working Groups should be listed on the [AsyncAPI website](https://www.asyncapi.com), along with their description, goals, members, and anything the Working Group wants to include. diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 37d176fc1..5d35c764e 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -9,7 +9,8 @@ working_groups: # members: # Required to have at least 2 members who are not the same as the chairperson. # - @fmvilas # GitHub handle of the member. # slack_channel: # Required. The name of the Slack channel in the AsyncAPI workspace. Example: community_growth_wg - # okrs_url: https://example.com/xyz # Required. Link to a GitHub project, issue, or any other tool where the Working Group explains their objectives. + # objectives: # Recommended. List of sentences outlining the objectives of the working group; or Link to a GitHub project, issue, or any other tool where the Working Group outlines their objectives. + # - The AsyncAPI community grows sustainably. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. - name: Essential Building Blocks @@ -40,5 +41,5 @@ working_groups: - @fmvilas slack_channel: developer-experience-wg roadmap_url: https://shapeit.app/projects/org/asyncapi/16 - okrs_url: https://github.com/users/Amzani/projects/12/views/1 + objectives: https://github.com/users/Amzani/projects/12/views/1 github_team: @asyncapi/developer_experience_wg From f7cd1aa01b444b60a5cfd87296c2ffabd23988a0 Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:10:11 +0200 Subject: [PATCH 051/124] chore: change ownership of ambassador program (#1178) --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 02923fd32..98091f50b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -8,4 +8,4 @@ * @alequetzalli @derberg @asyncapi-bot-eve @thulieblack # All ambassadors related files -AMBASSADOR* @Barbanio +AMBASSADOR* @thulieblack From cc348858cef5f0599209715682e13bbaae152747 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 18 Apr 2024 12:52:19 +0200 Subject: [PATCH 052/124] docs(community): update latest maintainers list (#1179) --- MAINTAINERS.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 5e6d0b47b..c13e4f143 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -532,3 +532,4 @@ isTscMember: false repos: - bundler + - optimizer From 9b30cc9e0c4d23bf42696bb40d0c427a780f8ea1 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 18 Apr 2024 13:06:37 +0200 Subject: [PATCH 053/124] ci: update of files from global .github repo (#1180) --- ...d-ready-to-merge-or-do-not-merge-label.yml | 4 +- .github/workflows/autoupdate.yml | 68 ++++++------ .github/workflows/help-command.yml | 3 +- .github/workflows/update-pr.yml | 102 ++++++++++++++++++ 4 files changed, 141 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/update-pr.yml 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 66606fc17..02d71a796 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 @@ -59,7 +59,9 @@ jobs: body: `Hello, @${{ github.actor }}! ๐Ÿ‘‹๐Ÿผ This PR is not up to date with the base branch and can't be merged. Please update your branch manually with the latest version of the base branch. - PRO-TIP: Add a comment to your PR with the text: \`/au\` or \`/autoupdate\` and our bot will take care of updating the branch in the future. The only requirement for this to work is to enable [Allow edits from maintainers](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) option in your PR. + PRO-TIP: To request an update from the upstream branch, simply comment \`/u\` or \`/update\` and our bot will handle the update operation promptly. + + The only requirement for this to work is to enable [Allow edits from maintainers](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) option in your PR. Also the update will not work if your fork is located in an organization, not under your personal profile. Thanks ๐Ÿ˜„` }) } diff --git a/.github/workflows/autoupdate.yml b/.github/workflows/autoupdate.yml index ad8e0198f..eeb77a47b 100644 --- a/.github/workflows/autoupdate.yml +++ b/.github/workflows/autoupdate.yml @@ -1,34 +1,34 @@ -# 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 - -# This workflow is designed to work with: -# - autoapprove and automerge workflows for dependabot and asyncapibot. -# - special release branches that we from time to time create in upstream repos. If we open up PRs for them from the very beginning of the release, the release branch will constantly update with new things from the destination branch they are opened against - -# It uses GitHub Action that auto-updates pull requests branches, whenever changes are pushed to their destination branch. -# Autoupdating to latest destination branch works only in the context of upstream repo and not forks - -name: autoupdate - -on: - push: - branches-ignore: - - 'version-bump/**' - - 'dependabot/**' - - 'bot/**' - - 'all-contributors/**' - -jobs: - autoupdate-for-bot: - if: startsWith(github.repository, 'asyncapi/') - name: Autoupdate autoapproved PR created in the upstream - runs-on: ubuntu-latest - steps: - - name: Autoupdating - uses: docker://chinthakagodawita/autoupdate-action:v1 - env: - GITHUB_TOKEN: '${{ secrets.GH_TOKEN_BOT_EVE }}' - PR_FILTER: "labelled" - PR_LABELS: "autoupdate" - PR_READY_STATE: "ready_for_review" - MERGE_CONFLICT_ACTION: "ignore" +# 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 + +# This workflow is designed to work with: +# - autoapprove and automerge workflows for dependabot and asyncapibot. +# - special release branches that we from time to time create in upstream repos. If we open up PRs for them from the very beginning of the release, the release branch will constantly update with new things from the destination branch they are opened against + +# It uses GitHub Action that auto-updates pull requests branches, whenever changes are pushed to their destination branch. +# Autoupdating to latest destination branch works only in the context of upstream repo and not forks + +name: autoupdate + +on: + push: + branches-ignore: + - 'version-bump/**' + - 'dependabot/**' + - 'bot/**' + - 'all-contributors/**' + +jobs: + autoupdate-for-bot: + if: startsWith(github.repository, 'asyncapi/') + name: Autoupdate autoapproved PR created in the upstream + runs-on: ubuntu-latest + steps: + - name: Autoupdating + uses: docker://chinthakagodawita/autoupdate-action:v1 + env: + GITHUB_TOKEN: '${{ secrets.GH_TOKEN_BOT_EVE }}' + PR_FILTER: "labelled" + PR_LABELS: "autoupdate" + PR_READY_STATE: "ready_for_review" + MERGE_CONFLICT_ACTION: "ignore" diff --git a/.github/workflows/help-command.yml b/.github/workflows/help-command.yml index 55353bb89..3f4dcbc4c 100644 --- a/.github/workflows/help-command.yml +++ b/.github/workflows/help-command.yml @@ -34,7 +34,8 @@ jobs: - \`/please-take-a-look\` or \`/ptal\` - This comment will add a comment to the PR asking for attention from the reviewrs who have not reviewed the PR yet. - \`/ready-to-merge\` or \`/rtm\` - This comment will trigger automerge of PR in case all required checks are green, approvals in place and do-not-merge label is not added - \`/do-not-merge\` or \`/dnm\` - This comment will block automerging even if all conditions are met and ready-to-merge label is added - - \`/autoupdate\` or \`/au\` - This comment will add \`autoupdate\` label to the PR and keeps your PR up-to-date to the target branch's future changes. Unless there is a merge conflict or it is a draft PR.` + - \`/autoupdate\` or \`/au\` - This comment will add \`autoupdate\` label to the PR and keeps your PR up-to-date to the target branch's future changes. Unless there is a merge conflict or it is a draft PR. (Currently only works for upstream branches.) + - \`/update\` or \`/u\` - This comment will update the PR with the latest changes from the target branch. Unless there is a merge conflict or it is a draft PR. NOTE: this only updates the PR once, so if you need to update again, you need to call the command again.` }) create_help_comment_issue: diff --git a/.github/workflows/update-pr.yml b/.github/workflows/update-pr.yml new file mode 100644 index 000000000..2fa19b0ad --- /dev/null +++ b/.github/workflows/update-pr.yml @@ -0,0 +1,102 @@ +# This workflow 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 + +# This workflow will run on every comment with /update or /u. And will create merge-commits for the PR. +# This also works with forks, not only with branches in the same repository/organization. +# Currently, does not work with forks in different organizations. + +# This workflow will be distributed to all repositories in the AsyncAPI organization + +name: Update PR branches from fork + +on: + issue_comment: + types: [created] + +jobs: + update-pr: + if: > + startsWith(github.repository, 'asyncapi/') && + github.event.issue.pull_request && + github.event.issue.state != 'closed' && ( + contains(github.event.comment.body, '/update') || + contains(github.event.comment.body, '/u') + ) + runs-on: ubuntu-latest + steps: + - name: Get Pull Request Details + id: pr + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }} + previews: 'merge-info-preview' # https://docs.github.com/en/graphql/overview/schema-previews#merge-info-preview-more-detailed-information-about-a-pull-requests-merge-state-preview + script: | + const prNumber = context.payload.issue.number; + core.debug(`PR Number: ${prNumber}`); + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber + }); + + // If the PR has conflicts, we don't want to update it + const updateable = ['behind', 'blocked', 'unknown', 'draft', 'clean'].includes(pr.mergeable_state); + console.log(`PR #${prNumber} is ${pr.mergeable_state} and is ${updateable ? 'updateable' : 'not updateable'}`); + core.setOutput('updateable', updateable); + + core.debug(`Updating PR #${prNumber} with head ${pr.head.sha}`); + + return { + id: pr.node_id, + number: prNumber, + head: pr.head.sha, + } + - name: Update the Pull Request + if: steps.pr.outputs.updateable == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }} + script: | + const mutation = `mutation update($input: UpdatePullRequestBranchInput!) { + updatePullRequestBranch(input: $input) { + pullRequest { + mergeable + } + } + }`; + + const pr_details = ${{ steps.pr.outputs.result }}; + + try { + const { data } = await github.graphql(mutation, { + input: { + pullRequestId: pr_details.id, + expectedHeadOid: pr_details.head, + } + }); + } catch (GraphQLError) { + core.debug(GraphQLError); + if ( + GraphQLError.name === 'GraphqlResponseError' && + GraphQLError.errors.some( + error => error.type === 'FORBIDDEN' || error.type === 'UNAUTHORIZED' + ) + ) { + // Add comment to PR if the bot doesn't have permissions to update the PR + const comment = `Hi @${context.actor}. Update of PR has failed. It can be due to one of the following reasons: + - I don't have permissions to update this PR. To update your fork with upstream using bot you need to enable [Allow edits from maintainers](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) option in the PR. + - The fork is located in an organization, not under your personal profile. No solution for that. You are on your own with manual update. + - There may be a conflict in the PR. Please resolve the conflict and try again.`; + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: comment + }); + + core.setFailed('Bot does not have permissions to update the PR'); + } else { + core.setFailed(GraphQLError.message); + } + } From 111bcdde13b3af47324f088205f79117d2364017 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 20 Apr 2024 12:05:24 +0200 Subject: [PATCH 054/124] chore(tweet): recurring tweet about slack link (#1182) --- tweets/recurring-slack-link/2024-04-20.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-04-20.tweet diff --git a/tweets/recurring-slack-link/2024-04-20.tweet b/tweets/recurring-slack-link/2024-04-20.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-04-20.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From d4dfa563b7e19e839236eaa9e1e7b679c3bf05a3 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:07:15 +0200 Subject: [PATCH 055/124] chore: improve WORKING_GROUPS.yaml file (#1181) --- WORKING_GROUPS.yaml | 109 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 25 deletions(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 5d35c764e..ad621309e 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -5,41 +5,100 @@ working_groups: # - name: Required. The name of the working group. # description: Required. Describe what this working group is about. - # chairperson: Required. GitHub handle of the chairperson. Example: @Barbanio. + # chairperson: + # name: Fran Mรฉndez # Required. Name of the chairperson. + # github: fmvilas # Required. GitHub handle of the chairperson without the @. + # slack: U34F2JRRS # Required. Slack user ID of the chairperson. # members: # Required to have at least 2 members who are not the same as the chairperson. - # - @fmvilas # GitHub handle of the member. - # slack_channel: # Required. The name of the Slack channel in the AsyncAPI workspace. Example: community_growth_wg + # - name: Sergio Moya # Required. Name of the member. + # github: smoya # Required. GitHub handle of the member without the @. + # slack: UN22ZTLHG # Required. Slack user ID of the member. + # slack: + # channel: + # handle: # Required. The handle of the Slack channel in the AsyncAPI workspace. Recommended pattern: wg-. Example: wg-maintainers-growth. + # description: # Recommended. A brief description of the working group to be used in the Slack channel description. If not provided, the wg description will be used. + # topic: # Optional. The topic of the Slack channel. + # group: + # handle: # Optional. The handle of the Slack group in the AsyncAPI workspace. Recommended pattern: wg-. Example: maintainers-growth-wg. If not provided, the name of the wg will be used and transformed to follow the recommended pattern. The handle should be unique and not in use by a member, channel, or another group. + # name: # Optional. The name of the Slack group. (If not provided, the name of the group will be autogenerated based on the name of the wg). + # description: # Recommended. The description of the Slack group. (If not provided, the description of the wg will be used). # objectives: # Recommended. List of sentences outlining the objectives of the working group; or Link to a GitHub project, issue, or any other tool where the Working Group outlines their objectives. # - The AsyncAPI community grows sustainably. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. - # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: @asyncapi/community_growth_wg. + # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: maintainers_growth_wg, without @asyncapi/ prefix. - name: Essential Building Blocks description: The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across languages. - chairperson: @jonaslagoni + chairperson: + name: Jonas Lagoni + github: jonaslagoni + slack: UQ2ANBG1E members: - - @m-wild - - @lorenzsimon - - @VisualBean - - @Pakisan - - @Souvikns - - @jonaslagoni + - name: Michael Wildman + github: m-wild + slack: UNH2HT346 + - name: Lorenz Simon + github: lorenzsimon + slack: U06L7EQQSF2 + - name: Alex Wichmann + github: VisualBean + slack: U04C58GB8TF + - name: Pavel Bodiachevskii + github: pakisan + slack: U0132LQU8C9 + - name: Souvik De + github: Souvikns + slack: U01SGCZMJKW + slack: + channel: + handle: wg-essential-building-blocks + description: 'The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across different languages. GitHub Project: https://github.com/orgs/asyncapi/projects/44' + group: + handle: essential-building-blocks-wg + description: Essential Building Blocks Working Group slack_channel: essential-building-blocks-wg roadmap_url: https://github.com/orgs/asyncapi/projects/44 - github_team: @asyncapi/essential_building_blocks_wg - okrs_url: https://github.com/orgs/asyncapi/projects/44 + github_team: essential_building_blocks_wg + objectives: + - https://github.com/orgs/asyncapi/projects/44 - name: Developer Experience description: The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience. - chairperson: @Amzani + chairperson: + name: Samir Amzani + github: amzani + slack: U01N6AW5V5G members: - - @Pakisan - - @KhudaDad414 - - @ivangsa - - @peter-rr - - @Shurtu-gal - - @princerajpoot20 - - @Mayaleeeee - - @fmvilas - slack_channel: developer-experience-wg + - name: Pavel Bodiachevskii + github: pakisan + slack: U0132LQU8C9 + - name: Khuda Dad Nomani + github: KhudaDad414 + slack: U01RVRD1TCL + - name: Ivรกn Garcรญa Sainz-Aja + github: ivangsa + slack: UTCN3ET4M + - name: Pedro Ramos + github: peter-rr + slack: U01TP1KJV1R + - name: Ashish Padhy + github: Shurtu-gal + slack: U0572R8J927 + - name: Prince Rajpoot + github: princerajpoot20 + slack: U04STTQHV18 + - name: Aishat Muibudeen + github: Mayaleeeee + slack: U03CNHGEUR1 + - name: Fran Mรฉndez + github: fmvilas + slack: U34F2JRRS + slack: + channel: + handle: wg-developer-experience + description: 'The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience.' + topic: 'Current Roadmap: https://shapeit.app/projects/org/asyncapi/16/cycles/ceb40c9d?issue=I_kwDOLQFNzc5-xigF' + group: + handle: wg-dx roadmap_url: https://shapeit.app/projects/org/asyncapi/16 - objectives: https://github.com/users/Amzani/projects/12/views/1 - github_team: @asyncapi/developer_experience_wg + objectives: + - https://github.com/users/Amzani/projects/12/views/1 + github_team: developer_experience_wg \ No newline at end of file From 0a0c77ea3611b73930d1e72f2308990121839459 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Wed, 24 Apr 2024 15:58:18 +0200 Subject: [PATCH 056/124] chore: allow multiple chairpersons in WORKING_GROUPS.yaml (#1187) --- WORKING_GROUPS.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index ad621309e..d2e992db5 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -5,11 +5,11 @@ working_groups: # - name: Required. The name of the working group. # description: Required. Describe what this working group is about. - # chairperson: - # name: Fran Mรฉndez # Required. Name of the chairperson. + # chairpersons: # Required to have at least 1 chairperson. In case of multiple, and unless specified, the first one is the primary chairperson. + # - name: Fran Mรฉndez # Required. Name of the chairperson. # github: fmvilas # Required. GitHub handle of the chairperson without the @. # slack: U34F2JRRS # Required. Slack user ID of the chairperson. - # members: # Required to have at least 2 members who are not the same as the chairperson. + # members: # Required to have at least 2 members who are not the same as the chairperson(s). # - name: Sergio Moya # Required. Name of the member. # github: smoya # Required. GitHub handle of the member without the @. # slack: UN22ZTLHG # Required. Slack user ID of the member. @@ -28,8 +28,8 @@ working_groups: # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: maintainers_growth_wg, without @asyncapi/ prefix. - name: Essential Building Blocks description: The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across languages. - chairperson: - name: Jonas Lagoni + chairpersons: + - name: Jonas Lagoni github: jonaslagoni slack: UQ2ANBG1E members: @@ -62,8 +62,8 @@ working_groups: - https://github.com/orgs/asyncapi/projects/44 - name: Developer Experience description: The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience. - chairperson: - name: Samir Amzani + chairpersons: + - name: Samir Amzani github: amzani slack: U01N6AW5V5G members: From 64a043af497ad67f5c6a9fe46574b2e9fc16a8e3 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:56:31 +0530 Subject: [PATCH 057/124] docs: add instruction how voting automation works (#1155) 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: Fran Mรฉndez Co-authored-by: Quetzalli Co-authored-by: Lukasz Gornicki Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- voting.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 voting.md diff --git a/voting.md b/voting.md new file mode 100644 index 000000000..b2d3e71e0 --- /dev/null +++ b/voting.md @@ -0,0 +1,52 @@ +## Overview + +In the [search for the right governance model](https://www.asyncapi.com/blog/governance-motivation), we ended up defining a Technical Steering Committee (TSC) that can help make decisions related to the entire AsyncAPI Initiative and not only a specific repository. TSC voting is described in the official [Charter](https://github.com/asyncapi/community/blob/master/CHARTER.md#4-tsc-voting). + +To make the voting process easier with proper automation, we use [**Git Vote**](https://github.com/cncf/gitvote) bot. + +### Voting Location + +- Voting must only take place in the [community](https://github.com/asyncapi/community) repository. +- Voting automation works only with GitHub Issues and Pull Requests. + +The Discussions should only be used for initial discussion, brainstorming ideas, or seeking initial support. + +In the majority of cases, topics we vote on introduce new rules or ways of doing things. This implies that proper community documentation is needed for these topics. We recommend using Pull Requests instead of Issues to conduct voting on a topic, as it allows you to provide context and finalize documentation. + +### Voting Rules + +* Only votes from [TSC members](https://www.asyncapi.com/community/tsc) are counted. You are still encouraged to participate in voting, even if your vote is not binding. +* TSC members have at least 7 calendar days to vote. As a community, we did not set an exact voting deadline and only have a rule that you can translate into: "Just be nice and give people at least 7 days to get familiar with the topic so they can vote." Our automation is set for 4 weeks to take into account all possible limitations related to holidays and other events. +* TSC members can skip some votes, although, if you do not have an opinion, please participate with ๐Ÿ‘€ to indicate that you saw a vote but you have no opinion and abstain. There is one strict rule, though: if you do not participate in voting within three months, you will stop being a TSC member. It has nothing to do, though, with your maintainer responsibilities. +* The vote is completed when more than 50% of the voting is in favor. + +### Voting Process + +#### Start Voting + +1. The TSC member adds a `/vote` comment to an Issue or a Pull Request. +2. The Git Vote bot creates a comment with instructions on how the voting should be done. It is based on ๐Ÿ‘๐Ÿผ , ๐Ÿ‘Ž๐Ÿผ and ๐Ÿ‘€ emojis. You can still put comments or suggestions. +3. The AsyncAPI bot adds a `vote` label, making it easier to extract information about voted topics and participation. + +#### Check Status + +1. Anyone can add a `/check-vote` comment to an Issue or a Pull Request. +2. The Git Vote bot creates a comment with an update on how many binding votes were provided. And how much the percentage is required to finish the voting process. + +### Cancel Voting + +1. The TSC member adds `/cancel-vote` comment to an Issue or a Pull Request. +2. The Git Vote bot creates a comment. +3. The AsyncAPI bot removes the `vote` label. + +### Finish Voting + +Voting cannot be concluded with a comment; it ends when more than half of the users with binding votes say yes or when the deadline passes. + +The Git Vote bot adds a comment that voting is completed. + +### Note + +* As per the [Charter](./CHARTER.md), a quorum is not needed. However, Git Vote has technical limitations, and a quorum should be reached. That's why we allocate 4 weeks for voting, and it's important to actively encourage participation to ensure that the quorum (where votes cast exceed 50% of eligible voters) is met. +* The abstain votes are included in the total number of votes; they are not removed. +* At present, Git Vote is enabled in the community repo only, and the Git Vote bot handles all voting processes. We will add Git Vote to other projects in the future. From 75392060778ef51d50dd9c307f3500c773196990 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 27 Apr 2024 12:05:45 +0200 Subject: [PATCH 058/124] chore(tweet): recurring tweet about slack link (#1190) --- tweets/recurring-slack-link/2024-04-27.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-04-27.tweet diff --git a/tweets/recurring-slack-link/2024-04-27.tweet b/tweets/recurring-slack-link/2024-04-27.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-04-27.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From f37b8ceeeade38b61af72df8f5f41f463a4b357f Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 1 May 2024 11:04:47 +0200 Subject: [PATCH 059/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1193) --- tweets/recurring-discuss-ideas/2024-05-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-05-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-05-01.tweet b/tweets/recurring-discuss-ideas/2024-05-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-05-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From 2dfccb94c4764f92b0b3564cf5c0e33467fd36fa Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 4 May 2024 12:05:24 +0200 Subject: [PATCH 060/124] chore(tweet): recurring tweet about slack link (#1195) --- tweets/recurring-slack-link/2024-05-04.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-05-04.tweet diff --git a/tweets/recurring-slack-link/2024-05-04.tweet b/tweets/recurring-slack-link/2024-05-04.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-05-04.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From f1dcb426d85d1404103f9c7a9af9317b5d54cafc Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 6 May 2024 09:00:32 +0200 Subject: [PATCH 061/124] ci: update of files from global .github repo (#1196) --- .github/workflows/bounty-program-commands.yml | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/.github/workflows/bounty-program-commands.yml b/.github/workflows/bounty-program-commands.yml index 433f7d953..645e0c90d 100644 --- a/.github/workflows/bounty-program-commands.yml +++ b/.github/workflows/bounty-program-commands.yml @@ -14,12 +14,18 @@ on: types: - created +env: + BOUNTY_PROGRAM_LABELS_JSON: | + [ + {"name": "bounty", "color": "0e8a16", "description": "Participation in the Bounty Program"} + ] + jobs: guard-against-unauthorized-use: if: > github.actor != ('aeworxet' || 'thulieblack') && ( - contains(github.event.comment.body, '/bounty' ) + startsWith(github.event.comment.body, '/bounty' ) ) runs-on: ubuntu-latest @@ -46,15 +52,10 @@ jobs: if: > github.actor == ('aeworxet' || 'thulieblack') && ( - contains(github.event.comment.body, '/bounty' ) + startsWith(github.event.comment.body, '/bounty' ) ) runs-on: ubuntu-latest - env: - BOUNTY_PROGRAM_LABELS_JSON: | - [ - {"name": "bounty", "color": "0e8a16", "description": "Participation in the Bounty Program"} - ] steps: - name: Add label `bounty` @@ -88,3 +89,38 @@ jobs: repo: context.repo.repo, labels: [BOUNTY_PROGRAM_LABELS[0].name] }) + + remove-label-bounty: + if: > + github.actor == ('aeworxet' || 'thulieblack') && + ( + startsWith(github.event.comment.body, '/unbounty' ) + ) + + runs-on: ubuntu-latest + + steps: + - name: Remove label `bounty` + uses: actions/github-script@v6 + + with: + github-token: ${{ secrets.GH_TOKEN }} + script: | + const BOUNTY_PROGRAM_LABELS = JSON.parse(process.env.BOUNTY_PROGRAM_LABELS_JSON); + let LIST_OF_LABELS_FOR_ISSUE = await github.rest.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + LIST_OF_LABELS_FOR_ISSUE = LIST_OF_LABELS_FOR_ISSUE.data.map(key => key.name); + + if (LIST_OF_LABELS_FOR_ISSUE.includes(BOUNTY_PROGRAM_LABELS[0].name)) { + console.log('Removing label `bounty`...'); + github.rest.issues.removeLabel({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + name: [BOUNTY_PROGRAM_LABELS[0].name] + }) + } From e7ff5ec178ad714dafb7735935cf9f10d8ef880f Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Mon, 6 May 2024 16:29:32 +0200 Subject: [PATCH 062/124] chore: add conference coordination working group (#1171) Co-authored-by: Quetzalli --- WORKING_GROUPS.yaml | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index d2e992db5..bebf9fbcc 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -101,4 +101,31 @@ working_groups: roadmap_url: https://shapeit.app/projects/org/asyncapi/16 objectives: - https://github.com/users/Amzani/projects/12/views/1 - github_team: developer_experience_wg \ No newline at end of file + github_team: developer_experience_wg + - name: Conference Coordination + description: The goal of the group is to plan, manage, and create a seamless way to enhance the conference experience. + chairpersons: + name: Thulisile Sibanda + github: thulieblack + slack: U03CNJPMT7C + members: + - name: Thulisile Sibanda + github: thulieblack + slack: U03CNJPMT7C + - name: Lukasz Gornicki + github: derberg + slack: UD698Q5LM + - name: Aishat Muibudeen + github: Mayaleeeee + slack: U03CNHGEUR1 + - name: Azeez Elegbede + github: acethecreator + slack: U01RWDD69PZ + slack: + channel: + handle: wg-conference-coordination + description: 'The Conference Coordination Working Group aims to plan, manage, and create a seamless way to enhance the conference experience. GitHub Project: https://github.com/orgs/asyncapi/projects/43/views/2' + roadmap_url: https://github.com/orgs/asyncapi/projects/43/views/2 + objectives: + - https://github.com/orgs/asyncapi/projects/43/views/2 + github_team: conference_coordination_wg From 806e31a3504dc83341f78e4a77eec23ba99edc13 Mon Sep 17 00:00:00 2001 From: Quetzalli Date: Wed, 8 May 2024 01:27:05 -0700 Subject: [PATCH 063/124] chore: add Quetzalli as alternative host (#1198) --- .github/workflows/create-event-ad-hoc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-event-ad-hoc.yml b/.github/workflows/create-event-ad-hoc.yml index 8a5a0d1b4..bf272009a 100644 --- a/.github/workflows/create-event-ad-hoc.yml +++ b/.github/workflows/create-event-ad-hoc.yml @@ -30,7 +30,7 @@ jobs: meeting_desc: ${{ github.event.inputs.desc }} meeting_banner: ${{ github.event.inputs.meeting_banner }} host: lpgornicki@gmail.com - alternative_host: "fmvilas@gmail.com,jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com" + alternative_host: "fmvilas@gmail.com,jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com" issue_template_path: .github/workflows/create-event-helpers/issues_templates/ad-hoc.md create_zoom: true secrets: From 494354c57be3b2d823a356d7f74105b47ef3c441 Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Wed, 8 May 2024 19:08:29 +0530 Subject: [PATCH 064/124] feat: initial infra for slack intergration (#1131) Co-authored-by: Sergio Moya <1083296+smoya@users.noreply.github.com>%0ACo-authored-by: Quetzalli %0ACo-authored-by: asyncapi-bot --- .github/workflows/slack-integration.yml | 45 + .github/workflows/slack/.terraform.lock.hcl | 25 + .github/workflows/slack/README.md | 147 +++ .github/workflows/slack/channels/channels.tf | 85 ++ .../workflows/slack/channels/channels.yaml | 255 +++++ .github/workflows/slack/groups/groups.tf | 74 ++ .github/workflows/slack/groups/groups.yaml | 53 + .github/workflows/slack/slack.tf | 36 + .github/workflows/slack/terraform.tfstate | 999 ++++++++++++++++++ .github/workflows/slack/users/users.tf | 30 + .gitignore | 5 +- TSC_MEMBERSHIP.md | 9 + WORKING_GROUPS.md | 11 + WORKING_GROUPS.yaml | 8 +- 14 files changed, 1777 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/slack-integration.yml create mode 100644 .github/workflows/slack/.terraform.lock.hcl create mode 100644 .github/workflows/slack/README.md create mode 100644 .github/workflows/slack/channels/channels.tf create mode 100644 .github/workflows/slack/channels/channels.yaml create mode 100644 .github/workflows/slack/groups/groups.tf create mode 100644 .github/workflows/slack/groups/groups.yaml create mode 100644 .github/workflows/slack/slack.tf create mode 100644 .github/workflows/slack/terraform.tfstate create mode 100644 .github/workflows/slack/users/users.tf diff --git a/.github/workflows/slack-integration.yml b/.github/workflows/slack-integration.yml new file mode 100644 index 000000000..734fe0f9b --- /dev/null +++ b/.github/workflows/slack-integration.yml @@ -0,0 +1,45 @@ +name: Automatic Slack Management + +on: + push: + paths: + - '**/slack/**/*' + - 'MAINTAINERS.yaml' + - 'WORKING_GROUPS.yaml' + +jobs: + deploy-changes-to-slack: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Deploy changes to Slack + run: | + cd .github/workflows/slack + terraform init + terraform apply \ + -var "slack_token=${{ secrets.SLACK_TOKEN }}" \ + -auto-approve + - name: Check if there are any uncommitted changes + id: git-check + run: | + # Set the output should_push to true if there are uncommitted changes + if [ -n "$(git status --porcelain)" ]; then + echo "Changes detected" + echo "should_push=true" >> $GITHUB_OUTPUT + else + echo "No changes detected" + echo "should_push=false" >> $GITHUB_OUTPUT + fi + - name: Push changes to GitHub + if: steps.git-check.outputs.should_push == 'true' + uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54 # use 4.2.4 https://github.com/peter-evans/create-pull-request/releases/tag/v4.2.4 + with: + token: ${{ secrets.GH_TOKEN }} + commit-message: 'chore(slack): update slack configuration' + committer: asyncapi-bot + author: asyncapi-bot + title: 'ci(slack): update slack configuration' + body: 'This PR was automatically created by the Automatic Slack Management GitHub Action.' + branch: 'chore/slack-update-${{ github.run_number }}' + base: 'main' \ No newline at end of file diff --git a/.github/workflows/slack/.terraform.lock.hcl b/.github/workflows/slack/.terraform.lock.hcl new file mode 100644 index 000000000..483c5f8a7 --- /dev/null +++ b/.github/workflows/slack/.terraform.lock.hcl @@ -0,0 +1,25 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/pablovarela/slack" { + version = "1.2.2" + constraints = "~> 1.0" + hashes = [ + "h1:0cQTyJPZUA2AYz+tKQ4z6Vbm0LwZbvtLOAsStWxFkIE=", + "h1:eNX77+dnJ7JRx9xX7WHMNy4QUxlcEXDUzldOunLDRNk=", + "zh:001870e887a1e29a328b87f6431444d8d60e3c7e958fae2e885fbfc4d345886a", + "zh:065ff64914739cb2942a5a133b2f6e37c3a4278199ca2416d4c578f4d5a12659", + "zh:383d283b2344732b1c2514c072f4d93de2fd0660d478381756f35ca1be69da41", + "zh:38a393a7c294e81f4e951a1bde494e79868144f82cdb9662e6d4e0428571bf54", + "zh:51c81d69806acb4048aef69dc2fa3e2464b4c86c68009e4de93814c42783e736", + "zh:5ad19e4173069c503a7fdc55fc84de2358d021536039e72efffd79f95dc4245e", + "zh:63b39c1d32a5cb0ce2afee114d43b1444653cc78b45d252e2c0031fbb0b0ffbf", + "zh:701a19598b3e554b08d203507c215b218aa21646ea70dd2e8f20e232cb1c138e", + "zh:77f854eec925a895f68ab8b744728fe6203f6a1771ef27200cfce67b6836f168", + "zh:8b7cd7311034eb35f0d4e1473048798aa826db2194ae159596846eda9b96c562", + "zh:ac3a062bd1502a2e9059a14e68b02f09cebcff8bda25a9b9dc5382919eddbf58", + "zh:b1f4f5fd6d88ca34f8d996898759213c9acf5498058c269d98ab0d1b7e91ce2d", + "zh:efb2befca31fe7a0682513077fcb43d3d50170661fb5b26b1920ee4f8fd9c6a6", + "zh:fdd9b048446fbc05363b75b607986be803ea36179a61d8151497a5c0f24d5630", + ] +} diff --git a/.github/workflows/slack/README.md b/.github/workflows/slack/README.md new file mode 100644 index 000000000..44625aa90 --- /dev/null +++ b/.github/workflows/slack/README.md @@ -0,0 +1,147 @@ +## Infrastructure for slack integration + +This directory contains the infrastructure for Slack integration. It is used to create/manage Slack channels and groups and invite users to Slack channels. The Slack integration is implemented using the [slack-terraform-provider](https://github.com/pablovarela/terraform-provider-slack). + +### Prerequisites + +- [A slack App](https://api.slack.com/apps) with the following scopes under `User Token Scopes` in `OAuth & Permissions`: + + Write Permissions: + - `channels:write` + - `groups:write` + - `usergroups:write` + + Read Permissions: + - `channels:read` + - `groups:read` + - `usergroups:read` + +> [!CAUTION] +> Try to use a bot to log into Slack to prevent any changes from being attributed to the workspace owner. This is due to using a `user token` for authentication, which does the changes on behalf of the user who created the token. + +- [API Token](https://api.slack.com/apps) after installing the app in your workspace. ( `xoxp-` ) + +- [Terraform](https://www.terraform.io/downloads.html) installed on your local machine. + +### Usage + +- Create a `terraform.tfvars` file in the `slack` directory with the following content: + +```hcl +slack_token = "xoxp-" +``` + +- Run the following commands to create the Slack resources: + +```bash +terraform init +terraform apply +``` + +> [!TIP] +> The `terraform apply` command will create the resources better to use `terraform plan` to see the changes before applying. + +### How it works + +Three main resources are created using the slack integration: + +- `slack_channel`: This resource creates a slack channel. The channels are defined in the [channels.yaml](./channels/channels.yaml) file. with the structure explained there. + +- `slack_usergroup`: This resource creates a Slack user group. The usergroups are defined in the [usergroups.yaml](./groups/groups.yaml) file, and their structure is explained there. + +> [!CAUTION] +> The user groups should be unique across the workspace (i.e., no channel, user, or user group should have the same handle). Also, in case of user groups mentioned in the yaml existing in the workspace, you have to run the following command to import it to terraform state: +> ```bash +> terraform import module.groups.slack_usergroup.[\"\"] +> +> # Example +> terraform import module.groups.slack_usergroup.wg_groups[\"Developer Experience\"] +> ``` + +- `slack_user`: This resource invites users to the Slack workspace. The users are defined in the [users.tf](./users/users.tf) file, and their structure is explained there. + +### Pitfalls + +- Use of bot token of the format `xoxo-` is not supported for creating user groups. +- The user group should be unique across the workspace (i.e., no channel, user, or user group should have the same handle). +- Please [import](#importing-existing-resources) the user groups to terraform state if they already exist in the workspace, as they **cannot be deleted** in Slack ๐Ÿ˜ข. + +> [!IMPORTANT] +> The terraform state will overwrite any description, name, or topic change. It is better to manage the changes in the YAML files and then apply them. However, the terraform state will not affect bookmarks, pinned items, etc. + +### Importing existing resources + +In case you have existing resources such as channels, user groups in the workspace, you can import them to the terraform state by transforming the `json` response from the slack API. An example script can be seen below: + +```javascript +const fs = require('fs'); +const fetch = require('node-fetch'); + +const token = 'xoxp-'; + +const fetchResource = async (resource, url_params) => { + // convert the url_params to query string + const url = new URL(`https://slack.com/api/${resource}`); + Object.keys(url_params).forEach(key => url.searchParams.append(key, url_params[key])); + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': `Bearer ${token}` + } + }); + const data = await response.json(); + return data; +} + +async function main() { + const channels = await fetchResource('conversations.list', { exclude_archived: true }); + const usergroups = await fetchResource('usergroups.list', { include_users: true }); + + channels.channels.forEach(channel => { + console.log(`terraform import module.channels.slack_conversation.channels[\\"${channel.name}\\"] ${channel.id}`); + }); + + usergroups.usergroups.forEach(usergroup => { + console.log(`terraform import module.groups.slack_usergroup.wg_groups[\\"${usergroup.name}\\"] ${usergroup.id}`); + }); +} + + +main(); +``` + +### What all can be done? + +#### Groups + +The groups can be mentioned in the slack messages using the `@` syntax. Addition of groups can be done by adding the group to the [groups.yaml](./groups/groups.yaml) file. + +The following groups are being created currently: +- `tsc` + + This group is for the Technical Steering Committee members mentioned in the [TSC_MEMBERS](../../../TSC_MEMBERS.json) file. Can be used to mention all the TSC members at once. + +- `maintainers` + + This group is for the all maintainers of the repository mentioned in the [MAINTAINERS](../../../MAINTAINERS.yaml) file. Can be used to mention all the maintainers at once. + +- `studio` + + This group consists of members actively working on the studio project. + +- `coc_commitee` + + This group consists of members of the Code of Conduct committee. + +In addition to these groups are also being created for each working group mentioned in the [WORKING_GROUPS](../../../WORKING_GROUPS.yaml) file. Example: `@dx_wg`. + +We are also having groups for maintainers of each repository mentioned in the [MAINTAINERS](../../../MAINTAINERS.yaml) file. You can mention the maintainers of a repository using `@maintainers_`. Example: `@maintainers_studio`. + +#### Channels + +Two types of channels are being created currently: + +- General channels: The channels are defined in the [channels.yaml](./channels/channels.yaml) file with the structure explained there. + +- Working group channels: The working group channels are created for each working group mentioned in the [WORKING_GROUPS](../../../WORKING_GROUPS.yaml) file. The channels are created with the name `wg_` or custom nameas configured in the [WORKING_GROUPS](../../../WORKING_GROUPS.yaml) file. diff --git a/.github/workflows/slack/channels/channels.tf b/.github/workflows/slack/channels/channels.tf new file mode 100644 index 000000000..2f6f9d9ae --- /dev/null +++ b/.github/workflows/slack/channels/channels.tf @@ -0,0 +1,85 @@ +terraform { + required_providers { + slack = { + source = "pablovarela/slack" + version = "~> 1.0" + } + } +} + +variable "data_sources" { + default = { + tsc_members_user_ids = [] + maintainers_user_ids = [] + repo_maintainers = {} + } + description = "Data sources for the slack channels from the users module" +} + +locals { + channel_data = yamldecode(file("${path.module}/channels.yaml")) + channels = { + for channel in local.channel_data : channel.name => { + name = channel.name + topic = channel.topic + purpose = channel.purpose + + # if permanent_members is not provided, then it wil be taken from local with the name in data sources + permanent_members = lookup(channel, "permanent_members", lookup(var.data_sources, lookup(channel, "data_source", channel.name), [])) + is_private = channel.is_private + action_on_destroy = channel.action_on_destroy + + # if private channel, then kick all users on update else none + action_on_update_permanent_members = channel.is_private ? "kick" : "none" + adopt_existing_channel = true + } + } +} + +resource "slack_conversation" "channels" { + for_each = local.channels + name = each.value.name + topic = each.value.topic + purpose = each.value.purpose + permanent_members = each.value.permanent_members + + is_private = each.value.is_private + action_on_destroy = each.value.action_on_destroy + action_on_update_permanent_members = each.value.action_on_update_permanent_members + adopt_existing_channel = each.value.adopt_existing_channel +} + +locals { + working_groups_data = yamldecode(file("${path.module}/../../../../WORKING_GROUPS.yaml")).working_groups + wg_channels = { + for wg_data in local.working_groups_data : wg_data.name => { + name = lookup(lookup(lookup(wg_data, "slack", {}), "channel", {}), "handle", "wg-${replace(lower(wg_data.name), " ", "-")}") + purpose = lookup(lookup(lookup(wg_data, "slack", {}), "channel", {}), "description", lookup(wg_data, "description", "")) + topic = lookup(lookup(lookup(wg_data, "slack", {}), "channel", {}), "topic", "") + + permanent_members = concat([for member in wg_data.chairpersons : member.slack], [for member in wg_data.members : member.slack]) + is_private = false + + action_on_destroy = "archive" + action_on_update_permanent_members = "none" + adopt_existing_channel = true + } + } +} + +resource "slack_conversation" "wg_channels" { + for_each = local.wg_channels + name = each.value.name + topic = each.value.topic + purpose = each.value.purpose + permanent_members = each.value.permanent_members + + is_private = each.value.is_private + action_on_destroy = each.value.action_on_destroy + action_on_update_permanent_members = each.value.action_on_update_permanent_members + adopt_existing_channel = each.value.adopt_existing_channel +} + +output "wg_channels" { + value = slack_conversation.wg_channels +} \ No newline at end of file diff --git a/.github/workflows/slack/channels/channels.yaml b/.github/workflows/slack/channels/channels.yaml new file mode 100644 index 000000000..861911a19 --- /dev/null +++ b/.github/workflows/slack/channels/channels.yaml @@ -0,0 +1,255 @@ +# Channels: +# +# name - (Required) name of the public or private channel. +# topic - (Optional) topic for the channel. +# purpose - (Optional) purpose of the channel. +# permanent_members - (Optional) user IDs to add to the channel. +# is_private - (Optional) create a private channel instead of a public one. +# is_archived - (Optional) indicates a conversation is archived. Frozen in time. +# action_on_destroy - (Optional, Default archive) indicates whether the conversation should be archived or left behind on destroy. Valid values are archive | none. Note that when set to none the conversation will be left as it is and as a result any subsequent runs of terraform apply with the same name will fail. +# data_source - (Optional) data_source source to use for the list of user IDs to add to the channel. Valid values are maintainers_user_ids | tsc_user_ids right now. + +# NOTE:- +# 1. The channel name should be unique. +# 2. The user IDs should be valid and should be present in the workspace. +# 3. Either permanent_members or data_source should be provided to add users to the channel. +# 4. The default value for change in permanent_members is kick for private channels and nothing for public channels. +# 5. The default value for adopt_current_channels is true. + +- name: 01_introductions + topic: Welcome to our AsyncAPI Slack! Take a moment to introduce yourself. + purpose: Welcome to our AsyncAPI Slack! Take a moment to introduce yourself. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 02_general + topic: 'Talk here if your topic is not only about the spec, nor tools but kinda mix and involves AsyncAPI :slightly_smiling_face:' + purpose: This channel is for team-wide communication and announcements. All team members are in this channel. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 03_specification + topic: All around the spec discussions. It is ok to ask for support here. + purpose: All around the spec discussions. It is ok to ask for support here. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 04_tooling + topic: All around the specs tooling discussions. It is ok to ask for support here. + purpose: Chat about the AsyncAPI tooling + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 05_promotion-marketing + topic: Purpose of this channel is to help us with AsyncAPI promotion. Share your ideas for marketing and learn what we are working on at the moment. We use โ€œchannelโ€ annotation here when we want to ask you to share our specific resources on different media. + purpose: Present launch plans for coordinated launches and to measure engagement and adoption + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 06_training + topic: All about trainings, workshops, courses, etc. โ€” + purpose: All about trainings, workshops, courses, etc. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 07_events + topic: This is the place where we regroup and discuss organization of AsyncAPI-related events. This is also a place where you can always let others know what events are you involved in, where and when do you present a topic related to AsyncAPI. + purpose: This is the place where we regroup and discuss organization of AsyncAPI-related events. This is also a place where you can always let others know what events are you involved in, where and when do you present a topic related to AsyncAPI. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 08_jobs + topic: Looking for a job that will let you work on AsyncAPI? Let others know. Looking for AsyncAPI expert to join your company, post your offer here and also on the AsyncAPI website . + purpose: Looking for a job that will let you work on AsyncAPI? Let others know. Looking for AsyncAPI expert to join your company, post your offer here and also on the AsyncAPI website . + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 09_mentorships + topic: We participate in many different external programs, and also have our own that will evolve in next years. This is the place where we talk about these and coordinate. + purpose: We participate in many different external programs, and also have our own that will evolve in next years. This is the place where we talk about these and coordinate. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 10_watercooler + topic: Non-AsyncAPI topics. When you have a need to talk to someone โ€œin personโ€, type โ€œ/zoomโ€ in channel and start a meeting and let others know you are there. Talking to another human solves many problems. + purpose: A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 11_contributing + topic: Learn how to contribute. Ask contribution-related questions. Tell us what you want to learn through contribution and we will find you a good spot. Remember that you can contribute not only by pushing code. + purpose: Learn how to contribute. Share what you would like to learn and we will find for you a good place to start contributing + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 12_design + topic: Discuss design-related topics such as branding, design system, UI kit, and any other misc. design projects. Have a design request? Use this channel to propose and discuss your request! + purpose: Discuss design-related topics such as branding, design system, UI kit, and any other misc. design projects. Have a design request? Use this channel to propose and discuss your request! + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 13_docs + topic: null + purpose: ':bookmark_tabs: Discuss AsyncAPI Docs: Feel free to open issues for documentation requests and to share ideas/feedback on open issues. ' + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 14_accessibility + topic: Accessibility throughout the asyncAPI Initiative + purpose: Accessibility throughout the AsyncAPI Initiative + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 15_ambassadors + topic: null + purpose: All about the Ambassador Program. Feel free to participate! + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 16_news + topic: null + purpose: Share links to news you find about AsyncAPI (or related stuff) on the internet. Did you write something and want us to help you promote it? Use the <#CH44ZMJAZ|05_promotion-marketing> channel instead. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 17_bounty + topic: All about the AsyncAPI Bounty Program discussions. + purpose: This is the place where we discuss everything related to the Bounty Program. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 18_asyncapi-v3 + topic: This is the channel where we talk about AsyncAPI v3. From announcements, blogs, and livestreams. + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 19_coc + topic: null + purpose: Feel free to openly ask the Code of Conduct Committee if you have any questions. + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 93_bot-infra-alerts + topic: null + purpose: Alerts on infrastructure monitoring (New Relic by now) + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 94_bot-failing-ci + topic: null + purpose: When something wrong happens in CI and we configure Slack alerts - these should end up in this channel + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 95_bot-tsc-members-mentioned + topic: This channel is here to mainly help TSC members to get notifications other than email or GitHub notifications, every time TSC GitHub team is mentioned in issues, PRs and discussions + purpose: This channel is here to mainly help TSC members to get notifications other than email or GitHub notifications, every time TSC GitHub team is mentioned in issues, PRs and discussions + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 96_bot-stackoverflow-questions + topic: Stackoverflow questions tagged asyncapi from the RSS feed + purpose: Stackoverflow questions tagged `asyncapi` from the RSS feed + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 97_bot-github-new-issues-prs + topic: Bot sends notifications about every new issue and pull request in any AsyncAPI repository. + purpose: Notifications about all new issues and PR except of bots + is_private: false + is_archived: false + action_on_destroy: archive + +- name: 98_bot-github-releases + topic: Bot sends notifications about every new release in any AsyncAPI repository. + purpose: Notifications about new GitHub releases + is_private: false + is_archived: false + action_on_destroy: archive + +- name: glee-demos + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: gsoc2021-students-mentors-collaboration + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: help- + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: jsonschema + topic: 'Need help with JSON Schema? This channel is connected with the JSON Schema Slack workspace. Here you can talk with the JSON Schema community directly :raised_hands:' + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: libopenapi-speakeasy + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: linux + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: salemfr1100 + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: status-updates + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive + +- name: test-bot-public + topic: null + purpose: null + is_private: false + is_archived: false + action_on_destroy: archive diff --git a/.github/workflows/slack/groups/groups.tf b/.github/workflows/slack/groups/groups.tf new file mode 100644 index 000000000..9438fa7ec --- /dev/null +++ b/.github/workflows/slack/groups/groups.tf @@ -0,0 +1,74 @@ +terraform { + required_providers { + slack = { + source = "pablovarela/slack" + version = "~> 1.0" + } + } +} + +variable "wg_channels" { + description = "Map of working group channels" +} + +variable "data_sources" { + default = { + tsc_members_user_ids = [] + maintainers_user_ids = [] + repo_maintainers = {} + } + description = "Data sources for the slack groups from the users module" +} + +locals { + group_data = yamldecode(file("${path.module}/groups.yaml")) + groups = { + for group in local.group_data : group.name => { + name = group.name + handle = group.handle + description = group.description + users = lookup(group, "users", lookup(var.data_sources, lookup(group, "data_source", group.name), [])) + channels = lookup(group, "channels", []) + } + } +} + +resource "slack_usergroup" "groups" { + for_each = local.groups + name = each.value.name + handle = each.value.handle + description = each.value.description + users = each.value.users + channels = each.value.channels +} + +resource "slack_usergroup" "maintainer_repos" { + for_each = var.data_sources.repo_maintainers + name = "Maintainers of asyncapi/${each.key}" + handle = "maintainers_${each.key}" + description = "Maintainers for https://github.com/asyncapi/${each.key}" + users = each.value +} + +locals { + working_groups_data = yamldecode(file("${path.module}/../../../../WORKING_GROUPS.yaml")).working_groups + wg_groups = { + for wg_data in local.working_groups_data : wg_data.name => { + name = lookup(lookup(lookup(wg_data, "slack", {}), "group", {}), "name", wg_data.name) + description = lookup(lookup(lookup(wg_data, "slack", {}), "group", {}), "description", lookup(wg_data, "description", "")) + + # Handle will be the name of the group in lowercase and with spaces replaced by hyphens succeded by "wg-" + handle = lookup(lookup(lookup(wg_data, "slack", {}), "group", {}), "handle", "${replace(lower(wg_data.name), " ", "-")}-wg") + users = concat([for member in wg_data.chairpersons : member.slack], [for member in wg_data.members : member.slack]) + } + } +} + +resource "slack_usergroup" "wg_groups" { + for_each = local.wg_groups + name = each.value.name + handle = each.value.handle + description = each.value.description + users = each.value.users + channels = [var.wg_channels[each.value.name].id] +} \ No newline at end of file diff --git a/.github/workflows/slack/groups/groups.yaml b/.github/workflows/slack/groups/groups.yaml new file mode 100644 index 000000000..35a5695ef --- /dev/null +++ b/.github/workflows/slack/groups/groups.yaml @@ -0,0 +1,53 @@ +# - Groups: +# - name: (Required) The name of the user group. +# - handle: (Required) A name for the user group that is unique among channels, users, and user groups. +# - description: (Optional) A short description of the user group. +# - users: (Optional) A list of user IDs that are part of the user group. +# - data_source: (Optional) The data source to use for the user group. If users is not provided, the user group will be populated with users from the data source. +# - channels: (Optional) A list of channel IDs for channels that the user group will be in. + +# IMPORTANT: Once a user group is created it cannot be deleted. And an existing user group cannot be created again. +# Before adding them here please make sure to import them like this: +# terraform import slack_usergroup. + +- name: "TSC Members" + handle: "tsc" + description: "TSC members - https://www.asyncapi.com/community/tsc" + data_source: "tsc_members_user_ids" + +- name: "Maintainers" + handle: "maintainers" + description: "Maintainers" + data_source: "maintainers_user_ids" + +- name: "Studio" + handle: "studio" + description: "To notify all regular Studio contributors at once. If you don't contribute regularly but want to get notified too, please open a PR to get added." + users: + - "U01RWDD69PZ" + - "U0572R8J927" + - "U058PQFJPS4" + - "U01RVRD1TCL" + - "U01EB02BP7A" + - "U01TP1KJV1R" + - "U04STTQHV18" + - "U01N6AW5V5G" + - "U01SGCZMJKW" + channels: + - "CQVJXFNQL" + - "C02JW8DA0DC" + + +- name: "CoC Committee" + handle: "coc_committee" + description: "To notify the code of conduct team all at once when there is a question or anything related to them." + users: + - "U01RWDD69PZ" + - "U01J42QDSLU" + - "U03CNHGEUR1" + - "UN22ZTLHG" + - "U03CNJPMT7C" + - "U02AKC14WAJ" + channels: + - "C06FLH3AVSB" + - "C06CQCK03EJ" \ No newline at end of file diff --git a/.github/workflows/slack/slack.tf b/.github/workflows/slack/slack.tf new file mode 100644 index 000000000..98667ddc3 --- /dev/null +++ b/.github/workflows/slack/slack.tf @@ -0,0 +1,36 @@ +terraform { + required_providers { + slack = { + source = "pablovarela/slack" + version = "~> 1.0" + } + } + required_version = ">= 0.13" +} + +variable "slack_token" { + description = "The Slack API token with the channels:manage, channels:read, channels:write.invites, groups:read, groups:write, groups:write.invites, users:read scopes" + nullable = false + type = string +} + +provider "slack" { + token = var.slack_token +} + +module "users" { + source = "./users" +} + +module "channels" { + source = "./channels" + depends_on = [ module.users ] + data_sources = module.users.data_sources +} + +module "groups" { + source = "./groups" + depends_on = [ module.users, module.channels ] + data_sources = module.users.data_sources + wg_channels = module.channels.wg_channels +} \ No newline at end of file diff --git a/.github/workflows/slack/terraform.tfstate b/.github/workflows/slack/terraform.tfstate new file mode 100644 index 000000000..103451375 --- /dev/null +++ b/.github/workflows/slack/terraform.tfstate @@ -0,0 +1,999 @@ +{ + "version": 4, + "terraform_version": "1.7.1", + "serial": 40, + "lineage": "be714778-98f8-035d-1a6d-5aecc493dcb2", + "outputs": {}, + "resources": [ + { + "module": "module.channels", + "mode": "managed", + "type": "slack_conversation", + "name": "channels", + "provider": "provider[\"registry.terraform.io/pablovarela/slack\"]", + "instances": [ + { + "index_key": "01_introductions", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622040350, + "creator": "UD698Q5LM", + "id": "C023GJWH33K", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "01_introductions", + "permanent_members": null, + "purpose": "Welcome to our AsyncAPI Slack! Take a moment to introduce yourself.", + "topic": "Welcome to our AsyncAPI Slack! Take a moment to introduce yourself." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "02_general", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1479472560, + "creator": "U34F2JRRS", + "id": "C34F2JV0U", + "is_archived": false, + "is_ext_shared": false, + "is_general": true, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "02_general", + "permanent_members": null, + "purpose": "This channel is for team-wide communication and announcements. All team members are in this channel.", + "topic": "Talk here if your topic is not only about the spec, nor tools but kinda mix and involves AsyncAPI :slightly_smiling_face:" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "03_specification", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622040521, + "creator": "UD698Q5LM", + "id": "C0230UAM6R3", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "03_specification", + "permanent_members": null, + "purpose": "All around the spec discussions. It is ok to ask for support here.", + "topic": "All around the spec discussions. It is ok to ask for support here." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "04_tooling", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1574451424, + "creator": "U34F2JRRS", + "id": "CQVJXFNQL", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "04_tooling", + "permanent_members": null, + "purpose": "Chat about the AsyncAPI tooling", + "topic": "All around the specs tooling discussions. It is ok to ask for support here." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "05_promotion-marketing", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1553016525, + "creator": "UC3B0355Z", + "id": "CH44ZMJAZ", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "05_promotion-marketing", + "permanent_members": null, + "purpose": "Present launch plans for coordinated launches and to measure engagement and adoption", + "topic": "Purpose of this channel is to help us with AsyncAPI promotion. Share your ideas for marketing and learn what we are working on at the moment. We use โ€œchannelโ€ annotation here when we want to ask you to share our specific resources on different media." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "06_training", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1620649432, + "creator": "U34F2JRRS", + "id": "C021E161QBV", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "06_training", + "permanent_members": null, + "purpose": "All about trainings, workshops, courses, etc.", + "topic": "All about trainings, workshops, courses, etc. โ€” \u003chttps://github.com/asyncapi/training\u003e" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "07_events", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622040979, + "creator": "UD698Q5LM", + "id": "C023A76SV2Q", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "07_events", + "permanent_members": null, + "purpose": "This is the place where we regroup and discuss organization of AsyncAPI-related events. This is also a place where you can always let others know what events are you involved in, where and when do you present a topic related to AsyncAPI.", + "topic": "This is the place where we regroup and discuss organization of AsyncAPI-related events. This is also a place where you can always let others know what events are you involved in, where and when do you present a topic related to AsyncAPI." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "08_jobs", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622041069, + "creator": "UD698Q5LM", + "id": "C022P9CAMBR", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "08_jobs", + "permanent_members": null, + "purpose": "Looking for a job that will let you work on AsyncAPI? Let others know. Looking for AsyncAPI expert to join your company, post your offer here and also on the AsyncAPI website \u003chttps://www.asyncapi.com/jobs\u003e.", + "topic": "Looking for a job that will let you work on AsyncAPI? Let others know. Looking for AsyncAPI expert to join your company, post your offer here and also on the AsyncAPI website \u003chttps://www.asyncapi.com/jobs\u003e." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "09_mentorships", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622041116, + "creator": "UD698Q5LM", + "id": "C023A7K5M3N", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "09_mentorships", + "permanent_members": null, + "purpose": "We participate in many different external programs, and also have our own that will evolve in next years. This is the place where we talk about these and coordinate.", + "topic": "We participate in many different external programs, and also have our own that will evolve in next years. This is the place where we talk about these and coordinate." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "10_watercooler", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1479472560, + "creator": "U34F2JRRS", + "id": "C34AUKWQK", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "10_watercooler", + "permanent_members": null, + "purpose": "A place for non-work-related flimflam, faffing, hodge-podge or jibber-jabber you'd prefer to keep out of more focused work-related channels.", + "topic": "Non-AsyncAPI topics. When you have a need to talk to someone โ€œin personโ€, type โ€œ/zoomโ€ in channel and start a meeting and let others know you are there. Talking to another human solves many problems." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "11_contributing", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1632379587, + "creator": "UD698Q5LM", + "id": "C02FK3YDPCL", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "11_contributing", + "permanent_members": null, + "purpose": "Learn how to contribute. Share what you would like to learn and we will find for you a good place to start contributing", + "topic": "Learn how to contribute. Ask contribution-related questions. Tell us what you want to learn through contribution and we will find you a good spot. Remember that you can contribute not only by pushing code." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "12_design", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1635256181, + "creator": "UD698Q5LM", + "id": "C02JW8DA0DC", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "12_design", + "permanent_members": null, + "purpose": "Discuss design-related topics such as branding, design system, UI kit, and any other misc. design projects. Have a design request? Use this channel to propose and discuss your request!", + "topic": "Discuss design-related topics such as branding, design system, UI kit, and any other misc. design projects. Have a design request? Use this channel to propose and discuss your request!" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "13_docs", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1639621854, + "creator": "U02AKC14WAJ", + "id": "C02QY9FMM18", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "13_docs", + "permanent_members": null, + "purpose": ":bookmark_tabs: Discuss AsyncAPI Docs: Feel free to open issues for documentation requests and to share ideas/feedback on open issues. \u003chttps://github.com/orgs/asyncapi/projects/8\u003e", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "14_accessibility", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1642713336, + "creator": "U02AKC14WAJ", + "id": "C02UV8CTT61", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "14_accessibility", + "permanent_members": null, + "purpose": "Accessibility throughout the AsyncAPI Initiative", + "topic": "Accessibility throughout the asyncAPI Initiative" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "15_ambassadors", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1678796519, + "creator": "U01J42QDSLU", + "id": "C04TRUTNPHB", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "15_ambassadors", + "permanent_members": null, + "purpose": "All about the Ambassador Program. Feel free to participate!", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "16_news", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1693300530, + "creator": "U34F2JRRS", + "id": "C05PWURSSP7", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "16_news", + "permanent_members": null, + "purpose": "Share links to news you find about AsyncAPI (or related stuff) on the internet. Did you write something and want us to help you promote it? Use the \u003c#CH44ZMJAZ|05_promotion-marketing\u003e channel instead.", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "17_bounty", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1696235939, + "creator": "U03CNJPMT7C", + "id": "C05UHTSEHE2", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "17_bounty", + "permanent_members": null, + "purpose": "This is the place where we discuss everything related to the Bounty Program.", + "topic": "All about the AsyncAPI Bounty Program discussions." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "18_asyncapi-v3", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1700755885, + "creator": "U03CNJPMT7C", + "id": "C066WFT906A", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "18_asyncapi-v3", + "permanent_members": null, + "purpose": "", + "topic": "This is the channel where we talk about AsyncAPI v3. From announcements, blogs, and livestreams." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "19_coc", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1706519672, + "creator": "U03CNJPMT7C", + "id": "C06FLH3AVSB", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "19_coc", + "permanent_members": null, + "purpose": "Feel free to openly ask the Code of Conduct Committee if you have any questions.", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "93_bot-infra-alerts", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1665663760, + "creator": "UN22ZTLHG", + "id": "C045Y33BZQX", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "93_bot-infra-alerts", + "permanent_members": null, + "purpose": "Alerts on infrastructure monitoring (New Relic by now)", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "94_bot-failing-ci", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1650439390, + "creator": "UD698Q5LM", + "id": "C03CHT8UFR7", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "94_bot-failing-ci", + "permanent_members": null, + "purpose": "When something wrong happens in CI and we configure Slack alerts - these should end up in this channel", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "95_bot-tsc-members-mentioned", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1644233870, + "creator": "UD698Q5LM", + "id": "C031UMXT63F", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "95_bot-tsc-members-mentioned", + "permanent_members": null, + "purpose": "This channel is here to mainly help TSC members to get notifications other than email or GitHub notifications, every time TSC GitHub team is mentioned in issues, PRs and discussions", + "topic": "This channel is here to mainly help TSC members to get notifications other than email or GitHub notifications, every time TSC GitHub team is mentioned in issues, PRs and discussions" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "96_bot-stackoverflow-questions", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1623665010, + "creator": "U6C2X4W1K", + "id": "C02544TFYJ0", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "96_bot-stackoverflow-questions", + "permanent_members": null, + "purpose": "Stackoverflow questions tagged `asyncapi` from the RSS feed", + "topic": "Stackoverflow questions tagged asyncapi from the RSS feed" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "97_bot-github-new-issues-prs", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1610383119, + "creator": "UD698Q5LM", + "id": "C01J06RL10X", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "97_bot-github-new-issues-prs", + "permanent_members": null, + "purpose": "Notifications about all new issues and PR except of bots", + "topic": "Bot sends notifications about every new issue and pull request in any AsyncAPI repository." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "98_bot-github-releases", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1610383083, + "creator": "UD698Q5LM", + "id": "C01JF00UGKC", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "98_bot-github-releases", + "permanent_members": null, + "purpose": "Notifications about new GitHub releases", + "topic": "Bot sends notifications about every new release in any AsyncAPI repository." + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "glee-demos", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1635694344, + "creator": "U34F2JRRS", + "id": "C02L1QCT1HP", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "glee-demos", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "gsoc2021-students-mentors-collaboration", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1622528565, + "creator": "U01CUAY035J", + "id": "C023H9V3ZLM", + "is_archived": false, + "is_ext_shared": true, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": true, + "name": "gsoc2021-students-mentors-collaboration", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "help-", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1640505133, + "creator": "U02SNQYK43A", + "id": "C02RJF383MM", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "help-", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "jsonschema", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1648200854, + "creator": "U5CJT43D2", + "id": "C038FTU4LQ6", + "is_archived": false, + "is_ext_shared": true, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": true, + "name": "jsonschema", + "permanent_members": null, + "purpose": "", + "topic": "Need help with JSON Schema? This channel is connected with the JSON Schema Slack workspace. Here you can talk with the JSON Schema community directly :raised_hands:" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "libopenapi-speakeasy", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1671028791, + "creator": "U03R0RBGA7N", + "id": "C04F6TQ40N7", + "is_archived": false, + "is_ext_shared": true, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": true, + "name": "libopenapi-speakeasy", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "linux", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1670708349, + "creator": "U04F18KAZEV", + "id": "C04EKM39P4M", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "linux", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "salemfr1100", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1682892720, + "creator": "U04RSMQHJ66", + "id": "C055JEMLGF7", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "salemfr1100", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "status-updates", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1709725751, + "creator": "U34F2JRRS", + "id": "C06N61ASV6X", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "status-updates", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "test-bot-public", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1683823890, + "creator": "U01RVRD1TCL", + "id": "C0579CUA7GD", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "test-bot-public", + "permanent_members": null, + "purpose": "", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + } + ] + }, + { + "module": "module.channels", + "mode": "managed", + "type": "slack_conversation", + "name": "wg_channels", + "provider": "provider[\"registry.terraform.io/pablovarela/slack\"]", + "instances": [ + { + "index_key": "Developer Experience", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1706786192, + "creator": "U34F2JRRS", + "id": "C06G92DN05D", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "wg-developer-experience", + "permanent_members": null, + "purpose": "The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience.", + "topic": "Current Roadmap: \u003chttps://shapeit.app/projects/org/asyncapi/16/cycles/ceb40c9d?issue=I_kwDOLQFNzc5-xigF\u003e" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + }, + { + "index_key": "Essential Building Blocks", + "schema_version": 0, + "attributes": { + "action_on_destroy": null, + "action_on_update_permanent_members": null, + "adopt_existing_channel": null, + "created": 1712225888, + "creator": "U03CNJPMT7C", + "id": "C06SSB65QQJ", + "is_archived": false, + "is_ext_shared": false, + "is_general": false, + "is_org_shared": false, + "is_private": false, + "is_shared": false, + "name": "wg-essential-building-blocks", + "permanent_members": null, + "purpose": "The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across different languages. GitHub Project: \u003chttps://github.com/orgs/asyncapi/projects/44\u003e", + "topic": "" + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==" + } + ] + }, + { + "module": "module.groups", + "mode": "managed", + "type": "slack_usergroup", + "name": "groups", + "provider": "provider[\"registry.terraform.io/pablovarela/slack\"]", + "instances": [ + { + "index_key": "CoC Committee", + "schema_version": 0, + "attributes": { + "channels": [ + "C06CQCK03EJ", + "C06FLH3AVSB" + ], + "description": "To notify the code of conduct team all at once when there is a question or anything related to them.", + "handle": "coc_committee", + "id": "S06G3VCDTPU", + "name": "CoC Committee", + "users": [ + "U01J42QDSLU", + "U01RWDD69PZ", + "U02AKC14WAJ", + "U03CNHGEUR1", + "U03CNJPMT7C", + "UN22ZTLHG" + ] + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==", + "dependencies": [ + "module.channels.slack_conversation.channels", + "module.channels.slack_conversation.wg_channels" + ] + }, + { + "index_key": "Studio", + "schema_version": 0, + "attributes": { + "channels": [ + "C02JW8DA0DC", + "CQVJXFNQL" + ], + "description": "To notify all regular Studio contributors at once. If you don't contribute regularly but want to get notified too, ping Fran to get added.", + "handle": "studio", + "id": "S05D76QM92M", + "name": "Studio", + "users": [ + "U01EB02BP7A", + "U01N6AW5V5G", + "U01RVRD1TCL", + "U01RWDD69PZ", + "U01SGCZMJKW", + "U01TP1KJV1R", + "U04STTQHV18", + "U0572R8J927", + "U058PQFJPS4" + ] + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==", + "dependencies": [ + "module.channels.slack_conversation.channels", + "module.channels.slack_conversation.wg_channels" + ] + } + ] + }, + { + "module": "module.groups", + "mode": "managed", + "type": "slack_usergroup", + "name": "wg_groups", + "provider": "provider[\"registry.terraform.io/pablovarela/slack\"]", + "instances": [ + { + "index_key": "Developer Experience", + "schema_version": 0, + "attributes": { + "channels": [ + "C06G92DN05D" + ], + "description": "The Developer Experience Working Group", + "handle": "dx_wg", + "id": "S06T4ULNQL8", + "name": "Developer Experience Working Group", + "users": [ + "U0132LQU8C9", + "U01N6AW5V5G", + "U01RVRD1TCL", + "U01TP1KJV1R", + "U03CNHGEUR1", + "U04STTQHV18", + "U0572R8J927", + "U34F2JRRS", + "UTCN3ET4M" + ] + }, + "sensitive_attributes": [], + "private": "eyJzY2hlbWFfdmVyc2lvbiI6IjAifQ==", + "dependencies": [ + "module.channels.slack_conversation.channels", + "module.channels.slack_conversation.wg_channels" + ] + } + ] + } + ], + "check_results": null +} diff --git a/.github/workflows/slack/users/users.tf b/.github/workflows/slack/users/users.tf new file mode 100644 index 000000000..4fa16dc9e --- /dev/null +++ b/.github/workflows/slack/users/users.tf @@ -0,0 +1,30 @@ +terraform { + required_providers { + slack = { + source = "pablovarela/slack" + version = "~> 1.0" + } + } +} + +locals { + maintainers_data = yamldecode(file("${path.root}/../../../MAINTAINERS.yaml")) + + # maintainers with isTscMember = true are added to the tsc_members group + tsc_members_data = [for maintainer in local.maintainers_data : maintainer if lookup(maintainer, "isTscMember", false) == true] + + # Make a map of repo maintainers with their slack user id with repo name as key + repos = setunion(flatten([for maintainer in local.maintainers_data : maintainer.repos])) + repo_maintainers = { + for repo in local.repos : repo => + [for maintainer in local.maintainers_data : maintainer.slack if contains(maintainer.repos, repo)] + } +} + +output "data_sources" { + value = { + maintainers_user_ids = [for maintainer in local.maintainers_data : maintainer.slack] + tsc_members_user_ids = [for tsc_member in local.tsc_members_data : tsc_member.slack] + repo_maintainers = local.repo_maintainers + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index b512c09d4..b0f0a309f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -node_modules \ No newline at end of file +node_modules +.terraform +*tfstate.backup +*.tfvars \ No newline at end of file diff --git a/TSC_MEMBERSHIP.md b/TSC_MEMBERSHIP.md index ef33c56d8..73373b9bd 100644 --- a/TSC_MEMBERSHIP.md +++ b/TSC_MEMBERSHIP.md @@ -49,3 +49,12 @@ Joining the TSC is something that you are allowed to do as a maintainer by defau See current [TSC members](https://www.asyncapi.com/community/tsc). +## How to reach out to the TSC + +There are several ways to reach out to the TSC members: + +* Join the [AsyncAPI Slack](https://www.asyncapi.com/slack-invite) and ping the `@tsc` group to ask questions or share your thoughts. +* Do a GitHub team mention `@asyncapi/tsc_members` in any issue, discussion or pull request. This will also send a message in the `95_bot-tsc-members-mentioned` channel in the Slack. + +> [!IMPORTANT] +> Please note that the TSC members are volunteers and may not be able to respond immediately. Please be patient and respectful. Also it will be helpful if there is as less spam as possible. For more information, please refer to the [Slack Etiquette](./slack-etiquette.md) document. diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md index faee48724..5299421c6 100644 --- a/WORKING_GROUPS.md +++ b/WORKING_GROUPS.md @@ -19,3 +19,14 @@ A Working Group must discuss ideas and solutions in public, and communicate thro It is recommended that the Working Group schedules meetings using the methods described at https://github.com/asyncapi/community/blob/master/MEETINGS_ORGANIZATION.md. Working Groups should be listed on the [AsyncAPI website](https://www.asyncapi.com), along with their description, goals, members, and anything the Working Group wants to include. + +### How to reach out to a Working Group + +There are several ways to reach out to a Working Group: + +- Join the [AsyncAPI Slack](https://www.asyncapi.com/slack-invite) and ping the working group's handle to ask questions or share your thoughts. The handle can be found in the [WORKING_GROUPS.yaml](./WORKING_GROUPS.yaml) file in the `slack.group.handle` field. Example: `@dx_wg`. +- Do a GitHub team mention in any issue, discussion, or pull request. The team handle can be found in the [WORKING_GROUPS.yaml](./WORKING_GROUPS.yaml) file in `github_team` field. Example: `developer_experience_wg`. +- Join the working group's channel on Slack. The channel name can be found in the [WORKING_GROUPS.yaml](./WORKING_GROUPS.yaml) file in the `slack.channel.handle` field. Example: `#wg-developer-experience`. + +> [!IMPORTANT] +> Please note that the Working Group members are volunteers and may not be able to respond immediately. Please be patient and respectful. Also, it will be helpful if there is as little spam as possible. For more information, please refer to the [Slack Etiquette](./slack-etiquette.md) document. \ No newline at end of file diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index bebf9fbcc..a75a1c441 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -51,7 +51,7 @@ working_groups: slack: channel: handle: wg-essential-building-blocks - description: 'The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across different languages. GitHub Project: https://github.com/orgs/asyncapi/projects/44' + description: 'The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across different languages. GitHub Project: ' group: handle: essential-building-blocks-wg description: Essential Building Blocks Working Group @@ -95,9 +95,9 @@ working_groups: channel: handle: wg-developer-experience description: 'The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience.' - topic: 'Current Roadmap: https://shapeit.app/projects/org/asyncapi/16/cycles/ceb40c9d?issue=I_kwDOLQFNzc5-xigF' - group: - handle: wg-dx + topic: 'Current Roadmap: ' + group: + handle: dx_wg roadmap_url: https://shapeit.app/projects/org/asyncapi/16 objectives: - https://github.com/users/Amzani/projects/12/views/1 From 7f6a292f41df5fa2690c650383878973fce1387a Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Wed, 8 May 2024 19:53:06 +0200 Subject: [PATCH 065/124] feat: add Maintainers Growth Working Group (#1143) Co-authored-by: Quetzalli %0ACo-authored-by: asyncapi-bot --- WORKING_GROUPS.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index a75a1c441..212e98f29 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -102,6 +102,36 @@ working_groups: objectives: - https://github.com/users/Amzani/projects/12/views/1 github_team: developer_experience_wg + - name: Maintainers Growth + description: The Maintainers Growth Working Group aims to help grow the number of maintainers at AsyncAPI. + chairpersons: + - name: Sergio Moya + github: smoya + slack: UN22ZTLHG + - name: Alejandra Quetzalli + github: alequetzalli + slack: U02AKC14WAJ + members: + - name: Elegbede Azeez + github: AceTheCreator + slack: U01RWDD69PZ + - name: Aishat Muibudeen + github: Mayaleeeee + slack: U03CNHGEUR1 + - name: Thulisile Sibanda + github: thulieblack + slack: U03CNJPMT7C + - name: Fran Mรฉndez + github: fmvilas + slack: U34F2JRRS + slack: + channel: + handle: wg-maintainers-growth + description: This is the channel for the Maintainers Growth Working Group. + group: + handle: maintainers-growth-wg + description: Maintainers Growth Working Group + github_team: maintainers_growth_wg - name: Conference Coordination description: The goal of the group is to plan, manage, and create a seamless way to enhance the conference experience. chairpersons: From 96eda5050f385f0e82a6743c159f80d74d933f7a Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Thu, 9 May 2024 08:14:10 +0530 Subject: [PATCH 066/124] chore: fix working groups file (#1203) --- WORKING_GROUPS.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 212e98f29..3d88164ad 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -135,7 +135,7 @@ working_groups: - name: Conference Coordination description: The goal of the group is to plan, manage, and create a seamless way to enhance the conference experience. chairpersons: - name: Thulisile Sibanda + - name: Thulisile Sibanda github: thulieblack slack: U03CNJPMT7C members: @@ -156,6 +156,6 @@ working_groups: handle: wg-conference-coordination description: 'The Conference Coordination Working Group aims to plan, manage, and create a seamless way to enhance the conference experience. GitHub Project: https://github.com/orgs/asyncapi/projects/43/views/2' roadmap_url: https://github.com/orgs/asyncapi/projects/43/views/2 - objectives: + objectives: - https://github.com/orgs/asyncapi/projects/43/views/2 github_team: conference_coordination_wg From c21d2058e21ff9343d48273aadace81913f18fda Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Fri, 10 May 2024 07:01:25 +0200 Subject: [PATCH 067/124] docs: add WG chairperson responsibilities (#1191) Co-authored-by: Quetzalli --- WORKING_GROUPS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md index 5299421c6..bb7bb09ea 100644 --- a/WORKING_GROUPS.md +++ b/WORKING_GROUPS.md @@ -2,7 +2,10 @@ A Working Group is a group of people in our community who share a common interest beyond GitHub repositories. -A Working Group must have at least one of its members appointed as its chairperson. +A Working Group must have at least one of its members appointed as its **chairperson**. +The selection of the chairperson is done by the members of the group. Volunteers can be chairpersons, or the group can decide to elect one. The chairperson can also resign if they feel they can't fulfill their duties anymore. In this case, the group must elect a new chairperson if there is no other chairperson in the group. +The role of the chairperson is to facilitate the group meets its goals by removing blockers, ensuring the group works efficiently and is aligned with the AsyncAPI Roadmap. The chairperson is also responsible for running meetings effectively, ensuring that all members have a voice and that the group works in a transparent manner. +Multiple chairpersons can be elected if the working group members decide it's necessary. The way they share responsibilities is decided by the group. Anyone can create a Working Group. The only prerequisites are to have at least 3 founding members and the approval of the TSC (Technical Steering Committee). From fae3c06b17b99fb196f6f842d8b1a85dca163d60 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 11 May 2024 12:05:26 +0200 Subject: [PATCH 068/124] chore(tweet): recurring tweet about slack link (#1207) --- tweets/recurring-slack-link/2024-05-11.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-05-11.tweet diff --git a/tweets/recurring-slack-link/2024-05-11.tweet b/tweets/recurring-slack-link/2024-05-11.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-05-11.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From fac1b677284193f88d8ef9ef8c19b64c84b66d48 Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Mon, 13 May 2024 13:14:24 +0530 Subject: [PATCH 069/124] chore: change SLACK_TOKEN to SLACK_INFRA_TOKEN (#1205) Co-authored-by: Lukasz Gornicki --- .github/workflows/slack-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/slack-integration.yml b/.github/workflows/slack-integration.yml index 734fe0f9b..2999e6b66 100644 --- a/.github/workflows/slack-integration.yml +++ b/.github/workflows/slack-integration.yml @@ -18,7 +18,7 @@ jobs: cd .github/workflows/slack terraform init terraform apply \ - -var "slack_token=${{ secrets.SLACK_TOKEN }}" \ + -var "slack_token=${{ secrets.SLACK_INFRA_TOKEN }}" \ -auto-approve - name: Check if there are any uncommitted changes id: git-check From f3d566cbe12fdd3947929024c490e901a9e27f6a Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Tue, 14 May 2024 15:56:14 +0530 Subject: [PATCH 070/124] ci: watch the slack workflow for changes as well (#1209) --- .github/workflows/slack-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/slack-integration.yml b/.github/workflows/slack-integration.yml index 2999e6b66..6bfa2fd7f 100644 --- a/.github/workflows/slack-integration.yml +++ b/.github/workflows/slack-integration.yml @@ -6,6 +6,7 @@ on: - '**/slack/**/*' - 'MAINTAINERS.yaml' - 'WORKING_GROUPS.yaml' + - '.github/workflows/slack-integration.yml' jobs: deploy-changes-to-slack: @@ -42,4 +43,3 @@ jobs: title: 'ci(slack): update slack configuration' body: 'This PR was automatically created by the Automatic Slack Management GitHub Action.' branch: 'chore/slack-update-${{ github.run_number }}' - base: 'main' \ No newline at end of file From c140bb9b1b36f1735f411345f649da8e9af527c9 Mon Sep 17 00:00:00 2001 From: Atinuke Oluwabamikemi Kayode <64528871+iambami@users.noreply.github.com> Date: Wed, 15 May 2024 13:02:59 +0100 Subject: [PATCH 071/124] chore: add bami to conference wg (#1211) --- WORKING_GROUPS.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 3d88164ad..af7919855 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -145,6 +145,9 @@ working_groups: - name: Lukasz Gornicki github: derberg slack: UD698Q5LM + - name: Oluwabamikemi Kayode + github: iambami + slack: U070DE02VQX - name: Aishat Muibudeen github: Mayaleeeee slack: U03CNHGEUR1 From 03077d99da7d38de3ecbcf5b2917c9d23756e21b Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 18 May 2024 12:05:34 +0200 Subject: [PATCH 072/124] chore(tweet): recurring tweet about slack link (#1215) --- tweets/recurring-slack-link/2024-05-18.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-05-18.tweet diff --git a/tweets/recurring-slack-link/2024-05-18.tweet b/tweets/recurring-slack-link/2024-05-18.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-05-18.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From e56c1ffc7ef3595804cf159cf1c4ad517cc4480c Mon Sep 17 00:00:00 2001 From: samz Date: Wed, 22 May 2024 17:27:45 +0200 Subject: [PATCH 073/124] chore: add samir.amzani in alternative hosts list (#1219) --- .github/workflows/create-event-ad-hoc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-event-ad-hoc.yml b/.github/workflows/create-event-ad-hoc.yml index bf272009a..e5f22c8d8 100644 --- a/.github/workflows/create-event-ad-hoc.yml +++ b/.github/workflows/create-event-ad-hoc.yml @@ -30,7 +30,7 @@ jobs: meeting_desc: ${{ github.event.inputs.desc }} meeting_banner: ${{ github.event.inputs.meeting_banner }} host: lpgornicki@gmail.com - alternative_host: "fmvilas@gmail.com,jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com" + alternative_host: "fmvilas@gmail.com,jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com" issue_template_path: .github/workflows/create-event-helpers/issues_templates/ad-hoc.md create_zoom: true secrets: From d1fbfb429db638bba6a49b4db58027e867afbf7a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 25 May 2024 12:06:00 +0200 Subject: [PATCH 074/124] chore(tweet): recurring tweet about slack link (#1223) --- tweets/recurring-slack-link/2024-05-25.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-05-25.tweet diff --git a/tweets/recurring-slack-link/2024-05-25.tweet b/tweets/recurring-slack-link/2024-05-25.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-05-25.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 3d879e8c3d1b84be00ffe9e4e4ddbce528a19e32 Mon Sep 17 00:00:00 2001 From: Ansh Goyal Date: Wed, 29 May 2024 23:42:08 +0530 Subject: [PATCH 075/124] chore: add anshgoyalevil as website maintainer (#1225) --- MAINTAINERS.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index c13e4f143..6a6d9c33d 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -34,6 +34,15 @@ isTscMember: true repos: - website +- name: Ansh Goyal + github: anshgoyalevil + linkedin: thisisanshg + slack: U057J527M24 + twitter: thisisanshg + availableForHire: true + isTscMember: true + repos: + - website - name: Anand Sunderraman github: anandsunderraman linkedin: anand-sunderraman-a6b7a131 From 58d362b42e0e147e69b67c1b11d1a7c40de91925 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 1 Jun 2024 11:06:08 +0200 Subject: [PATCH 076/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1229) --- tweets/recurring-discuss-ideas/2024-06-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-06-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-06-01.tweet b/tweets/recurring-discuss-ideas/2024-06-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-06-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From daed09887c6f89e8ee527fca122001945d68c099 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 1 Jun 2024 12:05:31 +0200 Subject: [PATCH 077/124] chore(tweet): recurring tweet about slack link (#1230) --- tweets/recurring-slack-link/2024-06-01.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-06-01.tweet diff --git a/tweets/recurring-slack-link/2024-06-01.tweet b/tweets/recurring-slack-link/2024-06-01.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-06-01.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From a371a33e3cce4c74f51ba0e7ce935be18af85c10 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 4 Jun 2024 06:57:58 +0530 Subject: [PATCH 078/124] update the user name of the TSC member (#1233) --- MAINTAINERS.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 6a6d9c33d..c632e52cd 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -1,5 +1,5 @@ - name: Aishat Muibudeen - github: mayaleeeee + github: Mayaleeeee linkedin: aishatmuibudeen slack: U03CNHGEUR1 twitter: maya_ux_ui From 1e64010ce6c4101a5df305d96485a812d2a383f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barbanio=20Gonz=C3=A1lez?= <77982319+Barbanio@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:29:26 +0100 Subject: [PATCH 079/124] chore: add documents CoC Committee and Incident Resolution Procedures (#1013) Co-authored-by: Sergio Moya <1083296+smoya@users.noreply.github.com>%0ACo-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com>%0ACo-authored-by: Alejandra Quetzalli %0ACo-authored-by: Quetzalli --- .../coc-incident-resolution-procedures.md | 248 ++++++++++++++++++ code_of_conduct/code-of-conduct-committee.md | 45 ++++ 2 files changed, 293 insertions(+) create mode 100644 code_of_conduct/coc-incident-resolution-procedures.md create mode 100644 code_of_conduct/code-of-conduct-committee.md diff --git a/code_of_conduct/coc-incident-resolution-procedures.md b/code_of_conduct/coc-incident-resolution-procedures.md new file mode 100644 index 000000000..58341cf52 --- /dev/null +++ b/code_of_conduct/coc-incident-resolution-procedures.md @@ -0,0 +1,248 @@ +# AsyncAPI Code of Conduct - Incident Resolution Procedures + +## Purpose and scope +These Procedures address the following topics related to the resolution of potential violations of the [AsyncAPI Code of Conduct](https://github.com/asyncapi/community/blob/master/CODE_OF_CONDUCT.md): + +- [How to submit a report](#how-to-submit-a-report) + - [Submit in writing](#submit-in-writing) + - [Submit in spoken conversation](#submit-in-spoken-conversation) + - [How to report anonymously](#how-to-report-anonymously) +- [What information to include in your report](#what-information-to-include-in-your-report) +- [What happens after a report is submitted](#what-happens-after-a-report-is-submitted) + - [Acknowledgement of Receipt](#acknowledgement-of-receipt) + - [Confirmation and Jurisdiction](#confirmation-and-jurisdiction) + - [Who will have access to reports](#who-will-have-access-to-reports) + - [Investigation](#investigation) + - [Notification to the Accused Person](#notification-to-the-accused-person) +- [Resolution](#resolution) + - [Interim Protective Measures](#interim-protective-measures) + - [Mediation and Resolution by Agreement](#mediation-and-resolution-by-agreement) + - [Potential Remedies](#potential-remedies) + - [Restorative Justice](#restorative-justice) + - [Transformative Justice](#transformative-justice) + - [Factors that the CoC Committee will consider](#factors-that-the-coc-committee-will-consider) + - [Examples of Remedies](#examples-of-remedies) + - [Accountability](#accountability) + - [Communicating the Results](#communicating-the-results) +- [Information Sharing](#information-sharing) +- [Confidentiality Policy](#confidentiality-policy) +- [No Retaliation](#no-retaliation) +- [Conflicts of Interest](#conflicts-of-interest) + - [Obligation to disclose potential conflicts of interest](#obligation-to-disclose-potential-conflicts-of-interest) + - [Procedures to disclose and confirm conflicts](#procedures-to-disclose-and-confirm-conflicts) + - [Procedures when a hard conflict of interest exists](#procedures-when-a-hard-conflict-of-interest-exists) + - [Procedures when a soft conflict of interest exists](#procedures-when-a-soft-conflict-of-interest-exists) +- [Amendments](#amendments) +- [Attribution](#attribution) + +## How to submit a report + +You may report a potential violation of the [AsyncAPI Code of Conduct](https://github.com/asyncapi/community/blob/master/CODE_OF_CONDUCT.md) in writing or in a spoken conversation as indicated below. + +### Submit in writing + +To report a violation in writing, please email [conduct@asyncapi.io](mailto:conduct@asyncapi.io), which goes to all primary (not alternate) members of the AsyncAPI Code of Conduct Committee (CoC Committee). If you do not want your report to be received by all members of the CoC Committee, either because you want to submit a report anonymously or because one of the CoC Committee members has a conflict of interest, you may send your report directly to any individual member of the CoC Committee. + +### Submit in spoken conversation + +If you prefer to report the violation in a spoken conversation, you may request a virtual meeting with a CoC Committee member. If the incident occurs at an event, you may report the incident in person either to a member of the AsyncAPI CoC Committee or a [Technical Steering Committee](https://www.asyncapi.com/community/tsc) (TSC) member. + + +### How to report anonymously + +If you desire to submit a report anonymously, please send a message directly to any individual member of our CoC Committee through the AsyncAPI Slack and let them know you would like to submit a Code of Conduct report anonymously. If you submit your report anonymously, that member of the CoC Committee will share the contents of your report with the rest of the CoC Committee. Still, they will not disclose your identity as the reporter to the other members of the CoC Committee (unless such disclosure is necessary to comply with applicable laws or court orders or to protect you or someone else from imminent danger). + +## What information to include in your report + +When reporting a potential Code of Conduct violation, please include the following information in your report: + +- Names of the people involved (or if names are unknown, use descriptions and any identifying information such as appearance, role, username, or handle), including the person you believe violated the Code of Conduct and any witnesses. + +- Description of the incident, including the events that occurred, the date and time, and the location or community space where the incident occurred. + +- The portion(s) of the CoC you believe to be violated. + +- If you have relevant documentary evidence, such as screenshots or photographs, please provide those with your report. + +## What happens after a report is submitted + +### Acknowledgement of Receipt + +The Code of Conduct Committee will acknowledge receipt of your report in a timely manner, usually within three business days. + +### Confirmation and Jurisdiction + +Once the report has been submitted, the AsyncAPI CoC Committee will confirm receipt of the report and, if it does not have jurisdiction over the incident, notify the complainants unless they have done so anonymously and have not provided their contact information. + +The Jurisdiction of the CoC Committee is as follows: +- [AsyncAPI Initiative GitHub](https://github.com/asyncapi) +- [AsyncAPI Slack](asyncapi.slack.com) +- AsyncAPI social networks: [Twitter](https://twitter.com/AsyncAPISpec), [LinkedIn](https://www.linkedin.com/company/asyncapi), [YouTube](https://www.youtube.com/asyncapi), [Twitch](https://www.twitch.tv/asyncapi), and [Mastodon](https://fosstodon.org/@AsyncAPISpec) +- AsyncAPI events: conferences, talks, workshops, etc. + +### Who will have access to reports + +Reports will only be shared with non-conflicted members of the CoC Committee, with very limited exceptions. See the โ€œConfidentialityโ€, โ€œInformation Sharingโ€, โ€œCommunicating the Resultsโ€, and โ€œConflicts of Interestโ€ sections below for more information. + +### Investigation + +The CoC Committee will investigate the report by reviewing available evidence and, if appropriate, interviewing witnesses, the accused person, and persons who were targeted or may have been harmed. In some cases, the CoC Committee may consult an external professional investigator or mediator to assist. + +If a potential incident comes to the CoC Committeeโ€™s attention that may present a serious continuing risk to community safety, the CoC Committee may investigate it even if no official report has been received. + +If the CoC Committee determines that the Code of Conduct was violated, the CoC Committee will decide on what remediation steps should be taken. See โ€œResolutionโ€ below for more information. + +### Notification to the Accused Person + +During or after the investigation, the CoC Committee shall notify the accused person that an incident report has been received concerning their alleged behavior unless it determines that the report is meritless or has been filed in bad faith. While the investigation is ongoing, the CoC Committee shall determine at its discretion whether, how, and when to notify the accused person, and how much information to share about the nature of the allegations, if any, taking into consideration risks of retaliation, evidence tampering or destruction, or witness tampering that might result from the notification. If the accused person was notified of the complaint before or during the investigation, after the incident is resolved, the CoC Committee shall notify the accused person of the outcome. + +## Resolution + +### Interim Protective Measures + +Although the CoC Committee will not take any permanent actions until the CoC Committee has gathered and reviewed all available evidence, the CoC Committee reserves the right to take immediate temporary action (e.g., temporarily suspending someoneโ€™s participation in a community space while the investigation is pending) at any time after learning of the incident if the CoC Committee determines this is necessary to protect the community or community members from the risk of harm. + +### Mediation and Resolution by Agreement + +If the accused person and the parties potentially harmed in an incident communicate to the CoC Committee that they would like to resolve the incident through restorative conversation (see โ€œRestorative Justice" below), mediation, or mutual agreement, the CoC Committee will wait until the parties have attempted to do so before making any final decisions regarding resolution of the incident. If all involved parties consent, the CoC Committee, other community members, or an external professional mediator may help facilitate the discussion. If the involved parties agree on an outcome for resolving the incident, the CoC Committee will review the outcome to (a) determine if it is adequate or if any further actions need to be taken to protect the health and safety of the community and (b) support the involved parties with implementation and accountability. + +### Potential Remedies + +The goal of the Code of Conduct incident resolution is to support and safeguard the health, safety, and well-being of the community and individuals who participate and reinforce community standards for acceptable behavior; the purpose is not to punish. Whenever appropriate, the CoC Committee shall seek to resolve incidents using restorative justice and transformative justice approaches, as summarized below. + +#### Restorative Justice + +Restorative justice is a framework that seeks to repair the harm that was caused by an incident and focuses primarily on the parties directly involved in an incident. The goals of restorative justice are to: + +- Support the individuals harmed in their healing and recovery. + +- Provide the accused person with an opportunity to understand the impact of their actions, learn from their mistakes, and improve their behavior (e.g., through coaching, mentoring, or education). + +- Provide the accused person with opportunities to make amends and take actions that help repair or reduce the harm that was caused (e.g., through an apology or community service). + +Restorative justice typically involves a mediated conversation between the accused person and the person harmed to create shared understanding, healing, relationship repair, and closure. However, the CoC Committee will never require individuals involved in an incident to interact or communicate with each other; mediated conversations will only take place if all parties consent. + +#### Transformative Justice + +Transformative justice is a framework that seeks to address systemic issues that may have contributed to or encouraged the harmful behavior (e.g., systems or policies that reward bad behavior, or failure to educate newcomers about standards of conduct). If the CoC Committee determines there are any such systemic issues, the CoC Committee will recommend to the Technical Steering Committee that such issues be addressed, and, if appropriate, the CoC Committee may offer advice or other support. + +### Factors that the CoC Committee will consider + +If the CoC Committee determines that a violation has occurred, the CoC Committee will consider the following factors when determining what remediation steps to take: + +- Is the harmful behavior an isolated incident or pattern of repeated behavior? + +- How severe is the harmful behavior? + +- How does the harmful behavior impact the community and its participants? + +- What remedies would best repair or reduce the harm that was caused by the incident? + +- What remedies would best protect the community and involved individuals from further harm? + +- Is the accused person willing to acknowledge why their behavior was harmful and improve their behavior? If so, what remedies would best support them in improving their behavior? (e.g., education or mentoring) + +- Are there systemic issues that encourage and contribute to harmful behavior? If so, how can the community address these systemic issues to prevent similar incidents from occurring in the future? + +### Examples of Remedies + +The following are examples of remedies the CoC Committee may consider. The following list is non-exhaustive: + +- Issuing a warning + +- Removing harmful content from community or project spaces + +- A public or private apology + +- Temporary suspension or permanent ban from community or project + +- Temporary or permanent removal from leadership role + +- Education, mentoring, or coaching to help the accused improve their behavior + +- Addressing systemic issues that contributed to or encouraged the harmful behavior (e.g., through policy changes) to prevent similar incidents from occurring in the future + +### Accountability + +If any party does not fulfill their obligations related to the incident resolution (e.g., if the remediation requires the accused person to complete a non-violent communication course and fail to do so), the CoC Committee may take further action to resolve the incident. + +### Communicating the Results + +An incident is considered โ€œresolvedโ€ when the CoC Committee has completed its investigation and either (a) determined what remediation actions are needed to resolve an incident (including determining that the involved partiesโ€™ agreed-upon resolution is adequate) (b) or determined that the CoC was not violated and no remediation is needed. When the incident is resolved, a member of the CoC Committee will inform the person who submitted the report. The CoC Committee will determine how much information to share with the reporter regarding the committeeโ€™s findings and what remediation steps were taken, if any, considering the privacy, confidentiality, and potential impact on the individuals involved in the incident. Notification to the accused person shall follow [Notification to the Accused Person](#notification-to-the-accused-person). The CoC Committee will also determine what information is necessary to share publicly or with community and project leaders. Any communication regarding the results of the investigation will be confidential. + +## Information Sharing + +The CoC Committee and Technical Steering Committee (TSC) may share information on an as-needed basis about reported incidents and their resolution for the limited purposes of: + +- Ensuring that the incident is resolved by the appropriate body with jurisdiction as described in the Jurisdiction and Escalation Policy, + +- Investigating and resolving the reported incident, + +- Maintaining a central repository of records and confirming whether an accused person has prior violations that were resolved by a different incident response team, as described in the Jurisdiction and Escalation Policy, + +- Implementing protective measures and protecting community members from harm, + +- Issuing public transparency reports regarding AsyncAPI Code of Conduct incidents (similar to [transparency reports issued by the Linux Foundation](https://www.linuxfoundation.org/blog/blog/linux-foundation-events-code-of-conduct-transparency-report-2021-event-summary/)). Such transparency reports will not disclose the identities of reporters, persons harmed, or witnesses. Depending on the resolution of an incident, the accused person might or might not be named in a transparency report or other communication to the community. + +## Confidentiality Policy + +When the AsyncAPI CoC Committee handles the incident response, only members of the CoC Committee without hard conflicts of interest (see our Conflicts of Interest policy below) will have access to confidential information about the incident, including the identities of the reporters. The AsyncAPI CoC Committee will not disclose the identities or confidential information provided by reporters or persons who were targeted or potentially harmed without their permission, except to a limited number of people on an as-needed basis for investigating and resolving the incident and protecting community members from harm. For example, the AsyncAPI CoC Committee might need to disclose certain information about the incident to TSC to arrange for onsite support for a target of harassment, or to an external professional mediator or investigator who is engaged to resolve the incident. Confidential information about incidents will only be shared with individuals who are obligated to similarly maintain the confidentiality of such information. + +In some cases, it may be necessary to question the accused person about the incident to perform a fair and thorough investigation of a reported incident. Although the CoC Committee will not disclose to the accused person who reported the incident or what witnesses have provided information, if only one person or a very small number of people were involved in or witnessed the incident, the accused person may be able to guess their identities. + +In rare situations, the CoC Committee may be required to disclose confidential information about an investigation to comply with applicable laws, a subpoena, or court order, or to defend against litigation. + +## No Retaliation + +The AsyncAPI community will not tolerate retaliation against community members who report concerns under the CoC in good faith or assist in an investigation as witnesses or by providing relevant information. Acts of retaliation are themselves violations of the AsyncAPI Code of Conduct. If you believe you have been retaliated against, please report it using the abovementioned reporting process. + +## Conflicts of Interest + +**Hard Conflicts**: A CoC Committee member has a hard conflict of interest if any of the following are true: + +- They are the accused person, or a person alleged to be directly harmed or targeted by the alleged wrongdoing; + +- They have a close personal relationship (e.g., close friend, spouse, or family member) with the accused person or with a person alleged to be directly targeted or harmed by alleged wrongdoing; + +- They have a close professional relationship (e.g., direct supervisory relationship at the same employer) with the accused person or with a person alleged to be directly harmed or targeted by the alleged wrongdoing; + +- They have another personal interest in the outcome of the incident that is likely to undermine their impartiality. + +- Multiple soft conflicts exist. + + +**Soft Conflicts**: A CoC Committee member has a soft conflict of interest if any of the following are true: + +- They work at the same company as the accused person, but do not have a close personal or professional relationship (e.g., they work for separate business units or divisions and do not interact regularly); + +- Other circumstances exist that are likely to give the appearance of a conflict of interest, even if such circumstances are not actually likely to undermine their impartiality, such as participating in public discussion about a potential violation or concern regarding the accused personโ€™s behavior in their capacity rather than in their official capacity as representative of the CoC Committee. + +Merely witnessing a potential Code of Conduct violation does not constitute a conflict of interest. + +### Obligation to disclose potential conflicts of interest + +When a CoC Committee member has a potential soft or hard conflict of interest concerning a reported incident, they have an obligation to promptly disclose the nature of their potential conflict of interest to the rest of the CoC Committee (unless such potential conflict of interest is already known to the other members of the CoC Committee). + +### Procedures to disclose and confirm conflicts + +Statements of conflict and confirmation of stated conflicts must be done before initiating an investigation and recorded in the notes of the first meeting convened to discuss the incident. + +A committee member may verbally disclose a conflict statement to the committee first, then follow up in writing with the statement of conflict. They may also directly provide the statement of conflict in writing. + +Statements of conflict must include the kind of conflict (hard or soft) and the specific area of conflict. The committee is then required to confirm the conflict by the majority; for the existence of a soft conflict, the confirmation must also outline what that member can and can not do as part of the investigation. + +### Procedures when a hard conflict of interest exists + +A CoC Committee member with a hard conflict of interest will not be allowed to attend meetings or otherwise participate in discussions or decision-making of the CoC Committee related to the incident; their participation shall be limited to allowing the remaining CoC Committee members to interview them as a witness and providing information requested by the CoC Committee. Additionally, a CoC Committee Member with a hard conflict of interest will not be provided with confidential information about the incident (e.g., identities of reporters or contents of confidential reports). + +### Procedures when a soft conflict of interest exists + +A CoC Committee member with a soft conflict of interest will not have the right to vote but may be allowed to participate in a discussion regarding the incident. The remaining CoC Committee members will decide what information to provide such conflicted members and the extent to which such conflicted members may be present at meetings, participate in discussions, and otherwise assist in the resolution of the incident. Any decisions regarding the participation or recusal of a CoC Committee member with a soft conflict of interest will be recorded in the committeeโ€™s meeting minutes or other records. + +## Amendments + +The Code of Conduct Committee must approve any amendments to these Incident Resolution Procedures. + +## Attribution + +This document is based on the [CNCF Code of Conduct - Incident Resolution Procedures](https://github.com/cncf/foundation/blob/main/code-of-conduct/coc-incident-resolution-procedures.md). diff --git a/code_of_conduct/code-of-conduct-committee.md b/code_of_conduct/code-of-conduct-committee.md new file mode 100644 index 000000000..cbf82a4be --- /dev/null +++ b/code_of_conduct/code-of-conduct-committee.md @@ -0,0 +1,45 @@ +# AsyncAPI Code of Conduct Committee + +## Purpose + +The AsyncAPI Code of Conduct Committee (CoC Committee) is a committee that responds to investigates, and resolves [AsyncAPI Code of Conduct](https://github.com/asyncapi/community/blob/master/CODE_OF_CONDUCT.md) incidents. + +The members of the CoC Committee are members of the [Technical Steering Committee](https://www.asyncapi.com/community/tsc) (TSC) [voted](https://github.com/orgs/asyncapi/discussions/682#discussioncomment-7498209) publicly by the community. The committee has a two-year term, after which re-election will take place. + +## Members + +The AsyncAPI CoC Committee consists of 3 full members and 3 alternate members: + +**Full Members**: + +- [Aishat Muibudeen](https://github.com/mayaleeeee) +- [Azeez Elegbede](https://github.com/acethecreator) +- [Sergio Moya](https://github.com/smoya) + +**Alternate Members:** + +- [Alejandra Quetzalli](https://github.com/alequetzalli) +- [Thulisile Sibanda](https://github.com/thulieblack) + +If one of the CoC members listed above is unavailable or has to recuse themselves from participating in the resolution of a CoC incident due to a conflict of interest (see our [Conflict of Interest policy](*)), AsyncAPI may request assistance from the [Technical Steering Committee](https://www.asyncapi.com/community/tsc) in appointing an alternate from the TSC members to take their place for that incident. + +## How Decisions Are Made + +Decisions of the CoC Committee shall be made by consensus whenever possible. In the event consensus cannot be reached, decisions shall be made by majority vote of non-conflicted members of the CoC Committee. A decision to take temporary interim action in the event of an emergency may be taken by any individual CoC Committee member acting in good faith, and the CoC Committee shall review such action and decide whether to confirm or reverse such action. Any permanent action shall require approval of a majority of non-conflicted members of the CoC Committee. The CoC Committee may take action without a meeting if a majority of non-conflicted members express agreement in writing (e.g., email or Slack) and none of the non-conflicted CoC Committee members either object to the proposed action or request a meeting to discuss the proposed action within 24 hours after the action is first proposed to the CoC Committee. In the absence of such agreement in writing, the CoC Committee may only take action during or after a meeting takes place at which the proposed action is discussed and agreed to by consensus or voted upon by a quorum of the non-conflicted members. A majority of non-conflicted members shall be deemed a quorum for purposes of a meeting. See the [Conflict of Interest](*) section of the Incident Resolution Procedures for more information. + +## External Support Resources + +The CoC Committee may, in its discretion, consult external mediators, investigators, advisors, and consultants as needed to assist with resolution of CoC Incidents. Any such external resources shall not have a vote, and shall be required to maintain confidentiality. + +## Incident Resolution Procedures + +Please see our [Incident Resolution Procedures](coc-incident-resolution-procedures.md), which address, among others: + +- How to submit a report +- What information to share in your report +- What happens after a report is submitted +- Resolution +- Information sharing +- Confidentiality Policy +- No retaliation +- Conflicts of interest From a668a981fe4ec4cb0499a3fa10ceeab514f18046 Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:56:38 +0530 Subject: [PATCH 080/124] chore: update slack automation docs (#1228) Co-authored-by: Sergio Moya <1083296+smoya@users.noreply.github.com> --- .github/workflows/slack/README.md | 4 ++++ .github/workflows/slack/groups/groups.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/slack/README.md b/.github/workflows/slack/README.md index 44625aa90..c2c373c0f 100644 --- a/.github/workflows/slack/README.md +++ b/.github/workflows/slack/README.md @@ -65,6 +65,10 @@ Three main resources are created using the slack integration: - Use of bot token of the format `xoxo-` is not supported for creating user groups. - The user group should be unique across the workspace (i.e., no channel, user, or user group should have the same handle). - Please [import](#importing-existing-resources) the user groups to terraform state if they already exist in the workspace, as they **cannot be deleted** in Slack ๐Ÿ˜ข. +- **You have to invite the bot to all managed channels to make it work.** + +> [!WARNING] +> **Creation of multitudes of groups leads to a lot of API calls and can lead to rate limiting. Please be cautious while creating groups, otherwise you will get `Error: couldn't get usergroups: slack rate limit exceeded, retry after 30s`**. Related issue (not fixed even thought it is closed): https://github.com/pablovarela/terraform-provider-slack/issues/64 > [!IMPORTANT] > The terraform state will overwrite any description, name, or topic change. It is better to manage the changes in the YAML files and then apply them. However, the terraform state will not affect bookmarks, pinned items, etc. diff --git a/.github/workflows/slack/groups/groups.yaml b/.github/workflows/slack/groups/groups.yaml index 35a5695ef..eeff3e129 100644 --- a/.github/workflows/slack/groups/groups.yaml +++ b/.github/workflows/slack/groups/groups.yaml @@ -22,7 +22,7 @@ - name: "Studio" handle: "studio" - description: "To notify all regular Studio contributors at once. If you don't contribute regularly but want to get notified too, please open a PR to get added." + description: "To notify all regular Studio contributors at once, please open PR to get added" users: - "U01RWDD69PZ" - "U0572R8J927" From 222ed1e035528af5a5d9b2fb2d78922cc779696e Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Thu, 6 Jun 2024 09:12:47 +0530 Subject: [PATCH 081/124] chore: add aayush to developer experience group of Asyncapi (#1237) Co-authored-by: Quetzalli --- WORKING_GROUPS.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index af7919855..3128b8596 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -91,6 +91,9 @@ working_groups: - name: Fran Mรฉndez github: fmvilas slack: U34F2JRRS + - name: Aayush Saini + github: AayushSaini101 + slack: U04RN9LRV97 slack: channel: handle: wg-developer-experience From 9115838a142dd10a26ca84cb76cd681a59fed1aa Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 8 Jun 2024 12:05:22 +0200 Subject: [PATCH 082/124] chore(tweet): recurring tweet about slack link (#1246) --- tweets/recurring-slack-link/2024-06-08.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-06-08.tweet diff --git a/tweets/recurring-slack-link/2024-06-08.tweet b/tweets/recurring-slack-link/2024-06-08.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-06-08.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From e54be5d093cfbb84472613204f0650433b30d202 Mon Sep 17 00:00:00 2001 From: Aishat Muibudeen <105395613+Mayaleeeee@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:31:05 +0100 Subject: [PATCH 083/124] chore: add Marketing WORKING_GROUP (#1130) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com>%0ACo-authored-by: asyncapi-bot %0ACo-authored-by: Lukasz Gornicki --- WORKING_GROUPS.yaml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 3128b8596..7a76a14c8 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -26,6 +26,39 @@ working_groups: # - The AsyncAPI community grows sustainably. # roadmap_url: https://example.com/xyz # Recommended. Link to a GitHub project, issue, or any other tool where the Working Group outlines their roadmap. # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: maintainers_growth_wg, without @asyncapi/ prefix. + + - name: Marketing + description: The group is dedicated to leveraging marketing strategies to achieve two key objectives: promoting AsyncAPI adoption and highlighting community achievements. By strategically showcasing AsyncAPI capabilities and celebrating community successes, the group drives both user growth and community engagement. It shares a vision of close collaboration between AsyncAPI community and sponsors. + chairpersons: + - name: Oluwabamikemi Kayode + github: iambami + slack: U070DE02VQX + members: + - name: Lukasz Gornicki + github: derberg + slack: UD698Q5LM + - name: Aishat Muibudeen + github: Mayaleeeee + slack: U03CNHGEUR1 + - name: Thulisile Sibanda + github: thulieblack + slack: U03CNJPMT7C + - name: Christophe Dujarric + github: ChristopheDujarric + slack: U048TMNQ1M0 + - name: Georgie from Gravitee.io + github: Georgie-Gravitee + slack: U043BE3QUS2 + slack: + channel: + handle: wg-marketing + topic: Tasks board https://github.com/orgs/asyncapi/projects/46 + group: + handle: wg-marketing + name: Marketing Working Group + roadmap_url: https://github.com/orgs/asyncapi/projects/46 + github_team: marketing_wg + - name: Essential Building Blocks description: The goal of the Essential Building Blocks Working Group is to provide fundamental building blocks that enable a similar developer experience across languages. chairpersons: @@ -60,6 +93,7 @@ working_groups: github_team: essential_building_blocks_wg objectives: - https://github.com/orgs/asyncapi/projects/44 + - name: Developer Experience description: The goal of this group is to empower AsyncAPI user journey trough intuitive onboarding, tools, and a frictionless experience. chairpersons: @@ -105,6 +139,7 @@ working_groups: objectives: - https://github.com/users/Amzani/projects/12/views/1 github_team: developer_experience_wg + - name: Maintainers Growth description: The Maintainers Growth Working Group aims to help grow the number of maintainers at AsyncAPI. chairpersons: @@ -135,6 +170,7 @@ working_groups: handle: maintainers-growth-wg description: Maintainers Growth Working Group github_team: maintainers_growth_wg + - name: Conference Coordination description: The goal of the group is to plan, manage, and create a seamless way to enhance the conference experience. chairpersons: From c9ebbc2655ee7ee6117a73cfc40d0c0c1eccaedc Mon Sep 17 00:00:00 2001 From: Aishat Muibudeen <105395613+Mayaleeeee@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:12:34 +0100 Subject: [PATCH 084/124] feat: update CoC (#1132) Co-authored-by: Sergio Moya <1083296+smoya@users.noreply.github.com>%0ACo-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com>%0ACo-authored-by: Quetzalli --- CODE_OF_CONDUCT.md | 87 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 23 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 638f73340..76d5ab213 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,46 +1,87 @@ -# Contributor Covenant Code of Conduct +# AsyncAPI Code of Conduct -## Our Pledge +## Introduction +Welcome to our community! We are a diverse group of individuals united by our passion for open source and commitment to inclusivity. -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. +Our community promotes and supports inclusivity, welcoming individuals from all backgrounds and experiences. We believe that diversity is our strength, and we actively seek participation from those who enhance it. -## Our Standards +Our Code of Conduct governs how we behave publicly or privately when representing the project. It ensures that diverse groups collaborate for mutual advantage and enjoyment and challenges prejudice that could jeopardize anyone's participation in the project. + +We expect everyone in our community to treat each other with kindness, empathy, and respect. We believe fostering a welcoming and respectful environment can create a positive and successful community. + +## Our Pledge -Examples of behavior that contributes to creating a positive environment include: +As members, contributors, and admins of our community, we pledge to ensure that every individual is treated with respect and dignity. We pledge to create a safe, inclusive, and welcoming environment that is free from any form of harassment or discrimination regardless of differences in age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members +We pledge to encourage a diverse, healthy community that celebrates individuality and promotes equality. We will act and interact in ways that promote openness, empathy, understanding, and acceptance of everyone's unique perspectives and experiences. -Examples of unacceptable behavior by participants include: +## Our Standards -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting +### Examples of behavior that contributes to a positive environment for our community include: -## Our Responsibilities +- Using welcoming and inclusive language. +- Being respectful of differing viewpoints and experiences. +- Gracefully accepting constructive criticism. +- Focusing on what is best for the community. +- Showing empathy towards other community members. -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. +### Examples of unacceptable behavior include: -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. +- The use of sexualized language or imagery and unwelcome sexual attention or advances. +- Trolling, insulting/derogatory comments, and personal or political attacks. +- Public or private harassment. +- Publishing others' private information, such as a physical or electronic address, without explicit permission. +- Publishing content or comments that promote illegal activities. +- Violence, threats of violence, or violent language. +- Other conduct that could reasonably be considered inappropriate in a professional setting. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. +## Enforce Responsibilities + +The Code of Conduct Committee (CoC Committee) responds to, investigates, and resolves AsyncAPI Incidents. The Committee is responsible for clarifying the standards of acceptable behavior and taking appropriate and fair corrective action in response to unacceptable behavior. + +The Committee has the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that do not align with this Code of Conduct. The Committee may also temporarily or permanently ban any contributor for inappropriate, threatening, offensive, or harmful behaviors to the community. + +For more details, please see the [CoC Committee and Incident Resolution Procedure](https://github.com/asyncapi/community/pull/1013/files). + ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at fmvilas@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at condcut@asyncapi.io. All complaints will be reviewed and investigated promptly and fairly. -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction +Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning +Community Impact: A violation through a single incident or series of actions. + +Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban +Community Impact: A serious violation of community standards, including sustained inappropriate behavior. + +Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban +Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +Consequence: A permanent ban from any sort of public interaction within the community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [http://contributor-covenant.org/version/2/1][version]. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. [homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +[version]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/inclusion From 98833caea03565a089872a699e5e18284642414c Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Tue, 11 Jun 2024 12:57:33 +0200 Subject: [PATCH 085/124] fix: quote sentence with colon character in WORKING_GROUPS.yaml (#1251) --- WORKING_GROUPS.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WORKING_GROUPS.yaml b/WORKING_GROUPS.yaml index 7a76a14c8..6f8e4c3c6 100644 --- a/WORKING_GROUPS.yaml +++ b/WORKING_GROUPS.yaml @@ -28,7 +28,7 @@ working_groups: # github_team: # Recommended. The GitHub team handle to tag all the working group members at once. Example: maintainers_growth_wg, without @asyncapi/ prefix. - name: Marketing - description: The group is dedicated to leveraging marketing strategies to achieve two key objectives: promoting AsyncAPI adoption and highlighting community achievements. By strategically showcasing AsyncAPI capabilities and celebrating community successes, the group drives both user growth and community engagement. It shares a vision of close collaboration between AsyncAPI community and sponsors. + description: 'The group is dedicated to leveraging marketing strategies to achieve two key objectives: promoting AsyncAPI adoption and highlighting community achievements. By strategically showcasing AsyncAPI capabilities and celebrating community successes, the group drives both user growth and community engagement. It shares a vision of close collaboration between AsyncAPI community and sponsors.' chairpersons: - name: Oluwabamikemi Kayode github: iambami @@ -54,7 +54,7 @@ working_groups: handle: wg-marketing topic: Tasks board https://github.com/orgs/asyncapi/projects/46 group: - handle: wg-marketing + handle: marketing-wg name: Marketing Working Group roadmap_url: https://github.com/orgs/asyncapi/projects/46 github_team: marketing_wg From d879a3046c40db8a62f550a14ec26d38adc75dc8 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Tue, 11 Jun 2024 14:12:38 +0200 Subject: [PATCH 086/124] ci: update of files from global .github repo (#1254) --- .github/workflows/issues-prs-notifications.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/issues-prs-notifications.yml b/.github/workflows/issues-prs-notifications.yml index 78ebe9601..b8b20c6ba 100644 --- a/.github/workflows/issues-prs-notifications.yml +++ b/.github/workflows/issues-prs-notifications.yml @@ -20,8 +20,6 @@ jobs: name: Notify slack on every new issue runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v3 - name: Convert markdown to slack markdown for issue uses: asyncapi/.github/.github/actions/slackify-markdown@master id: issuemarkdown @@ -40,8 +38,6 @@ jobs: name: Notify slack on every new pull request runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v3 - name: Convert markdown to slack markdown for pull request uses: asyncapi/.github/.github/actions/slackify-markdown@master id: prmarkdown @@ -60,8 +56,6 @@ jobs: name: Notify slack on every new pull request runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v3 - name: Convert markdown to slack markdown for pull request uses: asyncapi/.github/.github/actions/slackify-markdown@master id: discussionmarkdown From dee45e5ac3198901455f2d30517d07c57a848492 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 15 Jun 2024 12:05:40 +0200 Subject: [PATCH 087/124] chore(tweet): recurring tweet about slack link (#1271) --- tweets/recurring-slack-link/2024-06-15.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-06-15.tweet diff --git a/tweets/recurring-slack-link/2024-06-15.tweet b/tweets/recurring-slack-link/2024-06-15.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-06-15.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 30c11d5a1b8297a70fc701e68bebd0e656b6887d Mon Sep 17 00:00:00 2001 From: Ludovic Dussart Date: Mon, 17 Jun 2024 10:04:14 +0200 Subject: [PATCH 088/124] chore(TSC_MEMBERS): update m3lkior company (#1270) Co-authored-by: Lukasz Gornicki --- TSC_MEMBERS.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TSC_MEMBERS.json b/TSC_MEMBERS.json index 77ce9524f..07e2a0cdd 100644 --- a/TSC_MEMBERS.json +++ b/TSC_MEMBERS.json @@ -175,7 +175,7 @@ "slack": "U01BM49KL3Z", "twitter": "ldussart", "availableForHire": false, - "company": "Ineat", + "company": "zatsit", "repos": [ "avro-schema-parser" ] From 9a15f1f646618e2e6c8da62d0a219a7e3876d976 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Mon, 17 Jun 2024 11:47:23 +0200 Subject: [PATCH 089/124] chore: add @asyncapi/code_of_conduct as code owner (#1252) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CODEOWNERS b/CODEOWNERS index 98091f50b..aeff70244 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -9,3 +9,6 @@ # All ambassadors related files AMBASSADOR* @thulieblack + +# Code Of Conduct +/code_of_conduct/ @asyncapi/code_of_conduct From 4748f199fd107d4be4ce9bf5d97aabbeff8dd022 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:53:57 +0200 Subject: [PATCH 090/124] ci: remove fmvilas from alternative hosts list (#1281) --- .github/workflows/create-event-ad-hoc.yml | 2 +- .github/workflows/create-event-community-meeting.yml | 2 +- .github/workflows/create-event-lets-talk-about.yml | 2 +- .github/workflows/create-event-spec-3-0.yml | 2 +- .github/workflows/create-event-spec-3-docs.yml | 2 +- .github/workflows/create-event-thinking-out-loud.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/create-event-ad-hoc.yml b/.github/workflows/create-event-ad-hoc.yml index e5f22c8d8..29b8c3cc6 100644 --- a/.github/workflows/create-event-ad-hoc.yml +++ b/.github/workflows/create-event-ad-hoc.yml @@ -30,7 +30,7 @@ jobs: meeting_desc: ${{ github.event.inputs.desc }} meeting_banner: ${{ github.event.inputs.meeting_banner }} host: lpgornicki@gmail.com - alternative_host: "fmvilas@gmail.com,jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com" + alternative_host: "jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com" issue_template_path: .github/workflows/create-event-helpers/issues_templates/ad-hoc.md create_zoom: true secrets: diff --git a/.github/workflows/create-event-community-meeting.yml b/.github/workflows/create-event-community-meeting.yml index f37e3044b..63f2fb3ea 100644 --- a/.github/workflows/create-event-community-meeting.yml +++ b/.github/workflows/create-event-community-meeting.yml @@ -23,7 +23,7 @@ jobs: meeting_name: Community Meeting meeting_desc: This is a community meeting to regularly talk in open about important topics around AsyncAPI Initiative. host: lpgornicki@gmail.com - alternative_host: 'fmvilas@gmail.com,devlopergene@gmail.com,sibanda.thulie@gmail.com' + alternative_host: 'devlopergene@gmail.com,sibanda.thulie@gmail.com' issue_template_path: .github/workflows/create-event-helpers/issues_templates/community.md create_zoom: true secrets: diff --git a/.github/workflows/create-event-lets-talk-about.yml b/.github/workflows/create-event-lets-talk-about.yml index 2942ee8ba..5d6d41756 100644 --- a/.github/workflows/create-event-lets-talk-about.yml +++ b/.github/workflows/create-event-lets-talk-about.yml @@ -27,7 +27,7 @@ jobs: meeting_banner: ${{ github.event.inputs.meeting_banner }} meeting_desc: The purpose of this meeting is to focus on contributors, focus on people that want to contribute to AsyncAPI Initiative but do not know how to do it. host: lpgornicki@gmail.com - alternative_host: 'fmvilas@gmail.com,devlopergene@gmail.com,sibanda.thulie@gmail.com' + alternative_host: 'devlopergene@gmail.com,sibanda.thulie@gmail.com' issue_template_path: .github/workflows/create-event-helpers/issues_templates/lets-talk-about-contrib.md create_zoom: false secrets: diff --git a/.github/workflows/create-event-spec-3-0.yml b/.github/workflows/create-event-spec-3-0.yml index 92da486f6..ff4d7f4cf 100644 --- a/.github/workflows/create-event-spec-3-0.yml +++ b/.github/workflows/create-event-spec-3-0.yml @@ -24,7 +24,7 @@ jobs: meeting_name: Spec 3.0 Meeting meeting_desc: This is the meeting for community member involved in works related to 3.0 release of AsyncAPI Specification. host: jonas-lt@live.dk - alternative_host: fmvilas@gmail.com + alternative_host: lpgornicki@gmail.com issue_template_path: .github/workflows/create-event-helpers/issues_templates/spec-3-0.md create_zoom: true secrets: diff --git a/.github/workflows/create-event-spec-3-docs.yml b/.github/workflows/create-event-spec-3-docs.yml index 4d2bda5b8..176b1e033 100644 --- a/.github/workflows/create-event-spec-3-docs.yml +++ b/.github/workflows/create-event-spec-3-docs.yml @@ -23,7 +23,7 @@ jobs: meeting_name: Spec 3.0 Docs Meeting meeting_desc: This is a open meeting to plan and write Spec 3.0 Docs. host: alejandra.olvera.novack@gmail.com - alternative_host: 'fmvilas@gmail.com,devlopergene@gmail.com,sibanda.thulie@gmail.com,jonas-lt@live.dk,lpgornicki@gmail.com' + alternative_host: 'devlopergene@gmail.com,sibanda.thulie@gmail.com,jonas-lt@live.dk,lpgornicki@gmail.com' issue_template_path: .github/workflows/create-event-helpers/issues_templates/spec-3-docs.md create_zoom: true secrets: diff --git a/.github/workflows/create-event-thinking-out-loud.yml b/.github/workflows/create-event-thinking-out-loud.yml index 656c33760..7b2dc7115 100644 --- a/.github/workflows/create-event-thinking-out-loud.yml +++ b/.github/workflows/create-event-thinking-out-loud.yml @@ -29,7 +29,7 @@ jobs: meeting_name: Thinking Out Loud meeting_desc: ${{ github.event.inputs.desc }} guest: ${{ github.event.inputs.guest }} - host: fmvilas@gmail.com + host: lpgornicki@gmail.com issue_template_path: .github/workflows/create-event-helpers/issues_templates/thinking-out-loud.md create_zoom: true secrets: From c970d06fb4c0a89dcd0572d2d7183fae232835de Mon Sep 17 00:00:00 2001 From: Atinuke Oluwabamikemi Kayode <64528871+iambami@users.noreply.github.com> Date: Fri, 21 Jun 2024 09:12:39 +0100 Subject: [PATCH 091/124] chore: add bami to event hosts (Update create-event-ad-hoc.yml) (#1287) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- .github/workflows/create-event-ad-hoc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-event-ad-hoc.yml b/.github/workflows/create-event-ad-hoc.yml index 29b8c3cc6..4ec57e79f 100644 --- a/.github/workflows/create-event-ad-hoc.yml +++ b/.github/workflows/create-event-ad-hoc.yml @@ -30,7 +30,7 @@ jobs: meeting_desc: ${{ github.event.inputs.desc }} meeting_banner: ${{ github.event.inputs.meeting_banner }} host: lpgornicki@gmail.com - alternative_host: "jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com" + alternative_host: "jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com,oluwbamikemi@gmail.com" issue_template_path: .github/workflows/create-event-helpers/issues_templates/ad-hoc.md create_zoom: true secrets: From 65a90f9f03b76635e5088047ddb52a3430b8f400 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 22 Jun 2024 12:05:24 +0200 Subject: [PATCH 092/124] chore(tweet): recurring tweet about slack link (#1288) --- tweets/recurring-slack-link/2024-06-22.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-06-22.tweet diff --git a/tweets/recurring-slack-link/2024-06-22.tweet b/tweets/recurring-slack-link/2024-06-22.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-06-22.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 63e6aa725d1cf38ee3d07eab8217a15a82eb1b3d Mon Sep 17 00:00:00 2001 From: Manjul Mittal Date: Mon, 24 Jun 2024 15:55:54 +0530 Subject: [PATCH 093/124] ci: update the vote command to match instead of contains (#1274) Co-authored-by: Lukasz Gornicki --- .github/workflows/vote-verifcation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/vote-verifcation.yml b/.github/workflows/vote-verifcation.yml index 780532d05..dfd592b5c 100644 --- a/.github/workflows/vote-verifcation.yml +++ b/.github/workflows/vote-verifcation.yml @@ -17,7 +17,7 @@ jobs: authorName: "${{github.event.comment.user.login}}" - name: Checking the person authenticity. - if: contains(github.event.comment.body, '/vote') || contains(github.event.comment.body, '/cancel-vote') + if: (github.event.comment.body == '/vote') || (github.event.comment.body == '/cancel-vote') uses: actions/github-script@v6 with: github-token: ${{ secrets.GH_TOKEN_BOT_EVE }} @@ -61,4 +61,4 @@ jobs: fi fi env: - GH_TOKEN: ${{ secrets.GH_TOKEN_BOT_EVE }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GH_TOKEN_BOT_EVE }} From c7397000bd466969ed0e7c0f866ef1e4711b8bd1 Mon Sep 17 00:00:00 2001 From: Atinuke Oluwabamikemi Kayode <64528871+iambami@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:02:19 +0100 Subject: [PATCH 094/124] chore: update create-event-ad-hoc.yml (#1290) --- .github/workflows/create-event-ad-hoc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-event-ad-hoc.yml b/.github/workflows/create-event-ad-hoc.yml index 4ec57e79f..6f232579b 100644 --- a/.github/workflows/create-event-ad-hoc.yml +++ b/.github/workflows/create-event-ad-hoc.yml @@ -30,7 +30,7 @@ jobs: meeting_desc: ${{ github.event.inputs.desc }} meeting_banner: ${{ github.event.inputs.meeting_banner }} host: lpgornicki@gmail.com - alternative_host: "jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com,oluwbamikemi@gmail.com" + alternative_host: "jonas-lt@live.dk,devlopergene@gmail.com,sibanda.thulie@gmail.com,alejandra.olvera.novack@gmail.com,samir.amzani@gmail.com,oluwabamikemi@gmail.com" issue_template_path: .github/workflows/create-event-helpers/issues_templates/ad-hoc.md create_zoom: true secrets: From 2fdae7d627b12bc79aae9f6e435caf38b702733d Mon Sep 17 00:00:00 2001 From: Raphael De Lio Date: Thu, 27 Jun 2024 15:57:53 +0200 Subject: [PATCH 095/124] chore: add Raphael De Lio to AMBASSADORS_MEMBERS.json (#1298) --- AMBASSADORS_MEMBERS.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 998e0602e..284e911fb 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -548,5 +548,36 @@ "link": "https://www.youtube.com/watch?v=6Igp4DhK_hE" } ] + }, + { + "name": "Raphael De Lio", + "github": "raphaeldelio", + "twitter": "raphaeldelio", + "linkedin": "raphaeldelio", + "country": "๐Ÿ‡ง๐Ÿ‡ท", + "bio": "Raphael De Lio is a passionate software engineer who loves to think about solutions and ways to improve anything he touches. He was born in Brazil, lived in Portugal for five years, and now works as a consultant in the Netherlands. In his quest for knowledge, Raphael has always valued learning and sharing insights with others. This pursuit not only led him to Xebia, a place where he found a community of engineers who share his enthusiasm for technology and continuous improvement but also to becoming the co-organizer of the Amsterdam Kotlin MeetUp, where he has been able to enable other speakers to share their knowledge as well.", + "company": "Xebia", + "title": "Software Consultant at Xebia", + "img": "https://avatars.githubusercontent.com/u/25641721?v=4", + "contributions": [ + { + "type": "article", + "title": "AsyncAPI โ€” A standard specification for documenting Event-Driven Applications", + "date": { + "year": 2024, + "month": "February" + }, + "link": "https://medium.com/@raphaeldelio/asyncapi-a-standard-for-documenting-event-driven-applications-8ff657119036" + }, + { + "type": "presentation", + "title": "AsyncAPI & Springwolf - Automated documentation (and more)", + "date": { + "year": 2024, + "month": "May" + }, + "link": "https://www.youtube.com/watch?v=DylvTW_ia4Y" + } + ] } ] From dbef72b6d2cb2d20bee3da153488b4272a2dac45 Mon Sep 17 00:00:00 2001 From: HariKrishnan Date: Fri, 28 Jun 2024 11:41:54 +0530 Subject: [PATCH 096/124] chore: add Hari Krishnan to AMBASSADORS_MEMBERS.json (#1299) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- AMBASSADORS_MEMBERS.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 284e911fb..5a7da4f39 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -579,5 +579,36 @@ "link": "https://www.youtube.com/watch?v=DylvTW_ia4Y" } ] + }, + { + "name": "Hari Krishnan", + "github": "harikrishnan83", + "twitter": "harikrishnan83", + "linkedin": "harikrishnan83", + "country": "๐Ÿ‡ฎ๐Ÿ‡ณ", + "bio": "Co-creator of Specmatic and Perfiz. I also advise organizations, both large and small, on their transformation journey. Apart from bringing ideas to life as working software products, I coach developers, project managers, product owners, and engineering leaders. I have spoken at several conferences, including AACoT 2023, API Specification Conference (#ASC2022), API World, SeleniumConf, Agile2021, Agile India, TestingUY 2021, SREConf, PyCon Singapore, RubyConf India. My areas of interest include distributed systems, concurrency, high-performance application architecture, coaching, and training.", + "company": "Specmatic and Polarizer Technologies", + "title": "Co-founder and CTO at Specmatic, Founder, and CEO at Polarizer Technologies", + "img": "https://raw.githubusercontent.com/harikrishnan83/harikrishnan83/master/HariKrishnan-profile.jpg", + "contributions": [ + { + "type": "talk", + "title": "Kafka and JMS Mocking with AsyncAPI", + "date": { + "year": 2023, + "month": "November" + }, + "link": "https://www.youtube.com/watch?v=9yRf75p_kTU" + }, + { + "type": "talk", + "title": "Unshackling Your System Under Test: Shift-Left Testing Through Dependency Isolation (Kafka Mocks with AsyncAPI specification)", + "date": { + "year": 2024, + "month": "June" + }, + "link": "https://confengine.com/conferences/selenium-conf-2024/proposal/20021/unshackling-your-system-under-test-shift-left-testing-through-dependency-isolation" + } + ] } ] From c54f40ee46fd3014e85ec81277f802700142bf04 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 29 Jun 2024 12:05:21 +0200 Subject: [PATCH 097/124] chore(tweet): recurring tweet about slack link (#1300) --- tweets/recurring-slack-link/2024-06-29.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-06-29.tweet diff --git a/tweets/recurring-slack-link/2024-06-29.tweet b/tweets/recurring-slack-link/2024-06-29.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-06-29.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From d84e239ad8c964fc913c015ed397506c5184fcbf Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Mon, 1 Jul 2024 11:06:04 +0200 Subject: [PATCH 098/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1301) --- tweets/recurring-discuss-ideas/2024-07-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-07-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-07-01.tweet b/tweets/recurring-discuss-ideas/2024-07-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-07-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From f080bb21264e8c82a3f06643f7aaf168e1b7d192 Mon Sep 17 00:00:00 2001 From: Lukasz Gornicki Date: Mon, 1 Jul 2024 11:23:41 +0200 Subject: [PATCH 099/124] chore: cleanup TSC list (#1291) --- Emeritus.yaml | 9 +++++++++ MAINTAINERS.yaml | 45 ++++++++++++--------------------------------- 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/Emeritus.yaml b/Emeritus.yaml index c26c5dccd..c4d2cb040 100644 --- a/Emeritus.yaml +++ b/Emeritus.yaml @@ -6,3 +6,12 @@ emeritus: - arjungarg07 - boyney123 - Barbanio + - mcturco + - damaru-inc + - geraldloeffler + - ron-debajyoti + - char0n + - kieranm1999 + - jefflufc + - lewis-relph + - emilianozublena \ No newline at end of file diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index c632e52cd..66b2795dc 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -87,14 +87,13 @@ linkedin: emilianozublena slack: U01LYC8PW0M availableForHire: false - isTscMember: true + isTscMember: false repos: - asyncapi-php-template - name: Fran Mรฉndez github: fmvilas slack: U34F2JRRS availableForHire: false - company: Postman linkedin: fmvilas isTscMember: true repos: @@ -103,22 +102,17 @@ - openapi-schema-parser - asyncapi-react - glee - - generator - - nodejs-template - nodejs-ws-template - parser-js - - playground - spec - spec-json-schemas - - website - bindings - name: Gerald Loeffler github: geraldloeffler linkedin: geraldloeffler slack: U01P5QDLP0X availableForHire: false - company: Salesforce - isTscMember: true + isTscMember: false repos: - bindings - name: Jonas Lagoni @@ -156,6 +150,7 @@ linkedin: laurentbroudoux slack: U018NLDV5E1 availableForHire: false + company: Postman isTscMember: true repos: - bindings @@ -165,7 +160,7 @@ slack: U01BM49KL3Z twitter: ldussart availableForHire: false - company: Ineat + company: zatsit isTscMember: true repos: - avro-schema-parser @@ -178,37 +173,27 @@ company: Postman isTscMember: true repos: - - avro-schema-parser - - openapi-schema-parser - - chatbot - diff - - cli - generator-filters - generator-hooks - github-action-for-generator - generator - nodejs-template - nodejs-ws-template - - parser-js - - playground - spec - spec-json-schemas - template-for-generator-templates - website - - bundler - name: Maciej Urbaล„czyk github: magicmatatjahu availableForHire: false linkedin: maciej-urbaล„czyk-909547164 slack: U01EB02BP7A - company: Postman + company: Travelping GmbH isTscMember: true repos: - asyncapi-react - - chatbot - - cli - converter-go - - event-gateway - generator-react-sdk - generator - html-template @@ -216,7 +201,6 @@ - modelina - parser-js - parser-go - - playground - server-api - template-for-go-projects - website @@ -234,8 +218,7 @@ github: damaru-inc availableForHire: false slack: UH3B166TD - company: Solace - isTscMember: true + isTscMember: false repos: - java-spring-cloud-stream-template - python-paho-template @@ -247,12 +230,9 @@ linkedin: missy-turco-a476a6126 availableForHire: false company: Postman - isTscMember: true + isTscMember: false repos: - brand - - design-system - - studio - - website - name: Nektarios Fifes github: nektariosfifes linkedin: nektarios-fifes-372740220 @@ -366,7 +346,6 @@ slack: U02FP8WBFQE linkedin: danielr availableForHire: false - company: IBM isTscMember: true repos: - java-template @@ -376,7 +355,7 @@ availableForHire: false slack: U02FT2TKM37 company: IBM - isTscMember: true + isTscMember: false repos: - java-template - name: Tom Jefferson @@ -385,7 +364,7 @@ slack: U02FPPCEH6H availableForHire: false company: IBM - isTscMember: true + isTscMember: false repos: - java-template - name: Lewis Relph @@ -393,7 +372,7 @@ availableForHire: false slack: U02G8MDDEF3 company: IBM - isTscMember: true + isTscMember: false repos: - java-template - name: Semen Tenishchev @@ -420,7 +399,7 @@ linkedin: rondebajyoti availableForHire: false company: Narvar - isTscMember: true + isTscMember: false repos: - modelina - name: Ivan Garcia Sainz-Aja @@ -458,7 +437,7 @@ twitter: vladimirgorej availableForHire: false company: SmartBear - isTscMember: true + isTscMember: false repos: - bindings - spec From 09d0b29d8fc6bdfcd8b2df9daa1514c3913c9160 Mon Sep 17 00:00:00 2001 From: Sergio Moya <1083296+smoya@users.noreply.github.com> Date: Thu, 4 Jul 2024 12:13:42 +0200 Subject: [PATCH 100/124] docs: clarify jurisdiction of the CoC Committee regarding Slack external connections (#1286) --- code_of_conduct/coc-incident-resolution-procedures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_of_conduct/coc-incident-resolution-procedures.md b/code_of_conduct/coc-incident-resolution-procedures.md index 58341cf52..8a5b351a7 100644 --- a/code_of_conduct/coc-incident-resolution-procedures.md +++ b/code_of_conduct/coc-incident-resolution-procedures.md @@ -76,7 +76,7 @@ Once the report has been submitted, the AsyncAPI CoC Committee will confirm rece The Jurisdiction of the CoC Committee is as follows: - [AsyncAPI Initiative GitHub](https://github.com/asyncapi) -- [AsyncAPI Slack](asyncapi.slack.com) +- [AsyncAPI Slack](asyncapi.slack.com), including all external channels connected through [Slack Connect](https://slack.com/connect). - AsyncAPI social networks: [Twitter](https://twitter.com/AsyncAPISpec), [LinkedIn](https://www.linkedin.com/company/asyncapi), [YouTube](https://www.youtube.com/asyncapi), [Twitch](https://www.twitch.tv/asyncapi), and [Mastodon](https://fosstodon.org/@AsyncAPISpec) - AsyncAPI events: conferences, talks, workshops, etc. From 504b8022789b27f74499960a98ebee2e914b448a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 6 Jul 2024 12:05:40 +0200 Subject: [PATCH 101/124] chore(tweet): recurring tweet about slack link (#1303) --- tweets/recurring-slack-link/2024-07-06.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-07-06.tweet diff --git a/tweets/recurring-slack-link/2024-07-06.tweet b/tweets/recurring-slack-link/2024-07-06.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-07-06.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 53a6e92c14eb794de38b7c2976eb9a593b8a2d5a Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 8 Jul 2024 07:22:44 -0500 Subject: [PATCH 102/124] docs: project donation (#1289) * added initial draft of donating a project docs * added project donation guide * enhance the legal aspect of donation * editorial review --------- Co-authored-by: Quetzalli Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- docs/donating-projects.md | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 docs/donating-projects.md diff --git a/docs/donating-projects.md b/docs/donating-projects.md new file mode 100644 index 000000000..4a7e02e19 --- /dev/null +++ b/docs/donating-projects.md @@ -0,0 +1,49 @@ +## Donating Your Project + +Donating your open-source project to an open-source initiative involves transferring ownership or stewardship to an organization that supports and promotes open-source software. It ensures the project's sustainability, attracts more contributors, and aligns it with broader community goals. + +AsyncAPI initiative is open to receiving project donations that align with our goals and values. Before considering donating your project to the initiative, kindly visit our [AsyncAPI Roadmap](https://www.asyncapi.com/roadmap) to learn more about what we are looking at as a community in the near future. + +### Project Licensing + +Donating your project to an open-source organization like AsyncAPI can be exciting, hence why we need to ensure one of the most important parts of open-source projects, which is licensing. + +The AsyncAPI Initiative uses the [Apache-2.0 license](https://www.apache.org/licenses/LICENSE-2.0), which ensures our projects are open-source and community-driven. Before considering putting your project up for donation, ensure your projectย usesย aย compatibleย open-sourceย license. + +### Legal Consideration + +All the projects under the AsyncAPI initiative are strictly community-driven. We've put legal consideration into donating projects to the initiative. + +- We value Contributor License Agreements (CLAs) as they provide project maintainers with the necessary legal rights to distribute and modify code contributed by different individuals, ensuring protection for both maintainers and contributors. + +- We make Intellectual Property (IP) Review essential when donating projects from organizations instead of individual contributors. It's crucial to verify ownership and the chain of title to ensure that no proprietary code or third-party IP is included, maintaining a clear and respectful process for all involved. + +### Community Engagement + +When donating your project to a community-driven initiative like AsyncAPI, you should understand that communication is an integral part of the initiative. Before donating your project, communication with the community has to be established. + +Follow the instructions below to establish and involve the community in your project donation: + +1. Visit [AsyncAPI Initiative Discussions](https://github.com/orgs/asyncapi/discussions). +2. Create a new discussion by clicking on `New discussion` and selecting the `Idea` category. Specify in the _title_ that you want to donate to an existing project. In the _description_, state the purpose of the new repository and why it should be part of the AsyncAPI organization. Here's a [sample discussion about donating an existing project](https://github.com/orgs/asyncapi/discussions/643). +3. Start a discussion with community members to discuss the project idea, specify if you want to use AsyncAPI CI/CD workflows, and volunteer to become a maintainer for that project. For better visibility, share the discussion in the `#general` channel on our Slack. +4. Answer questions from contributors and maintainers about your project. Ask relevant questions about your project donation. + +### Project Migration + +After a successful community engagement, we move on to the final phase of project migration. Establish a successful project migration via the following steps: + +1. Visit the [AsyncAPI Community Repo](https://github.com/asyncapi/community) and open a [new issue](https://github.com/asyncapi/community/issues/new?assignees=&labels=enhancement&projects=&template=enhancement.yml&title=%5BFEATURE%5D+%3Cdescription%3E). +2. Write your project's details and include a summary of the community discussion for your project. +3. Tag the `@asyncapi/tsc_members` at the end of the proposal description and ask for a vote on migrating your project to the organization, because the Technical Steering Committee (TSC) must approve the project donation. Tagging TSC members notifies them to vote on the proposed project. +4. If the TSC approves the new repository, then either `@derberg` or `@fmvilas` complete the project migration to the AsyncAPI organization. +5. Configure the CI pipelines to match the initiative's standards, so that either `@derberg` or `@fmvilas`can run AsyncAPI CI/CD workflows that push basic GitHub Actions workflows to the newly donated project. +6. New maintainers are invited as repo admins. + +### Post Donation Maintenance + +Successfully donating a project doesn't mean the end of your journey with it. On the contrary, the post-donation phase is crucial for the sustained health and growth of the project. Ensure your project continues to thrive and benefits the community long after donation by implementing these key practices: + +- **Ongoing Contributions**: Your involvement shouldn't stop with the donation. Continue actively contributing to the project by adding new features, refining existing functionalities, and fixing bugs. Demonstrating ongoing commitment encourages others to contribute as well. +- **Documentation Updates**: Keep the project's documentation up-to-date. Write documentation for installation, configuration, usage, and API reference materials. As the project evolves, it's essential that the documentation reflects these changes accurately to assist both new and existing users. +- **Community Support**: Engage with the community by offering support, answering questions, providing feedback on user suggestions, and addressing any concerns. A vibrant, supportive community is key to a project's sustainability. From a107acf6018c996185294cd4f91e72fce3d45c78 Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Thu, 11 Jul 2024 10:26:37 +0200 Subject: [PATCH 103/124] chore: update ambassadors profile (#1308) --- AMBASSADORS_MEMBERS.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 5a7da4f39..1c6854626 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -1,12 +1,12 @@ [ { - "name": "Alejandra Quetzalli", + "name": "Quetzalli Writes", "img": "https://avatars.githubusercontent.com/u/19964402?v=4", "bio": "Alejandra Quetzalli is the upcoming author (2023) of the book titled 'Designing Developer Documentation as a Product', which will be published by the Apress Publishing Company. Alejandra has been in tech for 9 years, working with SEO, Paid Search, Full-Stack development, UX, Developer Relations, and Technical Writing (Engineering Documentation). She's currently a core OSS contributor for Docs, DevRel, and Community Building at AsyncAPI Initiative. She's also a member of the AsyncAPI Technical Steering Committee (TSC).", "title": "DevRel & DevDocs @AsyncAPI", - "github": "alequetzalli", - "twitter": "QuetzalliAle", - "linkedin": "alejandra-quetzalli", + "github": "quetzalliwrites", + "twitter": "QuetzalliWrites", + "linkedin": "quetzalli-writes", "company": "Postman", "country": "๐Ÿ‡ฒ๐Ÿ‡ฝ", "contributions": [ @@ -209,7 +209,7 @@ "twitter": "ivangsa", "bio": "Java Architect with a deep understanding of Java, Spring-Boot, Spring-Cloud technologies, specializing in Domain-Driven Design (DDD) and Event-Driven Architectures creating Software Easy to Understand. Building ZenWave 360ยบ. ZenWave 360ยบ is a set of tools built on the foundations of Domain Driven Design and API-First principles for Event-Driven Architectures, to help you create software easy to understand. https://www.zenwave360.io/", "linkedin": "ivangarciasainzaja", - "company": "SNGULAR", + "company": "IZERTIS", "title": "Java Architect. Speaker. Building ZenWave 360ยฐ.", "img": "https://avatars.githubusercontent.com/u/1246876?v=4", "contributions": [ From ae526ac121369e9e4d94d7ffc32ff591e2c4a051 Mon Sep 17 00:00:00 2001 From: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:06:38 +0200 Subject: [PATCH 104/124] chore: update AMBASSADORS_MEMBERS.json (#1310) --- AMBASSADORS_MEMBERS.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 1c6854626..07e99e7ad 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -2,7 +2,7 @@ { "name": "Quetzalli Writes", "img": "https://avatars.githubusercontent.com/u/19964402?v=4", - "bio": "Alejandra Quetzalli is the upcoming author (2023) of the book titled 'Designing Developer Documentation as a Product', which will be published by the Apress Publishing Company. Alejandra has been in tech for 9 years, working with SEO, Paid Search, Full-Stack development, UX, Developer Relations, and Technical Writing (Engineering Documentation). She's currently a core OSS contributor for Docs, DevRel, and Community Building at AsyncAPI Initiative. She's also a member of the AsyncAPI Technical Steering Committee (TSC).", + "bio": "Quetzalli Writes is an author of the book titled 'Docs-as-Ecosystem', which was published by the Apress Publishing Company. Quetzalli has been in tech for 9 years, working with SEO, Paid Search, Full-Stack development, UX, Developer Relations, and Technical Writing (Engineering Documentation). She's currently a core OSS contributor for Docs, DevRel, and Community Building at AsyncAPI Initiative. She's also a member of the AsyncAPI Technical Steering Committee (TSC).", "title": "DevRel & DevDocs @AsyncAPI", "github": "quetzalliwrites", "twitter": "QuetzalliWrites", From e013e9357ce4913b620fd4988c502e5e8b1de82e Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 13 Jul 2024 12:05:20 +0200 Subject: [PATCH 105/124] chore(tweet): recurring tweet about slack link (#1312) --- tweets/recurring-slack-link/2024-07-13.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-07-13.tweet diff --git a/tweets/recurring-slack-link/2024-07-13.tweet b/tweets/recurring-slack-link/2024-07-13.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-07-13.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From b504ef45a6328f0ca797a90d9a9ac9f5093162cc Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 15 Jul 2024 06:55:50 -0500 Subject: [PATCH 106/124] docs: added mentor/mentees (#1307) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- mentorship/summerofcode/2024/README.md | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 mentorship/summerofcode/2024/README.md diff --git a/mentorship/summerofcode/2024/README.md b/mentorship/summerofcode/2024/README.md new file mode 100644 index 000000000..b6e476c30 --- /dev/null +++ b/mentorship/summerofcode/2024/README.md @@ -0,0 +1,33 @@ +# Status: In Progress + +## Timeline + +- January 22: Organization applications open +- February 21: Accepted GSoC Organizations announced +- February 22 - March 18: Potential GSoC contributors discuss application ideas with mentoring organizations +- March 18: The GSoC contributor application period begins +- April 02: Proposal Deadline +- May 1: Accepted GSoC Contributor projects announced +- May 1 - 26: Community Bonding Period | GSoC contributors get to know mentors, read documentation, get up to speed to begin working on their projects +- May 27: Coding officially begins! +- July 8: Mentors and GSoC contributors can begin submitting midterm evaluations +- July 12: Midterm evaluation deadline (standard coding period) +- July 12 - August 19: Work Period | GSoC contributors work on their project with guidance from Mentors +- August 19 - 26: Final week: GSoC contributors submit their final work product and their final mentor evaluation (standard coding period) +- August 26 - September 2: Mentors submit final GSoC contributor evaluations (standard coding period) +- September 3: Initial results of Google Summer of Code 2024 announced +- September 3 - November 4: GSoC contributors with extended timelines continue coding +- November 4: Final date for all GSoC contributors to submit their final work product and final evaluation +- November 11: Final date for mentors to submit evaluations for GSoC contributor projects with extended deadlines + + +## Accepted Project Ideas +| No | Project Idea | Mentor/s | Category | Mentee/s | +| --- | --- | --- | --- | --- | +| 1 | [Autofix for Spectral Linting Errors: VS Code Extension](https://github.com/asyncapi/vs-asyncapi-preview/issues/160) | [Pavel Bodiachevskii](https://github.com/Pakisan) | Engineering | [Esther Xiao](https://github.com/FelicixAwe) | +| 2 | [Script Stability Enhancement for AsyncAPI Website](https://github.com/asyncapi/website/issues/2626) | [Sambhav Gupta](https://github.com/sambhavgupta0705), [Ansh Goyal](https://github.com/anshgoyalevil) | Engineering | [Vishvamsinh Vaghela](https://github.com/vishvamsinh28) | +| 3 | [AsyncAPI Generator Maintainership](https://github.com/asyncapi/generator/issues/1145) | [Lukasz Gornicki](https://github.com/derberg) | Engineering | [Mintu Gogoi](https://github.com/Gmin2), [Yuan Yuan](https://github.com/lmgyuan) | +| 4 | [Markdown and MermaidJS Diagrams Preview: VS Code Extension](https://github.com/asyncapi/vs-asyncapi-preview/issues/161) | [Ivรกn Garcรญa Sainz-Aja](https://github.com/ivangsa), [Azeez Elegbede](https://github.com/acethecreator) | Engineering | [NIKHIL CHAUDHARI](https://github.com/nikhil-3112) | +| 5 | [AsyncAPI Website UI Kit Development](https://github.com/asyncapi-archived-repos/design-system/issues/4) | [Azeez Elegbede](https://github.com/acethecreator), [Akshat Nema](https://github.com/akshatnema) | Engineering | [Ashmit JaiSarita Gupta](https://github.com/devilkiller-ag) | +| 6 | [Dynamic Open Graph Preview for AsyncAPI Studio](https://github.com/asyncapi/studio/issues/224) | [Sergio Moya](https://github.com/smoya) | Engineering | [Ankit Dash](https://github.com/helios2003) | +| 7 | [Conference Website Maintainance](https://github.com/asyncapi/conference-website/issues/284) | [Azeez Elegbede](https://github.com/acethecreator), [Aishat Muibudeen](https://github.com/mayaleeeee), [Thulisile Sibanda](https://github.com/thulieblack) | Engineering | [Ashmit Jagtap](https://github.com/ashmit-coder) | From 164fd3ff9d5dd7d5c35b5abf5c04785611858db5 Mon Sep 17 00:00:00 2001 From: Mateusz Szostok Date: Sat, 20 Jul 2024 10:55:24 +0200 Subject: [PATCH 107/124] fix: update invalid GitHub username for Alejandra Quetzalli (#1314) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- MAINTAINERS.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 66b2795dc..2587086a2 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -319,11 +319,11 @@ - cli - bundler - glee -- name: Alejandra Quetzalli - github: alequetzalli - twitter: QuetzalliAle +- name: Quetzalli Writes + github: quetzalliwrites + twitter: QuetzalliWrites slack: U02AKC14WAJ - linkedin: alejandra-quetzalli + linkedin: quetzalli-writes availableForHire: false company: Postman isTscMember: true From 7cbf9da69cc0d2847c6ad0a3dbdf928c6bc30ad6 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 20 Jul 2024 12:05:24 +0200 Subject: [PATCH 108/124] chore(tweet): recurring tweet about slack link (#1316) --- tweets/recurring-slack-link/2024-07-20.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-07-20.tweet diff --git a/tweets/recurring-slack-link/2024-07-20.tweet b/tweets/recurring-slack-link/2024-07-20.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-07-20.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From cb018e7b9c30f7e66dde79f04e3a1ce8114f4464 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Mon, 22 Jul 2024 18:18:59 +0530 Subject: [PATCH 109/124] chore: update the github username of tsc member (#1318) --- MAINTAINERS.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 2587086a2..c40ed7e68 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -61,7 +61,7 @@ repos: - github-action-for-cli - name: Cameron Rushton - github: cameronrushton + github: CameronRushton slack: U01DVKKAV5K availableForHire: false company: Solace From 78045b38bf46a217cb97a90a5b3bc66bf94f421b Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 23 Jul 2024 12:29:03 +0530 Subject: [PATCH 110/124] chore: update usernames for maintainers (#1320) --- MAINTAINERS.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index c40ed7e68..29ad9ddb3 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -108,7 +108,7 @@ - spec-json-schemas - bindings - name: Gerald Loeffler - github: geraldloeffler + github: GeraldLoeffler linkedin: geraldloeffler slack: U01P5QDLP0X availableForHire: false @@ -132,7 +132,7 @@ - parser-api - simulator - name: Khuda Dad Nomani - github: khudadad414 + github: KhudaDad414 twitter: KhudaDadNomani linkedin: khudadadnomani slack: U01RVRD1TCL @@ -206,7 +206,7 @@ - website - name: Azeez Elegbede linkedin: acebuild - github: acethecreator + github: AceTheCreator twitter: _acebuild slack: U01RWDD69PZ company: Postman @@ -234,7 +234,7 @@ repos: - brand - name: Nektarios Fifes - github: nektariosfifes + github: NektariosFifes linkedin: nektarios-fifes-372740220 slack: U01SE93Q48N availableForHire: true @@ -242,7 +242,7 @@ repos: - simulator - name: Pavel Bodiachevskii - github: pakisan + github: Pakisan slack: U0132LQU8C9 twitter: pbodiachevskii availableForHire: false @@ -308,7 +308,7 @@ - go-watermill-template - template-for-go-projects - name: Souvik De - github: souvikns + github: Souvikns slack: U01SGCZMJKW twitter: souvik_ns linkedin: souvik-de-a2b941169 @@ -332,7 +332,7 @@ - training - community - name: David Pereira - github: bolt04 + github: BOLT04 twitter: BOLT2938 slack: U02EC8BT0TX linkedin: josรฉ-david-pereira-13ba5315a @@ -350,7 +350,7 @@ repos: - java-template - name: Kieran Murphy - github: kieranm1999 + github: KieranM1999 linkedin: kieran-murphy-175b0412b availableForHire: false slack: U02FT2TKM37 @@ -359,7 +359,7 @@ repos: - java-template - name: Tom Jefferson - github: jefflufc + github: JEFFLUFC linkedin: t-jefferson slack: U02FPPCEH6H availableForHire: false @@ -376,7 +376,7 @@ repos: - java-template - name: Semen Tenishchev - github: tenischev + github: Tenischev linkedin: semen-tenishchev availableForHire: true slack: U011D1DAU6S @@ -384,7 +384,7 @@ repos: - java-spring-template - name: Samridhi Agrawal - github: samridhi-98 + github: Samridhi-98 slack: U02T2MY9W5T linkedin: samridhi-agrawal-1713201ab availableForHire: false @@ -412,7 +412,7 @@ repos: - vs-asyncapi-preview - name: Florence Njeri - github: florence-njeri + github: Florence-Njeri linkedin: florencenjeri slack: U03D18YKX2M twitter: njericodes @@ -443,7 +443,7 @@ - spec - spec-json-schemas - name: Alexander Wichmann - github: visualbean + github: VisualBean linkedin: alexcarlsen slack: U04C58GB8TF availableForHire: false @@ -461,7 +461,7 @@ repos: - modelina - name: Heiko Henning - github: greenrover + github: GreenRover slack: U03AC4G51H8 availableForHire: false company: mtrail GmbH From 39e05c2bd5fc6ad2b4c913f97ec2a45627bb2b70 Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Tue, 23 Jul 2024 20:09:37 +0530 Subject: [PATCH 111/124] feat: add new worklow to track the voting process (#1278) --- .github/scripts/vote_tracker.js | 247 +++++++++++++ .github/workflows/vote-tracker.yml | 37 ++ TSC_VOTING_OVERVIEW.md | 42 +++ voteTrackingFile.json | 548 +++++++++++++++++++++++++++++ voting.md | 11 + 5 files changed, 885 insertions(+) create mode 100644 .github/scripts/vote_tracker.js create mode 100644 .github/workflows/vote-tracker.yml create mode 100644 TSC_VOTING_OVERVIEW.md create mode 100644 voteTrackingFile.json diff --git a/.github/scripts/vote_tracker.js b/.github/scripts/vote_tracker.js new file mode 100644 index 000000000..0e8889e90 --- /dev/null +++ b/.github/scripts/vote_tracker.js @@ -0,0 +1,247 @@ +const yaml = require('js-yaml'); +const { readFile, writeFile } = require('fs').promises; +const path = require('path'); + +module.exports = async ({ context }) => { + try { + // Extract necessary details from the context + const message = context.payload.comment.body; + const eventNumber = context.issue.number; + const eventTitle = context.payload.issue.title; + const orgName = context.issue.owner; + const repoName = context.issue.repo; + + // Path to the vote tracking file + const voteTrackingFile = path.join('voteTrackingFile.json'); + + // Parse the vote-closed comment created by git-vote[bot] + const votingRows = await parseVoteClosedComment(); + + // Example table vote comment that is parsed here https://github.com/asyncapi/community/issues/1227#issuecomment-2167463252 + const latestVotes = votingRows.map(row => { + //skipping first element as parsing is based on split, so table where column starts with | will have first element of created array empty + const [, user, vote, timestamp] = row.split('|').map(col => col.trim()); + return { user: user.replace('@', ''), vote, timestamp, isVotedInLast3Months: true }; + }); + + let maintainerInformation; + try { + const maintainerInfo = await readFile('MAINTAINERS.yaml', 'utf8'); + maintainerInformation = yaml.load(maintainerInfo); + } catch (readError) { + console.error('Error reading MAINTAINERS.yaml:', readError); + throw readError; + } + + // Update the TSC Members + const voteDetails = await updateVoteTrackingFile(); + + const updatedVoteDetails = []; + + // Process each vote detail to update voting information + voteDetails.forEach(voteInfo => { + const userVote = latestVotes.find(vote => vote.user.toLowerCase() === voteInfo.name.toLowerCase()); + let currentTime; + if (userVote && userVote.timestamp) { + currentTime = userVote.timestamp.toString().split(" ")[0]; + } + const userInfo = latestVotes.find(vote => vote.user.toLowerCase() === voteInfo.name.toLowerCase()); + const voteChoice = userInfo ? userInfo.vote : "Not participated"; + voteInfo.lastVoteClosedTime = new Date().toISOString().split('T')[0]; + + if (userInfo) { + voteInfo.isVotedInLast3Months = true; + voteInfo.lastParticipatedVoteTime = currentTime; + voteInfo[voteChoice === "In favor" ? 'agreeCount' : voteChoice === "Against" ? 'disagreeCount' : 'abstainCount']++; + } else { + voteInfo.notParticipatingCount++; + if (isVotingWithinLastThreeMonths(voteInfo)) { + voteInfo.isVotedInLast3Months = false; + } + } + + // Update vote information with the issue title and number + let updatedVoteInfo = {}; + Object.keys(voteInfo).forEach(key => { + if (key === 'name') { + updatedVoteInfo['name'] = voteInfo.name; + updatedVoteInfo[eventTitle + "$$" + eventNumber] = voteChoice; + } else { + updatedVoteInfo[key] = voteInfo[key]; + } + }); + updatedVoteDetails.push(updatedVoteInfo); + }); + + try { + await writeFile(voteTrackingFile, JSON.stringify(updatedVoteDetails, null, 2)); + } catch (writeError) { + console.error('Error writing to voteTrackingFile.json:', writeError); + throw writeError; + } + + const markdownTable = await jsonToMarkdownTable(updatedVoteDetails); + try { + await writeFile('TSC_VOTING_OVERVIEW.md', markdownTable); + console.log('Markdown table has been written to TSC_VOTING_OVERVIEW.md'); + } catch (writeError) { + console.error('Error writing to TSC_VOTING_OVERVIEW.md:', writeError); + throw writeError; + } + + async function jsonToMarkdownTable(data) { + if (!data || data.length === 0) { + console.error("Data is empty or undefined"); + return ''; + } + + const keys = Object.keys(data[0]).filter(key => key !== 'firstVoteClosedTime'); + + const titles = { + name: "GitHub user name", + lastParticipatedVoteTime: "Last time the TSC member participated in a vote", + hasVotedInLast3Months: "Flag indicating if TSC member voted in last 3 months. This information is calculated after each voting, and not basing on a schedule as there might be moments when there is no voting in place for 3 months and therefore no TSC member votes.", + lastVoteClosedTime: "Date when last vote was closed. It indicated when the last voting took place and marks the date when this tracking document was updated.", + agreeCount: "Number of times TSC member agreed in a vote.", + disagreeCount: "Number of times TSC member did not agree in a vote.", + abstainCount: "Number of times TSC member abstained from voting.", + notParticipatingCount: "Number of times TSC member did not participate in voting." + }; + + // Fill missing properties with default values and log the processing + data = data.map((obj, index) => { + const newObj = {}; + keys.forEach(key => { + newObj[key] = obj[key] !== undefined ? obj[key] : 'N/A'; + }); + return newObj; + }); + + let markdownTable = '\n'; + markdownTable += '| ' + keys.map(key => { + if (key.includes('$$')) { + const [title, number] = key.split('$$'); + return `[${title}](https://github.com/${orgName}/${repoName}/issues/${number})`; + } + return `${key}`; + }).join(' | ') + ' |\n'; + + markdownTable += '| ' + keys.map(() => '---').join(' | ') + ' |\n'; + markdownTable += data.map(obj => '| ' + keys.map(key => { + if (key === 'name') return `[${obj[key]}](https://github.com/${obj[key]})`; + if (key.includes('$$')) { + const icons = { + "In favor": "๐Ÿ‘", + "Against": "๐Ÿ‘Ž", + "Abstain": "๐Ÿ‘€", + "Not participated": "๐Ÿ”•" + }; + return `${icons[obj[key]] || obj[key]}`; + } + return obj[key]; + }).join(' | ') + ' |').join('\n'); + + return markdownTable; + } + + + // Parse the vote-closed comment created by git-vote[bot] + // No need to look for "Vote closed" as this is already validated by the workflow that runs this code + async function parseVoteClosedComment() { + const bindingVotesSectionMatch = message.match(/Binding votes \(\d+\)[\s\S]*?(?=(
|$))/); + const bindingVotesSection = bindingVotesSectionMatch ? bindingVotesSectionMatch[0] : ''; + return bindingVotesSection.match(/\| @\w+.*?\|.*?\|.*?\|/g) || []; + } + + // Check if voting duration is within the last three months + function isVotingWithinLastThreeMonths(voteInfo) { + const currentDate = new Date(); + let previousDate; + if (voteInfo.isVotedInLast3Months === "Member has not voted in all previous voting process.") { + previousDate = new Date(voteInfo.firstVoteClosedTime); + } else { + previousDate = new Date(voteDetails.lastVoteClosedTime); + } + const yearDiff = currentDate.getFullYear() - previousDate.getFullYear(); + const monthDiff = currentDate.getMonth() - previousDate.getMonth(); + const totalMonthsDiff = yearDiff * 12 + monthDiff; + + return totalMonthsDiff > 3; + } + + // Function to update the voteTrackingFile with updated TSC Members + async function updateVoteTrackingFile() { + const tscMembers = maintainerInformation.filter(entry => entry.isTscMember); + let voteDetails = []; + try { + voteDetails = JSON.parse(await readFile(voteTrackingFile, 'utf8')); + } catch (readError) { + console.error('Error reading voteTrackingFile.json:', readError); + throw readError; + } + const updatedTSCMembers = []; + const requiredKeys = ['name', 'lastParticipatedVoteTime', 'isVotedInLast3Months', 'lastVoteClosedTime', 'agreeCount', 'disagreeCount', 'abstainCount', 'notParticipatingCount']; + // Function to check if an object has all required keys + const isValidExampleMember = (member) => { + return requiredKeys.every(key => member.hasOwnProperty(key)); + }; + // Find the first valid example member + const validExampleMember = voteDetails.find(isValidExampleMember); + + if (validExampleMember) { + tscMembers.forEach(member => { + const existingMember = voteDetails.find(voteInfo => voteInfo.name.toLowerCase() === member.github.toLowerCase()); + if (!existingMember) { + // Create a new member by copying the structure of the valid example member + const newMember = {}; + + // Copy the keys from the valid example member to the new member with default values + Object.keys(validExampleMember).forEach(key => { + switch (key) { + case 'name': + newMember[key] = member.github; + break; + case 'lastParticipatedVoteTime': + newMember[key] = 'Member has not participated in all previous voting process.'; + break; + case 'isVotedInLast3Months': + newMember[key] = 'Member has not participated in all previous voting process.'; + break; + case 'lastVoteClosedTime': + newMember[key] = new Date().toISOString().split('T')[0]; + break; + case 'firstVoteClosedTime': + newMember[key] = validExampleMember['firstVoteClosedTime']; // This is used to determine when the first vote closed so that we can determine the duration between two votes easily + break; + case 'agreeCount': + case 'disagreeCount': + case 'abstainCount': + case 'notParticipatingCount': + newMember[key] = 0; + break; + default: + newMember[key] = "Not participated"; + } + }); + + updatedTSCMembers.push(newMember); + } + }); + } else { + console.log('No valid example member found in voteDetails.'); + } + + if (updatedTSCMembers.length > 0) { + try { + const combinedData = [...voteDetails, ...updatedTSCMembers]; + await writeFile(voteTrackingFile, JSON.stringify(combinedData, null, 2)); + return combinedData; // Return the updated data + } catch (writeError) { + console.error('Error wile writing file:' ,writeError) + } + } + } +} catch (error) { + console.error('Error while running the vote_tracker workflow:', error); + } +} diff --git a/.github/workflows/vote-tracker.yml b/.github/workflows/vote-tracker.yml new file mode 100644 index 000000000..eabcaa66c --- /dev/null +++ b/.github/workflows/vote-tracker.yml @@ -0,0 +1,37 @@ +name: Vote Tracker + +on: + issue_comment: + types: [created] + +jobs: + track-vote: + if: ${{ github.actor == 'git-vote[bot]' && contains(github.event.comment.body, 'Vote closed')}} + runs-on: ubuntu-latest + steps: + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Installing Module + run: npm install js-yaml@4.1.0 + shell: bash + + - name: Run GitHub Script + id: vote_tracker + uses: actions/github-script@v7 + with: + script: | + const script = require('./.github/scripts/vote_tracker.js'); + await script({ github, context, core }); + + - name: Create Pull Request to update Vote Tracking Details + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # uses 5.0.2 https://github.com/peter-evans/create-pull-request/releases/tag/v5.0.2 + with: + token: ${{ secrets.GH_TOKEN }} + commit-message: 'chore: update vote tracking details' + committer: asyncapi-bot + author: asyncapi-bot + title: 'chore: vote tracking details' + body: 'Update the votetrackingDetails.md and votetracking.json' + branch: vote-trackingupdate/${{ github.job }} diff --git a/TSC_VOTING_OVERVIEW.md b/TSC_VOTING_OVERVIEW.md new file mode 100644 index 000000000..10a071f92 --- /dev/null +++ b/TSC_VOTING_OVERVIEW.md @@ -0,0 +1,42 @@ + +| name | [Proposal for Admin Rights for CoC Main Committee on Slack](https://github.com/asyncapi/community/issues/1227) | [chore: add Marketing WORKING_GROUP](https://github.com/asyncapi/community/issues/1130) | [docs: add instruction how voting automation works](https://github.com/asyncapi/community/issues/1155) | lastParticipatedVoteTime | isVotedInLast3Months | lastVoteClosedTime | agreeCount | disagreeCount | abstainCount | notParticipatingCount | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [Mayaleeeee](https://github.com/Mayaleeeee) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [aayushmau5](https://github.com/aayushmau5) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-28 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [imabp](https://github.com/imabp) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [akshatnema](https://github.com/akshatnema) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [anshgoyalevil](https://github.com/anshgoyalevil) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-03 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [anandsunderraman](https://github.com/anandsunderraman) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [Shurtu-gal](https://github.com/Shurtu-gal) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [CameronRushton](https://github.com/CameronRushton) | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 1 | 0 | 1 | 1 | +| [dalelane](https://github.com/dalelane) | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 0 | 0 | 1 | 2 | +| [fmvilas](https://github.com/fmvilas) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [jonaslagoni](https://github.com/jonaslagoni) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [KhudaDad414](https://github.com/KhudaDad414) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [lbroudoux](https://github.com/lbroudoux) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [M3lkior](https://github.com/M3lkior) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 1 | 0 | 0 | 2 | +| [derberg](https://github.com/derberg) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [magicmatatjahu](https://github.com/magicmatatjahu) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [AceTheCreator](https://github.com/AceTheCreator) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [NektariosFifes](https://github.com/NektariosFifes) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | +| [Pakisan](https://github.com/Pakisan) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [theschles](https://github.com/theschles) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-10 | true | 2024-06-14 | 1 | 0 | 0 | 2 | +| [princerajpoot20](https://github.com/princerajpoot20) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [rcoppen](https://github.com/rcoppen) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | +| [Amzani](https://github.com/Amzani) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [smoya](https://github.com/smoya) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-28 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [Souvikns](https://github.com/Souvikns) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [quetzalliwrites](https://github.com/quetzalliwrites) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-04 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [BOLT04](https://github.com/BOLT04) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-08 | true | 2024-06-14 | 2 | 0 | 0 | 1 | +| [dan-r](https://github.com/dan-r) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | +| [Tenischev](https://github.com/Tenischev) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | +| [Samridhi-98](https://github.com/Samridhi-98) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-11 | true | 2024-06-14 | 1 | 0 | 0 | 2 | +| [ivangsa](https://github.com/ivangsa) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 1 | 0 | 0 | 2 | +| [Florence-Njeri](https://github.com/Florence-Njeri) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [whitlockjc](https://github.com/whitlockjc) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 1 | 0 | 0 | 2 | +| [VisualBean](https://github.com/VisualBean) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [kennethaasan](https://github.com/kennethaasan) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [GreenRover](https://github.com/GreenRover) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 0 | 0 | 0 | 3 | +| [thulieblack](https://github.com/thulieblack) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [devilkiller-ag](https://github.com/devilkiller-ag) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | +| [sambhavgupta0705](https://github.com/sambhavgupta0705) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | diff --git a/voteTrackingFile.json b/voteTrackingFile.json new file mode 100644 index 000000000..1bf46da96 --- /dev/null +++ b/voteTrackingFile.json @@ -0,0 +1,548 @@ +[ + { + "name": "Mayaleeeee", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "aayushmau5", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "imabp", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "akshatnema", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "anshgoyalevil", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-03", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "anandsunderraman", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "Shurtu-gal", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "CameronRushton", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Abstain", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": "true", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 1, + "notParticipatingCount": 1 + }, + { + "name": "dalelane", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Abstain", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 1, + "notParticipatingCount": 2 + }, + { + "name": "fmvilas", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "jonaslagoni", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-03", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "KhudaDad414", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "lbroudoux", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "M3lkior", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-04-12", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 2 + }, + { + "name": "derberg", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "magicmatatjahu", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "AceTheCreator", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "NektariosFifes", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", + "isVotedInLast3Months": "Member has not participated in all previous voting process.", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 3 + }, + { + "name": "Pakisan", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "theschles", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-04-10", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 2 + }, + { + "name": "princerajpoot20", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "rcoppen", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", + "isVotedInLast3Months": "Member has not participated in all previous voting process.", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 3 + }, + { + "name": "Amzani", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "smoya", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "Souvikns", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "quetzalliwrites", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-04", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "BOLT04", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-08", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + }, + { + "name": "dan-r", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", + "isVotedInLast3Months": "Member has not participated in all previous voting process.", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 3 + }, + { + "name": "Tenischev", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", + "isVotedInLast3Months": "Member has not participated in all previous voting process.", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 3 + }, + { + "name": "Samridhi-98", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-04-11", + "isVotedInLast3Months": "true", + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 2 + }, + { + "name": "ivangsa", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-04-12", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 2 + }, + { + "name": "Florence-Njeri", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "whitlockjc", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "Not participated", + "lastParticipatedVoteTime": "2024-06-13", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 1, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 2 + }, + { + "name": "VisualBean", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-03", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "kennethaasan", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "GreenRover", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "Not participated", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-04-12", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 0, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 3 + }, + { + "name": "thulieblack", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-06-03", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "devilkiller-ag", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-28", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 3, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 0 + }, + { + "name": "sambhavgupta0705", + "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", + "chore: add Marketing WORKING_GROUP$$1130": "In favor", + "docs: add instruction how voting automation works$$1155": "In favor", + "lastParticipatedVoteTime": "2024-05-29", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-06-14", + "firstVoteClosedTime": "2024-04-12", + "agreeCount": 2, + "disagreeCount": 0, + "abstainCount": 0, + "notParticipatingCount": 1 + } +] \ No newline at end of file diff --git a/voting.md b/voting.md index b2d3e71e0..47bc821e4 100644 --- a/voting.md +++ b/voting.md @@ -45,6 +45,17 @@ Voting cannot be concluded with a comment; it ends when more than half of the us The Git Vote bot adds a comment that voting is completed. +### Tracking Voting + +We store [the voting history of entire TSC](TSC_VOTING_OVERVIEW.md) since voting automation was introduces. + +* ๐Ÿ”• indicates that the member did not vote. +* ๐Ÿ‘ indicates that the member was in favor. +* ๐Ÿ‘Ž indicates that the member was against. +* ๐Ÿ‘€ indicates that the member abstained from voting. + +Tracking file is automatically updated by a bot after each vote is completed. It also records whether the member has voted in the last 3 months, helping to identify inactive TSC Members. + ### Note * As per the [Charter](./CHARTER.md), a quorum is not needed. However, Git Vote has technical limitations, and a quorum should be reached. That's why we allocate 4 weeks for voting, and it's important to actively encourage participation to ensure that the quorum (where votes cast exceed 50% of eligible voters) is met. From bcff426f69e93482a718a58a38829fd73313be60 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 24 Jul 2024 12:53:53 +0200 Subject: [PATCH 112/124] chore: vote tracking details (#1323) --- package-lock.json | 28 ++++++++++++++++++++++++++++ package.json | 5 +++++ 2 files changed, 33 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..fb0255951 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,28 @@ +{ + "name": "community", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "js-yaml": "^4.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..8a0887659 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "js-yaml": "^4.1.0" + } +} From 3100867a0988e2cf61ce3174c5855bd296ab6e4f Mon Sep 17 00:00:00 2001 From: Zack_Aayush <60972989+AayushSaini101@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:45:32 +0530 Subject: [PATCH 113/124] fix: fix undefined error and remove unused files (#1325) --- .github/scripts/vote_tracker.js | 80 ++++++++++++++++++++++++------ .github/workflows/vote-tracker.yml | 16 ++++-- package-lock.json | 28 ----------- package.json | 5 -- 4 files changed, 77 insertions(+), 52 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.github/scripts/vote_tracker.js b/.github/scripts/vote_tracker.js index 0e8889e90..9666145cb 100644 --- a/.github/scripts/vote_tracker.js +++ b/.github/scripts/vote_tracker.js @@ -1,15 +1,24 @@ const yaml = require('js-yaml'); const { readFile, writeFile } = require('fs').promises; -const path = require('path'); - -module.exports = async ({ context }) => { +const path = require("path") +module.exports = async ({ github, context, botCommentURL}) => { try { - // Extract necessary details from the context - const message = context.payload.comment.body; - const eventNumber = context.issue.number; - const eventTitle = context.payload.issue.title; - const orgName = context.issue.owner; - const repoName = context.issue.repo; + let message, eventNumber, eventTitle, orgName, repoName; + if (botCommentURL) { + const voteCommentContext = await fetchCommentInformation(); + message = voteCommentContext.messageBody + eventNumber = voteCommentContext.eventNumber + eventTitle = voteCommentContext.eventTitle + orgName = voteCommentContext.orgName + repoName = voteCommentContext.repoName + } else { + // Extract necessary details from the context when triggered by issue_comment + message = context.payload.comment.body; + eventNumber = context.issue.number; + eventTitle = context.payload.issue.title; + orgName = context.repo.owner; + repoName = context.repo.repo; + } // Path to the vote tracking file const voteTrackingFile = path.join('voteTrackingFile.json'); @@ -179,6 +188,7 @@ module.exports = async ({ context }) => { console.error('Error reading voteTrackingFile.json:', readError); throw readError; } + let updatedVoteDetails = [...voteDetails] const updatedTSCMembers = []; const requiredKeys = ['name', 'lastParticipatedVoteTime', 'isVotedInLast3Months', 'lastVoteClosedTime', 'agreeCount', 'disagreeCount', 'abstainCount', 'notParticipatingCount']; // Function to check if an object has all required keys @@ -230,18 +240,58 @@ module.exports = async ({ context }) => { } else { console.log('No valid example member found in voteDetails.'); } - + if (updatedTSCMembers.length > 0) { try { - const combinedData = [...voteDetails, ...updatedTSCMembers]; - await writeFile(voteTrackingFile, JSON.stringify(combinedData, null, 2)); - return combinedData; // Return the updated data + updatedVoteDetails.concat(...updatedTSCMembers) + await writeFile(voteTrackingFile, JSON.stringify(updatedVoteDetails, null, 2)); } catch (writeError) { console.error('Error wile writing file:' ,writeError) } } + return updatedVoteDetails } -} catch (error) { + // Method to fetch information from the comment when workflow triggered manually + async function fetchCommentInformation() { + const urlParts = botCommentURL.split('/'); + const eventNumber = urlParts[urlParts.length - 1].split('#')[0]; + const commentId = urlParts[urlParts.length - 1].split('#')[1].replace('issuecomment-', ''); + const [owner, repo] = urlParts.slice(3, 5); + let orgName = owner; + let repoName = repo; + let messageBody = ''; + let eventTitle = ''; + + try { + const messageResponse = await github.request("GET /repos/{owner}/{repo}/issues/comments/{comment_id}", { + owner: owner, + repo: repo, + comment_id: commentId + }); + messageBody = messageResponse.data.body; + + const issueResponse = await github.rest.issues.get({ + owner, + repo, + issue_number: eventNumber + }); + eventTitle = issueResponse.data.title; + } catch (error) { + console.error(error); + } + + return { + orgName, + repoName, + eventNumber, + commentId, + messageBody, + eventTitle + }; + } + + } + catch (error) { console.error('Error while running the vote_tracker workflow:', error); } -} +} \ No newline at end of file diff --git a/.github/workflows/vote-tracker.yml b/.github/workflows/vote-tracker.yml index eabcaa66c..9b690aca8 100644 --- a/.github/workflows/vote-tracker.yml +++ b/.github/workflows/vote-tracker.yml @@ -4,9 +4,16 @@ on: issue_comment: types: [created] + workflow_dispatch: + inputs: + bot_comment_url: + description: | + Provide URL pointing to gitvote bot comment that contains closing voting update. It looks like `https://github.com/asyncapi/community/issues/1313#issuecomment-2247595858`. We use this to update the voting summary in cases when we see errors in the voting status, when for example TSC member voted, but did a mistake and voted by adding emoji to main description or other bot comment instead of the correct way: which is adding an emoji to a comment from bot that opens the vote. + required: true + jobs: track-vote: - if: ${{ github.actor == 'git-vote[bot]' && contains(github.event.comment.body, 'Vote closed')}} + if: ${{ github.actor == 'git-vote[bot]' && contains(github.event.comment.body, 'Vote closed') || github.event_name == 'workflow_dispatch' }} runs-on: ubuntu-latest steps: @@ -14,7 +21,7 @@ jobs: uses: actions/checkout@v4 - name: Installing Module - run: npm install js-yaml@4.1.0 + run: npm install js-yaml@4.1.0 --no-save shell: bash - name: Run GitHub Script @@ -23,7 +30,8 @@ jobs: with: script: | const script = require('./.github/scripts/vote_tracker.js'); - await script({ github, context, core }); + const botCommentURL = "${{ github.event.inputs.bot_comment_url || '' }}"; + await script({ github, context, botCommentURL }); - name: Create Pull Request to update Vote Tracking Details uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # uses 5.0.2 https://github.com/peter-evans/create-pull-request/releases/tag/v5.0.2 @@ -33,5 +41,5 @@ jobs: committer: asyncapi-bot author: asyncapi-bot title: 'chore: vote tracking details' - body: 'Update the votetrackingDetails.md and votetracking.json' + body: 'Update the TSC_VOTING_OVERVIEW.md and voteTrackingFile.json' branch: vote-trackingupdate/${{ github.job }} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index fb0255951..000000000 --- a/package-lock.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "community", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "js-yaml": "^4.1.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 8a0887659..000000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "js-yaml": "^4.1.0" - } -} From 3a2c2c43df6c535c492c5716f12a730f52927911 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Fri, 26 Jul 2024 11:18:46 +0200 Subject: [PATCH 114/124] chore: vote tracking details (#1326) --- TSC_VOTING_OVERVIEW.md | 84 +++++++------- voteTrackingFile.json | 253 ++++++++++++++++++++++++----------------- 2 files changed, 188 insertions(+), 149 deletions(-) diff --git a/TSC_VOTING_OVERVIEW.md b/TSC_VOTING_OVERVIEW.md index 10a071f92..e26e325d6 100644 --- a/TSC_VOTING_OVERVIEW.md +++ b/TSC_VOTING_OVERVIEW.md @@ -1,42 +1,42 @@ - -| name | [Proposal for Admin Rights for CoC Main Committee on Slack](https://github.com/asyncapi/community/issues/1227) | [chore: add Marketing WORKING_GROUP](https://github.com/asyncapi/community/issues/1130) | [docs: add instruction how voting automation works](https://github.com/asyncapi/community/issues/1155) | lastParticipatedVoteTime | isVotedInLast3Months | lastVoteClosedTime | agreeCount | disagreeCount | abstainCount | notParticipatingCount | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| [Mayaleeeee](https://github.com/Mayaleeeee) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [aayushmau5](https://github.com/aayushmau5) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-28 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [imabp](https://github.com/imabp) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [akshatnema](https://github.com/akshatnema) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [anshgoyalevil](https://github.com/anshgoyalevil) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-03 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [anandsunderraman](https://github.com/anandsunderraman) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [Shurtu-gal](https://github.com/Shurtu-gal) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [CameronRushton](https://github.com/CameronRushton) | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 1 | 0 | 1 | 1 | -| [dalelane](https://github.com/dalelane) | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 0 | 0 | 1 | 2 | -| [fmvilas](https://github.com/fmvilas) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [jonaslagoni](https://github.com/jonaslagoni) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [KhudaDad414](https://github.com/KhudaDad414) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [lbroudoux](https://github.com/lbroudoux) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [M3lkior](https://github.com/M3lkior) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 1 | 0 | 0 | 2 | -| [derberg](https://github.com/derberg) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [magicmatatjahu](https://github.com/magicmatatjahu) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [AceTheCreator](https://github.com/AceTheCreator) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [NektariosFifes](https://github.com/NektariosFifes) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | -| [Pakisan](https://github.com/Pakisan) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [theschles](https://github.com/theschles) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-10 | true | 2024-06-14 | 1 | 0 | 0 | 2 | -| [princerajpoot20](https://github.com/princerajpoot20) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [rcoppen](https://github.com/rcoppen) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | -| [Amzani](https://github.com/Amzani) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [smoya](https://github.com/smoya) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-28 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [Souvikns](https://github.com/Souvikns) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [quetzalliwrites](https://github.com/quetzalliwrites) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-04 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [BOLT04](https://github.com/BOLT04) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-08 | true | 2024-06-14 | 2 | 0 | 0 | 1 | -| [dan-r](https://github.com/dan-r) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | -| [Tenischev](https://github.com/Tenischev) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-06-14 | 0 | 0 | 0 | 3 | -| [Samridhi-98](https://github.com/Samridhi-98) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-11 | true | 2024-06-14 | 1 | 0 | 0 | 2 | -| [ivangsa](https://github.com/ivangsa) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 1 | 0 | 0 | 2 | -| [Florence-Njeri](https://github.com/Florence-Njeri) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-13 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [whitlockjc](https://github.com/whitlockjc) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | 2024-06-13 | true | 2024-06-14 | 1 | 0 | 0 | 2 | -| [VisualBean](https://github.com/VisualBean) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [kennethaasan](https://github.com/kennethaasan) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [GreenRover](https://github.com/GreenRover) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-06-14 | 0 | 0 | 0 | 3 | -| [thulieblack](https://github.com/thulieblack) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-03 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [devilkiller-ag](https://github.com/devilkiller-ag) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-06-14 | 3 | 0 | 0 | 0 | -| [sambhavgupta0705](https://github.com/sambhavgupta0705) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-06-14 | 2 | 0 | 0 | 1 | + +| name | [Donate kotlin-asyncapi](https://github.com/asyncapi/community/issues/1313) | [Proposal for Admin Rights for CoC Main Committee on Slack](https://github.com/asyncapi/community/issues/1227) | [chore: add Marketing WORKING_GROUP](https://github.com/asyncapi/community/issues/1130) | [docs: add instruction how voting automation works](https://github.com/asyncapi/community/issues/1155) | lastParticipatedVoteTime | isVotedInLast3Months | lastVoteClosedTime | agreeCount | disagreeCount | abstainCount | notParticipatingCount | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| [Mayaleeeee](https://github.com/Mayaleeeee) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-17 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [aayushmau5](https://github.com/aayushmau5) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-28 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [imabp](https://github.com/imabp) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-23 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [akshatnema](https://github.com/akshatnema) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-23 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [anshgoyalevil](https://github.com/anshgoyalevil) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-07-23 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [anandsunderraman](https://github.com/anandsunderraman) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-23 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [Shurtu-gal](https://github.com/Shurtu-gal) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-17 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [CameronRushton](https://github.com/CameronRushton) | ๐Ÿ”• | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ‘ | 2024-06-13 | true | 2024-07-26 | 1 | 0 | 1 | 2 | +| [dalelane](https://github.com/dalelane) | ๐Ÿ‘ | ๐Ÿ‘€ | ๐Ÿ”• | ๐Ÿ”• | 2024-07-17 | true | 2024-07-26 | 1 | 0 | 1 | 2 | +| [fmvilas](https://github.com/fmvilas) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [jonaslagoni](https://github.com/jonaslagoni) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-16 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [KhudaDad414](https://github.com/KhudaDad414) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-29 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [lbroudoux](https://github.com/lbroudoux) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-07-16 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [M3lkior](https://github.com/M3lkior) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-04-12 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [derberg](https://github.com/derberg) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-16 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [magicmatatjahu](https://github.com/magicmatatjahu) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-13 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [AceTheCreator](https://github.com/AceTheCreator) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-05-29 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [NektariosFifes](https://github.com/NektariosFifes) | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | Member has not participated in all previous voting process. | Member has not participated in all previous voting process. | 2024-07-26 | 0 | 0 | 0 | 4 | +| [Pakisan](https://github.com/Pakisan) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-16 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [theschles](https://github.com/theschles) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-18 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [princerajpoot20](https://github.com/princerajpoot20) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [rcoppen](https://github.com/rcoppen) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | 2024-07-17 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [Amzani](https://github.com/Amzani) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-13 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [smoya](https://github.com/smoya) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-07-23 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [Souvikns](https://github.com/Souvikns) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-17 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [quetzalliwrites](https://github.com/quetzalliwrites) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-06-04 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [BOLT04](https://github.com/BOLT04) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ”• | 2024-06-08 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [dan-r](https://github.com/dan-r) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | 2024-07-22 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [Tenischev](https://github.com/Tenischev) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ”• | 2024-07-16 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [Samridhi-98](https://github.com/Samridhi-98) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-16 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [ivangsa](https://github.com/ivangsa) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-17 | true | 2024-07-26 | 2 | 0 | 0 | 2 | +| [Florence-Njeri](https://github.com/Florence-Njeri) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-23 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [whitlockjc](https://github.com/whitlockjc) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | 2024-06-13 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [VisualBean](https://github.com/VisualBean) | ๐Ÿ‘€ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-22 | true | 2024-07-26 | 3 | 0 | 1 | 0 | +| [kennethaasan](https://github.com/kennethaasan) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-23 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [GreenRover](https://github.com/GreenRover) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ”• | ๐Ÿ‘ | 2024-07-24 | true | 2024-07-26 | 1 | 0 | 0 | 3 | +| [thulieblack](https://github.com/thulieblack) | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-20 | true | 2024-07-26 | 4 | 0 | 0 | 0 | +| [devilkiller-ag](https://github.com/devilkiller-ag) | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | ๐Ÿ‘ | 2024-05-28 | true | 2024-07-26 | 3 | 0 | 0 | 1 | +| [sambhavgupta0705](https://github.com/sambhavgupta0705) | ๐Ÿ‘ | ๐Ÿ”• | ๐Ÿ‘ | ๐Ÿ‘ | 2024-07-24 | true | 2024-07-26 | 3 | 0 | 0 | 1 | \ No newline at end of file diff --git a/voteTrackingFile.json b/voteTrackingFile.json index 1bf46da96..419020d19 100644 --- a/voteTrackingFile.json +++ b/voteTrackingFile.json @@ -1,546 +1,585 @@ [ { "name": "Mayaleeeee", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-28", + "lastParticipatedVoteTime": "2024-07-17", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "aayushmau5", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "2024-05-28", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 1 + "notParticipatingCount": 2 }, { "name": "imabp", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "akshatnema", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-28", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "anshgoyalevil", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "2024-06-03", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "anandsunderraman", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "Shurtu-gal", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-28", + "lastParticipatedVoteTime": "2024-07-17", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "CameronRushton", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Abstain", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-06-13", "isVotedInLast3Months": "true", - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 1, "disagreeCount": 0, "abstainCount": 1, - "notParticipatingCount": 1 + "notParticipatingCount": 2 }, { "name": "dalelane", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Abstain", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-17", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 0, + "agreeCount": 1, "disagreeCount": 0, "abstainCount": 1, "notParticipatingCount": 2 }, { "name": "fmvilas", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-05-28", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "jonaslagoni", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-03", + "lastParticipatedVoteTime": "2024-07-16", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "KhudaDad414", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-05-29", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "lbroudoux", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-16", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "M3lkior", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-04-12", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 2 + "notParticipatingCount": 3 }, { "name": "derberg", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-29", + "lastParticipatedVoteTime": "2024-07-16", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "magicmatatjahu", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-06-13", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "AceTheCreator", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "2024-05-29", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 1 + "notParticipatingCount": 2 }, { "name": "NektariosFifes", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", "isVotedInLast3Months": "Member has not participated in all previous voting process.", - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 0, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 3 + "notParticipatingCount": 4 }, { "name": "Pakisan", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-29", + "lastParticipatedVoteTime": "2024-07-16", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "theschles", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-04-10", + "lastParticipatedVoteTime": "2024-07-18", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 1, + "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 2 }, { "name": "princerajpoot20", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-05-28", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "rcoppen", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", - "isVotedInLast3Months": "Member has not participated in all previous voting process.", - "lastVoteClosedTime": "2024-06-14", + "lastParticipatedVoteTime": "2024-07-17", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 0, + "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 3 }, { "name": "Amzani", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "2024-06-13", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 1 + "notParticipatingCount": 2 }, { "name": "smoya", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "2024-05-28", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "Souvikns", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-17", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 }, { "name": "quetzalliwrites", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-06-04", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "BOLT04", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "2024-06-08", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 1 + "notParticipatingCount": 2 }, { "name": "dan-r", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", - "isVotedInLast3Months": "Member has not participated in all previous voting process.", - "lastVoteClosedTime": "2024-06-14", + "lastParticipatedVoteTime": "2024-07-22", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 0, + "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 3 }, { "name": "Tenischev", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", - "lastParticipatedVoteTime": "Member has not participated in all previous voting process.", - "isVotedInLast3Months": "Member has not participated in all previous voting process.", - "lastVoteClosedTime": "2024-06-14", + "lastParticipatedVoteTime": "2024-07-16", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 0, + "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 3 }, { "name": "Samridhi-98", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-04-11", - "isVotedInLast3Months": "true", - "lastVoteClosedTime": "2024-06-14", + "lastParticipatedVoteTime": "2024-07-16", + "isVotedInLast3Months": true, + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 1, + "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 2 }, { "name": "ivangsa", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-04-12", + "lastParticipatedVoteTime": "2024-07-17", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 1, + "agreeCount": 2, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 2 }, { "name": "Florence-Njeri", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-13", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "whitlockjc", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "Not participated", "lastParticipatedVoteTime": "2024-06-13", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 2 + "notParticipatingCount": 3 }, { "name": "VisualBean", + "Donate kotlin-asyncapi$$1313": "Abstain", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-03", + "lastParticipatedVoteTime": "2024-07-22", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, - "abstainCount": 0, + "abstainCount": 1, "notParticipatingCount": 0 }, { "name": "kennethaasan", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-29", + "lastParticipatedVoteTime": "2024-07-23", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "GreenRover", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "Not participated", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-04-12", + "lastParticipatedVoteTime": "2024-07-24", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 0, + "agreeCount": 1, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 3 }, { "name": "thulieblack", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-06-03", + "lastParticipatedVoteTime": "2024-07-20", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 3, + "agreeCount": 4, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 0 }, { "name": "devilkiller-ag", + "Donate kotlin-asyncapi$$1313": "Not participated", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "In favor", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", "lastParticipatedVoteTime": "2024-05-28", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, - "notParticipatingCount": 0 + "notParticipatingCount": 1 }, { "name": "sambhavgupta0705", + "Donate kotlin-asyncapi$$1313": "In favor", "Proposal for Admin Rights for CoC Main Committee on Slack$$1227": "Not participated", "chore: add Marketing WORKING_GROUP$$1130": "In favor", "docs: add instruction how voting automation works$$1155": "In favor", - "lastParticipatedVoteTime": "2024-05-29", + "lastParticipatedVoteTime": "2024-07-24", "isVotedInLast3Months": true, - "lastVoteClosedTime": "2024-06-14", + "lastVoteClosedTime": "2024-07-26", "firstVoteClosedTime": "2024-04-12", - "agreeCount": 2, + "agreeCount": 3, "disagreeCount": 0, "abstainCount": 0, "notParticipatingCount": 1 From d0e05d764d51afe434d5e6023f42d3563225383d Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 27 Jul 2024 12:06:16 +0200 Subject: [PATCH 115/124] chore(tweet): recurring tweet about slack link (#1327) --- tweets/recurring-slack-link/2024-07-27.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-07-27.tweet diff --git a/tweets/recurring-slack-link/2024-07-27.tweet b/tweets/recurring-slack-link/2024-07-27.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-07-27.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 325646bd8867bf4015a09a4c9e2c1924a013f8e7 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Thu, 1 Aug 2024 11:04:39 +0200 Subject: [PATCH 116/124] chore(tweet): recurring tweet about discussion tools ideas in our discussions forum (#1332) --- tweets/recurring-discuss-ideas/2024-08-01.tweet | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tweets/recurring-discuss-ideas/2024-08-01.tweet diff --git a/tweets/recurring-discuss-ideas/2024-08-01.tweet b/tweets/recurring-discuss-ideas/2024-08-01.tweet new file mode 100644 index 000000000..92b19fefe --- /dev/null +++ b/tweets/recurring-discuss-ideas/2024-08-01.tweet @@ -0,0 +1,5 @@ +Do you have some nice ideas for #AsyncAPI-related tools? Do you want to validate and share with the AsyncAPI community? + +Drop it ๐Ÿ‘‡ and let us have an open discussion ๐Ÿš€ + +https://github.com/asyncapi/community/discussions/categories/ideas \ No newline at end of file From 2c278856153ddabd6952580323c94842638c445a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 3 Aug 2024 12:05:32 +0200 Subject: [PATCH 117/124] chore(tweet): recurring tweet about slack link (#1334) --- tweets/recurring-slack-link/2024-08-03.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-08-03.tweet diff --git a/tweets/recurring-slack-link/2024-08-03.tweet b/tweets/recurring-slack-link/2024-08-03.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-08-03.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 5ca89edc2a7460638f373b02f96db1bcb2f91613 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 10 Aug 2024 12:05:48 +0200 Subject: [PATCH 118/124] chore(tweet): recurring tweet about slack link (#1341) --- tweets/recurring-slack-link/2024-08-10.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-08-10.tweet diff --git a/tweets/recurring-slack-link/2024-08-10.tweet b/tweets/recurring-slack-link/2024-08-10.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-08-10.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 43cdbf2ecb2513f25079d7c71f28a04db1c4cf2f Mon Sep 17 00:00:00 2001 From: Manuel Ottlik <28919003+manuelottlik@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:59:03 +0200 Subject: [PATCH 119/124] feat: add manuelottlik to ambassadors (#1343) Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- AMBASSADORS_MEMBERS.json | 76 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/AMBASSADORS_MEMBERS.json b/AMBASSADORS_MEMBERS.json index 07e99e7ad..1eef57473 100644 --- a/AMBASSADORS_MEMBERS.json +++ b/AMBASSADORS_MEMBERS.json @@ -610,5 +610,81 @@ "link": "https://confengine.com/conferences/selenium-conf-2024/proposal/20021/unshackling-your-system-under-test-shift-left-testing-through-dependency-isolation" } ] + }, + { + "name": "Manuel Ottlik", + "github": "manuelottlik", + "twitter": "", + "linkedin": "manuelottlik", + "country": "๐Ÿ‡ฉ๐Ÿ‡ช", + "bio": "Manuel is the Product Owner of the Global Integration Platform at HDI Global SE. He sold his first software at the age of thirteen and has been developing software ever since. After graduating, he joined the financial industry in API management and eventually moved to HDI Global SE to merge a service bus, API management and an event broker into an integration platform for the cloud division. In addition to his work at HDI Global SE, he is co-founder of a small company in the education software sector and freelance writer for heise.de and its magazines.", + "company": "HDI Global SE", + "title": "Product Owner Integration Platform & PBAC Platform", + "img": "https://avatars.githubusercontent.com/u/28919003?v=4", + "contributions": [ + { + "type": "talk", + "title": "Event-Driven Architecture und REST-APIs: Es gibt keine Konkurrenz!", + "date": { + "year": 2023, + "month": "April" + }, + "link": "" + }, + { + "type": "talk", + "title": "Event-driven Architecture and REST-APIs: It's not a competition", + "date": { + "year": 2023, + "month": "May" + }, + "link": "" + }, + { + "type": "talk", + "title": "Event-driven Architecture and REST-APIs: It's not a competition", + "date": { + "year": 2023, + "month": "September" + }, + "link": "" + }, + { + "type": "talk", + "title": "Event-Driven Architecture und REST-APIs: Es gibt keine Konkurrenz!", + "date": { + "year": 2023, + "month": "October" + }, + "link": "" + }, + { + "type": "talk", + "title": "Event-driven Architecture and REST-APIs: It's not a competition", + "date": { + "year": 2023, + "month": "December" + }, + "link": "https://drive.google.com/file/d/1KN-iuw0P4nOYNhnT15RQvgq5YqGy4ECC/view?usp=sharing" + }, + { + "type": "talk", + "title": "Eine Registry, sie alle zu knechten: Schemata von Entitรคten mit xRegistry fรผr alle Integrationsprodukte zentralisieren", + "date": { + "year": 2024, + "month": "April" + }, + "link": "" + }, + { + "type": "article", + "title": "AsyncAPI - HDI Global SE Case Study", + "date": { + "year": 2024, + "month": "July" + }, + "link": "https://www.asyncapi.com/casestudies/hdiglobal" + } + ] } ] From 540ded1a5afff5e22fc96620c0231f0c72f3db8a Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 17 Aug 2024 12:05:52 +0200 Subject: [PATCH 120/124] chore(tweet): recurring tweet about slack link (#1347) --- tweets/recurring-slack-link/2024-08-17.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-08-17.tweet diff --git a/tweets/recurring-slack-link/2024-08-17.tweet b/tweets/recurring-slack-link/2024-08-17.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-08-17.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file From 502b7212d373dbc80068a590e2458dfc1952d5ee Mon Sep 17 00:00:00 2001 From: Ace <40604284+AceTheCreator@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:30:58 -0500 Subject: [PATCH 121/124] docs: update README.md (#1348) * Update README.md * Update mentorship/asyncapi-mentorship/README.md --------- Co-authored-by: V Thulisile Sibanda <66913810+thulieblack@users.noreply.github.com> --- mentorship/asyncapi-mentorship/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mentorship/asyncapi-mentorship/README.md b/mentorship/asyncapi-mentorship/README.md index e5aabd0e0..f40873eca 100644 --- a/mentorship/asyncapi-mentorship/README.md +++ b/mentorship/asyncapi-mentorship/README.md @@ -5,7 +5,7 @@ The AsyncAPI Mentorship makes it easy to sponsor and help train the next generat ## Program Cycles and Archive data | Year | Term | Status | Announcement | Details | | ---- | ------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -| 2023 | Jan-Nov | In progress | | [Jan-Nov](2023/README.md) | +| 2023 | Jan-Nov | Completed | | [Jan-Nov](2023/README.md) | | 2022 | Jan-Nov | Completed | | [Jan-Nov](2022/README.md) | ## Current cycle @@ -134,4 +134,4 @@ AsyncAPI is not required to pay any stipends to any Participant that violates an ## References -This document was adapted from theย [GSOC Guidlines and Rules](https://summerofcode.withgoogle.com/rules). \ No newline at end of file +This document was adapted from theย [GSOC Guidelines and Rules](https://summerofcode.withgoogle.com/rules). From 1c2f23628e7f36e83981e4ef652cda203a824b29 Mon Sep 17 00:00:00 2001 From: Mateusz Szostok Date: Wed, 21 Aug 2024 16:29:57 +0200 Subject: [PATCH 122/124] ci: update MAINTAINERS.yaml for each CODEOWNERS file change (#1315) Co-authored-by: Lukasz Gornicki --- .github/scripts/maintainers/.gitignore | 1 + .github/scripts/maintainers/README.md | 58 +++++++ .github/scripts/maintainers/cache.js | 64 ++++++++ .github/scripts/maintainers/gh_calls.js | 131 +++++++++++++++ .github/scripts/maintainers/index.js | 190 ++++++++++++++++++++++ .github/scripts/maintainers/summary.js | 99 +++++++++++ .github/workflows/update-maintainers.yaml | 130 +++++++++++++++ 7 files changed, 673 insertions(+) create mode 100644 .github/scripts/maintainers/.gitignore create mode 100644 .github/scripts/maintainers/README.md create mode 100644 .github/scripts/maintainers/cache.js create mode 100644 .github/scripts/maintainers/gh_calls.js create mode 100644 .github/scripts/maintainers/index.js create mode 100644 .github/scripts/maintainers/summary.js create mode 100644 .github/workflows/update-maintainers.yaml diff --git a/.github/scripts/maintainers/.gitignore b/.github/scripts/maintainers/.gitignore new file mode 100644 index 000000000..60923f546 --- /dev/null +++ b/.github/scripts/maintainers/.gitignore @@ -0,0 +1 @@ +github.api.cache.json diff --git a/.github/scripts/maintainers/README.md b/.github/scripts/maintainers/README.md new file mode 100644 index 000000000..6d82e01e4 --- /dev/null +++ b/.github/scripts/maintainers/README.md @@ -0,0 +1,58 @@ +# Maintainers + +The ["Update MAINTAINERS.yaml file"](../../workflows/update-maintainers.yaml) workflow, defined in the `community` repository performs a complete refresh by fetching all public repositories under AsyncAPI and their respective `CODEOWNERS` files. + +## Workflow Execution + +The "Update MAINTAINERS.yaml file" workflow is executed in the following scenarios: + +1. **Weekly Schedule**: The workflow runs automatically every week. It is useful, e.g. when some repositories are archived, renamed, or when a GitHub user account is removed. +2. **On Change**: When a `CODEOWNERS` file is changed in any repository under the AsyncAPI organization, the related repository triggers the workflow by emitting the `trigger-maintainers-update` event. +3. **Manual Trigger**: Users can manually trigger the workflow as needed. + +### Workflow Steps + +1. **Load Cache**: Attempt to read previously cached data from `github.api.cache.json` to optimize API calls. +2. **List All Repositories**: Retrieve a list of all public repositories under the AsyncAPI organization, skipping any repositories specified in the `IGNORED_REPOSITORIES` environment variable. +3. **Fetch `CODEOWNERS` Files**: For each repository: + - Detect the default branch (e.g., `main`, `master`, or a custom branch). + - Check for `CODEOWNERS` files in all valid locations as specified in the [GitHub documentation](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-file-location). +4. **Process `CODEOWNERS` Files**: + 1. Extract GitHub usernames from each `CODEOWNERS` file, excluding emails, team names, and users specified by the `IGNORED_USERS` environment variable. + 2. Retrieve profile information for each unique GitHub username. + 3. Collect a fresh list of repositories currently owned by each GitHub user. +5. **Refresh Maintainers List**: Iterate through the existing maintainers list: + - Delete the entry if it: + - Refers to a deleted GitHub account. + - Was not found in any `CODEOWNERS` file across all repositories in the AsyncAPI organization. + - Otherwise, update **only** the `repos` property. +6. **Add New Maintainers**: Append any new maintainers not present in the previous list. +7. **Changes Summary**: Provide details on why a maintainer was removed or changed directly on the GitHub Action [summary page](https://github.blog/2022-05-09-supercharging-github-actions-with-job-summaries/). +8. **Save Cache**: Save retrieved data in `github.api.cache.json`. + +## Job Details + +- **Concurrency**: Ensures the workflow does not run multiple times concurrently to avoid conflicts. +- **Wait for PRs to be Merged**: The workflow waits for pending pull requests to be merged before execution. If the merged pull request addresses all necessary fixes, it prevents unnecessary executions. + +## Handling Conflicts + +Since the job performs a full refresh each time, resolving conflicts is straightforward: + +1. Close the pull request with conflicts. +2. Navigate to the "Update MAINTAINERS.yaml file" workflow. +3. Trigger it manually by clicking "Run workflow". + +## Caching Mechanism + +Each execution of this action performs a full refresh through the following API calls: + +``` +ListRepos(AsyncAPI) # 1 call using GraphQL - not cached. + for each Repo + GetCodeownersFile(Repo) # N calls using REST API - all are cached. N refers to the number of public repositories under AsyncAPI. + for each codeowner + GetGitHubProfile(owner) # Y calls using REST API - all are cached. Y refers to unique GitHub users found across all CODEOWNERS files. +``` + +To avoid hitting the GitHub API rate limits, [conditional requests](https://docs.github.com/en/rest/using-the-rest-api/best-practices-for-using-the-rest-api?apiVersion=2022-11-28#use-conditional-requests-if-appropriate) are used via `if-modified-since`. The API responses are saved into a `github.api.cache.json` file, which is later uploaded as a GitHub action cache item. diff --git a/.github/scripts/maintainers/cache.js b/.github/scripts/maintainers/cache.js new file mode 100644 index 000000000..0a52b4b7e --- /dev/null +++ b/.github/scripts/maintainers/cache.js @@ -0,0 +1,64 @@ +const fs = require("fs"); + +module.exports = { + fetchWithCache, + saveCache, + loadCache, + printAPICallsStats, +}; + +const CODEOWNERS_CACHE_PATH = "./.github/scripts/maintainers/github.api.cache.json"; + +let cacheEntries = {}; + +let numberOfFullFetches = 0; +let numberOfCacheHits = 0; + +function loadCache(core) { + try { + cacheEntries = JSON.parse(fs.readFileSync(CODEOWNERS_CACHE_PATH, "utf8")); + } catch (error) { + core.warning(`Cache was not restored: ${error}`); + } +} + +function saveCache() { + fs.writeFileSync(CODEOWNERS_CACHE_PATH, JSON.stringify(cacheEntries)); +} + +async function fetchWithCache(cacheKey, fetchFn, core) { + const cachedResp = cacheEntries[cacheKey]; + + try { + const { data, headers } = await fetchFn({ + headers: { + "if-modified-since": cachedResp?.lastModified ?? "", + }, + }); + + cacheEntries[cacheKey] = { + // last modified header is more reliable than etag while executing calls on GitHub Action + lastModified: headers["last-modified"], + data, + }; + + numberOfFullFetches++; + return data; + } catch (error) { + if (error.status === 304) { + numberOfCacheHits++; + core.debug(`Returning cached data for ${cacheKey}`); + return cachedResp.data; + } + throw error; + } +} + +function printAPICallsStats(core) { + core.startGroup("API calls statistic"); + core.info( + `Number of API calls count against rate limit: ${numberOfFullFetches}`, + ); + core.info(`Number of cache hits: ${numberOfCacheHits}`); + core.endGroup(); +} diff --git a/.github/scripts/maintainers/gh_calls.js b/.github/scripts/maintainers/gh_calls.js new file mode 100644 index 000000000..f10b5c2eb --- /dev/null +++ b/.github/scripts/maintainers/gh_calls.js @@ -0,0 +1,131 @@ +const { fetchWithCache } = require("./cache"); + +module.exports = { getGitHubProfile, getAllCodeownersFiles, getRepositories }; + +async function getRepositories(github, owner, ignoredRepos, core) { + core.startGroup( + `Getting list of all public, non-archived repositories owned by ${owner}`, + ); + + const query = ` + query repos($cursor: String, $owner: String!) { + organization(login: $owner) { + repositories(first: 100 after: $cursor visibility: PUBLIC isArchived: false orderBy: {field: CREATED_AT, direction: ASC} ) { + nodes { + name + } + pageInfo { + hasNextPage + endCursor + } + } + } + }`; + + const repos = []; + let cursor = null; + + do { + const result = await github.graphql(query, { owner, cursor }); + const { nodes, pageInfo } = result.organization.repositories; + repos.push(...nodes); + + cursor = pageInfo.hasNextPage ? pageInfo.endCursor : null; + } while (cursor); + + core.debug(`List of repositories for ${owner}:`); + core.debug(JSON.stringify(repos, null, 2)); + core.endGroup(); + + return repos.filter((repo) => !ignoredRepos.includes(repo.name)); +} + +async function getGitHubProfile(github, login, core) { + try { + const profile = await fetchWithCache( + `profile:${login}`, + async ({ headers }) => { + return github.rest.users.getByUsername({ + username: login, + headers, + }); + }, + core, + ); + return removeNulls({ + name: profile.name ?? login, + github: login, + twitter: profile.twitter_username, + availableForHire: profile.hireable, + isTscMember: false, + repos: [], + githubID: profile.id, + }); + } catch (error) { + if (error.status === 404) { + return null; + } + throw error; + } +} + +// Checks for all valid locations according to: +// https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-file-location +// +// Detect the repository default branch automatically. +async function getCodeownersFile(github, owner, repo, core) { + const paths = ["CODEOWNERS", "docs/CODEOWNERS", ".github/CODEOWNERS"]; + + for (const path of paths) { + try { + core.debug( + `[repo: ${owner}/${repo}]: Fetching CODEOWNERS file at ${path}`, + ); + return await fetchWithCache( + `owners:${owner}/${repo}`, + async ({ headers }) => { + return github.rest.repos.getContent({ + owner, + repo, + path, + headers: { + Accept: "application/vnd.github.raw+json", + ...headers, + }, + }); + }, + core, + ); + } catch (error) { + core.warning( + `[repo: ${owner}/${repo}]: Failed to fetch CODEOWNERS file at ${path}: ${error.message}`, + ); + } + } + + core.error( + `[repo: ${owner}/${repo}]: CODEOWNERS file not found in any of the expected locations.`, + ); + return null; +} + +async function getAllCodeownersFiles(github, owner, repos, core) { + core.startGroup(`Fetching CODEOWNERS files for ${repos.length} repositories`); + const files = []; + for (const repo of repos) { + const data = await getCodeownersFile(github, owner, repo.name, core); + if (!data) { + continue; + } + files.push({ + repo: repo.name, + content: data, + }); + } + core.endGroup(); + return files; +} + +function removeNulls(obj) { + return Object.fromEntries(Object.entries(obj).filter(([_, v]) => v != null)); +} diff --git a/.github/scripts/maintainers/index.js b/.github/scripts/maintainers/index.js new file mode 100644 index 000000000..be32d8da5 --- /dev/null +++ b/.github/scripts/maintainers/index.js @@ -0,0 +1,190 @@ +const yaml = require("js-yaml"); +const fs = require("fs"); +const { saveCache, loadCache, printAPICallsStats } = require("./cache"); +const { summarizeChanges } = require("./summary"); +const { + getAllCodeownersFiles, + getGitHubProfile, + getRepositories, +} = require("./gh_calls"); + +module.exports = async ({ github, context, core }) => { + try { + await run(github, context, core); + } catch (error) { + console.log(error); + core.setFailed(`An error occurred: ${error}`); + } +}; + +const config = { + ghToken: process.env.GH_TOKEN, + ignoredRepos: getCommaSeparatedInputList(process.env.IGNORED_REPOSITORIES), + ignoredUsers: getCommaSeparatedInputList(process.env.IGNORED_USERS), + maintainersFilePath: process.env.MAINTAINERS_FILE_PATH, +}; + +function getCommaSeparatedInputList(list) { + return ( + list + ?.split(",") + .map((item) => item.trim()) + .filter((item) => item !== "") ?? [] + ); +} + +function splitByWhitespace(line) { + return line.trim().split(/\s+/); +} + +function extractGitHubUsernames(codeownersContent, core) { + if (!codeownersContent) return []; + + const uniqueOwners = new Set(); + + for (const line of codeownersContent.split("\n")) { + // split by '#' to process comments separately + const [ownersLine, comment = ""] = line.split("#"); + + // 1. Check AsyncAPI custom owners + const triagers = comment.split(/docTriagers:|codeTriagers:/)[1] + if (triagers) { + const owners = splitByWhitespace(triagers) + owners.forEach(owner => uniqueOwners.add(owner)) + } + + // 2. Check GitHub native codeowners + const owners = splitByWhitespace(ownersLine); + + // the 1st element is the file location, we don't need it, so we start with 2nd item + for (const owner of owners.slice(1)) { + if (!owner.startsWith("@") || owner.includes("/")) { + core.warning(`Skipping '${owner}' as emails and teams are not supported yet`); + continue; + } + uniqueOwners.add(owner.slice(1)); // remove the '@' + } + } + + return uniqueOwners; +} + +async function collectCurrentMaintainers(codeownersFiles, github, core) { + core.startGroup(`Fetching GitHub profile information for each codeowner`); + + const currentMaintainers = {}; + for (const codeowners of codeownersFiles) { + const owners = extractGitHubUsernames(codeowners.content, core); + + for (const owner of owners) { + if (config.ignoredUsers.includes(owner)) { + core.debug( + `[repo: ${codeowners.repo}]: The user '${owner}' is on the ignore list. Skipping...`, + ); + continue; + } + const key = owner.toLowerCase(); + if (!currentMaintainers[key]) { + // Fetching GitHub profile is useful to ensure that all maintainers are valid (e.g., their GitHub accounts haven't been deleted). + const profile = await getGitHubProfile(github, owner, core); + if (!profile) { + core.warning( + `[repo: ${codeowners.repo}]: GitHub profile not found for ${owner}.`, + ); + continue; + } + + currentMaintainers[key] = { ...profile, repos: [] }; + } + + currentMaintainers[key].repos.push(codeowners.repo); + } + } + + core.endGroup(); + return currentMaintainers; +} + +function refreshPreviousMaintainers( + previousMaintainers, + currentMaintainers, + core, +) { + core.startGroup(`Refreshing previous maintainers list`); + + const updatedMaintainers = []; + + // 1. Iterate over the list of previous maintainers to: + // - Remove any maintainers who are not listed in any current CODEOWNERS files. + // - Update the repos list, ensuring that other properties (e.g., 'linkedin', 'slack', etc.) remain unchanged. + for (const previousEntry of previousMaintainers) { + const key = previousEntry.github.toLowerCase(); + const currentMaintainer = currentMaintainers[key]; + if (!currentMaintainer) { + core.info( + `The previous ${previousEntry.github} maintainer was not found in any CODEOWNERS file. Removing...`, + ); + continue; + } + delete currentMaintainers[key]; + + updatedMaintainers.push({ + ...previousEntry, + repos: currentMaintainer.repos, + githubID: currentMaintainer.githubID, + }); + } + + // 2. Append new codeowners who are not present in the previous Maintainers file. + const newMaintainers = Object.values(currentMaintainers); + updatedMaintainers.push(...newMaintainers); + + core.endGroup(); + return updatedMaintainers; +} + +async function run(github, context, core) { + if (!config.maintainersFilePath) { + core.setFailed("The MAINTAINERS_FILE_PATH is not defined"); + return; + } + loadCache(core); + + const repos = await getRepositories( + github, + context.repo.owner, + config.ignoredRepos, + core, + ); + const codeownersFiles = await getAllCodeownersFiles( + github, + context.repo.owner, + repos, + core, + ); + + const previousMaintainers = yaml.load( + fs.readFileSync(config.maintainersFilePath, "utf8"), + ); + + // 1. Collect new maintainers from all current CODEOWNERS files found across all repositories. + const currentMaintainers = await collectCurrentMaintainers( + codeownersFiles, + github, + core, + ); + + // 2. Refresh the repository list for existing maintainers and add any new maintainers to the list. + const refreshedMaintainers = refreshPreviousMaintainers( + previousMaintainers, + currentMaintainers, + core, + ); + + fs.writeFileSync(config.maintainersFilePath, yaml.dump(refreshedMaintainers)); + + printAPICallsStats(core); + + await summarizeChanges(previousMaintainers, refreshedMaintainers, core); + saveCache(); +} diff --git a/.github/scripts/maintainers/summary.js b/.github/scripts/maintainers/summary.js new file mode 100644 index 000000000..e07d03fd4 --- /dev/null +++ b/.github/scripts/maintainers/summary.js @@ -0,0 +1,99 @@ +module.exports = { summarizeChanges }; + +async function summarizeChanges(oldMaintainers, newMaintainers, core) { + const outOfSync = []; + const noLongerActive = []; + + const newMaintainersByGitHubName = new Map(); + for (const newMaintainer of newMaintainers) { + newMaintainersByGitHubName.set(newMaintainer.github, newMaintainer); + } + + for (const oldEntry of oldMaintainers) { + const newEntry = newMaintainersByGitHubName.get(oldEntry.github); + + if (!newEntry) { + noLongerActive.push([oldEntry.github, repositoriesLinks(oldEntry.repos)]); + continue; + } + + const { newOwnedRepos, noLongerOwnedRepos } = compareRepos( + oldEntry.repos, + newEntry.repos, + ); + + if (newOwnedRepos.length > 0 || noLongerOwnedRepos.length > 0) { + outOfSync.push([ + profileLink(oldEntry.github), + repositoriesLinks(newOwnedRepos), + repositoriesLinks(noLongerOwnedRepos), + ]); + } + } + + if (outOfSync.length > 0) { + core.summary.addHeading("โš ๏ธ Out of Sync Maintainers", "2"); + core.summary.addTable([ + [ + { data: "Name", header: true }, + { data: "Newly added to CODEOWNERS", header: true }, + { data: "No longer in CODEOWNERS", header: true }, + ], + ...outOfSync, + ]); + core.summary.addBreak(); + } + + if (noLongerActive.length > 0) { + core.summary.addHeading( + "๐Ÿ‘ป Inactive Maintainers (not listed in any repositories)", + "2", + ); + + core.summary.addTable([ + [ + { data: "Name", header: true }, + { data: "Previously claimed ownership in repos", header: true }, + ], + ...noLongerActive, + ]); + + core.summary.addBreak(); + } + + await core.summary.write({ overwrite: true }); +} + +function compareRepos(oldRepos, newRepos) { + const newOwnedRepositories = []; + const noLongerOwnedRepositories = []; + + for (const repo of newRepos) { + if (!oldRepos.includes(repo)) { + newOwnedRepositories.push(repo); + } + } + + for (const repo of oldRepos) { + if (!newRepos.includes(repo)) { + noLongerOwnedRepositories.push(repo); + } + } + + return { + newOwnedRepos: newOwnedRepositories, + noLongerOwnedRepos: noLongerOwnedRepositories, + }; +} + +function repositoriesLinks(repos) { + return repos + .map((repo) => { + return `${repo}`; + }) + .join(", "); +} + +function profileLink(login) { + return `${login}`; +} diff --git a/.github/workflows/update-maintainers.yaml b/.github/workflows/update-maintainers.yaml new file mode 100644 index 000000000..858eb02aa --- /dev/null +++ b/.github/workflows/update-maintainers.yaml @@ -0,0 +1,130 @@ +# This action updates the `MAINTAINERS.yaml` file based on `CODEOWNERS` files in all organization repositories. +# It is triggered when a `CODEOWNERS` file is changed; the related repository triggers this workflow by emitting the `trigger-maintainers-update` event. +# It can also be triggered manually. + +name: Update MAINTAINERS.yaml file + +on: + push: + branches: [ master ] + paths: + - 'CODEOWNERS' + - '.github/scripts/maintainers/**' + - '.github/workflows/update-maintainers.yaml' + + schedule: + - cron: "0 10 * * SUN" # Runs at 10:00 AM UTC every Sunday. + + workflow_dispatch: + + repository_dispatch: + types: [ trigger-maintainers-update ] + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false + +env: + IGNORED_REPOSITORIES: "shape-up-process" + IGNORED_USERS: "asyncapi-bot-eve" + + BRANCH_NAME: "bot/update-maintainers-${{ github.run_id }}" + PR_TITLE: "docs(maintainers): update MAINTAINERS.yaml file with the latest CODEOWNERS changes" + +jobs: + update-maintainers: + name: Update MAINTAINERS.yaml based on CODEOWNERS files in all organization repositories + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + # If an action pushes code using the repositoryโ€™s GITHUB_TOKEN, a pull request workflow will not run. + token: ${{ secrets.GH_TOKEN }} + + - name: Wait for active pull requests to be merged + env: + GH_TOKEN: ${{ github.token }} + TIMEOUT: 300 # Timeout in seconds + INTERVAL: 5 # Check interval in seconds + run: | + check_active_prs() { + ACTIVE_PULL_REQUESTS=$(gh -R $GITHUB_REPOSITORY pr list --search "is:pr ${PR_TITLE} in:title" --json id) + if [ "$ACTIVE_PULL_REQUESTS" == "[]" ]; then + return 1 # No active PRs + else + return 0 # Active PRs found + fi + } + + # Loop with timeout + elapsed_time=0 + while [ $elapsed_time -lt $TIMEOUT ]; do + if check_active_prs; then + echo "There is an active pull request. Waiting for it to be merged..." + else + echo "There is no active pull request. Proceeding with updating MAINTAINERS file." + git pull + exit 0 + fi + + sleep $INTERVAL + elapsed_time=$((elapsed_time + INTERVAL)) + done + + echo "Timeout reached. Proceeding with updating MAINTAINERS.yaml file with active pull request(s) present. It may result in merge conflict." + exit 0 + + - name: Restore cached GitHub API calls + uses: actions/cache/restore@v4 + with: + path: ./.github/scripts/maintainers/github.api.cache.json + key: github-api-cache + restore-keys: | + github-api-cache- + + - name: Installing Module + shell: bash + run: npm install js-yaml@4 --no-save + + - name: Run script updating MAINTAINERS.yaml + uses: actions/github-script@v7 + env: + GH_TOKEN: ${{ github.token }} + MAINTAINERS_FILE_PATH: "${{ github.workspace }}/MAINTAINERS.yaml" + with: + script: | + const script = require('./.github/scripts/maintainers/index.js') + await script({github, context, core}) + + - name: Save cached GitHub API calls + uses: actions/cache/save@v4 + with: + path: ./.github/scripts/maintainers/github.api.cache.json + # re-evaluate the key, so we update cache when file changes + key: github-api-cache-${{ hashfiles('./.github/scripts/maintainers/github.api.cache.json') }} + + - name: Create PR with latest changes + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # https://github.com/peter-evans/create-pull-request/releases/tag/v6.1.0 + with: + token: ${{ secrets.GH_TOKEN }} + commit-message: ${{ env.PR_TITLE }} + committer: asyncapi-bot + author: asyncapi-bot + title: ${{ env.PR_TITLE }} + branch: ${{ env.BRANCH_NAME }} + body: | + **Description** + - Update MAINTAINERS.yaml based on CODEOWNERS files across all repositories in the organization. + + For details on why a maintainer was removed or changed, refer to the [Job summary page](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}). + + - name: Report workflow run status to Slack + uses: rtCamp/action-slack-notify@4e5fb42d249be6a45a298f3c9543b111b02f7907 # https://github.com/rtCamp/action-slack-notify/releases/tag/v2.3.0 + if: failure() + env: + SLACK_WEBHOOK: ${{secrets.SLACK_CI_FAIL_NOTIFY}} + SLACK_TITLE: ๐Ÿšจ Update MAINTAINERS.yaml file Workflow failed ๐Ÿšจ + SLACK_MESSAGE: Failed to auto update MAINTAINERS.yaml file. + MSG_MINIMAL: true From 81eb1a629e050f55845b86489286add548b81897 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Wed, 21 Aug 2024 16:31:57 +0200 Subject: [PATCH 123/124] docs(maintainers): update MAINTAINERS.yaml file with the latest CODEOWNERS changes (#1351) --- MAINTAINERS.yaml | 355 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 292 insertions(+), 63 deletions(-) diff --git a/MAINTAINERS.yaml b/MAINTAINERS.yaml index 29ad9ddb3..e9c443ce7 100644 --- a/MAINTAINERS.yaml +++ b/MAINTAINERS.yaml @@ -7,6 +7,9 @@ isTscMember: true repos: - website + - conference-website + - brand + githubID: 105395613 - name: Aayush Sahu github: aayushmau5 linkedin: aayushmau5 @@ -16,6 +19,7 @@ isTscMember: true repos: - diff + githubID: 54525741 - name: Abir Pal linkedin: imabp slack: U01S8EQ9LQ2 @@ -25,6 +29,7 @@ isTscMember: true repos: - problem + githubID: 53480076 - name: Akshat Nema github: akshatnema linkedin: akshat-nema @@ -34,6 +39,7 @@ isTscMember: true repos: - website + githubID: 76521428 - name: Ansh Goyal github: anshgoyalevil linkedin: thisisanshg @@ -43,6 +49,7 @@ isTscMember: true repos: - website + githubID: 94157520 - name: Anand Sunderraman github: anandsunderraman linkedin: anand-sunderraman-a6b7a131 @@ -51,6 +58,7 @@ isTscMember: true repos: - go-watermill-template + githubID: 4500774 - name: Ashish Padhy github: Shurtu-gal linkedin: ashish-padhy3023 @@ -60,6 +68,8 @@ isTscMember: true repos: - github-action-for-cli + - cli + githubID: 100484401 - name: Cameron Rushton github: CameronRushton slack: U01DVKKAV5K @@ -67,9 +77,11 @@ company: Solace isTscMember: true repos: + - spec-json-schemas + - bindings - java-spring-cloud-stream-template - python-paho-template - - bindings + githubID: 32455969 - name: Dale Lane github: dalelane linkedin: dalelane @@ -79,9 +91,12 @@ isTscMember: true company: IBM repos: - - avro-schema-parser + - spec + - spec-json-schemas - bindings + - avro-schema-parser - java-template + githubID: 1444788 - name: Emiliano Zublena github: emilianozublena linkedin: emilianozublena @@ -89,7 +104,8 @@ availableForHire: false isTscMember: false repos: - - asyncapi-php-template + - php-template + githubID: 466639 - name: Fran Mรฉndez github: fmvilas slack: U34F2JRRS @@ -97,16 +113,21 @@ linkedin: fmvilas isTscMember: true repos: - - raml-dt-schema-parser - - avro-schema-parser - - openapi-schema-parser - - asyncapi-react - - glee - - nodejs-ws-template - - parser-js - spec - spec-json-schemas + - asyncapi-react + - extensions-catalog + - converter-js - bindings + - enterprise-patterns + - raml-dt-schema-parser + - openapi-schema-parser + - html-template + - markdown-template + - nodejs-ws-template + - generator-hooks + - brand + githubID: 242119 - name: Gerald Loeffler github: GeraldLoeffler linkedin: geraldloeffler @@ -114,7 +135,9 @@ availableForHire: false isTscMember: false repos: + - spec-json-schemas - bindings + githubID: 1985716 - name: Jonas Lagoni github: jonaslagoni linkedin: jonaslagoni @@ -123,14 +146,18 @@ company: Postman isTscMember: true repos: - - dotnet-nats-template + - spec-json-schemas + - generator + - parser-js + - converter-js - ts-nats-template + - dotnet-nats-template - generator-react-sdk - - generator - modelina - - parser-js - - parser-api - simulator + - parser-api + - EDAVisualiser + githubID: 13396189 - name: Khuda Dad Nomani github: KhudaDad414 twitter: KhudaDadNomani @@ -140,10 +167,12 @@ company: Postman isTscMember: true repos: - - bindings - - glee + - spec-json-schemas + - studio - .github - optimizer + - glee + githubID: 32505158 - name: Laurent Broudoux github: lbroudoux twitter: lbroudoux @@ -153,7 +182,9 @@ company: Postman isTscMember: true repos: + - spec-json-schemas - bindings + githubID: 1538635 - name: Ludovic Dussart github: M3lkior linkedin: ludovic-dussart-846a8063 @@ -164,6 +195,7 @@ isTscMember: true repos: - avro-schema-parser + githubID: 5501911 - name: Lukasz Gornicki github: derberg linkedin: lukasz-gornicki-a621914 @@ -173,17 +205,30 @@ company: Postman isTscMember: true repos: - - diff - - generator-filters - - generator-hooks - - github-action-for-generator + - spec + - website + - spec-json-schemas - generator + - asyncapi-react + - extensions-catalog + - bindings + - enterprise-patterns + - html-template + - markdown-template - nodejs-template - nodejs-ws-template - - spec - - spec-json-schemas + - java-spring-template + - github-action-for-cli + - .github + - jasyncapi + - generator-hooks + - vs-asyncapi-preview - template-for-generator-templates - - website + - community + - diff + - chatbot + - infra + githubID: 6995927 - name: Maciej Urbaล„czyk github: magicmatatjahu availableForHire: false @@ -192,18 +237,29 @@ company: Travelping GmbH isTscMember: true repos: + - website + - generator - asyncapi-react + - parser-go + - parser-js + - converter-js - converter-go - - generator-react-sdk - - generator + - studio - html-template - markdown-template + - github-action-for-cli + - ts-nats-template + - dotnet-nats-template + - template-for-generator-templates + - generator-react-sdk - modelina - - parser-js - - parser-go - - server-api - template-for-go-projects - - website + - diff + - chatbot + - server-api + - EDAVisualiser + - problem + githubID: 20404945 - name: Azeez Elegbede linkedin: acebuild github: AceTheCreator @@ -213,26 +269,20 @@ availableForHire: false isTscMember: true repos: + - conference-website - chatbot + githubID: 40604284 - name: Michael Davis github: damaru-inc availableForHire: false slack: UH3B166TD isTscMember: false repos: + - spec-json-schemas + - bindings - java-spring-cloud-stream-template - python-paho-template - - bindings -- name: Missy Turco - github: mcturco - twitter: missyturco - slack: U02JVEQ6S9W - linkedin: missy-turco-a476a6126 - availableForHire: false - company: Postman - isTscMember: false - repos: - - brand + githubID: 3926925 - name: Nektarios Fifes github: NektariosFifes linkedin: nektarios-fifes-372740220 @@ -241,6 +291,7 @@ isTscMember: true repos: - simulator + githubID: 61620751 - name: Pavel Bodiachevskii github: Pakisan slack: U0132LQU8C9 @@ -248,7 +299,11 @@ availableForHire: false isTscMember: true repos: + - spec-json-schemas + - tck - jasyncapi + - jasyncapi-idea-plugin + githubID: 3388414 - name: Philip Schlesinger github: theschles slack: U054UUYBNLF @@ -257,6 +312,7 @@ isTscMember: true repos: - jasyncapi-idea-plugin + githubID: 901430 - name: Prince Rajpoot github: princerajpoot20 linkedin: princerajpoot @@ -266,6 +322,7 @@ isTscMember: true repos: - studio + githubID: 44585452 - name: Richard Coppen github: rcoppen linkedin: richard-coppen @@ -274,7 +331,9 @@ company: IBM isTscMember: true repos: + - spec-json-schemas - bindings + githubID: 30902631 - name: Samir AMZANI github: Amzani slack: U01N6AW5V5G @@ -285,6 +344,8 @@ isTscMember: true repos: - studio + - cli + githubID: 554438 - name: Sergio Moya github: smoya linkedin: smoya @@ -296,17 +357,19 @@ repos: - spec - spec-json-schemas - - bindings - - parser-api - - parser-js - - avro-schema-parser - - openapi-schema-parser - - raml-dt-schema-parser - - server-api - parser-go + - parser-js - converter-go + - bindings + - raml-dt-schema-parser + - openapi-schema-parser + - avro-schema-parser - go-watermill-template - template-for-go-projects + - parser-api + - server-api + - infra + githubID: 1083296 - name: Souvik De github: Souvikns slack: U01SGCZMJKW @@ -317,8 +380,9 @@ isTscMember: true repos: - cli - - bundler - glee + - bundler + githubID: 41781438 - name: Quetzalli Writes github: quetzalliwrites twitter: QuetzalliWrites @@ -329,8 +393,7 @@ isTscMember: true repos: - website - - training - - community + githubID: 19964402 - name: David Pereira github: BOLT04 twitter: BOLT2938 @@ -341,6 +404,7 @@ isTscMember: true repos: - server-api + githubID: 18630253 - name: Daniel Raper github: dan-r slack: U02FP8WBFQE @@ -349,6 +413,7 @@ isTscMember: true repos: - java-template + githubID: 1384852 - name: Kieran Murphy github: KieranM1999 linkedin: kieran-murphy-175b0412b @@ -358,6 +423,7 @@ isTscMember: false repos: - java-template + githubID: 45017928 - name: Tom Jefferson github: JEFFLUFC linkedin: t-jefferson @@ -367,6 +433,7 @@ isTscMember: false repos: - java-template + githubID: 54025356 - name: Lewis Relph github: lewis-relph availableForHire: false @@ -375,6 +442,7 @@ isTscMember: false repos: - java-template + githubID: 91530893 - name: Semen Tenishchev github: Tenischev linkedin: semen-tenishchev @@ -383,6 +451,7 @@ isTscMember: true repos: - java-spring-template + githubID: 4137916 - name: Samridhi Agrawal github: Samridhi-98 slack: U02T2MY9W5T @@ -392,16 +461,7 @@ isTscMember: true repos: - modelina -- name: Debajyoti Halder - github: ron-debajyoti - twitter: rondebajyoti - slack: U02UK9RUPGQ - linkedin: rondebajyoti - availableForHire: false - company: Narvar - isTscMember: false - repos: - - modelina + githubID: 54466041 - name: Ivan Garcia Sainz-Aja github: ivangsa linkedin: ivangarciasainzaja @@ -411,6 +471,7 @@ isTscMember: true repos: - vs-asyncapi-preview + githubID: 1246876 - name: Florence Njeri github: Florence-Njeri linkedin: florencenjeri @@ -420,6 +481,7 @@ isTscMember: true repos: - generator + githubID: 40742916 - name: Jeremy Whitlock github: whitlockjc linkedin: whitlockjc @@ -429,7 +491,9 @@ company: Google isTscMember: true repos: + - spec-json-schemas - bindings + githubID: 98899 - name: Vladimรญr Gorej github: char0n linkedin: vladimirgorej @@ -439,18 +503,22 @@ company: SmartBear isTscMember: false repos: - - bindings - spec - spec-json-schemas + - bindings + githubID: 193286 - name: Alexander Wichmann - github: VisualBean + github: VisualBean linkedin: alexcarlsen slack: U04C58GB8TF availableForHire: false company: The LEGO Group isTscMember: true repos: + - spec-json-schemas - bindings + - saunter + githubID: 5294032 - name: Kenneth Aasan github: kennethaasan slack: U037S2HK4TS @@ -460,6 +528,7 @@ isTscMember: true repos: - modelina + githubID: 1437394 - name: Heiko Henning github: GreenRover slack: U03AC4G51H8 @@ -467,7 +536,11 @@ company: mtrail GmbH isTscMember: true repos: + - spec + - spec-json-schemas + - bindings - protobuf-schema-parser + githubID: 512850 - name: connil github: connil slack: U03A51H8 @@ -476,6 +549,7 @@ isTscMember: false repos: - dotnet-rabbitmq-template + githubID: 6583798 - name: mr-nuno github: mr-nuno slack: U03A5145 @@ -484,6 +558,7 @@ isTscMember: false repos: - dotnet-rabbitmq-template + githubID: 1067841 - name: Thulisile Sibanda github: thulieblack linkedin: v-thulisile-sibanda @@ -494,7 +569,9 @@ isTscMember: true repos: - website + - conference-website - community + githubID: 66913810 - name: Ashmit JaiSarita Gupta github: devilkiller-ag linkedin: jaisarita @@ -504,6 +581,7 @@ isTscMember: true repos: - modelina + githubID: 43639341 - name: Sambhav Gupta github: sambhavgupta0705 linkedin: sambhavgupta0705 @@ -513,11 +591,162 @@ isTscMember: true repos: - website + githubID: 81870866 - name: Viacheslav Turovskyi github: aeworxet slack: U01G3U01SVC availableForHire: false isTscMember: false repos: - - bundler - optimizer + - bundler + githubID: 16149591 +- name: Rohit + github: TRohit20 + twitter: TRRohit20 + isTscMember: false + repos: + - website + githubID: 108233235 +- name: 'Bhaswati Roy ' + github: BhaswatiRoy + twitter: swiftiebhaswati + isTscMember: false + repos: + - website + githubID: 78029145 +- name: 'Vaishnavi ' + github: VaishnaviNandakumar + isTscMember: false + repos: + - website + githubID: 41518119 +- name: Joy Almeida + github: J0SAL + twitter: _j0sal + isTscMember: false + repos: + - website + githubID: 52382282 +- name: Mihael Bosnjak + github: mboss37 + isTscMember: false + repos: + - spec-json-schemas + - bindings + githubID: 29606687 +- name: Steve Head + github: SrfHead + isTscMember: false + repos: + - spec-json-schemas + - bindings + githubID: 13767299 +- name: Dec Kolakowski + github: dpwdec + isTscMember: false + repos: + - spec-json-schemas + - bindings + githubID: 51292634 +- name: Ian Cooper + github: iancooper + twitter: ICooper + isTscMember: false + repos: + - spec-json-schemas + - bindings + githubID: 45537 +- name: Michael Wildman + github: m-wild + isTscMember: false + repos: + - saunter + githubID: 3260812 +- name: yurvon-screamo + github: yurvon-screamo + isTscMember: false + repos: + - saunter + githubID: 109030262 +- name: Jonathan Stoikovitch + github: jstoiko + twitter: jstoiko + isTscMember: false + repos: + - raml-dt-schema-parser + githubID: 9660342 +- name: Rishi + github: kaushik-rishi + twitter: KaushikRishi07 + isTscMember: false + repos: + - nodejs-template + githubID: 52498617 +- name: Akshit Gupta + github: akkshitgupta + twitter: akkshitgupta + availableForHire: true + isTscMember: false + repos: + - modelina + githubID: 96991785 +- name: Leigh Johnson + github: leigh-johnson + twitter: grepLeigh + isTscMember: false + repos: + - modelina + githubID: 2601819 +- name: Zbigniew Malcherczyk + github: ferror + isTscMember: false + repos: + - modelina + githubID: 17534504 +- name: artur-ciocanu + github: artur-ciocanu + isTscMember: false + repos: + - modelina + githubID: 743192 +- name: Vinit Shahdeo + github: vinitshahdeo + twitter: Vinit_Shahdeo + availableForHire: true + isTscMember: false + repos: + - diff + githubID: 20594326 +- name: Anubhav Vats + github: onbit-uchenik + twitter: postmanlabs + availableForHire: true + isTscMember: false + repos: + - diff + githubID: 46771418 +- name: Akshaya Gurlhosur + github: AGurlhosur + isTscMember: false + repos: + - java-template + githubID: 91530186 +- name: Philip Schlesinger @ Cryoport + github: philCryoport + isTscMember: false + repos: + - jasyncapi-idea-plugin + githubID: 28901899 +- name: nathanaelweber + github: nathanaelweber + isTscMember: false + repos: + - protobuf-schema-parser + githubID: 40006685 +- name: Barbanio Gonzรกlez + github: Barbanio + isTscMember: false + repos: + - learning-paths + githubID: 77982319 From 2c75f98adf09892c176c8bd00298a29f07ab2897 Mon Sep 17 00:00:00 2001 From: asyncapi-bot Date: Sat, 24 Aug 2024 12:05:23 +0200 Subject: [PATCH 124/124] chore(tweet): recurring tweet about slack link (#1352) --- tweets/recurring-slack-link/2024-08-24.tweet | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tweets/recurring-slack-link/2024-08-24.tweet diff --git a/tweets/recurring-slack-link/2024-08-24.tweet b/tweets/recurring-slack-link/2024-08-24.tweet new file mode 100644 index 000000000..0bd3e8865 --- /dev/null +++ b/tweets/recurring-slack-link/2024-08-24.tweet @@ -0,0 +1,7 @@ +โœจ Did you know #AsyncAPI is on Slack? โœจ + +Join our Slack workspace to chat with anyone from our Open-Source community! + +๐Ÿ”— asyncapi.com/slack-invite + +Ask for help and help others too. ๐Ÿ’ช๐Ÿฟ๐Ÿ’ช๐Ÿฝ๐Ÿฆพ \ No newline at end of file