前言:
此刻各位老铁们对“wget克隆网站”可能比较讲究,同学们都想要学习一些“wget克隆网站”的相关内容。那么小编在网络上搜集了一些有关“wget克隆网站””的相关知识,希望同学们能喜欢,朋友们快快来了解一下吧!在 Duro,我和我的团队制作了一个实用的 CLI 工具,使我们能够快速轻松地为我们的平台创建微服务。该工具为 TypeScript、linting、与我们的共享库的集成以及用于将服务推送到云的特定 Github Actions 设置了标准服务配置。拥有它真是太好了。
我们不断地用它来调整一些东西,修复一些小问题并改变我们的配置。我们决定使用GoReleaser来帮助我们对工具进行版本控制并创建二进制文件并将其发布到 Github。太棒了。
直到我们不得不分发它。
修订版开始增加,试图确保您拥有该工具的最新版本是一件很麻烦的事情。本着“把事情做好”的精神,我们只是让每个人都下载它并在完成后删除它。这不是一个很好的解决方案,但是嘿,我们还有更多事情要担心。
最近,我决定亲自向这个工具展示一些爱(并讨好我的开发人员同事),尝试通过 Homebrew 管理这个工具的版本。我不知道 Homebrew 的内部工作原理,所以我决定深入研究。
自制基础知识
Homebrew 是一个包管理器,允许用户通过简单的界面安装包。如果您需要curl但没有,您只需运行brew install curlHomebrew 即可获取它。如果需要,您甚至可以指定包的特定版本。
Homebrew 如何知道从哪里获取东西?
Homebrew 有一个核心包列表,您可以在此处浏览,并且在您输入 时即可使用这些包brew install。每个包都有一个Formula,它只是一个 Ruby 文件,显示包的最新 SHA 是什么,并允许 Homebrew 根据您的操作系统选择正确的二进制文件。下面是一个公式示例:
class Wget < Formula homepage "; url "; sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd" def install system "./configure", "--prefix=#{prefix}" system "make", "install" endend
存储此公式的存储库称为tap。事实上,核心包的列表存储在core tap中。这不仅是您可以拥有的水龙头;您可以创建自己的水龙头。
如何创建水龙头以及创建后会发生什么?
有关于如何创建 tap 的标准文档。
简而言之,当您输入 时brew tap <tap_name> <URL>,它将转到该 URL 并克隆存储库并将其保存在 中$(brew --repository)/Library/Taps。然后,当您输入 时brew install <package>,它将首先搜索核心分接头,然后搜索您创建的任何其他分接头。然后,它将查找公式 Ruby 文件,并从公式中的指定位置获取最新的包(或您指定的版本),并将其放入 Homebrew 的路径中,以便您可以访问它。
如何创建公式?
您可以手动创建一个,但GoReleaser 可以为您完成。
这是基本配置:
brews: - # Name of the recipe # # Default: ProjectName # Templates: allowed name: some_app # Folder inside the repository to put the formula. folder: Formula # Your app's description. # # Templates: allowed description: "Put in description here." # Repository to push the generated files to. repository: owner: example name: some_app branch: brew-releases/{{ .Version }} token: "{{ .Env.GITHUB_TOKEN }}" pull_request: enabled: true base: owner: example name: some_app branch: master # NOTE: make sure the url_template, the token and given repo (github or # gitlab) owner and name are from the same kind. # We will probably unify this in the next major version like it is # done with scoop. # URL which is determined by the given Token (github, gitlab or gitea). # # Default depends on the client. # Templates: allowed url_template: "{{ .Tag }}/{{ .ArtifactName }}" # Allows you to set a custom download strategy. Note that you'll need # to implement the strategy and add it to your tap repository. # Example: download_strategy: GitHubPrivateRepositoryReleaseDownloadStrategy custom_require: './custom_release_strategy' # Git author used to commit to the repository. commit_author: name: goreleaserbot email: goreleaserbot@example.com # The project name and current git tag are used in the format string. # # Templates: allowed commit_msg_template: "Brew formula update for {{ .ProjectName }} version {{ .Tag }}"
在这里,GoReleaser 将为您生成 Ruby 公式文件,并尝试将其提交Formula到此存储库中的文件夹中。就我而言,我们对主分支进行了保护,因此我们必须指定使用新公式自动创建 PR 的部分。
我们还有一个 Github Action,每当在我们的存储库中创建新标签时,它都会使用GoReleaser 的自定义操作来触发发布。现在我们所要做的就是使用新标签创建一个版本,GitHub Action 将使用二进制文件准备一个版本,然后使用更新的公式自动创建 PR。一旦合并,Homebrew 应该负责更新修订版本。
然后就是FTWbrew tap和brew install组合!(您的环境变量中可能需要有 GitHub 个人访问令牌HOMEBREW_GITHUB_API_TOKEN)。
听起来没那么糟糕!你为什么抱怨这很痛苦?
啊,是这样。问题所在。
Homebrew 使用几种不同的方法来下载/克隆存储库,例如CurlDownloadStrategy(它的作用与它所说的完全一样)。
他们曾经支持一个名为GitHubPrivateRepositoryReleaseDownloadStrategy. 顾名思义:它从 GitHub 私有存储库下载版本。当我自己研究这样做时,有大量的文档表明使用该策略是为了乐趣和利润。
问题是,Homebrew 不再支持该策略。然后GoReleaser 停止支持它。
搞砸了?并非如此,这要感谢社区和开源软件的帮助!
GoReleaser 问题中的这条评论告诉我,我可以从旧版本的 Homebrew 中复制旧代码,并将它们包含到我的 GoReleaser 公式中。
我认为最终我们使用了此处提出的建议以及此 Gist 链接中包含的代码。Formula我们将该代码放入存储库中的同一文件夹中并将其命名为custom_release_strategy.rb. custom_require该文件在该部分的字段中被指向brews,并自动将其包含在公式文件中,以便 Homebrew 知道如何下载包。
希望这可以帮助任何想要构建自己的 CLI 工具并通过 Homebrew 发布它的人!
标签: #wget克隆网站