🏹 射箭 (Archery)

射箭 (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 将帮助你入门,因为它充当项目内部的 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:它都自带所需的所有依赖项。无需任何额外的命令。

脚本 (Scripts)

根级别的 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

入门 (Getting Started)

为了在你自己的项目中使用 Archery,你可以手动创建你的 Archerfile,或者让 Archery 为你创建一个。

$ archery init
🏹  Created at Archerfile

现在你可以添加你所有的元数据和脚本。不知道从哪里开始?这里有一些例子供你参考

安装 (Installation)

使用 Mint (Using Mint)

$ mint run vknabel/Archery

使用 Marathon (Using Marathon)

$ marathon run vknabel/archery

Swift 包管理器 (Swift Package Manager)

$ 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 中。

环境变量 (Environment Variables)

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 (Available Legacy Arrows)

目前已知以下 arrows。欢迎添加你自己的 arrows。如果你想编写自己的 arrow,请前往 vknabel/ArrowKit,并随意在此处添加你自己的 arrow。

Archery

vknabel/ArcheryArrow 运行多个脚本。

Bash

vknabel/BashArrow 运行 bash 脚本。

Beak

vknabel/BeakArrow 运行 Swift 文件中的函数。基于 yonaskolb/Beak

Stencil

vknabel/StencilArrow 渲染你的元数据。基于 kylef/Stencil

Marathon

vknabel/MarathonArrow 运行 Swift 脚本。基于 JohnSundell/Marathon

Mint

vknabel/MintArrow 运行用 Swift 编写的 CLIs。内部用于所有 arrows。基于 yonaskolb/Mint

开发状态 (Development Status)

由于 Archery 仍处于早期开发阶段,我想让每个用户尽早知道未来可能实际更改或破坏的内容。本项目使用语义化版本控制 (semantic versioning)。当已知的错误被修复,所有主要功能都已实现,并且即将到来的功能可以在不破坏更改的情况下实现时,将发布 1.0.0 版本。额外的要求是良好的文档和良好的错误消息。在达到 1.0 之前,次要更新可能会破坏,但补丁将保持为补丁,因此对于更新是安全的。

贡献者 (Contributors)

许可证 (License)

Archery 在 MIT 许可证下可用。