├── .github └── FUNDING.yml ├── .gitignore ├── CONTRIBUTING.md ├── DOCUMENTATION.md ├── LICENSE ├── README.md ├── bin └── github-labeller ├── example └── index.js ├── lib └── index.js └── package.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: ionicabizau 2 | patreon: ionicabizau 3 | open_collective: ionicabizau 4 | custom: https://www.buymeacoffee.com/h96wwchmy -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.swo 3 | *~ 4 | *.log 5 | node_modules 6 | *.env 7 | .DS_Store 8 | package-lock.json 9 | .bloggify/* 10 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 🌟 Contributing 2 | 3 | Want to contribute to this project? Great! Please read these quick steps to streamline the process and avoid unnecessary tasks. ✨ 4 | 5 | ## 💬 Discuss Changes 6 | Start by opening an issue in the repository using the [bug tracker][1]. Describe your proposed contribution or the bug you've found. If relevant, include platform info and screenshots. 🖼️ 7 | 8 | Wait for feedback before proceeding unless the fix is straightforward, like a typo. 📝 9 | 10 | ## 🔧 Fixing Issues 11 | 12 | Fork the project and create a branch for your fix, naming it `some-great-feature` or `some-issue-fix`. Commit changes while following the [code style][2]. If the project has tests, add one. ✅ 13 | 14 | If a `package.json` or `bower.json` exists, add yourself to the `contributors` array; create it if it doesn't. 🙌 15 | 16 | ```json 17 | { 18 | "contributors": [ 19 | "Your Name (http://your.website)" 20 | ] 21 | } 22 | ``` 23 | 24 | ## 📬 Creating a Pull Request 25 | Open a pull request and reference the initial issue (e.g., *fixes #*). Provide a clear title and consider adding visual aids for clarity. 📊 26 | 27 | ## ⏳ Wait for Feedback 28 | Your contributions will be reviewed. If feedback is given, update your branch as needed, and the pull request will auto-update. 🔄 29 | 30 | ## 🎉 Everyone Is Happy! 31 | Your contributions will be merged, and everyone will appreciate your effort! 😄❤️ 32 | 33 | Thanks! 🤩 34 | 35 | [1]: /issues 36 | [2]: https://github.com/IonicaBizau/code-style -------------------------------------------------------------------------------- /DOCUMENTATION.md: -------------------------------------------------------------------------------- 1 | ## Documentation 2 | 3 | You can see below the API reference of this module. 4 | 5 | ### `GitHubLabeller(labels, options, callback)` 6 | Adds the provided labels to specified repository or to all repositories from 7 | specified account. 8 | 9 | #### Params 10 | 11 | - **Array** `labels`: An array of objects like this: 12 | - **Object** `options`: An object containing the following fields: 13 | - `repo` (String): A string like `"user/repository"` or `"user"`–in this case 14 | the labels will be created in all repositories 15 | - `source` (String): If provided, the tool will take the labels from this repository. 16 | - `token` (String): The GitHub token. 17 | - **Function** `callback`: The callback function. 18 | 19 | #### Return 20 | - **EventEmitter** An event emitter you can use for listening for specific events: 21 | - `added` (owner, repo, label, err, data)–after a label was created 22 | 23 | ### `checkRepo(ev, gh, owner, repo, label, callback)` 24 | Check the current labels, then post or patch new ones. 25 | 26 | #### Params 27 | 28 | - **EventEmitter** `ev`: The event emitter instance. 29 | - **GitHub** `gh`: The `gh.js` instance. 30 | - **String** `owner`: The owner username. 31 | - **String** `repo`: The repository name. 32 | - **Object** `label`: The label object. 33 | - **Function** `callback`: Callback function 34 | 35 | #### Return 36 | - **Request** The request object. 37 | 38 | ### `addToRepo(ev, gh, owner, repo, label, label, callback)` 39 | Creates a new label. 40 | 41 | #### Params 42 | 43 | - **EventEmitter** `ev`: The event emitter instance. 44 | - **GitHub** `gh`: The `gh.js` instance. 45 | - **String** `owner`: The owner username. 46 | - **String** `repo`: The repository name. 47 | - **Object** `label`: The label object. 48 | - **Array** `label`: The list of current labels. 49 | - **Function** `callback`: Callback function 50 | 51 | #### Return 52 | - **Request** The request object. 53 | 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-25 Ionică Bizău (https://ionicabizau.net) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | [![github-labeller](http://i.imgur.com/T59a7rb.png)](#) 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | # `$ github-labeller` 23 | 24 | [![Support me on Patreon][badge_patreon]][patreon] [![Buy me a book][badge_amazon]][amazon] [![PayPal][badge_paypal_donate]][paypal-donations] [![Ask me anything](https://img.shields.io/badge/ask%20me-anything-1abc9c.svg)](https://github.com/IonicaBizau/ama) [![Version](https://img.shields.io/npm/v/github-labeller.svg)](https://www.npmjs.com/package/github-labeller) [![Downloads](https://img.shields.io/npm/dt/github-labeller.svg)](https://www.npmjs.com/package/github-labeller) [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/@johnnyb?utm_source=github&utm_medium=button&utm_term=johnnyb&utm_campaign=github) 25 | 26 | Buy Me A Coffee 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | > Automagically create issue labels in your GitHub projects. 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | [![github-labeller](http://i.imgur.com/jpELj6R.png)](#) 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | ## :cloud: Installation 55 | 56 | You can install the package globally and use it as command line tool: 57 | 58 | 59 | ```sh 60 | # Using npm 61 | npm install --global github-labeller 62 | 63 | # Using yarn 64 | yarn global add github-labeller 65 | ``` 66 | 67 | 68 | Then, run `github-labeller --help` and see what the CLI tool can do. 69 | 70 | 71 | ``` 72 | $ github-labeller --help 73 | Usage: github-labeller [options] 74 | 75 | Options: 76 | -r, --repo The repository full name (e.g. 77 | ionicabizau/github-labeller) or the username. 78 | -t, --token The GitHub token. 79 | -c, --config The configuration file (a JSON file containing an 80 | array like this: [{ "color": "#4aa3df", "name": 81 | "Some label name" }]). 82 | -i, --import Import labels from a specific repository. 83 | -h, --help Displays this help. 84 | -v, --version Displays version information. 85 | 86 | Examples: 87 | github-labeller -r ionicabizau/github-labeller -t some-token -c my-labels.json 88 | github-labeller -r ionicabizau -i jlord/git-it-electron -t some-token # import @jlord's labels in all my projects 89 | 90 | Documentation can be found at https://github.com/IonicaBizau/github-labeller#readme 91 | ``` 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | You also need to get a GitHub application token. Go here: https://github.com/settings/tokens. Click on Generate New Token. Because you will be setting labels for repositories, you will need to add the `repo` scopes. Name the token something informative: `github-labeller` is a good name. 101 | 102 | If you would like to use this label more than once, save it somewhere in your `.bash_profile` or `.bashrc` files. These are normally hidden in your root directory. 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | ## :clipboard: Example 112 | 113 | 114 | 115 | Here is an example how to use this package as library. To install it locally, as library, you can use `npm install github-labeller` (or `yarn add github-labeller`): 116 | 117 | 118 | 119 | ```js 120 | // Dependencies 121 | var GitHubLabeller = require("github-labeller"); 122 | 123 | // Provide the token and some info 124 | var labeller = GitHubLabeller([ 125 | { 126 | color: "#4aa3df" 127 | , name: "Some blue label" 128 | } 129 | ], { 130 | repo: "jlord/git-it-electron" 131 | , token: "your token here" 132 | }, function (err, data) { 133 | if (err) { 134 | return console.log(err); 135 | } 136 | console.log(data); 137 | }); 138 | 139 | labeller.on("added", function (owner, repo, label, err, data) { 140 | console.log(label, owner + "/" + repo); 141 | }); 142 | ``` 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | ## :question: Get Help 156 | 157 | There are few ways to get help: 158 | 159 | 160 | 161 | 1. Please [post questions on Stack Overflow](https://stackoverflow.com/questions/ask). You can open issues with questions, as long you add a link to your Stack Overflow question. 162 | 2. For bug reports and feature requests, open issues. :bug: 163 | 3. For direct and quick help, you can [use Codementor](https://www.codementor.io/johnnyb). :rocket: 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | ## :memo: Documentation 172 | 173 | For full API reference, see the [DOCUMENTATION.md][docs] file. 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | ## :yum: How to contribute 187 | Have an idea? Found a bug? See [how to contribute][contributing]. 188 | 189 | 190 | ## :sparkling_heart: Support my projects 191 | I open-source almost everything I can, and I try to reply to everyone needing help using these projects. Obviously, 192 | this takes time. You can integrate and use these projects in your applications *for free*! You can even change the source code and redistribute (even resell it). 193 | 194 | However, if you get some profit from this or just want to encourage me to continue creating stuff, there are few ways you can do it: 195 | 196 | 197 | - Starring and sharing the projects you like :rocket: 198 | - [![Buy me a book][badge_amazon]][amazon]—I love books! I will remember you after years if you buy me one. :grin: :book: 199 | - [![PayPal][badge_paypal]][paypal-donations]—You can make one-time donations via PayPal. I'll probably buy a ~~coffee~~ tea. :tea: 200 | - [![Support me on Patreon][badge_patreon]][patreon]—Set up a recurring monthly donation and you will get interesting news about what I'm doing (things that I don't share with everyone). 201 | - **Bitcoin**—You can send me bitcoins at this address (or scanning the code below): `1P9BRsmazNQcuyTxEqveUsnf5CERdq35V6` 202 | 203 | ![](https://i.imgur.com/z6OQI95.png) 204 | 205 | 206 | Thanks! :heart: 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | ## :scroll: License 232 | 233 | [MIT][license] © [Ionică Bizău][website] 234 | 235 | 236 | 237 | 238 | 239 | 240 | [license]: /LICENSE 241 | [website]: https://ionicabizau.net 242 | [contributing]: /CONTRIBUTING.md 243 | [docs]: /DOCUMENTATION.md 244 | [badge_patreon]: https://ionicabizau.github.io/badges/patreon.svg 245 | [badge_amazon]: https://ionicabizau.github.io/badges/amazon.svg 246 | [badge_paypal]: https://ionicabizau.github.io/badges/paypal.svg 247 | [badge_paypal_donate]: https://ionicabizau.github.io/badges/paypal_donate.svg 248 | [patreon]: https://www.patreon.com/ionicabizau 249 | [amazon]: http://amzn.eu/hRo9sIZ 250 | [paypal-donations]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RVXDDLKKLQRJW 251 | -------------------------------------------------------------------------------- /bin/github-labeller: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Dependencies 4 | var GitHubLabeller = require("../lib") 5 | , Logger = require("bug-killer") 6 | , Clp = require("clp") 7 | , Package = require("../package") 8 | , Abs = require("abs") 9 | , ReadJson = require("r-json") 10 | ; 11 | 12 | // Parse the command line arguments 13 | var repoOpt = new Clp.Option(["r", "repo"], "The repository full name (e.g. ionicabizau/github-labeller) or the username.", "user(/repo)") 14 | , tokenOpt = new Clp.Option(["t", "token"], "The GitHub token.", "token") 15 | , configOpt = new Clp.Option(["c", "config"], "The configuration file (a JSON file containing an array like this: [{ \"color\": \"#4aa3df\", \"name\": \"Some label name\" }]).", "path") 16 | , importOpt = new Clp.Option(["i", "import"], "Import labels from a specific repository.", "user/repository") 17 | , parser = new Clp({ 18 | name: Package.name 19 | , version: Package.version 20 | , exe: Package.name 21 | , examples: [ 22 | "github-labeller -r ionicabizau/github-labeller -t some-token -c my-labels.json" 23 | , "github-labeller -r ionicabizau -i jlord/git-it-electron -t some-token # import @jlord's labels in all my projects" 24 | ] 25 | , docs_url: Package.homepage 26 | , process: true 27 | }, [ 28 | repoOpt 29 | , tokenOpt 30 | , configOpt 31 | , importOpt 32 | ]) 33 | ; 34 | 35 | if (!configOpt.is_provided && !importOpt.is_provided) { 36 | return console.log(parser.displayHelp()); 37 | } 38 | 39 | if (!tokenOpt.is_provided) { 40 | return Logger.log(new Error("The token is mandatory.")); 41 | } 42 | 43 | if (configOpt.value) { 44 | configOpt.value = Abs(configOpt.value); 45 | } 46 | 47 | function addLabels(labels) { 48 | var labeller = GitHubLabeller(labels || [], { 49 | source: importOpt.value 50 | , repo: repoOpt.value 51 | , token: tokenOpt.value 52 | }, function (err) { 53 | if (err) { 54 | return Logger.log(err); 55 | } 56 | Logger.log("Done."); 57 | }); 58 | labeller.on("added", function (owner, repo, label, err, data) { 59 | if (err) { 60 | return Logger.log(new Error("Failed to add label " + label.name + " to " + owner + "/" + repo + ". " + (err.message || err))); 61 | } 62 | Logger.log("Added " + label.name + " to " + owner + "/" + repo + "."); 63 | }); 64 | } 65 | 66 | if (configOpt.value) { 67 | ReadJson(configOpt.value, function (err, labels) { 68 | if (err) { return Logger.log(err); } 69 | addLabels(labels); 70 | }); 71 | } else { 72 | addLabels(); 73 | } 74 | -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | // Dependencies 2 | var GitHubLabeller = require("../lib"); 3 | 4 | // Provide the token and some info 5 | var labeller = GitHubLabeller([ 6 | { 7 | color: "#4aa3df" 8 | , name: "Some blue label" 9 | } 10 | ], { 11 | repo: "jlord/git-it-electron" 12 | , token: "your token here" 13 | }, function (err, data) { 14 | if (err) { 15 | return console.log(err); 16 | } 17 | console.log(data); 18 | }); 19 | 20 | labeller.on("added", function (owner, repo, label, err, data) { 21 | console.log(label, owner + "/" + repo); 22 | }); 23 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | // Dependencies 2 | var GitHub = require("gh.js") 3 | , EventEmitter = require("events").EventEmitter 4 | , SameTime = require("same-time") 5 | ; 6 | 7 | /** 8 | * GitHubLabeller 9 | * Adds the provided labels to specified repository or to all repositories from 10 | * specified account. 11 | * 12 | * @name GitHubLabeller 13 | * @function 14 | * @param {Array} labels An array of objects like this: 15 | * @param {Object} options An object containing the following fields: 16 | * 17 | * - `repo` (String): A string like `"user/repository"` or `"user"`–in this case 18 | * the labels will be created in all repositories 19 | * - `source` (String): If provided, the tool will take the labels from this repository. 20 | * - `token` (String): The GitHub token. 21 | * 22 | * @param {Function} callback The callback function. 23 | * @return {EventEmitter} An event emitter you can use for listening for specific events: 24 | * 25 | * - `added` (owner, repo, label, err, data)–after a label was created 26 | */ 27 | function GitHubLabeller (labels, options, callback) { 28 | 29 | var ev = new EventEmitter() 30 | , i = 0 31 | , repo = null 32 | , user = null 33 | , splits = null 34 | , gh = null 35 | , cLabel = null 36 | ; 37 | 38 | if (!labels.length && !options.source) { 39 | callback(null, null); 40 | return ev; 41 | } 42 | 43 | gh = new GitHub({ token: options.token }); 44 | if (options.source) { 45 | gh.get("repos/" + options.source + "/labels", { all: true }, function (err, lbls) { 46 | if (err) { return callback(err); } 47 | delete options.source; 48 | labels = labels.concat(lbls); 49 | var gl = GitHubLabeller(labels, options, callback); 50 | gl.on("added", ev.emit.bind(ev, "added")); 51 | }); 52 | return ev; 53 | } 54 | 55 | // Normalize labels 56 | for (; i < labels.length; ++i) { 57 | cLabel = labels[i]; 58 | cLabel = labels[i] = { 59 | name: cLabel.name || cLabel.label 60 | , color: cLabel.color.charAt(0) === "#" 61 | ? cLabel.color.substring(1) 62 | : cLabel.color 63 | }; 64 | if (!cLabel.name) { 65 | callback(new Error("Missing name for label: " + i)); 66 | return ev; 67 | } 68 | if (!cLabel.color) { 69 | callback(new Error("Missing color for label: " + i)); 70 | return ev; 71 | } 72 | } 73 | 74 | repo = options.repo 75 | 76 | // user/repo 77 | splits = repo.split("/"); 78 | if (splits.length === 2) { 79 | user = splits[0]; 80 | repo = splits[1]; 81 | } else { 82 | user = repo; 83 | repo = null; 84 | } 85 | 86 | if (repo) { 87 | GitHubLabeller.checkRepo(ev, gh, user, repo, labels, callback); 88 | } else { 89 | gh.get("users/" + user + "/repos", { all: true }, function (err, repos) { 90 | if (err) { return callback(err); } 91 | SameTime(repos.map(function (c) { 92 | return function (done) { 93 | GitHubLabeller.checkRepo(ev, gh, user, c.name, labels, done); 94 | } 95 | }), callback); 96 | }); 97 | } 98 | 99 | return ev; 100 | } 101 | 102 | /** 103 | * checkRepo 104 | * Check the current labels, then post or patch new ones. 105 | * 106 | * @name checkRepo 107 | * @function 108 | * @param {EventEmitter} ev The event emitter instance. 109 | * @param {GitHub} gh The `gh.js` instance. 110 | * @param {String} owner The owner username. 111 | * @param {String} repo The repository name. 112 | * @param {Object} label The label object. 113 | * @param {Function} callback Callback function 114 | * @return {Request} The request object. 115 | */ 116 | GitHubLabeller.checkRepo = function (ev, gh, owner, repo, label, callback) { 117 | return gh.get("repos/" + owner + "/" + repo + "/labels", function (err, labels) { 118 | var i = 0; 119 | 120 | if (err) { return callback(err); } 121 | 122 | for (; i < labels.length; ++i) { 123 | labels[i] = labels[i].name; 124 | } 125 | 126 | GitHubLabeller.addToRepo(ev, gh, owner, repo, label, labels, callback); 127 | }); 128 | }; 129 | 130 | /** 131 | * addToRepo 132 | * Creates a new label. 133 | * 134 | * @name addToRepo 135 | * @function 136 | * @param {EventEmitter} ev The event emitter instance. 137 | * @param {GitHub} gh The `gh.js` instance. 138 | * @param {String} owner The owner username. 139 | * @param {String} repo The repository name. 140 | * @param {Object} label The label object. 141 | * @param {Array} label The list of current labels. 142 | * @param {Function} callback Callback function 143 | * @return {Request} The request object. 144 | */ 145 | GitHubLabeller.addToRepo = function (ev, gh, owner, repo, label, labels, callback) { 146 | var endpoint = "repos/" + owner + "/" + repo + "/labels"; 147 | 148 | if (Array.isArray(label)) { 149 | return SameTime(label.map(function (c) { 150 | return function (done) { 151 | GitHubLabeller.addToRepo(ev, gh, owner, repo, c, labels, function (err, data) { 152 | ev.emit("added", owner, repo, c, err, data); 153 | done(null, data); 154 | }); 155 | }; 156 | }), callback); 157 | } 158 | 159 | if (labels.indexOf(label.name) > -1) { 160 | endpoint += "/" + encodeURIComponent(label.name); 161 | } 162 | 163 | return gh.get(endpoint, { data: label }, callback); 164 | }; 165 | 166 | module.exports = GitHubLabeller; 167 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-labeller", 3 | "version": "1.3.12", 4 | "description": "Automagically create issue labels in your GitHub projects.", 5 | "main": "lib/index.js", 6 | "bin": { 7 | "github-labeller": "./bin/github-labeller" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+ssh://git@github.com/IonicaBizau/github-labeller.git" 15 | }, 16 | "keywords": [ 17 | "github", 18 | "labels", 19 | "automatization" 20 | ], 21 | "author": "Ionică Bizău (https://ionicabizau.net)", 22 | "contributors": [ 23 | "Ionică Bizău (http://ionicabizau.net)", 24 | "Titus Wormer (http://wooorm.com)" 25 | ], 26 | "license": "MIT", 27 | "bugs": { 28 | "url": "https://github.com/IonicaBizau/github-labeller/issues" 29 | }, 30 | "homepage": "https://github.com/IonicaBizau/github-labeller#readme", 31 | "directories": { 32 | "example": "example" 33 | }, 34 | "dependencies": { 35 | "abs": "^1.0.0", 36 | "bug-killer": "^4.0.0", 37 | "clp": "^3.0.0", 38 | "gh.js": "^2.2.0", 39 | "r-json": "^1.0.0", 40 | "same-time": "^2.0.0" 41 | }, 42 | "devDependencies": {}, 43 | "blah": { 44 | "h_img": "http://i.imgur.com/T59a7rb.png", 45 | "ex_img": "http://i.imgur.com/jpELj6R.png", 46 | "installation": { 47 | "p": [ 48 | "You also need to get a GitHub application token. Go here: https://github.com/settings/tokens. Click on Generate New Token. Because you will be setting labels for repositories, you will need to add the `repo` scopes. Name the token something informative: `github-labeller` is a good name.", 49 | "If you would like to use this label more than once, save it somewhere in your `.bash_profile` or `.bashrc` files. These are normally hidden in your root directory." 50 | ] 51 | } 52 | }, 53 | "files": [ 54 | "bin/", 55 | "app/", 56 | "lib/", 57 | "dist/", 58 | "src/", 59 | "scripts/", 60 | "resources/", 61 | "menu/", 62 | "cli.js", 63 | "index.js", 64 | "index.d.ts", 65 | "package-lock.json", 66 | "bloggify.js", 67 | "bloggify.json", 68 | "bloggify/" 69 | ] 70 | } --------------------------------------------------------------------------------