用 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.")
所有文档都在面向用户的网站上:https://danger.systems/swift/
danger-swift ci
- 在 CI 上使用它danger-swift pr https://github.com/Moya/Harvey/pull/23
- 使用它来构建你的 Dangerfiledanger-swift local
- 使用它来针对您的本地 master 分支更改运行 dangerdanger-swift edit
- 创建一个临时 Xcode 项目来处理 Dangerfile存在支持插件的基础设施,它可以帮助您避免在不同的存储库中重复相同的 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 PM 来安装 danger-swift
和您的插件
安装 Danger JS
$ npm install -g danger
添加到您的 Package.swift
let package = Package(
...
products: [
...
.library(name: "DangerDeps[Product name (optional)]", type: .dynamic, targets: ["DangerDependencies"]), // dev
...
],
dependencies: [
...
.package(url: "https://github.com/danger/swift.git", from: "3.0.0"), // dev
// Danger Plugins
.package(url: "https://github.com/username/DangerPlugin.git", from: "0.1.0") // dev
...
],
targets: [
.target(name: "DangerDependencies", dependencies: ["Danger", "DangerPlugin"]), // dev
...
]
)
将正确的 import 添加到您的 Dangerfile.swift
import DangerPlugin
DangerPlugin.doYourThing()
在 Sources
中创建一个名为 DangerDependencies
的文件夹,并在其中创建一个空文件,例如 Fake.swift
要运行 Danger
,请使用 swift run danger-swift command
(推荐) 如果您使用 Swift PM 来分发您的框架,请使用 Rocket 或类似的工具,从您的 Package.swift
中注释掉所有开发依赖项。这可以防止这些开发依赖项被消费者下载并与您的框架一起编译。
(推荐) 缓存您存储库中的 .build
文件夹
通过将 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-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 维护,也可能是你?