Guides,Usage,Tutorials &Reference
Looking for
or
?
a project fromorta therox,f-meloni,
andthe Danger org contributors.
Danger runs during your CI process, and gives teams the chance to automate common code review chores.
This provides another logical step in your build, through this Danger can help lint your rote tasks in daily code review.
You can use Danger to codify your teams norms. Leaving humans to think about harder problems.
This happens by Danger leaving messages inside your PRs based on rules that you write in Swift.
Over time, as rules are adhered to, the message is amended to reflect the current state of the code review.
Danger is a Swift PM module that evals aDangerfile
. You set up aDangerfile
per-project. TheDangerfile
contains a collection of home-grown rules specific to your project as aDangerfile.swift
.
Danger can be installed via Swift PM (optimal) or Homebrew (not version locked).
You canintegrate Danger into your own project using AppCenter, Bamboo, BitbucketPipelines, Bitrise, BuddyBuild, BuddyWorks, Buildkite, Circle, Cirrus, CodeBuild, Codefresh, Codemagic, Codeship, Concourse, DockerCloud, Drone, GitHubActions, GitLabCI, Jenkins, Netlify, Nevercode, Screwdriver, Semaphore, Surf, TeamCity, Travis, VSTS.
You would then need to generate a GitHub access token or a BitBucket Server user, and expose some credentials as ENV vars. Then add `yarn danger ci` to your CI test run.
TheGetting Started guide covers this in more detail.
// Import the feedback functionsimportDangerletdanger=Danger()// Add a message to the tablemessage("You have added 2 more modules to the app")// Adds a warning to the tablewarn("You have not included a CHANGELOG entry.")// Declares a blockingfail("ESLint has failed with \(fails) fails.")// Show markdown under the table:markdown("## New module Danger"+dangerYarnInfo)
importDangerletdanger=Danger()// Add a CHANGELOG entry for app changeslethasChangelog=danger.git.modifiedFiles.contains("changelog.md")letisTrivial=(danger.github.pullRequest.body+danger.github.pullRequest.title).contains("#trivial")if(!hasChangelog&&!isTrivial){warn("Please add a changelog entry for your changes.")}
importDangerletdanger=Danger()leteditedFiles=danger.git.modifiedFiles+danger.git.createdFilesletswiftFilesWithCopyright=editedFiles.filter{$0.contains("Copyright")&&($0.fileType==.swift||$0.fileType==.m)}forfileinswiftFilesWithCopyright{fail(message:"Please remove this copyright header",file:file,line:0)}
importDangerletdanger=Danger()varbigPRThreshold=600;if(danger.github.pullRequest.additions+danger.github.pullRequest.deletions>bigPRThreshold){warn('>PullRequestsizeseemsrelativelylarge.IfthisPullRequestcontainsmultiplechanges,pleasespliteachintoseparatePRwillhelpsfaster,easierreview.');}
importDangerletdanger=Danger()// Always ensure we assign someone, so that our Slackbot can do its work correctlyif(danger.github.pullRequest.assignee==nil){fail("Please assign someone to merge this PR, and optionally include people who should review.")}
Step two on using Danger in your app, how to work locally and nuances around working with files.
Read more
Step one on using Danger with Swift in your application. Start here.
Read more
How do Danger Swift and JS interact?
Read more
How to use Danger to get per-commit feedback
Read more
How to use Danger on an iOS app
Read more
How to migrate an existing Danger installation
Read more
An overview of using Danger with BitBucket Server, and some examples
Read more
An overview of using Danger with BitBucket Cloud, and some examples
Read more
Discussing introducing Danger into a team, how you can use it to provide positive feedback and encourage adoption of new rules.
Read more
How to take your rules, and make them accessible to more people by writing a Danger plugin.
Read more
Get your plugin tested
Read more
An overview of using Danger with GitLab, and some examples
Read more