Skip to content

Commit 8d15159

Browse files
committed
chore(devops): set up testing, CI, SonarQube
0 parents  commit 8d15159

14 files changed

+430
-0
lines changed

.babelrc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"presets": [
3+
"stage-2",
4+
[
5+
"env",
6+
{
7+
"targets": {
8+
"node": "current"
9+
}
10+
}
11+
]
12+
],
13+
"plugins": ["babel-plugin-inline-import"],
14+
"ignore": ["node_modules/**"]
15+
}

.editorconfig

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# EditorConfig is awesome: http://EditorConfig.org
2+
3+
# top-most EditorConfig file
4+
root = true
5+
6+
[*]
7+
charset = utf-8
8+
#indentation
9+
indent_style = space
10+
indent_size = 2
11+
#line breaks
12+
end_of_line = lf
13+
#whitespace
14+
insert_final_newline = true
15+
trim_trailing_whitespace = true
16+
17+
[*.md]
18+
indent_size = 4
19+
trim_trailing_whitespace = false

.eslintrc.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"parser": "babel-eslint",
3+
"parserOptions": {
4+
"ecmaVersion": 2016,
5+
"sourceType": "module"
6+
},
7+
"plugins": ["prettier"],
8+
"env": {
9+
"es6": true,
10+
"node": true
11+
},
12+
"rules": {
13+
"prettier/prettier": [
14+
"error",
15+
{
16+
"bracketSpacing": true,
17+
"trailingComma": "all",
18+
"singleQuote": true
19+
}
20+
]
21+
},
22+
"extends": ["airbnb-base", "prettier"]
23+
}

.gitignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.DS*
2+
node_modules
3+
*.log
4+
.vscode
5+
6+
# Don’t include the built module; npm will do that for us
7+
dist
8+
9+
# Don’t include sensitive data
10+
config/app_env_private.json
11+
12+
# Testing directories
13+
coverage
14+
.nyc_output
15+
sonarlint.json

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package-lock=false

.travis.TEMPLATE.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
group: bluezone
2+
dist: trusty
3+
sudo: false
4+
language: node_js
5+
node_js:
6+
- 6.9.0
7+
addons:
8+
sonarqube: true
9+
before_install:
10+
- echo "@console:registry=https://dev-console-npm.stage1.ng.bluemix.net/" > ~/.npmrc
11+
- echo -e "//dev-console-npm.stage1.ng.bluemix.net/:_authToken=${NPM_TOKEN}" >> ~/.npmrc
12+
install:
13+
- npm i -g npm@3
14+
- npm install
15+
script:
16+
- npm test
17+
- sonar-scanner -D sonar.host.url=$SONAR_HOST_URL -D sonar.github.endpoint=$GH_API_URL
18+
-D sonar.github.oauth=$SONAR_GITHUB_TOKEN
19+
after_success:
20+
- npm run build
21+
- npm run semantic-release
22+
cache:
23+
directories:
24+
- node_modules
25+
- "$HOME/.sonar/cache"
26+
branches:
27+
only:
28+
- master
29+
#
30+
# Add secure environment variables using the following command:
31+
# travis encrypt YOUR_ENV_VAR=[value] --add env.global
32+
#
33+
# Required env vars:
34+
# - GH_TOKEN
35+
# - NPM_TOKEN
36+
# - SONAR_TOKEN
37+
# - SONAR_GITHUB_TOKEN
38+
#
39+
# See https://ibm.biz/graphql-data-source-travis for details.
40+
#
41+
env:
42+
global:
43+
- SONAR_HOST_URL=http://ux-dev-sonar.rtp.raleigh.ibm.com:9000/
44+
- GH_API_URL=https://github.ibm.com/api/v3
45+
#
46+
# Optional: send Slack notifications.
47+
# See https://docs.travis-ci.com/user/notifications/#Configuring-slack-notifications
48+
#
49+
# notifications:
50+
# slack:
51+
# rooms: "<account>:<token>#room"
52+
# on_success: change
53+
# on_failure: change
54+
#

