paint-brush
GitHub 和构建开放社区的艺术by@patrickheneise
184

GitHub 和构建开放社区的艺术

Patrick Heneise11m2023/12/20
Read on Terminal Reader

在这篇文章中,我分享了我关于如何构建开放社区的经验和想法。我一直在研究这个概念和工具,将社区自动化的东西组合在一起,我希望这可以帮助您和您的社区让事情变得更容易。
featured image - GitHub 和构建开放社区的艺术
Patrick Heneise HackerNoon profile picture
0-item
1-item
2-item

社区很难。它们很难构建、很难维护、也很难成长。但是,建立社区是我职业生涯中最有价值的事情之一,因为我遇到了很多了不起的人,并被迫在我的舒适区之外学习和做事。


我记得十多年前,我参加了我的第一次小型科技会议 - 在柏林举行的 CouchConf。幸运的是,大约在同一时间举行了 BerlinJS 聚会,我对社区和人们感到震惊。他们为网站设置了 GitHub 存储库,并且演讲作为 GitHub 问题提交。我对这个过程的简单性和透明性感到惊讶,所以几周后我分叉了这个存储库并创建了BarcelonaJS。这是我自己的组织者之旅的开始。


一个常规且非常令人沮丧的经历的小轶事:您花了几个小时准备、沟通、寻找和邀请演讲者、寻找并确定日期和场地、与赞助商讨论食物和饮料,所有这些都是为了举办一场精彩的活动。当时间到来时,你会独自坐在那里,或者和一小部分你认为会来的人一起坐在那里,因为 Meetup 说“有 150 人回复“是”。在极少数的情况下,这只是天气不好,但更多时候,当我事后与人交谈时,我听到这样的话:


这太神奇了,我希望我当时也在场,但我不知道!


这句话是我开始探索 GitHub 作为社区工具的动机,因为 GitHub 是最令人惊叹的自动化平台之一,而这正是作为组织者需要做的:将一切垃圾自动化,以便在 Eventbrite 上发布活动, Meetup、Twitter、Facebook、Telegram Groups、WhatsApp、电子邮件、日历等,并在活动前 2 周、1 周前、3 天前、1 天前、1 小时前进行,这样没人能在活动后说:“我不知道这件事”。因为最终,你这样做不是为了自己,而是为了社区。


在旅行期间,我在 Meetup 上遇到了拥有数千名成员的 Node.js 和 JavaScript 社区,但没有任何即将举行或最近的活动。发生这种情况的原因有很多,但通常是因为组织者没有时间或已经转移到其他事情上,而且很难找到继任者来维持事情的运转。 Meetup 和其他平台非常适合发现社区和活动,但如果组织者不再活跃并接管/重振社区,会员就很难接触到社区。


作为一名开发人员,我在 GitHub 上花费了大量时间,熟悉了工具和工作流程,因此我开始探索如何使用 GitHub 作为社区平台。

使用 GitHub 进行社区建设的好处

开源和开放社区

第一个也是最明显的好处是 GitHub 上的公共存储库是开源的。这意味着所有内容、问题和讨论都是公开的,任何人都可以分叉、复制和重用。这对社区来说非常有用,因为这意味着如果社区被放弃,任何人都可以分叉它并继续工作。这也意味着,如果您想创建一个新社区,您可以分叉现有社区并根据您的需求进行调整。


GitHub 内置了用户/团队/组织管理,因此您不需要自己构建任何东西。可以轻松邀请某人加入组织或添加具有组织不同权限的团队。


我们大多数人都知道如何使用 GitHub 并每天访问该网站,因此无需为数据库管理、内容管理或其他工具添加其他网站的书签。通过 GitHub Actions,我们可以按计划或按需运行自动化任务,通过 GitHub Pages,我们可以免费托管我们的社区网站。

建立公共和透明度

对我来说,在 GitHub 上建立社区最重要的好处之一是完全透明和开放的沟通。一切[1]都是公开的,因此无需担心谁可以访问什么。这意味着任何人都可以为社区做出贡献,任何人都可以看到正在发生的事情。这对于建立信任和建立一个包容和欢迎每个人的社区非常有用。


我与巴塞罗那JS、CDC 等社区的目标是为开发人员创建自由和开放的空间来分享和联系。而“免费”就是透明度的体现。过去,我总是不插手财务捐助。如果有公司想要赞助,他们可以直接点食物或饮料到会场,但我不会提供便利。感谢Open Collective ,这变得更加容易,我们现在能够接受财务捐助并使它们对社区透明。例如,这些用于支付域名费用、获取食物和饮料、开展广告活动等。


[1] 当然,您也可以创建一个私人仓库用于内部组织者讨论等。

缺点和注意事项

