规范你的 Pull Request 礼仪。

用 Swift 编写你的 Dangerfiles。

要求

最新版本需要 Swift 5.8

如果您使用的是较旧的 Swift,请根据下表使用支持的版本。

Swift 版本 Danger 支持版本
5.5-5.7 v3.18.1
5.4 v3.15.0
5.3 v3.13.0
5.2 v3.11.1
5.1 v3.8.0
4.2 v2.0.7
4.1 v0.4.1
4.0 v0.3.6

现在的样子

您可以创建一个 Dangerfile 来查看 PR 元数据,它是完全类型化的。

import Danger

let danger = Danger()
let allSourceFiles = danger.git.modifiedFiles + danger.git.createdFiles

let changelogChanged = allSourceFiles.contains("CHANGELOG.md")
let sourceChanges = allSourceFiles.first(where: { $0.hasPrefix("Sources") })

if !changelogChanged && sourceChanges != nil {
  warn("No CHANGELOG entry added.")
}

// You can use these functions to send feedback:
message("Highlight something in the table")
warn("Something pretty bad, but not important enough to fail the build")
fail("Something that must be changed")

markdown("Free-form markdown that goes under the table, so you can do whatever.")

使用 Danger Swift

所有文档都在面向用户的网站上:https://danger.systems/swift/

命令

插件

存在支持插件的基础设施,它可以帮助您避免在不同的存储库中重复相同的 Danger 规则。

例如,一个插件在 https://github.com/username/DangerPlugin.git 上实现如下。

// DangerPlugin.swift
import Danger

public struct DangerPlugin {
    let danger = Danger()
    public static func doYourThing() {
        // Code goes here
    }
}

Swift Package Manager (性能更高)

您可以使用 Swift PM 来安装 danger-swift 和您的插件

Marathon (易于使用)

通过将 package: [url] 添加到 import,您可以直接导入 Swift PM 包作为依赖项

例如,一个插件可以通过以下方式使用。

// Dangerfile.swift

import DangerPlugin // package: https://github.com/username/DangerPlugin.git

DangerPlugin.doYourThing()

您可以查看一个 danger-swift plugin 示例

(推荐) 缓存 ~/.danger-swift 文件夹

设置

对于 Mac

# Install danger-swift, and a bundled danger-js locally
brew install danger/tap/danger-swift
 # Run danger
danger-swift ci

对于 Linux

# Install danger-swift
git clone https://github.com/danger/danger-swift.git
cd danger-swift
make install

# Install danger-js
npm install -g danger

 # Run danger
danger-swift ci

GitHub Actions

您可以将 danger/swift 添加到您的 actions 中

jobs:
  build:
    runs-on: ubuntu-latest
    name: "Run Danger"
    steps:
      - uses: actions/checkout@v1
      - name: Danger
        uses: danger/swift@3.15.0
        with:
            args: --failOnErrors --no-publish-check
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Danger 有两个不同的预构建镜像,您可以将其与您的 action 一起使用

为了导入其中一个,请使用 docker:// 前缀

jobs:
  build:
    runs-on: ubuntu-latest
    name: "Run Danger"
    steps:
      - uses: actions/checkout@v1
      - name: Danger
        uses: docker://ghcr.io/danger/danger-swift:3.15.0
        with:
            args: --failOnErrors --no-publish-check
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

本地编译的 danger-js

要使用本地编译的 danger-js 副本,请使用 danger-js-path 参数

danger-swift command --danger-js-path path/to/danger-js

当前工作目录

许多人更喜欢通过 SPM 在 Swift Package 中使用 Danger,因为它性能更高。

然而,这样做会导致根文件夹中有一个 Package.swift,这可能很烦人,尤其是在 Xcode (自 Xcode 11 以来) 在同一文件夹中存在 Package.swift 时,不会在“打开最近项目”菜单中显示 xcproj (或 xcworkspace)。

使用 --cwd 参数,您可以指定一个工作目录。 这允许您将 Package.swift 放在另一个目录中,并且仍然像从项目根目录执行一样运行 danger-swift。

swift run danger-swift command --cwd path/to/working-directory

请注意,要执行此操作,您必须从 Package.swift 所在的目录运行 danger-swift,并将相对于此目录的顶级目录传递给 --cwd 命令行开关。 例如,如果您在存储库的顶层创建一个名为 Danger 的文件夹来存放这些文件,则需要 cd Danger,然后运行命令 [swift run] danger-swift cmd <cmd parameters> --cwd ..,以告诉 Danger 它应该查看命令执行位置之上的目录,以便正确调用该工具。

开发

您需要使用 Xcode >= 13.2.1。

git clone https://github.com/danger/danger-swift.git
cd danger-swift
swift build
swift run komondor install
swift package generate-xcodeproj
open danger-swift.xcodeproj

然后我倾向于使用 swift run 运行 danger-swift

swift run danger-swift pr https://github.com/danger/swift/pull/95

如果您想完全模拟 DangerJS 的 process 的工作方式,请使用

swift build && cat Fixtures/eidolon_609.json | ./.build/debug/danger-swift

部署

master 上运行 swift run rocket $VERSION,例如 swift run rocket 1.0.0

维护者

Danger Swift 由 @f-meloni 维护,也可能是你?