.travis.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
group: bluezone
2+
dist: trusty
3+
sudo: false
4+
language: node_js
5+
node_js:
6+
- 6.9.0
7+
addons:
8+
sonarqube: true
9+
before_install:
10+
- echo "@console:registry=https://dev-console-npm.stage1.ng.bluemix.net/" > ~/.npmrc
11+
- echo -e "//dev-console-npm.stage1.ng.bluemix.net/:_authToken=${NPM_TOKEN}" >> ~/.npmrc
12+
install:
13+
- npm i -g npm@3
14+
- npm install
15+
script:
16+
- npm test
17+
- sonar-scanner -D sonar.host.url=$SONAR_HOST_URL -D sonar.github.endpoint=$GH_API_URL
18+
-D sonar.github.oauth=$SONAR_GITHUB_TOKEN
19+
after_success:
20+
- npm run build
21+
- npm run semantic-release
22+
cache:
23+
directories:
24+
- node_modules
25+
- "$HOME/.sonar/cache"
26+
branches:
27+
only:
28+
- master
29+
env:
30+
global:
31+
- SONAR_HOST_URL=http://ux-dev-sonar.rtp.raleigh.ibm.com:9000/
32+
- GH_API_URL=https://github.ibm.com/api/v3
33+
- secure: BDYyYIwPsSHnEU/pnX33ZzwtU4hujmvwc15ilM/JPHIB5fKQWolokNiBGXG5nB/LYRxgB6GUm56A1Q9PNmmDUNeD1vLcgWOaNpyob/LBEi4ibVpGfM/JKV7XgXNSapRJvULI7nrps+HRzfxKl6BCIA3fxTT0E0iIETx7hCPwgZzkNpOtR1bISCR9v8xmCullBIeZoBzSICZFzRqVq9PS5aK06Uz/ssxnltfpnN2AHZBQexCnln3Iy4lmHY+A/JTnd8MVmLO0FhBZK2U6jvTAWwZJzhJ/aj8mEkvMo0vPd7op12xIM9iTbbsD7YUSISpcP3TtBYLazwONfyqjPy7upsR0wKq7YMuWB/+9phuGowXGR+03z/335zusuLljhzZEKdWC/LhP1k490mdIbSLFZKxG7Qjv4JR5mzNZnaQpqosun7Nug05kgD0aDtWzeZ00hSOy4ntYnWw+irBy1D3k3r1iQzglnRLEEIavdQSKD0hy6kwb+DxRCepYoVSLFeVq0aekFVmepTmIiV7CQAj8IVNr7+2O3EG9gG0ZCC9mEhEGpU5X09s2v8Lq0dSf+hBjSOwugK1MwOovPNQPjbcpUzJp3mmBggMmiMWULMRj8AUJVVD+DgFIJfeUs+fW2ba/UcBPBFN1GQTargrXNLyHY3cUuakHRBOPuLhWbrvGf70=
34+
- secure: nRbuefZawBecAti+g8aZ91CxORaboSTt4h4cH9Eg+NJ/eAiy8DM14eqed57y8/ztSTSiibQXMk8AyEFlJB4woDE2agGxO+Wy4KTbSMgwgqU/KyqNUNWYjKkyS+w0NvATwyx/8Xtok0Z5OpsY3ovzYi4tpg5ygY5YP584G3IKyw1QHqJDpocrrIVQWBlcJa1jVa9c+3QZW0TKp1gb8Bz8PbJaEc9J1iWAteA+oSwYIMqT2W9jLR57+OlaapmeURwjeO31KMzN9M6X5xkdKwuWBpUHSHJRXIbHVs8ypE8p8rRNHbL0RJJ0BOiEmMAsvDE/PxsABexdSJNYqg0VqhiRjKlOW8ynnJ9ZVD2CYt/yKxdwLvjZzzLNE/FX5cYpgThPbYLQgDocCErNp5M0PhYMXcICLOldmYiIvXLjNAz4+y5mevcmU3y5fDcHgncwW+fZLiIP5iaCoeI0b14NqE/EbR+lvIdIrdSketgBg2ZqDmz6CEnkdyCx185gp8Ye1PhMadCVJks/MCku2bm8C5V0FaxlH900vNFQyS017Lu0dAtaHxBGoWhEjMw96FtRQuf44u3SbtQBLISLSywp+t5tjQkxRtNWBw5bh9Dl25vi+Kksm7vEQ4QeA8BiZHIHiL2VQrGY0xAL0JaYIj/BS45QkerToTeAKpQFjCnWZVmM8mU=
35+
- 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=
36+
- secure: KPumMoLYWl/AL7YhStp/OduGOnQjJQfmAtS3Vt2pPcL4wDCeym/A0muFioAdR1q996i2tQ3caVm5NRT9uty8lA+VP1RSlSJE06a59XLaH+eOoCcwkvmZ3Dqzr9bTGFAdVS6v21UO5VeASlSg0wDMzhivfvXKy34ih1X782UQv7Gv8YAmAUT9JC3BA66KT6yNcKh7vLtQcbuCsC4I8ykw1Y8gu1kvcPtAuUh9aQ9dAy3KD5wsSuRyIqIhTeYw4i9sipAN53TeEWaazZfZ+hPUS17EYEgGXCv0sJ5LVxpSnV7aWELI9WY7AkoweajMC3ODSkBKUhaxiyuFE1809nTRU8g0xzJcfv5V31dzWXvbJZlbWUvkfz/PYKeftY2mfQk30ozSlWOHC/NVSHQqzIByxVotISbeX1MqELaB0riAa7/46e8C7++fD3a0wI/MOD0NPibeFV7fHvvFlOOrcQDny13vSW2HgBd2CieTbLlzjv4aiqKePVFGNzEqdSFNVP5cdEBgiD3P3oqJT9nEOZsXaykZLvPB2RkW4A3Z8oRhEltziDUIsI67hD0XAF/sG2PWCBZcDUvwo8RJdvTkYeZowf2yzePRMFQ+WQXD5A1UK36FnVkdjDKzPCsMt90VTbYN3g6/+NG8jzDORKsBnxYGSqbLrhITob8jRjHJop7BVxw=
37+
notifications:
38+
slack:
39+
rooms:
40+
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=
41+
on_success: change
42+
on_failure: change