GitHub 不是像 Meetup 这样的社区/活动平台,因此有一些注意事项。我已经习惯将问题视为“事件”或“讨论提案”并使用 GitHub 问题表单来构建提交。但这并不理想,新人需要时间来理解“创建问题以提交演讲”。没有“舒适的功能”来选择日期、地图上的位置等,并向数百人发送简单的电子邮件通知。

开放(开发者)社区

整个概念主要关注开发人员和工程师,因为它是围绕 GitHub 和 IssueOps 发展的。为了让大家了解我之前的经验,以下是我帮助建立的一些社区和会议:


  • 巴塞罗那JS , 2012 - 2018
  • 巴塞罗那黑客与创始人,2012 年 - 2015 年
  • Node.js 巴塞罗那聚会小组,2012 年 - 2018 年
  • Couchbase 巴塞罗那聚会,2012 年 - 2015 年
  • NodeConf 巴塞罗那,2015、2016、2017
  • 地中海JS,2015
  • 塞浦路斯JS 2018 - 2021
  • 塞浦路斯开发者社区2020 年至今


在构建这些内容的同时,我不断开发一套工具、工作流程和自动化,以使组织者的生活变得更轻松,因为这是一项艰巨且往往吃力不讨好的工作。这是我关于如何在 GitHub 上构建公共社区的开放社区概念

标签和结构

第一步是建立一个 GitHub 组织并创建两个存储库:

  1. 事件
  2. 会谈


名称很明显:事件存储库中是用于创建新事件的模板,而演讲存储库中是用于提交演讲提案的模板。会谈可以与活动联系起来以建立议程,如果您设法获得社区的参与(记住:这很难!),评论和反应(例如 👍 或 ❤️)可用于对会谈进行投票。


您还可以使用GitHub 项目通过提案、安排和公告阶段来管理活动生命周期:

GitHub 项目视图


在塞浦路斯,我们为岛上的不同地区添加了标签,但最重要的是需要“批准”标签。所有新问题均使用“事件”标签创建,但只有具有“分类”权限的人员(组织者团队)才能“批准”该事件。这对于避免垃圾邮件并确保事件相关非常重要。

GitHub 事件标签


现在已经有了一个组织、一些存在问题的存储库和一些适当的结构,是时候实现自动化了。

Git 事件

GitHub 上的GitEvents / GitEvents可以追溯到 2014 年,最初以gitup这个名称作为伦敦节点用户组 (LNUG) 和巴塞罗那 Node.js 组之间的协作“黑客周末”。当时,GitHub Actions 还不存在,我们尝试使用 Webhooks 解决问题,根据 Meetup.com 数据为 GitHub 托管网站构建结构化数据。由于设置繁琐,该项目一度被放弃。


如今, GitEvents是一组简单的 GitHub Actions,用于自动化问题工作流程。用于聚会和活动的“Git Ops”。所需要的只是 GitHub 组织和 GitHub 应用程序。其中一些功能是:


  • 包容性组织:与 GitHub 存储库、问题或讨论的任何交互都会触发工作流程,邀请用户加入 GitHub 组织并将他们添加到“社区成员”团队。权限与公众相同,但一点“增长和参与技巧”是您可以@提及问题中的所有社区成员。这对于公告来说非常有用,但不应该被滥用,否则您很快就会失去成员。
  • 问题模板:我整理了一组用于事件、演讲、行为准则回复等的简单模板,以快速开始使用 GitEvents。
  • Broadcast :是可重复使用的 GitHub 工作流程,用于自动化营销和常见任务,例如向会员发送电子邮件/推文/blueskying、在 Discord、EventBrite、Meetup 等上创建/更新事件。
  • ICS :是一个 GitHub Action,用于为事件生成 iCal 文件。 iCal是日历事件的标准。人们只需将其添加为日历订阅即可了解最新的社区活动。我们创建了 github 文件的重定向,以便人们可以通过简单的链接订阅日历:https: //calendar.cdc.cy


一切都是“即插即用”,因此您可以选择您喜欢的操作,并且将它们组合到工作流程中相对容易。例如,请查看塞浦路斯开发者社区工作流程


如果您想开始使用 GitEvents 并需要一些帮助,请联系我们的Discord 服务器GitEvents 是一项正在进行的工作,总是有很多工作要做,特别是与其他平台的集成等。如果您想提供帮助,请保持联系。

GitHub 问题表格

问题表单在 GitHub 上仍然是一个相对鲜为人知的功能。 可以提供带有表单配置的 YAML 文件,而不是常规的 Markdown 模板。

GitHub 问题表


