diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 236e9fc1fd..697bd29be3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,190 +7,194 @@ # Define stages stages: - # - BuildAndTest - # - E2E + - BuildAndTest + - E2E - DeployStaging - DeployProduction - SmokeTest - Rollback -# ##BACKEND -# lint_n_audit_backend: -# stage: BuildAndTest -# script: -# - cd backend -# - npm install --dev -# - npm run lint -# # - npm run audit -# - cd .. +##BACKEND +lint_n_audit_backend: + stage: BuildAndTest + script: + - cd backend + - npm install --dev + - npm run lint + # - npm run audit + - cd .. -# build_n_test_backend: -# stage: BuildAndTest -# script: -# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 -# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend -# - sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test +build_n_test_backend: + stage: BuildAndTest + script: + - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 + - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend + - sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test -# ##DASHBOARD -# lint_n_audit_dashboard: -# stage: BuildAndTest -# script: -# - cd dashboard -# - npm install --dev -# - npm run lint -# # - npm run audit -# - cd .. +##DASHBOARD +lint_n_audit_dashboard: + stage: BuildAndTest + script: + - cd dashboard + - npm install --dev + - npm run lint + # - npm run audit + - cd .. -# build_n_test_dashboard: -# stage: BuildAndTest -# script: -# - echo "Setup machine for running puppeteer tests" -# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 -# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend -# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID -# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts -# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID -# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard -# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID -# - sudo docker ps -# - cd dashboard -# - npm install -# - npm run jest +build_n_test_dashboard: + stage: BuildAndTest + script: + - echo "Setup machine for running puppeteer tests" + - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 + - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend + - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID + - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts + - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID + - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard + - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID + - sudo docker ps + - cd dashboard + - npm install + - npm run jest -# ##ZAPIER -# lint_n_audit_zapier: -# stage: BuildAndTest -# script: -# - cd zapier -# - npm install --dev -# - npm run lint -# - npm run audit -# - cd .. +##ZAPIER +lint_n_audit_zapier: + stage: BuildAndTest + script: + - cd zapier + - npm install --dev + - npm run lint + - npm run audit + - cd .. -# build_n_test_zapier: -# stage: BuildAndTest -# script: -# - echo "No test implemented" +build_n_test_zapier: + stage: BuildAndTest + script: + - echo "No test implemented" -# ## STATUS PAGE -# lint_n_audit_statuspage: -# stage: BuildAndTest -# script: -# - cd status-page -# - npm install --dev -# - npm run lint -# - npm run audit -# - cd .. +## STATUS PAGE +lint_n_audit_statuspage: + stage: BuildAndTest + script: + - cd status-page + - npm install --dev + - npm run lint + - npm run audit + - cd .. -# build_n_test_statuspage: -# stage: BuildAndTest -# script: -# - echo "Setup machine for running puppeteer tests" -# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 -# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend -# - sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID -# - sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page -# - sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID -# - sudo docker ps -# - cd backend -# - npm install -# - cd .. -# - cd status-page -# - npm install -# - curl localhost:3006 -# - npm run jest +build_n_test_statuspage: + stage: BuildAndTest + script: + - echo "Setup machine for running puppeteer tests" + - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 + - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend + - sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID + - sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page + - sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID + - sudo docker ps + - cd backend + - npm install + - cd .. + - cd status-page + - npm install + - curl localhost:3006 + - npm run jest -# ## ACCOUNTS -# lint_n_audit_accounts: -# stage: BuildAndTest -# script: -# - cd accounts -# - npm install --dev -# - npm run lint -# - npm run audit -# - cd .. +## ACCOUNTS +lint_n_audit_accounts: + stage: BuildAndTest + script: + - cd accounts + - npm install --dev + - npm run lint + - npm run audit + - cd .. -# build_n_test_accounts: -# stage: BuildAndTest -# script: -# - echo "Setup machine for running puppeteer tests" -# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' -# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 -# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend -# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID -# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts -# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID -# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard -# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID -# - sudo docker ps -# - cd accounts -# - npm install -# - npm run jest +build_n_test_accounts: + stage: BuildAndTest + script: + - echo "Setup machine for running puppeteer tests" + - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers' + - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4 + - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend + - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID + - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts + - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID + - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard + - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID + - sudo docker ps + - cd accounts + - npm install + - npm run jest -# ## HOME -# lint_n_audit_home: -# stage: BuildAndTest -# script: -# - cd home -# - npm install --dev -# - npm run lint -# - npm run audit -# - cd .. +## HOME +lint_n_audit_home: + stage: BuildAndTest + script: + - cd home + - npm install --dev + - npm run lint + - npm run audit + - cd .. -# build_n_test_home: -# stage: BuildAndTest -# script: -# - echo "No test implemented" +build_n_test_home: + stage: BuildAndTest + script: + - echo "No test implemented" -# ## PROBE -# lint_n_audit_probe: -# stage: BuildAndTest -# script: -# - cd probe -# - npm install --dev -# - npm run lint -# - npm run audit -# - cd .. +## PROBE +lint_n_audit_probe: + stage: BuildAndTest + script: + - cd probe + - npm install --dev + - npm run lint + - npm run audit + - cd .. -# build_n_test_probe: -# stage: BuildAndTest -# script: -# - echo "No test implemented" +build_n_test_probe: + stage: BuildAndTest + script: + - echo "No test implemented" -# ##E2E Stage. -# e2e_test: -# stage: E2E -# script: -# - chmod +x ./kubernetes/ci/setup-machine.sh -# - ./kubernetes/ci/setup-machine.sh -# - chmod +x ./kubernetes/ci/setup.sh -# - ./kubernetes/ci/setup.sh -# - export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2` -# - export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2` -# - export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2` -# - export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2` -# - export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2` -# - echo ACCOUNTS_URL=$ACCOUNTS_URL -# - echo BACKEND_URL=$BACKEND_URL -# - echo DASHBOARD_URL=$DASHBOARD_URL -# - echo HOME_URL=$HOME_URL -# - echo STATUSPAGE_URL=$STATUSPAGE_URL -# - chmod +x ./kubernetes/ci/hosts-setup.sh -# - ./kubernetes/ci/hosts-setup.sh +##E2E Stage. +e2e_test: + stage: E2E + script: + - chmod +x ./kubernetes/ci/setup-machine.sh + - ./kubernetes/ci/setup-machine.sh + - chmod +x ./kubernetes/ci/setup.sh + - ./kubernetes/ci/setup.sh + - export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2` + - export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2` + - export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2` + - export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2` + - export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2` + - export APIDOCS_URL=`sudo kubectl describe svc api-docs | grep Endpoints | cut -d ":" -f 2` + - echo ACCOUNTS_URL=$ACCOUNTS_URL + - echo BACKEND_URL=$BACKEND_URL + - echo DASHBOARD_URL=$DASHBOARD_URL + - echo HOME_URL=$HOME_URL + - echo STATUSPAGE_URL=$STATUSPAGE_URL + - chmod +x ./kubernetes/ci/hosts-setup.sh + - ./kubernetes/ci/hosts-setup.sh + - cd smoke-test + - npm i + - npm run test -# only: -# refs: -# - release -# - master + only: + refs: + - release + - master # DEPLOYMENT STAGE - BACKEND deploy_staging_backend: diff --git a/accounts/index.js b/accounts/index.js index d05c8f4dc8..be4234354e 100755 --- a/accounts/index.js +++ b/accounts/index.js @@ -1,10 +1,26 @@ const express = require('express'); const path = require('path'); const app = express(); +const envfile = require('envfile'); +const fs = require('fs'); +var child_process = require('child_process'); + +var env = { + REACT_APP_FYIPE_HOSTED: process.env.FYIPE_HOSTED, + REACT_APP_HOST: process.env.HOST, + REACT_APP_DASHBOARD_HOST: process.env.DASHBOARD_HOST, + REACT_APP_BACKEND_HOST: process.env.BACKEND_HOST +} + +fs.writeFileSync('.env', envfile.stringifySync(env)); + +child_process.execSync('react-env', { + stdio: [0, 1, 2] +}); app.use(express.static(path.join(__dirname, 'build'))); -app.get('/*', function(req, res) { +app.get('/*', function (req, res) { res.sendFile(path.join(__dirname, 'build', 'index.html')); }); diff --git a/accounts/package-lock.json b/accounts/package-lock.json index f84dcc6a16..dc73838f7e 100644 --- a/accounts/package-lock.json +++ b/accounts/package-lock.json @@ -928,6 +928,29 @@ "to-fast-properties": "^2.0.0" } }, + "@beam-australia/react-env": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@beam-australia/react-env/-/react-env-2.1.2.tgz", + "integrity": "sha512-gXcCGGGb2oRM/oeqT861JXsSTJjOxGTBMkj7J5ujEBb6Vmv5I108NcALPYYdGdzFCV6ebdVP+E5k0W1xAbzA7w==", + "requires": { + "cross-spawn": "^6.0.5", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0", + "minimist": "^1.2.0" + }, + "dependencies": { + "dotenv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz", + "integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA==" + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + } + } + }, "@cnakazawa/watch": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", @@ -1782,6 +1805,15 @@ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" }, + "ambi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-5.0.0.tgz", + "integrity": "sha512-NYJzHMsZU7clGY2lH11U+2PEllFDW66qnUukXYbyF8ZJ0B0CXVNfKHUvkUp+gsaNPBW8FqEFX5l64LTlUvI2pw==", + "requires": { + "editions": "^2.1.0", + "typechecker": "^4.3.0" + } + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -4834,6 +4866,22 @@ "stream-shift": "^1.0.0" } }, + "eachr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz", + "integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=", + "requires": { + "editions": "^1.1.1", + "typechecker": "^4.3.0" + }, + "dependencies": { + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" + } + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -4843,6 +4891,15 @@ "safer-buffer": "^2.1.0" } }, + "editions": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz", + "integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==", + "requires": { + "errlop": "^1.1.1", + "semver": "^5.6.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4922,6 +4979,25 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" }, + "envfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/envfile/-/envfile-3.0.0.tgz", + "integrity": "sha512-LdL/WLZutuZedarG3Knu4v4RC7kZpC+dSdv9tVj0B8q11K0T0pLczRYxhmyVpApRRXWQnz5Fldrtnu/RzbCHPA==", + "requires": { + "ambi": "^5.0.0", + "eachr": "^3.1.0", + "editions": "^2.1.3", + "typechecker": "^4.0.1" + } + }, + "errlop": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz", + "integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==", + "requires": { + "editions": "^2.1.2" + } + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -13445,6 +13521,14 @@ "mime-types": "~2.1.24" } }, + "typechecker": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz", + "integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==", + "requires": { + "editions": "^2.1.0" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", diff --git a/accounts/package.json b/accounts/package.json index 2addd41ef1..a7e0f97baf 100755 --- a/accounts/package.json +++ b/accounts/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@beam-australia/react-env": "^2.1.2", "@trendmicro/react-dropdown": "^1.3.0", "axios": "^0.18.0", "browserslist": "^4.6.1", @@ -12,6 +13,7 @@ "components": "^0.1.0", "connected-react-router": "^4.5.0", "creditcard-generator": "0.0.7", + "envfile": "^3.0.0", "express": "^4.16.4", "faker": "^4.1.0", "file-saver": "^2.0.1", diff --git a/accounts/public/index.html b/accounts/public/index.html index d902108201..0bcae5c6dc 100755 --- a/accounts/public/index.html +++ b/accounts/public/index.html @@ -29,6 +29,7 @@ +