Artsy Peril Settings
- State: production
- Point people: @dblandin
- CI:
- Peril Dashboard: peril-staging.artsy.net
What is this project?
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
.
TL:DR on this Repo?
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.
To Develop
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.
RFCs
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.
Implementing an RFC
Adding a rule
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.
Testing a rule
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
andafter
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.