这对于获取结构化输入来说非常酷,但是一旦保存为“Issue”,数据在语义上就毫无用处,因为它只是 Markdown。我尝试过使用里程碑、Markdown 标题、标签等来向问题添加日期、位置等语义信息,但没有任何效果。所以我开始构建GitHub Issue Forms Body Parser 。这有助于解析通过表单创建的问题,以提取日期、链接、图像、列表等,并将它们转换为结构化 JSON 数据。这可以直接传递到其他平台,如 Discord、EventBrite、Meetup 等,或用于邮件、推文等。


问题表单正文解析器也可在npm上作为解析任何 Markdown 文本的库。直到最近我才意识到可以解析整个README.md文件以构建网站的数据结构:


 query ($organization: String!, $repository: String!) { repository(owner: $organization, name: $repository) { id name object(expression: "main:README.md") { ... on Blob { text } } } }


这是从存储库的main分支检索文件内容的查询,您可以将其传递到“正文解析器”:

const structuredData = await bodyParser(readmeFile()?.repository.object.text)


您现在可以从README.md文件中获取About部分并在您的网站上使用它,而无需保留社区描述的另一份副本。

GraphQL API

通过最新的https://cdc.cy网站,我想探索并突破问题、 README.md文件和结构化 JSON 数据的可能性界限,我对结果相当满意:


  • 大部分网站内容是从 GitHub 上的README.md.json文件获取的;每个人都可以编辑,无需 CMS 或帐户等
  • 即将举行和过去的活动基于 GitHub 问题( events存储库上已批准和带有事件标签的问题)
  • 组织者是从 GitHub 团队成员中获取的
  • 可以使用“公共位置”文件中的正确位置数据来注释/增强事件
  • 演讲者个人资料完全基于 GitHub 用户个人资料,我们可以获取头像、简介(自述文件)、位置等并构建漂亮的演讲者个人资料页面
  • 我们可以显示一些统计数据,例如“组织成员数量”、“过去/即将发生的事件数量”等。


所有这些功能都可以通过GraphQL API并使用正文解析器解析 Markdown 文件来实现。

总结与展望

我已经研究这个概念有一段时间了,而且它仍然时不时地改变形状。但我从 BerlinJS 那里采用的基本思想并没有改变:


  • 开放社区:一切都是公开透明的,欢迎所有人(只要他们遵守行为准则)
  • 活动和会谈/提案是存储库中的问题
  • 标签有助于结构和自动化


构建这一切花费了大量的时间和精力,而且仍然缺少很多我没有时间做的事情:

  • 电子邮件与日程安排、提醒等正确集成。
  • 完成 EventBrite 集成
  • 添加聚会集成
  • 添加 WhatsApp/Telegram/Slack 集成
  • 改进问题处理和自动评论(即行为准则提醒、后续提醒等)


如果您认为这可以帮助您和您的社区,并希望参与拼凑拼图,请联系gitevents Discord ServerGitHub 讨论或直接关注GitHub 问题之一。


如果您在塞浦路斯巴塞罗那,请加入并支持当地的开发者团体。

随机组织者个人经验的想法、提示和技巧

  • 场地:选择公司办公室作为场地很容易,但也有很多缺点。一旦你把人带进办公室,就很容易操纵他们(看看我们很酷的地方,我们甚至还有一个鸡尾酒吧!)。请记住,公司的动机与您不同(招聘、营销等)。有时甚至可能会发生冲突,不允许人们参观竞争对手的办公室。如果可能的话,我更喜欢“中立”的联合办公和活动空间,并且感谢 Open Collective,您可以获得赞助来支付场地费用,并为每个人提供公平的(招聘/营销/等)规则。
  • 提醒:我们都很忙,很容易忘记事情。并不是每个人都像您一样对活动充满热情、积极主动和兴奋,因此定期提醒可以让人们保持参与并帮助养成习惯。找到一个良好的提醒节奏,不要过度提醒别人。不同的媒体适合不同的人,所以我尝试尽可能多地报道。
  • 稀缺性“我注意到,在活动举行前一周宣布活动并限制座位数量,比提前一个月发布 100 多个座位的效果更好” – Dmitry Zaets,BarcelonaJs
  • 福利:“赠品很有趣,赠送会议门票和其他东西可以为参加者提供不错的福利” ——Dmitry Zaets,BarcelonaJs
  • 一致性:“从一开始就制定一个切合实际的时间表。无论是每月一次的聚会还是每季度一次的会议,一致性都是关键。创建路线图,分配职责,并坚持计划。这不仅可以保持观众的参与度,还有助于建立一个可靠的社区。” – Federico Rampazzo,CDC.cy
  • 寻找演讲者:“不要害怕接触可能愿意分享见解的专家。您的许多成员可能都有值得分享的有趣故事!这对他们和社区来说都是一次丰富的体验。为活动拍摄照片、视频和录音非常有价值,有助于演讲者的演讲生涯,并扩大活动的影响力。” – Federico Rampazzo,CDC.cy