Bob 是一个可扩展的 Slack 机器人,使用 Swift 编写,用于与 TravisCI 和 GitHub API 通信。它用于执行重复性的任务,这些任务不能完全自动化,例如为 App Store 创建发布候选版本。
只需在 Slack 上向 Bob 发送消息,它就会为您完成工作。
Bob 使用命令操作。它自带一些可自定义的命令,但可以轻松创建新命令。有关更多信息,请参阅创建自定义命令。
所有命令都通过输入 {name} 参数
来调用。
例如
build staging
可以触发 Travis 上的一个作业,该作业将使用 staging
配置创建一个构建版本,并将其分发给测试人员。
要查看命令应如何使用,请输入 {name} usage
一个虚拟命令,可用于检查 Bob 是否正在运行。只需对 Bob 说 hello
,它就会向您问好。
您可以通过输入 version
查看当前运行的 Bob 版本
TravisScriptCommand
是一个可配置的命令,它在 Travis 上触发一个作业并在那里执行脚本。该命令可以有多个目标,可以在运行时指定。
每个目标要运行的脚本在实例化命令时指定。
例如
let buildTargets = [
TravisTarget(name: "staging", script: Script("fastlane ios distribute_staging")),
TravisTarget(name: "testflight", script: Script("fastlane ios distribute_testflight")),
]
let buildCommand = TravisScriptCommand(name: "build", config: travisConfig, targets: buildTargets, defaultBranch: "Develop")
try bob.register(buildCommand)
将注册一个名为 build
的命令。输入 build staging
将在 Travis 上启动 lane distribute_staging
。
iOS 特定命令,用于更改指定 .plist
文件中的 CFBundleShortVersionString
和 CFBundleVersion
值。
例如
let plistPaths: [String] = [
"App/Info.plist",
"siriKit/Info.plist",
"siriKitUI/Info.plist"
]
let alignCommand = AlignVersionCommand(gitHub: gitHub, plistPaths: plistPaths, author: author)
try bob.register(alignCommand)
将注册一个可以通过输入 align 3.0 4
调用的命令。然后 Bob 将通过更改指定的 3 个文件在 GitHub 上创建一个提交。
iOS 特定命令,用于增加指定 .plist
文件中的 CFBundleVersion
值。如果构建号是数字,则将其增加 1。
例如
let plistPaths: [String] = [
"App/Info.plist",
"siriKit/Info.plist",
"siriKitUI/Info.plist"
]
let bumpCommand = BumpCommand(gitHub: gitHub, plistPaths: plistPaths, author: author)
try bob.register(bumpCommand)
将注册一个可以通过输入 bump
调用的命令。然后 Bob 将通过更改指定的 3 个文件在 GitHub 上创建一个提交。
Bob 需要一个 Slack 令牌才能工作。您可以通过创建一个 Slack 机器人来获取令牌
Bots
bobthebuilder
效果不错API Token
字段。Bob 将使用它连接到 SlackBob 可以像任何其他 Swift Package 一样设置,但由于它依赖于 Vapor💧,我们建议使用 Vapor 工具箱进行设置。要安装 Vapor 工具箱,您可以按照手册操作
一旦您设置好工具箱,就可以通过创建一个新项目开始
vapor new BobTheBuilder --template=n26/bob-vapor-template
cd BobTheBuilder
模板克隆完成后,Package.swift
应该包含
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "BobTheBuilder",
dependencies: [
.package(url: "https://github.com/n26/bob", from: "1.0.0"),
],
targets: [
// The Commands target is the place to add any new custom commands
// When creating new commands, make sure that their Target Membership is set to `BobCustomCommands` and that they are public
.target(name: "BobCustomCommands", dependencies: ["Bob"]),
.target(name: "Run", dependencies: ["BobCustomCommands"])
// If you don't plan to implement any custom commands, you can have only one target
// .target(name: "Run", dependencies: ["Bob"])
]
)
您的所有自定义代码都将位于 Sources/BobCustomCommands
文件夹中。
通过运行以下命令创建一个 Xcode 项目
vapor xcode
打开 Sources/Run/main.swift
文件,配置内置命令或添加您自己的命令。启动 Bob 的最小 main.swift
文件是
import Vapor
import Bob
// https://api.slack.com/apps
let config = Bob.Configuration(slackToken: "your-slack-token")
let drop = try Droplet()
let bob = Bob(config: config, droplet: drop)
try bob.start()
您就可以开始了。选择 Run
scheme 并运行它。您现在可以通过 Slack 向 Bob
发送消息,它会做出响应。
为了使用与 TravisCI API 通信的命令,您需要提供配置。配置包括
https://api.travis-ci.com/repo/{owner%2Frepo}
gem install travis && travis login && travis token
来获取一个为了使用与 GitHub API 通信的命令,您需要提供配置。配置包括
https://api.github.com/repos/{owner}/{repo}
Bob 支持使用 1 条 Slack 消息发送多个命令。只需使用 |
分隔命令即可。
例如
sync strings | align 3.0 5 | build staging | build testflight
可以在为 App Store 创建发布候选版本时使用。它将更新仓库上的字符串,设置版本并为 2 个环境构建应用程序
可以创建自定义命令并提供给 Bob。要创建命令,请实现 Command
协议。
public protocol Command {
/// The name used to idenitfy a command (`hello`, `version` etc.). Case insensitive
var name: String { get }
/// String describing how to use the command.
var usage: String { get }
/// Executes the command
///
/// - Parameters:
/// - parameters: parameters passed to the command
/// - sender: object used to send feedback to the user
/// - Throws: An error is thrown if something goes wrong while executing the command, usualy while parsing the parameters
func execute(with parameters: [String], replyingTo sender: MessageSender) throws
}
实际工作发生在 execute
方法中。用户输入的所有参数都将作为 [String]
传递给该方法。要告知用户命令的进度,请调用 sender
对象上的 send
方法。它将通过 Slack 将消息发送给用户。如果在执行过程中发生任何错误,只需抛出它们即可。
Bob 自带用 Swift 编写的 TravisCI 和 GitHub API 子集。
仅包含一个通过 TravisScriptCommand
公开的执行脚本的方法
包含用于操作 GitHub 上的文件和树的底层方法。有关完整的方法集,请查看GitHub.swift