射箭 (Archery) 允许你在一个单独的地方声明你项目的所有元数据以及你能用它做什么。这一切都由脚本的力量驱动。
在 Archery 中,你所有的数据要么在名为 Archerfile
的文件中以 YAML 格式声明,要么由脚本生成,这些脚本将作为 JSON 传递给 arrows。该文件的全部内容都被视为元数据。在 scripts
中,你声明任何你想运行的东西,loaders
用于生成额外的元数据。
以下代码展示了 Archerfile 可能的样子。除了项目的名称和版本,它还声明了两个脚本
name: YourProject
help: Thanks for downloading this project and trying it out.
version: 1.0.0
loaders:
- cat Metadata/*.yml
scripts:
xcproj: swift package generate-xcodeproj
generate-version:
arrow: vknabel/StencilArrow
help: Injects the current version into the SPM project
template: Version.swift.stencil
destination: Sources/ArcheryKit/Version.generated.swift
searchPaths: [Scripts]
$ archery xcproj
将使用 Mint 加载 vknabel/BashArrow,它执行给定的命令。无论何时你想在命令行上运行不需要全局安装的简单脚本,这都是一种通用的方法。$ archery generate-version
基于 vknabel/StencilArrow。它将传递 Archerfile 的所有内容,使用 Stencil 语言渲染 Version.swift.stencil
的内容。无论何时你需要 Archerfile 中的信息在其他文件中,这种方式应该是最方便的。如果你是一个项目的新手,Archery 将帮助你入门,因为它充当项目内部的 CLI。可以如下访问 Archerfile 的生成帮助。
$ archery
Thanks for downloading this project and trying it out.
Available Commands:
generate-version Injects the current version into the SPM project
xcproj Generate the Xcode Project for the current SwiftPM project
无论你为你的脚本选择哪个 arrow:它都自带所需的所有依赖项。无需任何额外的命令。
根级别的 script 标签驱动可用的子命令,并被解释为脚本数组 (Array of scripts)。
选项 (Option) | 默认 (Default) | 描述 (Description) |
---|---|---|
arrow |
必需 (Required) | Swift CLI 的 Github 仓库。请参阅 vknabel/ArrowKit。 |
version |
master |
要使用的版本。将被缓存在 .archery/mint 中 |
help |
无 (None) | 脚本的描述。 |
nestedArrow |
false |
将子命令视为 arrow。允许用不同的语言编写 arrows。请参阅 vknabel/ArrowKit。 |
为了在你自己的项目中使用 Archery,你可以手动创建你的 Archerfile,或者让 Archery 为你创建一个。
$ archery init
🏹 Created at Archerfile
现在你可以添加你所有的元数据和脚本。不知道从哪里开始?这里有一些例子供你参考
.podspec
、Package.swift
和 Cartfile
。你所有的依赖项都将在你的 Archerfile 中声明,清单文件将使用 vknabel/StencilArrow 生成。$ archery release
启动它呢?由于此脚本将更复杂,最好的方法是使用 vknabel/ArcheryArrow。你可以在 可用 Arrows 中找到更完整的列表。$ mint run vknabel/Archery
$ marathon run vknabel/archery
$ git clone https://github.com/vknabel/Archery.git
$ cd Archery
$ swift build -c release
$ cp -f .build/release/archery /usr/local/bin/archery
Archery 也可以使用 SwiftPM 嵌入到你自己的 CLI 中。
Archery 将以下环境变量传递给每个脚本,包括 loaders。
名称 (Name) | 描述 (Description) | 示例用例 (Example use case) |
---|---|---|
ARCHERY |
archery 可执行文件的路径。 | 运行子进程 $ARCHERY script-name |
ARCHERY_METADATA |
所有元数据的 JSON 内容。 | 在你的脚本中解析元数据。 |
ARCHERY_SCRIPT |
脚本配置的 JSON 内容。 | 在你的脚本中解析配置。 |
ARCHERY_API_LEVEL |
API 级别的数字。 | 为了提高向后兼容性。 |
ARCHERY_LEGACY_MINT_PATH |
mint 驱动程序的路径。 | 以防你的脚本依赖于 mint。 |
目前已知以下 arrows。欢迎添加你自己的 arrows。如果你想编写自己的 arrow,请前往 vknabel/ArrowKit,并随意在此处添加你自己的 arrow。
vknabel/ArcheryArrow 运行多个脚本。
vknabel/BashArrow 运行 bash 脚本。
"nestedArrow": true
用其他语言编写自定义 arrowsvknabel/BeakArrow 运行 Swift 文件中的函数。基于 yonaskolb/Beak。
"nestedArrow": true
用 Swift 编写自定义 arrowsvknabel/StencilArrow 渲染你的元数据。基于 kylef/Stencil。
vknabel/MarathonArrow 运行 Swift 脚本。基于 JohnSundell/Marathon。
"nestedArrow": true
编写特定于你项目的 arrowsvknabel/MintArrow 运行用 Swift 编写的 CLIs。内部用于所有 arrows。基于 yonaskolb/Mint。
由于 Archery 仍处于早期开发阶段,我想让每个用户尽早知道未来可能实际更改或破坏的内容。本项目使用语义化版本控制 (semantic versioning)。当已知的错误被修复,所有主要功能都已实现,并且即将到来的功能可以在不破坏更改的情况下实现时,将发布 1.0.0 版本。额外的要求是良好的文档和良好的错误消息。在达到 1.0 之前,次要更新可能会破坏,但补丁将保持为补丁,因此对于更新是安全的。
Archery 在 MIT 许可证下可用。