Skip to content

Commit

Permalink
chore(devops): set up testing, CI, SonarQube
Browse files Browse the repository at this point in the history
  • Loading branch information
jlengstorf committed Aug 17, 2017
0 parents commit 8d15159
Show file tree
Hide file tree
Showing 14 changed files with 430 additions and 0 deletions.
15 changes: 15 additions & 0 deletions .babelrc
@@ -0,0 +1,15 @@
{
"presets": [
"stage-2",
[
"env",
{
"targets": {
"node": "current"
}
}
]
],
"plugins": ["babel-plugin-inline-import"],
"ignore": ["node_modules/**"]
}
19 changes: 19 additions & 0 deletions .editorconfig
@@ -0,0 +1,19 @@
# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
charset = utf-8
#indentation
indent_style = space
indent_size = 2
#line breaks
end_of_line = lf
#whitespace
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
indent_size = 4
trim_trailing_whitespace = false
23 changes: 23 additions & 0 deletions .eslintrc.json
@@ -0,0 +1,23 @@
{
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 2016,
"sourceType": "module"
},
"plugins": ["prettier"],
"env": {
"es6": true,
"node": true
},
"rules": {
"prettier/prettier": [
"error",
{
"bracketSpacing": true,
"trailingComma": "all",
"singleQuote": true
}
]
},
"extends": ["airbnb-base", "prettier"]
}
15 changes: 15 additions & 0 deletions .gitignore
@@ -0,0 +1,15 @@
.DS*
node_modules
*.log
.vscode

# Don’t include the built module; npm will do that for us
dist

# Don’t include sensitive data
config/app_env_private.json

