probot/docs/development.md

86 lines
3.9 KiB
Markdown
Raw Normal View History

2017-08-18 20:46:23 +08:00
---
next: docs/webhooks.md
---
2017-03-20 11:20:30 +08:00
2017-08-20 23:42:51 +08:00
# Developing an App
2017-08-18 20:46:23 +08:00
2017-08-20 23:42:51 +08:00
To develop a Probot app, you will first need a recent version of [Node.js](https://nodejs.org/) installed. Probot uses the `async/await` keywords, so Node.js 7.6 is the minimum required version.
2017-08-18 20:46:23 +08:00
2017-08-20 23:42:51 +08:00
## Generating a new app
2017-08-18 20:46:23 +08:00
2017-08-20 23:42:51 +08:00
[create-probot-plugin](https://github.com/probot/create-probot-plugin) is the best way to start building a new app. It will generate a new app with everything you need to get started and run your app in production.
2017-08-18 20:46:23 +08:00
To get started, install the module from npm:
```
$ npm install -g create-probot-plugin
```
Next, run the app:
```
$ create-probot-plugin my-first-plugin
```
2017-08-20 23:42:51 +08:00
This will ask you a series of questions about your app, which should look something like this:
2017-08-18 20:46:23 +08:00
```
Let's create a Probot plugin!
? Plugin's package name: my-first-plugin
? Description of plugin: A "Hello World" GitHub App built with Probot
? Plugin author's full name: Brandon Keepers
? Plugin author's email address: bkeepers@github.com
? Plugin author's homepage:
? Plugin's GitHub user or org name: bkeepers
? Plugin's repo name: my-first-plugin
created file: my-first-plugin/.env.example
created file: my-first-plugin/.gitignore
created file: my-first-plugin/.travis.yml
created file: my-first-plugin/LICENSE
created file: my-first-plugin/README.md
created file: my-first-plugin/app.json
created file: my-first-plugin/index.js
created file: my-first-plugin/package-lock.json
created file: my-first-plugin/package.json
created file: my-first-plugin/docs/deploy.md
Done!
```
2017-08-20 23:42:51 +08:00
The most important files note here are `index.js`, which is where the code for your app will go, and `package.json`, which makes this a standard [npm module](https://docs.npmjs.com/files/package.json).
2017-08-18 20:46:23 +08:00
## Configure a GitHub App
2017-08-20 23:42:51 +08:00
To run your app in development, you will need to configure a GitHub App to deliver webhooks to your local machine.
2017-03-20 11:20:30 +08:00
1. [Create a new GitHub App](https://github.com/settings/apps/new) with:
2017-04-09 06:09:34 +08:00
- **Webhook URL**: Set to `https://example.com/` and we'll update it in a minute.
2017-03-25 21:25:56 +08:00
- **Webhook Secret:** `development`
2017-08-22 05:33:59 +08:00
- **Permissions & events** is located lower down the page and will depend on what data you want your app to have access to. Note: if, for example, you only enable issue events, you will not be able to listen on pull request webhooks with your app. However, for development we recommend enabling everything.
2017-08-20 23:32:26 +08:00
1. Download the private key and move it to your project's directory.
1. Edit `.env` and set `APP_ID` to the ID of the app you just created. The App ID can be found in your app settings page here <img width="1048" alt="screen shot 2017-08-20 at 8 31 31 am" src="https://user-images.githubusercontent.com/13410355/29496168-044b9a48-8582-11e7-8be4-39cc75090647.png">
1. Run `$ npm start` to start the server, which will output `Listening on https://yourname.localtunnel.me`.
1. Update the **Webhook URL** in the [app settings](https://github.com/settings/apps) to use the `localtunnel.me` URL.
2017-03-20 11:20:30 +08:00
You'll need to create a test repository and install your app by clicking the "Install" button on the settings page of your app.
2017-03-20 11:20:30 +08:00
2017-08-20 23:42:51 +08:00
## Running the app
2017-08-18 20:46:23 +08:00
2017-08-22 05:30:26 +08:00
Once you've set the `APP_ID` of your GitHub app in `.env` and downloaded the private key, you're ready to run your app.
2017-08-18 20:46:23 +08:00
```
$ npm start
> probot run ./index.js
Yay, the plugin was loaded!
18:11:55.838Z DEBUG PRobot: Loaded plugin: ./index.js
Listening on https://bkeepers.localtunnel.me
```
2017-03-20 11:20:30 +08:00
2017-08-20 23:42:51 +08:00
Optionally, you can also run your app through [nodemon](https://github.com/remy/nodemon#nodemon) which will listen on any files changes in your local development environment and automatically restart the server. After installing nodemon, you can run `nodemon --exec "npm start"` and from there the server will automatically restart upon file changes.
2017-07-25 04:50:27 +08:00
2017-03-20 11:20:30 +08:00
## Debugging
2017-08-18 20:46:23 +08:00
1. Always run `$ npm install` and restart the server if `package.json` has changed.
2017-03-20 11:20:30 +08:00
1. To turn on verbose logging, start server by running: `$ LOG_LEVEL=trace npm start`