README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Bluemix GraphQL Data Source: CloudFoundryApp
2+
3+
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.
4+
5+
For more information about what data sources are and how they work, see https://ibm.biz/graphql-data-source
6+
7+
## Development
8+
9+
First, clone the repository and install dependencies:
10+
11+
```sh
12+
# Clone the repo and move into the directory folder
13+
git clone [email protected]:bluemix/graphql-data-source-cloudfoundryapp.git
14+
cd graphql-data-source-cloudfoundryapp/
15+
16+
# Install dependencies
17+
npm install
18+
```
19+
20+
### To Develop In Local Mode
21+
22+
Start the app with the following command:
23+
24+
```sh
25+
# Run in local mode with mock data
26+
npm run local
27+
```
28+
29+
### To Develop in Atlas Mode
30+
31+
Create `config/app_env_private.json` by duplicating `config/app_env_private.TEMPLATE.json`. Inside, add the required private environment variables.
32+
33+
> **NOTE:** Information on where to get the required environment variables can
34+
> be found in the "How do I configure my application to use Bluemix?" section
35+
> of [this FAQ](https://ibm.biz/BdjXjr).
36+
37+
Next, start the app in Atlas mode:
38+
39+
```sh
40+
# Run in Atlas mode with live data
41+
npm run atlas
42+
```
43+
44+
### Notes for Developers
45+
46+
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.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"atlas": {
3+
"sessionKey": "",
4+
"sessionSecret": "",
5+
"uaaClientId": "",
6+
"uaaClientSecret": ""
7+
}
8+
}

config/routes-atlas.json

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
{
2+
"defaults": {
3+
"target": "/",
4+
"useReferer": false,
5+
"error": {
6+
"target": "/maintenance",
7+
"path": ""
8+
}
9+
},
10+
"services": {
11+
"graphql": {
12+
"url": "http://localhost:39051",
13+
"routes": {
14+
"/": "/"
15+
}
16+
},
17+
"authentication": {
18+
"host": "opsconsole-authentication-opsconsoledev",
19+
"routes": {
20+
"/token": "/auth/token",
21+
"/login": "/login",
22+
"/logout": "/logout"
23+
},
24+
"domain": "stage1.ng.bluemix.net",
25+
"url": "https://opsconsole-authentication-opsconsoledev.stage1.ng.bluemix.net"
26+
},
27+
"common": {
28+
"host": "ace-common-opsconsoledev",
29+
"routes": {
30+
"/api": "/api",
31+
"/favicon.ico": "/favicon.ico",
32+
"/cache": "/cache",
33+
"/": "/common"
34+
},
35+
"domain": "stage1.ng.bluemix.net",
36+
"url": "https://ace-common-opsconsoledev.stage1.ng.bluemix.net"
37+
},
38+
"ops_admin": {},
39+
"ops_boilerplate": {
40+
"url": "http://localhost:3900"
41+
},
42+
"ops_catalog": {},
43+
"ops_catalogservice": {},
44+
"ops_check": {},
45+
"ops_codi": {},
46+
"ops_landingpage": {},
47+
"ops_org": {},
48+
"ops_organizations": {},
49+
"ops_security": {},
50+
"ops_status": {},
51+
"ops_user": {},
52+
"ops_usermanagement": {},
53+
"events": {
54+
"host": "ace-events-opsconsoledev",
55+
"routes": {
56+
"/events": "/events"
57+
},
58+
"domain": "stage1.ng.bluemix.net",
59+
"url": "https://ace-events-opsconsoledev.stage1.ng.bluemix.net"
60+
},
61+
"ace_dashboard": {
62+
"host": "ace-dashboard-opsconsoledev",
63+
"routes": {
64+
"/dashboard/oauth2_proxy": "/oauth2_proxy",
65+
"/dashboard/home/onboard": "/dashboard/onboard",
66+
"/dashboard/slonboard": "/slonboard",
67+
"/dashboard": "/dashboard",
68+
"/dashboard/images": "/images",
69+
"/dashboard/home": "/home",
70+
"/dashboard/rest": "/rest",
71+
"/dashboard/lib": "/lib",
72+
"/robots.txt": "/robots.txt",
73+
"/sitemap.xml": "/sitemap.xml"
74+
},
75+
"domain": "stage1.ng.bluemix.net",
76+
"url": "https://ace-dashboard-opsconsoledev.stage1.ng.bluemix.net"
77+
},
78+
"maintenance": {
79+
"host": "ace-maintenance-opsconsoledev",
80+
"routes": {
81+
"/": "/maintenance"
82+
},
83+
"domain": "stage1.ng.bluemix.net",
84+
"url": "https://ace-maintenance-opsconsoledev.stage1.ng.bluemix.net"
85+
}
86+
}
87+
}

0 commit comments

Comments
 (0)