社区很难。它们很难构建、很难维护、也很难成长。但是,建立社区是我职业生涯中最有价值的事情之一,因为我遇到了很多了不起的人,并被迫在我的舒适区之外学习和做事。
我记得十多年前,我参加了我的第一次小型科技会议 - 在柏林举行的 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 Actions,我们可以按计划或按需运行自动化任务,通过 GitHub Pages,我们可以免费托管我们的社区网站。
对我来说,在 GitHub 上建立社区最重要的好处之一是完全透明和开放的沟通。一切[1]都是公开的,因此无需担心谁可以访问什么。这意味着任何人都可以为社区做出贡献,任何人都可以看到正在发生的事情。这对于建立信任和建立一个包容和欢迎每个人的社区非常有用。
我与巴塞罗那JS、CDC 等社区的目标是为开发人员创建自由和开放的空间来分享和联系。而“免费”就是透明度的体现。过去,我总是不插手财务捐助。如果有公司想要赞助,他们可以直接点食物或饮料到会场,但我不会提供便利。感谢Open Collective ,这变得更加容易,我们现在能够接受财务捐助并使它们对社区透明。例如,这些用于支付域名费用、获取食物和饮料、开展广告活动等。
[1] 当然,您也可以创建一个私人仓库用于内部组织者讨论等。
GitHub 不是像 Meetup 这样的社区/活动平台,因此有一些注意事项。我已经习惯将问题视为“事件”或“讨论提案”并使用 GitHub 问题表单来构建提交。但这并不理想,新人需要时间来理解“创建问题以提交演讲”。没有“舒适的功能”来选择日期、地图上的位置等,并向数百人发送简单的电子邮件通知。
整个概念主要关注开发人员和工程师,因为它是围绕 GitHub 和 IssueOps 发展的。为了让大家了解我之前的经验,以下是我帮助建立的一些社区和会议:
在构建这些内容的同时,我不断开发一套工具、工作流程和自动化,以使组织者的生活变得更轻松,因为这是一项艰巨且往往吃力不讨好的工作。这是我关于如何在 GitHub 上构建公共社区的开放社区概念。
第一步是建立一个 GitHub 组织并创建两个存储库:
名称很明显:事件存储库中是用于创建新事件的模板,而演讲存储库中是用于提交演讲提案的模板。会谈可以与活动联系起来以建立议程,如果您设法获得社区的参与(记住:这很难!),评论和反应(例如 👍 或 ❤️)可用于对会谈进行投票。
您还可以使用GitHub 项目通过提案、安排和公告阶段来管理活动生命周期:
在塞浦路斯,我们为岛上的不同地区添加了标签,但最重要的是需要“批准”标签。所有新问题均使用“事件”标签创建,但只有具有“分类”权限的人员(组织者团队)才能“批准”该事件。这对于避免垃圾邮件并确保事件相关非常重要。
现在已经有了一个组织、一些存在问题的存储库和一些适当的结构,是时候实现自动化了。
GitHub 上的GitEvents / GitEvents可以追溯到 2014 年,最初以gitup
这个名称作为伦敦节点用户组 (LNUG) 和巴塞罗那 Node.js 组之间的协作“黑客周末”。当时,GitHub Actions 还不存在,我们尝试使用 Webhooks 解决问题,根据 Meetup.com 数据为 GitHub 托管网站构建结构化数据。由于设置繁琐,该项目一度被放弃。
如今, GitEvents是一组简单的 GitHub Actions,用于自动化问题工作流程。用于聚会和活动的“Git Ops”。所需要的只是 GitHub 组织和 GitHub 应用程序。其中一些功能是:
iCal
是日历事件的标准。人们只需将其添加为日历订阅即可了解最新的社区活动。我们创建了 github 文件的重定向,以便人们可以通过简单的链接订阅日历:https: //calendar.cdc.cy 。
一切都是“即插即用”,因此您可以选择您喜欢的操作,并且将它们组合到工作流程中相对容易。例如,请查看塞浦路斯开发者社区工作流程。
如果您想开始使用 GitEvents 并需要一些帮助,请联系我们的Discord 服务器GitEvents 是一项正在进行的工作,总是有很多工作要做,特别是与其他平台的集成等。如果您想提供帮助,请保持联系。
问题表单在 GitHub 上仍然是一个相对鲜为人知的功能。 可以提供带有表单配置的 YAML 文件,而不是常规的 Markdown 模板。
这对于获取结构化输入来说非常酷,但是一旦保存为“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
部分并在您的网站上使用它,而无需保留社区描述的另一份副本。
通过最新的https://cdc.cy网站,我想探索并突破问题、 README.md
文件和结构化 JSON 数据的可能性界限,我对结果相当满意:
README.md
或.json
文件获取的;每个人都可以编辑,无需 CMS 或帐户等events
存储库上已批准和带有事件标签的问题)
所有这些功能都可以通过GraphQL API并使用正文解析器解析 Markdown 文件来实现。
我已经研究这个概念有一段时间了,而且它仍然时不时地改变形状。但我从 BerlinJS 那里采用的基本思想并没有改变:
构建这一切花费了大量的时间和精力,而且仍然缺少很多我没有时间做的事情:
如果您认为这可以帮助您和您的社区,并希望参与拼凑拼图,请联系gitevents Discord Server 、 GitHub 讨论或直接关注GitHub 问题之一。