# Testing directories
coverage
.nyc_output
sonarlint.json
1 change: 1 addition & 0 deletions .npmrc
@@ -0,0 +1 @@
package-lock=false
54 changes: 54 additions & 0 deletions .travis.TEMPLATE.yml
@@ -0,0 +1,54 @@
group: bluezone
dist: trusty
sudo: false
language: node_js
node_js:
- 6.9.0
addons:
sonarqube: true
before_install:
- echo "@console:registry=https://dev-console-npm.stage1.ng.bluemix.net/" > ~/.npmrc
- echo -e "//dev-console-npm.stage1.ng.bluemix.net/:_authToken=${NPM_TOKEN}" >> ~/.npmrc
install:
- npm i -g npm@3
- npm install
script:
- npm test
- sonar-scanner -D sonar.host.url=$SONAR_HOST_URL -D sonar.github.endpoint=$GH_API_URL
-D sonar.github.oauth=$SONAR_GITHUB_TOKEN
after_success:
- npm run build
- npm run semantic-release
cache:
directories:
- node_modules
- "$HOME/.sonar/cache"
branches:
only:
- master
#
# Add secure environment variables using the following command:
# travis encrypt YOUR_ENV_VAR=[value] --add env.global
#
# Required env vars:
# - GH_TOKEN
# - NPM_TOKEN
# - SONAR_TOKEN
# - SONAR_GITHUB_TOKEN
#
# See https://ibm.biz/graphql-data-source-travis for details.
#
env:
global:
- SONAR_HOST_URL=http://ux-dev-sonar.rtp.raleigh.ibm.com:9000/
- GH_API_URL=https://github.ibm.com/api/v3
#
# Optional: send Slack notifications.
# See https://docs.travis-ci.com/user/notifications/#Configuring-slack-notifications
#
# notifications:
# slack:
# rooms: "<account>:<token>#room"
# on_success: change
# on_failure: change
#
42 changes: 42 additions & 0 deletions .travis.yml
@@ -0,0 +1,42 @@
group: bluezone
dist: trusty
sudo: false
language: node_js
node_js:
- 6.9.0
addons:
sonarqube: true
before_install:
- echo "@console:registry=https://dev-console-npm.stage1.ng.bluemix.net/" > ~/.npmrc
- echo -e "//dev-console-npm.stage1.ng.bluemix.net/:_authToken=${NPM_TOKEN}" >> ~/.npmrc
install:
- npm i -g npm@3
- npm install
script:
- npm test
- sonar-scanner -D sonar.host.url=$SONAR_HOST_URL -D sonar.github.endpoint=$GH_API_URL
-D sonar.github.oauth=$SONAR_GITHUB_TOKEN
after_success:
- npm run build
- npm run semantic-release
cache:
directories:
- node_modules
- "$HOME/.sonar/cache"
branches:
only:
- master
env:
global:
- SONAR_HOST_URL=http://ux-dev-sonar.rtp.raleigh.ibm.com:9000/
- GH_API_URL=https://github.ibm.com/api/v3
- secure: BDYyYIwPsSHnEU/pnX33ZzwtU4hujmvwc15ilM/JPHIB5fKQWolokNiBGXG5nB/LYRxgB6GUm56A1Q9PNmmDUNeD1vLcgWOaNpyob/LBEi4ibVpGfM/JKV7XgXNSapRJvULI7nrps+HRzfxKl6BCIA3fxTT0E0iIETx7hCPwgZzkNpOtR1bISCR9v8xmCullBIeZoBzSICZFzRqVq9PS5aK06Uz/ssxnltfpnN2AHZBQexCnln3Iy4lmHY+A/JTnd8MVmLO0FhBZK2U6jvTAWwZJzhJ/aj8mEkvMo0vPd7op12xIM9iTbbsD7YUSISpcP3TtBYLazwONfyqjPy7upsR0wKq7YMuWB/+9phuGowXGR+03z/335zusuLljhzZEKdWC/LhP1k490mdIbSLFZKxG7Qjv4JR5mzNZnaQpqosun7Nug05kgD0aDtWzeZ00hSOy4ntYnWw+irBy1D3k3r1iQzglnRLEEIavdQSKD0hy6kwb+DxRCepYoVSLFeVq0aekFVmepTmIiV7CQAj8IVNr7+2O3EG9gG0ZCC9mEhEGpU5X09s2v8Lq0dSf+hBjSOwugK1MwOovPNQPjbcpUzJp3mmBggMmiMWULMRj8AUJVVD+DgFIJfeUs+fW2ba/UcBPBFN1GQTargrXNLyHY3cUuakHRBOPuLhWbrvGf70=
- secure: nRbuefZawBecAti+g8aZ91CxORaboSTt4h4cH9Eg+NJ/eAiy8DM14eqed57y8/ztSTSiibQXMk8AyEFlJB4woDE2agGxO+Wy4KTbSMgwgqU/KyqNUNWYjKkyS+w0NvATwyx/8Xtok0Z5OpsY3ovzYi4tpg5ygY5YP584G3IKyw1QHqJDpocrrIVQWBlcJa1jVa9c+3QZW0TKp1gb8Bz8PbJaEc9J1iWAteA+oSwYIMqT2W9jLR57+OlaapmeURwjeO31KMzN9M6X5xkdKwuWBpUHSHJRXIbHVs8ypE8p8rRNHbL0RJJ0BOiEmMAsvDE/PxsABexdSJNYqg0VqhiRjKlOW8ynnJ9ZVD2CYt/yKxdwLvjZzzLNE/FX5cYpgThPbYLQgDocCErNp5M0PhYMXcICLOldmYiIvXLjNAz4+y5mevcmU3y5fDcHgncwW+fZLiIP5iaCoeI0b14NqE/EbR+lvIdIrdSketgBg2ZqDmz6CEnkdyCx185gp8Ye1PhMadCVJks/MCku2bm8C5V0FaxlH900vNFQyS017Lu0dAtaHxBGoWhEjMw96FtRQuf44u3SbtQBLISLSywp+t5tjQkxRtNWBw5bh9Dl25vi+Kksm7vEQ4QeA8BiZHIHiL2VQrGY0xAL0JaYIj/BS45QkerToTeAKpQFjCnWZVmM8mU=
- secure: hKO+iK6rfxLYM754whKwTtp/wysygDJ07jear3bmEG3yVzGStm0jnOuWP0ArPfrsMSDWcmY8b9iGr5nuEP/PpRR0e7nFMY+ACLrK96q6ooE0oceAqIqPkWuznLLHKe+U4Vmybn2Cs/OUVMeQWHIM20O/OKPyJ9CSs64933HV5iq/rKBmrfZSyTdjM06A3bXcxkWaJAskbk8mK+tI7one0IDU5/RkLQXcpORV37pfdEpE/U8hJk/Lh9MxNYD/39S7Z2wnhqJAk34yqm9QUmgTLMOag/bTK1Tdx3iObyxWsf7Dm/P1oC7Niqobc64MpZByq+THXwlG0GGsKLazhQ0VoBM/CGQjt5J5x2k267c0B6vWnR7XDeW/ua19JNUwtqjCVXuZHhUjmCd/L9h2mR2drfk5cBwtIMQMmW0ZnXiOUW9bkCwhjTqVU1o9FiIhuas+icyy62o+U9sXyiOqOPisaJwIdHBivrZkDK60OcHDxvdsySb4SMItiIeZoNONoJgEicZ2QpclwsNk6SizYUS66k2fIy5BRtlkNOePQypqM38PVfhV8KjzbdV1QgJ1eoOkXG1bo7rX9YBigM9P1zHpoypfM1VDMSuoWXk5TYhtSddUtT6v9NMkUtLrPhFv2jYLHIPACHgD/CT9P+pDyIU6L0Eik9hN1MNWj2+KawcXZI8=
- secure: KPumMoLYWl/AL7YhStp/OduGOnQjJQfmAtS3Vt2pPcL4wDCeym/A0muFioAdR1q996i2tQ3caVm5NRT9uty8lA+VP1RSlSJE06a59XLaH+eOoCcwkvmZ3Dqzr9bTGFAdVS6v21UO5VeASlSg0wDMzhivfvXKy34ih1X782UQv7Gv8YAmAUT9JC3BA66KT6yNcKh7vLtQcbuCsC4I8ykw1Y8gu1kvcPtAuUh9aQ9dAy3KD5wsSuRyIqIhTeYw4i9sipAN53TeEWaazZfZ+hPUS17EYEgGXCv0sJ5LVxpSnV7aWELI9WY7AkoweajMC3ODSkBKUhaxiyuFE1809nTRU8g0xzJcfv5V31dzWXvbJZlbWUvkfz/PYKeftY2mfQk30ozSlWOHC/NVSHQqzIByxVotISbeX1MqELaB0riAa7/46e8C7++fD3a0wI/MOD0NPibeFV7fHvvFlOOrcQDny13vSW2HgBd2CieTbLlzjv4aiqKePVFGNzEqdSFNVP5cdEBgiD3P3oqJT9nEOZsXaykZLvPB2RkW4A3Z8oRhEltziDUIsI67hD0XAF/sG2PWCBZcDUvwo8RJdvTkYeZowf2yzePRMFQ+WQXD5A1UK36FnVkdjDKzPCsMt90VTbYN3g6/+NG8jzDORKsBnxYGSqbLrhITob8jRjHJop7BVxw=
notifications:
slack:
rooms:
secure: upzWEKLOztL4nZmFNUZ+c1x/5fkYy09qxejgiFA1/7vXo5uzKjOEMH5mYT81C2Ao2AKh5wZy0koBU0EuBd27RZuWRcGvejkAzzyOiZqjOMQoc7tiQJLL88kLRthqZiLNJZADMWDouqHfOIMW0CqUzyltK/37Cc5UN7OFHO75snHbm6GtoPQ8moaR73+QtOG9w1uGs8k+vK7dWTXIvUeko5ywxZq7Fc+9nWGmZ3hiBLl4SO9JrunjOU8iKHuLKfhhZ1pshQKj+XhpUfb6sw2pEcNd/SNX54bmkhWPu85D3JIqp0BMN/LakLqSMAbNV0yg9qCKSNpIrTBTkVYh4d+RhDh3iojbYrO6AECjj3ojXAwD/TyHjrgLUTvPmf+1+Z4CcE7uZyBbSfktMV1zwVNh21qekDXR/NFcb8h2jCKxKJ2hKnkC4g41vrulMgZb3RjbkQHrBU578r2Yf7/mpdjYB+vE/D657kW2ud5JX9wg4JALUJySlQvR6PBc+E4fAjPNjabjABbpMrND7FjZEKA0Uu9yz9GzA6rQCt3+mg+s/nLD6JzjnhwPDtJT3bMnfML/8+nFJZ7pmfK27Kt3HGUJVAvMehAvwYWK2FHPkjhwgzlp9jcjf9n7Pais+Zt+6RZK9nDO0fkThkZPvMzppYqmH1E2SO3lY3OMmBEVOrPHKF8=
on_success: change
on_failure: change
46 changes: 46 additions & 0 deletions README.md
@@ -0,0 +1,46 @@
# Bluemix GraphQL Data Source: CloudFoundryApp

