新服务:CocoaPods 元数据生成

本周,我们为 CocoaPods 作者发布了一项新的幕后服务:cocoapods-metadata-service,它处理 CocoaDocs 职责的一部分,但不要求在 Mac 上运行。这让我们更容易维护。

我们宣布 CocoaDocs 将关闭以来,已经过去将近一年。CocoaDocs 的关闭最初因 BuddyBuild 团队提出接管该项目而放缓,但在他们被Apple 收购之前,迁移并未完成。这意味着他们无法接管社区服务。

相反,我开始构建一个更简单的替代品,仅处理 cocoapods.org 网站的需求。继续阅读以了解它的样子。

为什么要构建它?

CocoaPods 的网络基础设施需要继续强化。我们的贡献者较少,而使用 CocoaPods 的人却更多。将我们的更多网络服务移入 Heroku 意味着我们在项目托管和运行方式方面缺乏多样性。在互联网上托管 Mac Mini 是项艰巨的工作,我不想让其他人去做。

不过,这里有一个棘手的问题。CocoaDocs 将运行完整的 pod install 流程,并使用这些文件为每个 Pod 生成一组有用的指标

install_size
total_files
total_comments
total_lines_of_code
doc_percent
readme_complexity
initial_commit_date
rendered_readme_url
license_short_name
license_canonical_url
total_test_expectations
dominant_language
builds_independently
is_vendored_framework
rendered_changelog_url
rendered_summary
spm_support

在 Heroku 上运行时,并非所有这些属性都是可行的,因为它具有临时文件系统。例如,存储库将包括示例项目和代码,这些代码将被 pod install 删除 - 然后 CocoaDocs 将使用剩余的文件生成详细信息。为了在没有 Pod 本地克隆的情况下在主机上工作,其中一些指标需要是可选的。

我构建此服务首先专注于最紧迫的问题:自述文件、变更日志和许可信息。基本上

rendered_readme_url
license_short_name
license_canonical_url
rendered_changelog_url

其他一些属性可以稍后添加,例如,我看到没有阻碍将 dominant_languageis_vendored_frameworkinitial_commit_datespm_supportreadme_complexity 添加到服务中,但有些属性根本不可行。

到目前为止,此服务仅专注于开源 GitHub 项目,计划扩展到使用 .tar.gzzip 文件的 Pod,敬请期待。

这是 CocoaPods 组织中的第一个 JavaScript 项目(TypeScript),因为一旦我使用 TypeScript,我就无法再为新项目返回 Ruby 了。不过,这确实引入了一些复杂性。因此,我选择实时编码构建 v1 和将项目投入生产的整个过程。

这意味着,如果你有兴趣了解如何在 TypeScript 中构建小型 NodeJS 服务器,那么你已经拥有了一个构建精良的小型示例,其中包含 一个超过 5 小时的 YouTube 播放列表,其中我必须解释我的所有选择。

随着我们更多地依赖此服务,我们可以继续提供丰富的网络体验,而对难以维护的基础设施的依赖却大大减少,这为 CocoaPods 在很长一段时间内继续成为有用的资源铺平了道路。