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 01/71] 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 02/71] 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 03/71] 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 04/71] 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 05/71] 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 06/71] 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 07/71] 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 08/71] 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 09/71] 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 10/71] 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 11/71] 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 12/71] 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 13/71] 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 14/71] 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 15/71] 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 16/71] 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 17/71] 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 18/71] 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 19/71] 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 20/71] 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 21/71] 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 22/71] 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 23/71] 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 24/71] 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 25/71] 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 26/71] 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 27/71] 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 28/71] 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 29/71] 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 30/71] 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 31/71] 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 32/71] 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 33/71] 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 34/71] 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 35/71] 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 36/71] 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 37/71] 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 38/71] 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 39/71] 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 40/71] 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 41/71] 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 42/71] 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 43/71] 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 44/71] 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 45/71] 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 46/71] 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 47/71] 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 48/71] 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 49/71] 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 50/71] 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 51/71] 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 52/71] 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 53/71] 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 54/71] 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 55/71] 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 56/71] 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 57/71] 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 58/71] 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 59/71] 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 60/71] 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 61/71] 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 62/71] 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 63/71] 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 64/71] 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 65/71] 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 66/71] 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 67/71] 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 68/71] 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 69/71] 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 70/71] 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 71/71] 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