This is the configuration repo for Peril on the Artsy org. There is a settings file and org-wide dangerfiles which are inside the org folder.
Here's some links to the key concepts:
An overview of what Peril does for Artsy is available in the README repo at /culture/peril.md
.
Peril is Danger running on a web-server, this repo is the configuration for that, currently the dangerfiles in org run on every issue and pull request for all our repos.
git clone https://github.com/artsy/peril-settings.git
cd peril-settings
yarn install
yarn jest
code .
You will need node and yarn installed beforehand. You can get them both by running brew install yarn
. This will give
you auto-completion and types for Danger/Peril mainly.
It's likely that any time you want to make a change here you should consult the Artsy RFC process and apply it on artsy/README.
A rule should include a link to its rfc:
// Keep our Markdown documents awesome
// https://github.com/artsy/peril-settings/issues/2
//
export default async (webhook: any) => {
// [...]
})
This self-documents where a rule has come from, making it easy for others to understand how we came to specific rules.
The closure passed to rfc
can be async as well.
We use Jest to test our Dangerfiles. It uses the same techniques as testing a danger plugin where the global imports from danger are fake.
Create a file for your RFC: tests/rfc_[x].test.ts
.
Add a before
and after
setting up and resetting mocks:
jest.mock("danger", () => jest.fn())
import * as danger from "danger"
const dm = danger as any
beforeEach(() => {
dm.danger = {}
dm.fail = jest.fn() // as necessary
})
afterEach(() => {
dm.fail = undefined
})
Set up your danger object and run the function exported in all-prs.ts
:
import rfcN from "../org/all-prs"
it("warns when there's there's no assignee and no WIP in the title", async () => {
dm.danger.github = { pr: { title: "Changes to the setup script", assignee: null } }
await rfcN()
expect(something).toHappen()
// [...]
})
})
Validate that the fail
/warn
/message
/markdown
is called.