The activities microservice used CVS services and mobile application allows to create activities when the VSA perform tests.
The project runs on node >18.x with typescript and serverless framework. For further details about project dependencies, please refer to the package.json
file.
nvm is used to managed node versions and configuration explicitly done per project using an .npmrc
file.
Please install and run the following securiy programs as part of your development process:
- git-secrets
After installing, do a one-time set up with
git secrets --register-aws
. Run withgit secrets --scan
.
These will be run as part of your projects hooks so you don't accidentally introduce any new security vulnerabilities.
Please refer to the the docs for the API specification and samples of postman requests.
More information about technical designs can be found under the Activities Microservice section.
Set up your nodejs environment running nvm use
and once the dependencies are installed using npm i
, you can run the scripts from package.json
to build your project.
This code repository uses serverless framework to mock AWS capabilities for local development.
You will also require to install dynamodb serverless to run your project with by running the following command npm run tools-setup
in your preferred shell.
Once dynamoDB is installed, you will need a local serverless profile to be created so that you can start developing locally.
The profiles are stored under ~/.aws/credentials
.
# ~/.aws/credentials
# Please note only serverless is used to develop locally, not deployment of services are done with this framework
# It might look like this
[default]
aws_access_key_id=<yourDummyAccesskey>
aws_secret_access_key=<yourDummySecret>
Please refer to the local development section to configure your project locally.
- The
BRANCH
environment variable indicates in which environment is this application running. Not setting this variable will result in defaulting tolocal
.
The configuration file can be found under src/config/config.yml
.
Environment variable injection is possible with the syntax:
${BRANCH}
, or you can specify a default value: ${BRANCH:local}
The real lambda function of this repository can be found under src/handler.ts
, and is a middleware function that calls lambda functions created by you according to the mapping declared in the configuration as a proxy integration pattern.
Here is an example:
functions:
- startActivity:
method: POST
path: /activities
proxy: null
function: startActivity
- endActivity:
method: PUT
path: /activities/{+proxy}
proxy: :id/end
function: endActivity
For serverless, you need to specify the port number. This is required for integration testing. The basePath
specifies the base path of the URL on the AWS environment. This is tied to the BRANCH
environment variable.
serverless:
basePath: ${BRANCH}
port: 3007
The following configuration declares two DynamoDB configurations. One for the local environment, and one for other environments. For the local environment, it is required to specify the primary keys in the config as well.
dynamodb:
local:
params:
region: localhost
endpoint: http://localhost:8005
table: cvs-local-activities
keys:
- id
remote:
params: {}
table: cvs-${BRANCH}-activities
The following scripts are available, however you can refer to the package.json
to see the details:
- install dependencies:
npm install
ornpm i
- start local development (or service):
npm start
- build project:
npm run build
- unit tests:
npm test
ornpm t
- integration tests:
npm run test-i
You will not require to change the serverless-local-dynamodb config.
If you want the database to be populated with mock data on start, in your serverless.yml
file, you need to set seed
to true
.
You can find this setting under custom > dynamodb > start
.
If you choose to run the DynamoDB instance separately, you can send the seed command with the following command:
sls dynamodb seed --seed=defects
Under custom > dynamodb > seed
you can define new seed operations with the following config:
custom:
dynamodb:
seed:
[SEED NAME HERE]:
sources:
- table: [TABLE TO SEED]
You will not require to change the config to run the service locally. The local dynamoDB config will be the following for seeding the table:
migrate: true
seed: true
noStart: false
The following environmental variables can be given to your serverless scripts to trace and debug your service:
AWS_XRAY_CONTEXT_MISSING = LOG_ERROR
SLS_DEBUG = *
BRANCH = local
Jest is used for unit testing. Please refer to the Jest documentation for further details.
In order to test, you need to run the following:
npm run test # unit tests
In order to test, you need to run the following, with the service running locally:
npm run test:integration # for integration tests
We follow a gitflow approach for development. For the CI/CD and automation please refer to the following pages for further details:
The projects has multiple hooks configured using husky which will execute the following scripts: security-checks
, audit
, tslint
, prepush
.
The codebase uses typescript clean code standards as well as sonarqube for static analysis.
SonarQube is available locally, please follow the instructions below if you wish to run the service locally (brew is the preferred approach).
Brew (recommended):
- Install sonarqube using brew
- Change
sonar.host.url
to point to localhost, by default, sonar runs onhttp://localhost:9000
- run the sonar server
sonar start
, then perform your analysisnpm run sonar-scanner
Manual:
- Download sonarqube
- Add sonar-scanner in environment variables in your profile file add the line:
export PATH=<PATH_TO_SONAR_SCANNER>/sonar-scanner-3.3.0.1492-macosx/bin:$PATH
- Start the SonarQube server:
cd <PATH_TO_SONARQUBE_SERVER>/bin/macosx-universal-64 ./sonar.sh start
- In the microservice folder run the command:
npm run sonar-scanner