文森說技術

iOS, Web Development Notes
- , , ,

找出 Danger Swift 的最小可執行實作

最近知道了 Danger 有 Swift 語言的實作。但是由於官方文件並沒有把如何用 Swift Package Manager 開發的部份講的很清楚。

於是就決定自己來摸索找出想要對一個 pull request 執行 Danger Swift 檢查的時候,最少需要哪些東西才能夠跑起來。

環境

版本
Xcode 12.0

資料夾結構

先來看結果,透過 tree 這個指令,可以看出當前的資料夾結構:

1
2
3
4
5
6
├── .danger
│   └── .gitkeep
├── .gitignore
├── .travis.yml
├── Dangerfile.swift
└── Package.swift

各自的功用如下:

檔案或資料夾 說明
Package.swift 設定 Dangerfile 相依的 Swift Package Manager 設定檔。這篇的主角。
Dangerfile.swift Danger 的設定檔
.travis.yml 以有 macOS 免費方案的 Travis CI 為 CI
.danger 資料夾 給 Package 的 target 用的一個 dummy 資料夾,裡面放 .gitkeep 以保全空的資料夾

檔案說明

Package.swift

這是最難搞的,一開始的時候怎麼弄怎麼有錯誤 XDD
反覆嘗試之後,縮減到這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// swift-tools-version:5.3
import PackageDescription

let package = Package(
// 名稱可自訂
name: "Dangerfile",
dependencies: [
.package(
url: "https://github.com/danger/swift.git",
from: "3.0.0"
)
// 這邊開始就可以接其他相依的 Danger plugins
],
targets: [
.target(
// 名稱可自訂
name: "Dangerfile",
dependencies: ["Danger"],
// swift build 的時候會要求要設定路徑。
// 為了不干擾原本的專案資料夾,加了個點
path: ".danger"
)
]
)

在路徑的部份,在網路上有查到文章說,指向的資料夾裡面只要至少放個 Swift 檔案,裡面只要寫 import Foundation 就好。

不過幾次刪減之後,發現給空的資料夾執行 swift build 也可以順利建置,於是就演變成現在的樣子。

Dangerfile.swift

這邊就很單純了,單純送個 hello world 訊息而已

1
2
3
import Danger

message("hello world!")

.travis.yml

這邊也沒有什麼特別的。安裝 danger-swift 之後,執行檢查的指令而已。

1
2
3
4
5
6
7
8
9
10
11
language: objective-c
os:
- osx

jobs:
include:
- osx_image: xcode12

script:
- brew install danger/tap/danger-swift
- swift run danger-swift ci

.danger 資料夾

1
2
└── .danger
   └── .gitkeep

.gitkeep 只是一個空白的檔案

執行成果

在 Travis CI 那一側需要加上 DANGER_GITHUB_API_TOKEN 這個環境變數的設定才能夠把執行結果貼回 pull request 中。

Danger 貼的訊息

GitHub PR 的 Status Check

原本想說要用比較熟的 CircleCI 但是忘記他需要付錢,後來才轉到 Travis CI XDDD

所以才會有個 x 在那邊

用來試驗的 PR

檔案列表:

如果覺得這篇對你有幫助,歡迎幫忙分享給其他人 😀