https://github.com/danger/python
⚠️ Stop saying "you forgot to …" in code review
https://github.com/danger/python
Last synced: about 1 year ago
JSON representation
⚠️ Stop saying "you forgot to …" in code review
- Host: GitHub
- URL: https://github.com/danger/python
- Owner: danger
- License: mit
- Created: 2019-10-30T18:33:26.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-09-06T11:07:17.000Z (almost 3 years ago)
- Last Synced: 2025-05-03T16:34:52.298Z (about 1 year ago)
- Language: Python
- Homepage: https://danger.systems/python
- Size: 198 KB
- Stars: 108
- Watchers: 6
- Forks: 47
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://pypi.org/project/danger-python/)

[](https://travis-ci.org/danger/python)
# python
Write your Dangerfiles in Python.
### Requirements
:warning: `danger-python` is currently work in progress. Breaking changes may occur.
Running `danger-python` requires:
* Python 3.7 (tested under Python 3.7.5)
* danger-js 9.2 (tested under danger-js 9.2.10)
### Installation
In order to test the script please run the following commands:
```sh
# install danger-js
npm install -g danger
# install danger-python
pip install danger-python
# run danger-python
danger-python pr https://github.com/microsoft/TypeScript/pull/34806
```
### dangerfile.py
You can choose between shorter untyped version of `dangerfile.py`:
```python
title = danger.github.pr.title
markdown(title)
```
Or more verbose typed version:
```python
from danger_python import Danger, markdown
danger = Danger()
title = danger.github.pr.title
markdown(title)
```
### Using as GitHub Action
1. Create a `dangerfile.py` in the root directory of your repository.
2. Add a following workflow:
```yaml
name: Danger
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: danger/python@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
### Using as a CI step (Travis)
1. Create a `dangerfile.py` in the root directory of your repository.
2. Set up the CI to execute the `danger-python` script after the test suite.
Example `.travis.yml` configuration:
```yaml
language: python
python:
- "3.7"
cache:
yarn: true
pip: true
directories:
- node_modules
install:
- pip install poetry
- poetry install
script:
- poetry run pytest
after_script:
- nvm install 10.16.0
- nvm use 10.16.0
- yarn global add danger
- pip install danger-python
- danger-python ci -v
```
### Development
To develop the `danger-python`, clone the repository and run the following commands:
```sh
# install danger
npm install -g danger
# install poetry
pip install poetry
# install project dependencies
poetry install
# activate virtual environment
poetry shell
# run tests
pytest
```
To regenerate the input JSONSchema, put the latest version in `scripts/input_schema.json` and run the following commands:
```sh
cd scripts
python generate_scheme.py
```
This should update the `danger_python/models.py` file.
:warning: Please, be careful with the generation script since the `master` branch contains the hand edits to the schema. They are all covered by the test suite, though.
### Building plugins
To build a plugin, add a `danger-python` as a dependency and subclass the `DangerPlugin` class:
```python
from danger_python.plugins import DangerPlugin
class ExamplePlugin(DangerPlugin):
def hello_world(self):
count = len(self.danger.git.modified_files)
self.message(f"ExamplePlugin says hello to {count} modified files")
```
Importing the package in a `dangerfile.py` will import all the instance methods to the module-level globals:
```python
import example_plugin
# calls hello_world method from the plugin class
example_plugin.hello_world()
```