This data source exposes parts of the [Cloud Foundry API](https://apidocs.cloudfoundry.org/253/) via the [Bluemix GraphQL](https://github.ibm.com/bluemix/graphql) µ-service.

For more information about what data sources are and how they work, see https://ibm.biz/graphql-data-source

## Development

First, clone the repository and install dependencies:

```sh
# Clone the repo and move into the directory folder
git clone git@github.ibm.com:bluemix/graphql-data-source-cloudfoundryapp.git
cd graphql-data-source-cloudfoundryapp/

# Install dependencies
npm install
```

### To Develop In Local Mode

Start the app with the following command:

```sh
# Run in local mode with mock data
npm run local
```

### To Develop in Atlas Mode

Create `config/app_env_private.json` by duplicating `config/app_env_private.TEMPLATE.json`. Inside, add the required private environment variables.

> **NOTE:** Information on where to get the required environment variables can
> be found in the "How do I configure my application to use Bluemix?" section
> of [this FAQ](https://ibm.biz/BdjXjr).
Next, start the app in Atlas mode:

```sh
# Run in Atlas mode with live data
npm run atlas
```

### Notes for Developers

Currently, there is no watch capability (PRs welcome!), so the service needs to be stopped (`control` + `C`) and restarted (`npm run [local|atlas]`) to reflect new changes to the data source.
8 changes: 8 additions & 0 deletions config/app_env_private.TEMPLATE.json
@@ -0,0 +1,8 @@
{
"atlas": {
"sessionKey": "",
"sessionSecret": "",
"uaaClientId": "",
"uaaClientSecret": ""
}
}
87 changes: 87 additions & 0 deletions config/routes-atlas.json
@@ -0,0 +1,87 @@
{
"defaults": {
"target": "/",
"useReferer": false,
"error": {
"target": "/maintenance",
"path": ""
}
},
"services": {
"graphql": {
"url": "http://localhost:39051",
"routes": {
"/": "/"
}
},
"authentication": {
"host": "opsconsole-authentication-opsconsoledev",
"routes": {
"/token": "/auth/token",
"/login": "/login",
"/logout": "/logout"
},
"domain": "stage1.ng.bluemix.net",
"url": "https://opsconsole-authentication-opsconsoledev.stage1.ng.bluemix.net"
},
"common": {
"host": "ace-common-opsconsoledev",
"routes": {
"/api": "/api",
"/favicon.ico": "/favicon.ico",
"/cache": "/cache",
"/": "/common"
},
"domain": "stage1.ng.bluemix.net",
"url": "https://ace-common-opsconsoledev.stage1.ng.bluemix.net"
},
"ops_admin": {},
"ops_boilerplate": {
"url": "http://localhost:3900"
},
"ops_catalog": {},
"ops_catalogservice": {},
"ops_check": {},
"ops_codi": {},
"ops_landingpage": {},
"ops_org": {},
"ops_organizations": {},
"ops_security": {},
"ops_status": {},
"ops_user": {},
"ops_usermanagement": {},
"events": {
"host": "ace-events-opsconsoledev",
"routes": {
"/events": "/events"
},
"domain": "stage1.ng.bluemix.net",
"url": "https://ace-events-opsconsoledev.stage1.ng.bluemix.net"
},
"ace_dashboard": {
"host": "ace-dashboard-opsconsoledev",
"routes": {
"/dashboard/oauth2_proxy": "/oauth2_proxy",
"/dashboard/home/onboard": "/dashboard/onboard",
"/dashboard/slonboard": "/slonboard",
"/dashboard": "/dashboard",
"/dashboard/images": "/images",
"/dashboard/home": "/home",
"/dashboard/rest": "/rest",
"/dashboard/lib": "/lib",
"/robots.txt": "/robots.txt",
"/sitemap.xml": "/sitemap.xml"
},
"domain": "stage1.ng.bluemix.net",
"url": "https://ace-dashboard-opsconsoledev.stage1.ng.bluemix.net"
},
"maintenance": {
"host": "ace-maintenance-opsconsoledev",
"routes": {
"/": "/maintenance"
},
"domain": "stage1.ng.bluemix.net",
"url": "https://ace-maintenance-opsconsoledev.stage1.ng.bluemix.net"
}
}
}

0 comments on commit 8d15159

Please sign in to comment.