README.md
# echo
[ ![Codeship Status for LearnersGuild/echo](https://codeship.com/projects/8ee1a1d0-17e4-0134-1d69-2a776fb5d411/status?branch=master)](https://codeship.com/projects/158610)
[![Code Climate GPA](https://codeclimate.com/github/LearnersGuild/echo/badges/gpa.svg)](https://codeclimate.com/github/LearnersGuild/echo/feed)
[![Code Climate Issue Count](https://codeclimate.com/github/LearnersGuild/echo/badges/issue_count.svg)](https://codeclimate.com/github/LearnersGuild/echo)
[![Test Coverage](https://codeclimate.com/github/LearnersGuild/echo/badges/coverage.svg)](https://codeclimate.com/github/LearnersGuild/echo/coverage)
This is the echo service.
## GETTING STARTED
Welcome to [Echo](http://i.giphy.com/MGU6B1h1jSfja.gif).
Before you can run echo you need:
- To install and set up the [IDM service](https://github.com/LearnersGuild/idm)
### SETTING UP THE ECHO SERVICE
##### 1. **Globally** install [nvm][nvm], [avn][avn], and [avn-nvm][avn-nvm].
```bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
npm install -g avn avn-nvm
avn setup
```
##### 2. Fork and clone the repository.
##### 3. Setup and run [mehserve][mehserve].
Figure out which port you intend to use and create the mehserve config file:
```bash
echo 9005 > ~/.mehserve/echo.learnersguild
```
##### 4. Set your `NODE_ENV` environment variable:
```bash
export NODE_ENV=development
```
##### 5. [Install RethinkDB][install-rethinkdb].
##### 6. Create a free AWS account:
[https://aws.amazon.com](https://aws.amazon.com/)
Make a copy of your access key ID and secret access key. You'll need to include these in your environment variables in the next step.
##### 7. Create your `.env.development` file for your environment.
Take out all comments in your final version.
Example:
```
PORT=9005
APP_BASE_URL=http://echo.learnersguild.meh
APP_PROJECT_URL=http://echo.learnersguild.meh/projects
REDIS_URL=redis://localhost:6379
RETHINKDB_URL=rethinkdb://localhost:28015/echo_development
# IDM / JWT settings, including session extension
IDM_BASE_URL=http://idm.learnersguild.meh
JWT_PRIVATE_KEY="<get from IDM service>"
JWT_PUBLIC_KEY="<get from IDM service>"
# External API settings
GITHUB_CRAFTS_REPO="https://github.com/GuildCraftsTesting/web-development-js-testing"
S3_BUCKET=guild-development
S3_KEY_PREFIX=db
AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY>
```
##### 8. Install dependencies:
```bash
npm install
```
##### 9. Create a development & test databases:
```bash
npm run db:create
NODE_ENV=test npm run db:create
```
```bash
npm run db:migrate:up
NODE_ENV=test npm run db:migrate:up
```
Optionally, seed your development database with test member and project data:
```bash
npm run db:copy -- <STATE>
```
Available `STATE` options:
- `PRACTICE`
- `REFLECTION`
### RUNNING THE SERVER
**NOTE:** you'll need rethinkdb, [mehserve][mehserve], [idm][idm] and this server all running at the same time for things to work.
```bash
npm start
```
Visit the server in your browser:
```bash
open http://echo.learnersguild.meh
```
Start the workers
**NOTE:** you'll need to start redis for the workers to run correctly.
```bash
npm run workers
npm run workers:cycleLaunched
```
### USING THE DEV SLACK INSTANCE WITH YOUR LOCAL ECHO SERVICE
##### 1. Join the dev Slack team by requesting (and accepting) an invitation from a teammate.
##### 2. Configure your dev environment for OUTBOUND calls _to_ the Slack API.
Add the following to your `.env.development`:
```
# Slack / command CLI settings
CHAT_BASE_URL=https://slack.com
CHAT_API_TOKEN=<the Slack bot user's OAuth access token. obtain from a teammate or in the Slack team's app settings>
```
##### 3. Configure your dev environment for INBOUND calls _from_ Slack (for /slash commands).
Add the following to your `.env.development`:
```
CLI_COMMAND_TOKEN=<the Slack app's verification token. obtain from a teammate or in the Slack team's app settings>
```
##### 4. Set up localtunnel and run the `slackslash` script:
```bash
npm install -g localtunnel
npm run slackslash
```
**NOTE:** You can ignore this message after starting localtunnel:
```
your url is: https://slackslash.localtunnel.me
```
It's not a URL you're meant to visit in the browser directly; it is the URL already configured in the dev Slack team's echo app and where incoming requests for /slash commands are sent. With localtunnel running and configured properly (along with `echo`, `idm` and `mehserve`), when you issue a slash command in a channel in the dev Slack team, the request will be sent to https://slackslash.localtunnel.me and served by the echo service running on your local machine.
## CONTINUOUS INTEGRATION
We use [Codeship](https://codeship.com/) for continuous integration. The following files are responsible for CI configuration:
- `Dockerfile`: basic Docker image for the app
- `codeship-services.yml`: similar to `docker-compose.yml`, but for CI
- `codeship-steps.yml`: the steps to run on each service for CI
- `app.env.encrypted`: encrypted environment vars for the app (e.g., `NPM_AUTH_TOKEN`)
## LICENSE
See the [LICENSE](./LICENSE) file.
[idm]: https://github.com/LearnersGuild/idm
[github-register-application]: https://github.com/settings/applications/new
[install-rethinkdb]: https://www.rethinkdb.com/docs/install/
[mehserve]: https://github.com/timecounts/mehserve
[nvm]: https://github.com/creationix/nvm
[avn]: https://github.com/wbyoung/avn
[avn-nvm]: https://github.com/wbyoung/avn-nvm