https://github.com/benbalter/problem_child
Allows authenticated or anonymous users to fill out a standard web form to create GitHub issues (and pull requests).
https://github.com/benbalter/problem_child
Last synced: 4 months ago
JSON representation
Allows authenticated or anonymous users to fill out a standard web form to create GitHub issues (and pull requests).
- Host: GitHub
- URL: https://github.com/benbalter/problem_child
- Owner: benbalter
- License: mit
- Created: 2015-01-09T19:41:15.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2023-03-16T03:55:04.000Z (almost 3 years ago)
- Last Synced: 2024-04-14T13:17:54.961Z (almost 2 years ago)
- Language: Ruby
- Homepage:
- Size: 519 KB
- Stars: 50
- Watchers: 5
- Forks: 7
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-github - Problem Child - Allows authenticated or anonymous users to fill out a standard web form to create GitHub issues (and pull requests). (Tips, tricks, tools, and add-ons for GitHub power users)
README
# Problem Child
Allows authenticated or anonymous users to fill out a standard web form to create GitHub issues.
[](https://travis-ci.org/benbalter/problem_child) [](https://heroku.com/deploy)
## How it works
1. You create a standard HTML form, defining what fields you'd like a given authenticated or anonymous user to fill out
2. They go to a hosted URL and fill out the form
3. The fields are converted to markdown bullets and inserted into the body of a new issue created against the GitHub repo you specify
## Usage
1. Create a `Gemfile` and add `gem "problem_child"`
2. Create a `config.ru` file and add the following:
```ruby
require "problem_child"
run ProblemChild::App
```
Then, follow the configuration options below.
## Configuring
First, you must set the following environmental variable:
* `GITHUB_REPO` - the repo to open the issue against in the form of `owner/repo`
You must also set **one** of the following:
* `GITHUB_TOKEN` - A personal access token for a bot account with the ability to create an issue in the `GITHUB_REPO` if you would like all submissions to be anonymous
* `GITHUB_ORG_ID` - The GitHub Org ID e.g, `@whitehouse` if you'd like all users to authenticate against a GitHub Org prior to being presented the form, or
* `GITHUB_TEAM_ID` - The numeric Team ID (e.g., 1234) if you'd like all users to authenticate against a GitHub Team prior to being presented the form
If you are using OAuth Authentication (e.g., you set `GITHUB_ORG_ID` or `GITHUB_TEAM_ID` so that the user submits as themselves), you must also set the following as environmental variables:
* `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET` - Created via [github.com/settings/applications/new](https://github.com/settings/applications/new)
*Pro-tip*: When developing locally, you can add these values to a `.env` file in the project root, and they will be automatically read in on load
## Customizing
By default, Problem Child will prompt the user with a simple form that contains only the title and body. If you'd like to customize the form, you must do the following:
1. Create a new directory called `views`
2. Create a `layout.erb` and `form.erb`
3. Customize both the layout and form as a standard HTML form. Check out [these examples](lib/problem_child/views) to get started.
4. Add the following (middle) line to your `config.ru` file:
```ruby
require "problem_child"
ProblemChild.views_dir = "/path/to/your/views/directory"
run ProblemChild::App
```
*Pro-tip*: You can use any standard HTML form fields, but be sure to name one field `title`, which will become the issue title.
*Pro-tip II*: Problem child can set labels. You can do this either as a hidden field:
```html
```
or as a checkbox:
```html
```
*Pro-tip III*: Set the public directory
By default Problem child points to an internal public directory which includes jQuery and Twitter Bootstrap. You can add them to your custom layout.erb:
```html
```
However, if you would like to add more files to your form app (e.g., favicon, custom CSS & JS files, etc.), you can redefine where the public directory points:
```ruby
require "problem_child"
ProblemChild.views_dir = "/path/to/your/views/directory"
ProblemChild.public_dir = Rails.public_path
run ProblemChild::App
```
Note that you will lose access to the bundled jQuery & Bootstrap libraries and will have to put copies into your new public directory to use them.
## Creating pull requests
Problem child can also be used to create pull requests. Simply add one or more file inputs to your form. The uploaded files will be committed to a newly created feature branch, and a pull request will be created against the repo's primary branch with the rest of the form content. You'll also want to change the form type to `enctype="multipart/form-data"`.
```html
```
## Contributing
1. Fork it ( https://github.com/[my-github-username]/problem_child/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request