From c62978902946cc468e12137dbfc6c63b704d32cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Kar=C3=A9kinian?= Date: Tue, 14 Feb 2017 11:13:09 +0100 Subject: [PATCH 1/6] Temporarily remove hubot-kredts script (syntax error) --- scripts/hubot-kredts.js | 127 ---------------------------------------- 1 file changed, 127 deletions(-) delete mode 100644 scripts/hubot-kredts.js diff --git a/scripts/hubot-kredts.js b/scripts/hubot-kredts.js deleted file mode 100644 index c9954b4..0000000 --- a/scripts/hubot-kredts.js +++ /dev/null @@ -1,127 +0,0 @@ -// Description: -// Kosmos Kredits chat integration -// -// Configuration: -// KREDITS_WEBHOOK_TOKEN: A string for building your secret webhook URL -// KREDITS_ROOM: Kredit proposals are posted to this chatroom -// -// Authors: -// Sebastian Kippe - -// const fs = require('fs'); -const fetch = require('node-fetch'); - -(function() { - "use strict"; - - module.exports = function(robot) { - - function amountFromIssueLabels(issue) { - let kreditsLabel = issue.labels.map(l => l.name) - .filter(n => n.match(/^kredits/))[0]; - // No label, no kredits - if (typeof kreditsLabel === 'undefined') { return 0; } - - // TODO move to config maybe? - let amount; - switch(kreditsLabel) { - case 'kredits-1': - amount = 50; - break; - case 'kredits-2': - amount = 150; - break; - case 'kredits-3': - amount = 500; - break; - } - - return amount; - } - - function createProposal(recipient, amount, url/*, metaData*/) { - return new Promise((resolve/*, reject*/) => { - // TODO write metaData to IPFS - console.log(`Creating proposal to issue ${amount}₭S to ${recipient} for ${url}...`); - - // robot.messageRoom(process.env.KREDITS_ROOM, message); - resolve(); - }); - } - - function handleGitHubIssueClosed(data) { - return new Promise((resolve/*, reject*/) => { - // fs.writeFileSync('tmp/github-issue.json', JSON.stringify(data, null, 4)); - let recipients; - let issue = data.issue; - let assignees = issue.assignees.map(a => a.login); - let web_url = issue.html_url; - - let amount = amountFromIssueLabels(issue); - if (amount === 0) { resolve(); return; } - - if (assignees.length > 0) { - recipients = assignees; - } else { - recipients = [issue.user.login]; - } - - recipients.forEach(recipient => { - createProposal(recipient, amount, web_url, issue); - }); - - resolve(); - }); - } - - function handleGitHubPullRequestClosed(data) { - return new Promise((resolve, reject) => { - // fs.writeFileSync('tmp/github-pr.json', JSON.stringify(data, null, 4)); - let recipients; - let pull_request = data.pull_request; - let assignees = pull_request.assignees.map(a => a.login); - let web_url = pull_request._links.html.href; - let pr_issue_url = pull_request.issue_url; - - if (assignees.length > 0) { - recipients = assignees; - } else { - recipients = [pull_request.user.login]; - } - - fetch(pr_issue_url) - .then(response => { - if (response.status >= 400) { - reject('Bad response from fetching PR issue'); - } - return response.json(); - }) - .then(issue => { - // fs.writeFileSync('tmp/github-pr-issue.json', JSON.stringify(data, null, 4)); - let amount = amountFromIssueLabels(issue); - if (amount === 0) { resolve(); return(); } - - recipients.forEach(recipient => { - createProposal(recipient, amount, web_url, pull_request); - }); - - resolve(); - }); - }); - } - - robot.router.post('/incoming/kredits/github/'+process.env.KREDITS_WEBHOOK_TOKEN, (req, res) => { - let evt = req.header('X-GitHub-Event'); - let data = req.body; - console.log(`Received GitHub hook. Event: ${evt}, action: ${data.action}`); - - if (evt === 'pull_request' && data.action === 'closed') { - handleGitHubPullRequestClosed(data).then(() => res.send(200)); - } - else if (evt === 'issues' && data.action === 'closed') { - handleGitHubIssueClosed(data).then(() => res.send(200)); - } - }); - - }; -}()); From 8b5d6ab820f2781ead1ad81350a5dd28916d35dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Kar=C3=A9kinian?= Date: Tue, 14 Feb 2017 11:25:32 +0100 Subject: [PATCH 2/6] Don't load hubot-kredits for now --- hubot-scripts.json | 1 - 1 file changed, 1 deletion(-) diff --git a/hubot-scripts.json b/hubot-scripts.json index 6a181e8..0d4f101 100644 --- a/hubot-scripts.json +++ b/hubot-scripts.json @@ -1,3 +1,2 @@ [ - "hubot-kredits" ] From 104309f8fcca480740205bae534edf9c101be171 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 2 May 2017 17:43:32 +0200 Subject: [PATCH 3/6] Add hubot-kredits npm module --- external-scripts.json | 3 ++- hubot-scripts.json | 2 -- package.json | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 hubot-scripts.json diff --git a/external-scripts.json b/external-scripts.json index 6d666c9..a5e495e 100644 --- a/external-scripts.json +++ b/external-scripts.json @@ -10,5 +10,6 @@ "hubot-seen", "hubot-rss-reader", "hubot-incoming-webhook", - "hubot-yubikey-invalidation" + "hubot-yubikey-invalidation", + "hubot-kredits" ] diff --git a/hubot-scripts.json b/hubot-scripts.json deleted file mode 100644 index 0d4f101..0000000 --- a/hubot-scripts.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] diff --git a/package.json b/package.json index c4ac3dd..5c1bd1f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "hubot-shipit": "^0.2.0", "hubot-tell": "^1.2.3", "hubot-yubikey-invalidation": "0.0.3", - "node-fetch": "^1.6.3", "request": "2.30.0" }, "engines": { From f3544296d9591615b5d2038a1590b0f75faf5650 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 2 May 2017 18:19:23 +0200 Subject: [PATCH 4/6] Add script commands for run.sh and ngrok proxy --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 5c1bd1f..168fedf 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,10 @@ "name": "hal8000", "version": "0.6.0", "private": true, + "scripts": { + "start": "./run.sh", + "ngrok": "ngrok http -region=ap -hostname=hubot-dev.kosmos.org localhost:8080" + }, "authors": [ "Sebastian Kippe ", "Greg Karékinian " From 6b1dca48dd5ed036d6ff7bbd4730ee16bf68d8d7 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 2 May 2017 18:40:40 +0200 Subject: [PATCH 5/6] Update README Remove all the generated stuff and add actually useful information for this particular bot. --- README.md | 215 ++++-------------------------------------------------- 1 file changed, 13 insertions(+), 202 deletions(-) diff --git a/README.md b/README.md index 23538b7..3f0700d 100644 --- a/README.md +++ b/README.md @@ -1,219 +1,30 @@ # hal8000 -hal8000 is a chat bot built on the [Hubot][hubot] framework. It was -initially generated by [generator-hubot][generator-hubot], and configured to be -deployed on [Heroku][heroku] to get you up and running as quick as possible. +hal8000 is a chat bot built on the [Hubot](https://hubot.github.com/) +framework. It's currently running in some channels on Freenode. -This README is intended to help get you started. Definitely update and improve -to talk about your own instance, how to use and deploy, what functionality he -has, etc! +### Running hal8000 locally -[heroku]: http://www.heroku.com -[hubot]: http://hubot.github.com -[generator-hubot]: https://github.com/github/generator-hubot + npm start -### Running hal8000 Locally +### Incoming webhooks in development -You can test your hubot by running the following, however some plugins will not -behave as expected unless the [environment variables](#configuration) they rely -upon have been set. +With [ngrok](https://ngrok.com) installed (and the ngrok binary in your PATH), +you can open an HTTP tunnel with: -You can start hal8000 locally by running: - - % bin/hubot - -You'll see some start up output and a prompt: - - [Sat Feb 28 2015 12:38:27 GMT+0000 (GMT)] INFO Using default redis on localhost:6379 - hal8000> - -Then you can interact with hal8000 by typing `hal8000 help`. - - hal8000> hal8000 help - hal8000 animate me - The same thing as `image me`, except adds [snip] - hal8000 help - Displays all of the help commands that hal8000 knows about. - ... + npm run ngrok ### Configuration -A few scripts (including some installed by default) require environment -variables to be set as a simple form of configuration. - -Each script should have a commented header which contains a "Configuration" -section that explains which values it requires to be placed in which variable. -When you have lots of scripts installed this process can be quite labour -intensive. The following shell command can be used as a stop gap until an -easier way to do this has been implemented. - - grep -o 'hubot-[a-z0-9_-]\+' external-scripts.json | \ - xargs -n1 -i sh -c 'sed -n "/^# Configuration/,/^#$/ s/^/{} /p" \ - $(find node_modules/{}/ -name "*.coffee")' | \ - awk -F '#' '{ printf "%-25s %s\n", $1, $2 }' - -How to set environment variables will be specific to your operating system. -Rather than recreate the various methods and best practices in achieving this, -it's suggested that you search for a dedicated guide focused on your OS. - -### Scripting - -An example script is included at `scripts/example.coffee`, so check it out to -get started, along with the [Scripting Guide](scripting-docs). - -For many common tasks, there's a good chance someone has already one to do just -the thing. - -[scripting-docs]: https://github.com/github/hubot/blob/master/docs/scripting.md - -### external-scripts - -There will inevitably be functionality that everyone will want. Instead of -writing it yourself, you can use existing plugins. - -Hubot is able to load plugins from third-party `npm` packages. This is the -recommended way to add functionality to your hubot. You can get a list of -available hubot plugins on [npmjs.com](npmjs) or by using `npm search`: - - % npm search hubot-scripts panda - NAME DESCRIPTION AUTHOR DATE VERSION KEYWORDS - hubot-pandapanda a hubot script for panda responses =missu 2014-11-30 0.9.2 hubot hubot-scripts panda - ... - - -To use a package, check the package's documentation, but in general it is: - -1. Use `npm install --save` to add the package to `package.json` and install it -2. Add the package name to `external-scripts.json` as a double quoted string - -You can review `external-scripts.json` to see what is included by default. - -##### Advanced Usage - -It is also possible to define `external-scripts.json` as an object to -explicitly specify which scripts from a package should be included. The example -below, for example, will only activate two of the six available scripts inside -the `hubot-fun` plugin, but all four of those in `hubot-auto-deploy`. - -```json -{ - "hubot-fun": [ - "crazy", - "thanks" - ], - "hubot-auto-deploy": "*" -} -``` - -**Be aware that not all plugins support this usage and will typically fallback -to including all scripts.** - -[npmjs]: https://www.npmjs.com - -### hubot-scripts - -Before hubot plugin packages were adopted, most plugins were held in the -[hubot-scripts][hubot-scripts] package. Some of these plugins have yet to be -migrated to their own packages. They can still be used but the setup is a bit -different. - -To enable scripts from the hubot-scripts package, add the script name with -extension as a double quoted string to the `hubot-scripts.json` file in this -repo. - -[hubot-scripts]: https://github.com/github/hubot-scripts - -## Persistence - -If you are going to use the `hubot-redis-brain` package (strongly suggested), -you will need to add the Redis to Go addon on Heroku which requires a verified -account or you can create an account at [Redis to Go][redistogo] and manually -set the `REDISTOGO_URL` variable. - - % heroku config:add REDISTOGO_URL="..." - -If you don't need any persistence feel free to remove the `hubot-redis-brain` -from `external-scripts.json` and you don't need to worry about redis at all. - -[redistogo]: https://redistogo.com/ - -## Adapters - -Adapters are the interface to the service you want your hubot to run on, such -as Campfire or IRC. There are a number of third party adapters that the -community have contributed. Check [Hubot Adapters][hubot-adapters] for the -available ones. - -If you would like to run a non-Campfire or shell adapter you will need to add -the adapter package as a dependency to the `package.json` file in the -`dependencies` section. - -Once you've added the dependency with `npm install --save` to install it you -can then run hubot with the adapter. - - % bin/hubot -a - -Where `` is the name of your adapter without the `hubot-` prefix. - -[hubot-adapters]: https://github.com/github/hubot/blob/master/docs/adapters.md +`run.sh` (which is used for `npm start`) has some default values for the +required ENV vars. Change it according to your needs, or use custom ENV vars +with the commands. ## Deployment - % heroku create --stack cedar - % git push heroku master - -If your Heroku account has been verified you can run the following to enable -and add the Redis to Go addon to your app. - - % heroku addons:add redistogo:nano - -If you run into any problems, checkout Heroku's [docs][heroku-node-docs]. - -You'll need to edit the `Procfile` to set the name of your hubot. - -More detailed documentation can be found on the [deploying hubot onto -Heroku][deploy-heroku] wiki page. - -### Deploying to UNIX or Windows - -If you would like to deploy to either a UNIX operating system or Windows. -Please check out the [deploying hubot onto UNIX][deploy-unix] and [deploying -hubot onto Windows][deploy-windows] wiki pages. - -[heroku-node-docs]: http://devcenter.heroku.com/articles/node-js -[deploy-heroku]: https://github.com/github/hubot/blob/master/docs/deploying/heroku.md -[deploy-unix]: https://github.com/github/hubot/blob/master/docs/deploying/unix.md -[deploy-windows]: https://github.com/github/hubot/blob/master/docs/deploying/unix.md - -## Campfire Variables - -If you are using the Campfire adapter you will need to set some environment -variables. If not, refer to your adapter documentation for how to configure it, -links to the adapters can be found on [Hubot Adapters][hubot-adapters]. - -Create a separate Campfire user for your bot and get their token from the web -UI. - - % heroku config:add HUBOT_CAMPFIRE_TOKEN="..." - -Get the numeric IDs of the rooms you want the bot to join, comma delimited. If -you want the bot to connect to `https://mysubdomain.campfirenow.com/room/42` -and `https://mysubdomain.campfirenow.com/room/1024` then you'd add it like -this: - - % heroku config:add HUBOT_CAMPFIRE_ROOMS="42,1024" - -Add the subdomain hubot should connect to. If you web URL looks like -`http://mysubdomain.campfirenow.com` then you'd add it like this: - - % heroku config:add HUBOT_CAMPFIRE_ACCOUNT="mysubdomain" - -[hubot-adapters]: https://github.com/github/hubot/blob/master/docs/adapters.md - -## Restart the bot - -You may want to get comfortable with `heroku logs` and `heroku restart` if -you're having issues. +hal8000 is deployed by running Chef Solo against `dev.kosmos.org` with the +cookbooks from our (private) [GitLab repo](https://gitlab.com/kosmos/chef). ## House Rules [Contributor Code of Conduct](http://contributor-covenant.org/version/1/2/0/) (TL;DR: Be excellent to each other.) - From b1e56e6ece21b02fe44c80e005eebf459e356d59 Mon Sep 17 00:00:00 2001 From: Sebastian Kippe Date: Tue, 2 May 2017 18:43:52 +0200 Subject: [PATCH 6/6] Remove obsolete file --- Procfile | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Procfile diff --git a/Procfile b/Procfile deleted file mode 100644 index ce1dc01..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: bin/hubot -a irc