Platformless

#Before we get started

This tutorial continues after “Getting Started” - it’s not required that you have Danger Swift running on your CI though, but assumes some familiarity.

#Locality

With Danger, the typical flow is to help you can check rules on CI and get feedback inside your PR. With Peril you can move those rules to run on an external server making feedback instant. danger-swift local provides a somewhat hybrid approach.

danger local provides a way to run a Dangerfile based on git-hooks. This let’s you run rules while you are still in the same context as your work as opposed to later during the code review. Personally, I find this most useful on projects when I ship 90% of the code to it.

#How it works

Where danger ci uses information from the Pull Request to figure out what has changed, danger local naively uses the local differences in git from master to the current commit to derive the runtime environment. This is naive because if you don’t keep your master branch in-sync, then it will be checking across potentially many branches.

Inside a Dangerfile danger.github and danger.bitbucketServer will be nil, so you can share a Dangerhttps://github.com/Moya/Harvey/blob/master/Dangerfile.swiftfile between danger local and danger ci as long as you verify that these objects exist before using them.

When I thought about how I wanted to use danger local on repos in the Danger org, I opted to make a separate Dangerfile for danger local and import this at the end of the main Dangerfile. This new Dangerfile only contains rules which can run with just danger.git, e.g. CHANGELOG/README checks. I called it Dangerfile.lite.swift.

#Getting it set up

You need to add both Danger and Komondor to your project:

      dependencies: [
        .package(url: "https://github.com/f-meloni/Logger", from: "0.1.0"),
        .package(url: "https://github.com/JohnSundell/Marathon", from: "3.1.0"),
        .package(url: "https://github.com/JohnSundell/ShellOut", from: "2.1.0"),
        .package(url: "https://github.com/danger/danger-swift.git", from: "0.7.0")

+        .package(url: "https://github.com/orta/Komondor", from: "1.0.0"), // dev
    }
    targets: []
  }

+ #if canImport(PackageConfig)
+     import PackageConfig
+
+     let config = PackageConfig([
+         "komondor": [
+             "pre-push": "swift test",
+             "pre-commit": [
+                 "swift run danger-swift local --dangerfile Dangerfile.lite.swift",
+                 "git add .",
+             ],
+         ],
+     ])
+ #endif

You need to add Komondor to your install script somewhere, by adding swift run komondor install so that the hooks are in place on each contributor’s computer.

Then any commit creation will trigger a local run of Danger.


Got improvements? Help improve this document via sending PRs.