https://github.com/jiayihu/gh-issues-for-comments
🐈 Automatically create Github issues to use as blog comments
https://github.com/jiayihu/gh-issues-for-comments
comments github github-pages
Last synced: 2 months ago
JSON representation
🐈 Automatically create Github issues to use as blog comments
- Host: GitHub
- URL: https://github.com/jiayihu/gh-issues-for-comments
- Owner: jiayihu
- License: mit
- Created: 2017-07-26T20:59:31.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-07-27T21:16:23.000Z (about 8 years ago)
- Last Synced: 2025-07-25T21:48:04.359Z (3 months ago)
- Topics: comments, github, github-pages
- Language: JavaScript
- Homepage:
- Size: 29.3 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gh-issues-for-comments
[](https://www.npmjs.com/package/gh-issues-for-comments)
Automatically open a **Github issue as blog comments** for every articles of your blog. It also creates a `gh-comments.json` file to keep track of created issues for future executions and to open issues only for new articles.
This package is useful if you have a statically generated blog, such as [Jekyll](https://jekyllrb.com) or [Metalsmith](http://www.metalsmith.io), and you want to use Github issues as comments instead of the evil `Disqus`. For more details read [Using and automating GitHub issues as blog comments](http://blog.jiayihu.net/using-and-automating-github-issues-as-blog-comments/) or [Replacing Disqus with Github Comments](http://donw.io/post/github-comments/).
## Install
```
npm install gh-issues-for-comments --save
```## Usage
```javascript
import ghComments from 'gh-issues-for-comments';// Array of articles with any shape you like, for example obtained from Markdown files.
// If you use default options each article must have 'id' and 'title' properties
const articles = [
{ id: 1, title: 'Hello world' },
{ id: 2, title: 'Hello world 2' }
];ghComments(articles, {
username: 'jiayihu',
repo: 'blog',
token: '123GithubOAuthToken',
})
.then(createdIssues => console.log(createdIssues))
.catch(error => console.error('Error with issues creation', error));
```## API
### ghComments(articles, options): Promise
Create a Github issue for every article without a comments issue yet. Returns a `Promise` with the updated map with `` pairs. It's the same object saved in `gh-comments.json`.
`articles` is an `Array` of articles objects with any shape. Each article will be used to return the data for its issue in `getIssue(article)` option.
`options` has the following shape:
- **options.username** (*required*)
Type: `string`
Github username- **options.repo** (*required*)
Type: `string`
Github repository name- **options.token** (*required*)
Type: `string`
Github OAuth access token. Read [here](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) for more details. The only `scope` needed by the package is `public_repo`.- **options.idProperty** (*optional*)
Type: `string`Default value: `id`
Article property to use as unique id. If an id is not available, it's recommended to use something meaninful but not likely to change like the filepath or title.- **options.jsonPath** (*optional*)
Type: `string`Default value: `gh-comments.json`
Path to the JSON file where articles issue ids are stored- **options.getIssue** (*optional*)
Type: `Function`Default value:
```javascript
function getIssue(article) {
return {
title: `Comments: ${article.title}`,
body: `This issue is reserved for comments to **${article.title}**. Leave a comment below and it will be shown in the blog page.`,
labels: ['comments'],
};
}
```
Returns the issue data based on the article. If you want the article name, in the issue body, to be linked you can use the following value:```javascript
function getIssue(article) {
const formattedTitle = article.title.replace(/\s/g, '-').toLowerCase();
const articleUrl = url.resolve('http://blog.jiayihu.net', formattedTitle);return {
title: `Comments: ${article.title}`,
body: `This issue is reserved for comments to [${article.title}](${articleUrl}). Leave a comment below and it will be shown in the blog page.`,
labels: ['comments'],
};
},
```## Avoid issue creation
The script won't open an issue for an article if it finds an `issueId` in `gh-comments.json` for *that* article. So for example you can add the following content to skip issue creation for `articles/angular-aot.html`.
```json
{
"articles/angular-aot.html": {
"issueId": -1
}
}
```