From cf11dbd31731ca81fcc5039afb8779e237ce7cfb Mon Sep 17 00:00:00 2001 From: Bolatan Ibrahim Date: Thu, 21 May 2020 11:51:36 +0100 Subject: [PATCH] Add Docker + API design scripts (#20) * Add Docker + API design scripts * Add Docker + API design scripts * Fix wront script file * Lock dependncies + Fix unquoted strings * Release 0.5.1: Dependent package versions added + Fix unquoted strings --- package.json | 2 +- scaffold/service/Dockerfile | 7 +++++-- scaffold/service/package.json.replace | 13 ++++++++----- scaffold/service/scripts/doc-lint.sh | 7 +++++++ scaffold/service/scripts/doc.sh | 9 +++++++++ scaffold/service/scripts/docker-build.sh | 10 ++++++++++ scaffold/service/scripts/docker-run.sh | 4 ++++ scaffold/service/src/server.ts | 6 +++--- 8 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 scaffold/service/scripts/doc-lint.sh create mode 100755 scaffold/service/scripts/doc.sh create mode 100755 scaffold/service/scripts/docker-build.sh create mode 100755 scaffold/service/scripts/docker-run.sh diff --git a/package.json b/package.json index d8c1bfe..641a2ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ctt/apig", - "version": "0.5.0", + "version": "0.5.1", "description": "A crud-api microservice and endpoint generator", "main": "bin/apig", "bin": { diff --git a/scaffold/service/Dockerfile b/scaffold/service/Dockerfile index 40db126..f704793 100644 --- a/scaffold/service/Dockerfile +++ b/scaffold/service/Dockerfile @@ -3,6 +3,7 @@ FROM node:12.16.3-alpine as ts-build # Arguments ARG NODE_ENV ARG NPM_TOKEN +ARG SERVICE_PORT ENV NODE_ENV=$NODE_ENV \ SERVICE_PORT=$SERVICE_PORT \ APP_DIR="/usr/src/{{{scaffold_docker_path}}}" \ @@ -48,7 +49,8 @@ FROM node:12.16.3-alpine as build ENV APP_DIR=/usr/src/{{{scaffold_docker_path}}} \ YARN_CACHE="/tmp/ycache" \ NODE_ENV=$NODE_ENV \ - NPM_TOKEN=$NPM_TOKEN + NPM_TOKEN=$NPM_TOKEN \ + SERVICE_PORT=$SERVICE_PORT RUN mkdir -p $APP_DIR RUN mkdir -p $YARN_CACHE @@ -73,9 +75,10 @@ FROM node:12.16.2-alpine # Arguments ARG NODE_ENV +ARG SERVICE_PORT # Configuration -ENV SERVICE_PORT={{{scaffold_service_port}}} \ +ENV SERVICE_PORT=$SERVICE_PORT \ SERVICE_USER={{{scaffold_server_name}}} \ SERVICE_USER_ID=1001 \ SERVICE_GROUP={{{scaffold_server_name}}} \ diff --git a/scaffold/service/package.json.replace b/scaffold/service/package.json.replace index f6d3f02..dd84900 100644 --- a/scaffold/service/package.json.replace +++ b/scaffold/service/package.json.replace @@ -11,12 +11,16 @@ "clean": "rm -rf lib/*", "clean:build": "yarn clean && yarn build", "dev": "nodemon", - "doc": "scripts/doc.sh", + "doc": "scripts/doc.sh {{{scaffold_project_name}}}", + "doc:lint": "scripts/doc_lint.sh {{{scaffold_project_name}}}", "dump": "ts-node -- src/persistence/mongoose/backup.ts", "lint": "eslint 'src/**'", "postinstall": "[ \"$NODE_ENV\" == production ] && exit 0; yarn clean:build", "prepublish": "yarn clean:build", "prettify:lib": "prettier --write 'lib/**'", + "build:docker": "scripts/docker-build.sh", + "docker:permission": "chmod -R +x scripts/*.sh", + "run:docker": "yarn docker:permission && yarn build:docker && scripts/docker-run.sh", "pretest": "yarn lint", "seed": "ts-node -- src/persistence/mongoose/seed.ts", "start": "node lib/index.js", @@ -51,10 +55,9 @@ "typescript": "3.8.3" }, "dependencies": { - "@ctt/crud-api": "*", - "@ctt/service-utils": "*", - "@ctt/redis-client": "*", - "@stoplight/spectral": "5.3.0", + "@ctt/crud-api": "1.6.27", + "@ctt/service-utils": "1.3.9", + "@ctt/redis-client": "0.0.0-beta.4", "convict": "4.3.2", "dotenv": "6.0.0", "hapi-auth-jwt2": "8.1.0", diff --git a/scaffold/service/scripts/doc-lint.sh b/scaffold/service/scripts/doc-lint.sh new file mode 100644 index 0000000..ab7e7f3 --- /dev/null +++ b/scaffold/service/scripts/doc-lint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +API="$1"; + +[ $# -ne 1 ] && { echo "Usage: pass API service name as argument"; exit 1;} + +npx spectral lint "doc/${API}.yaml"; diff --git a/scaffold/service/scripts/doc.sh b/scaffold/service/scripts/doc.sh new file mode 100755 index 0000000..adca8c4 --- /dev/null +++ b/scaffold/service/scripts/doc.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +API="$1"; + +[ $# -ne 1 ] && { echo "Usage: pass API service name as argument"; exit 1;} + +npx redoc-cli bundle "doc/${API}.yaml"; +rm -f "doc/${API}.html" && mv redoc-static.html "doc/${API}.html"; +exit 0; \ No newline at end of file diff --git a/scaffold/service/scripts/docker-build.sh b/scaffold/service/scripts/docker-build.sh new file mode 100755 index 0000000..b2d63fa --- /dev/null +++ b/scaffold/service/scripts/docker-build.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +NODE_ENV=$1 +NPM_TOKEN=$2 +SERVICE_PORT={{{scaffold_service_port}}}; +APP_NAME={{{scaffold_docker_path}}}; + + +docker build -t "$APP_NAME" --build-arg NODE_ENV=$NODE_ENV --build-arg SERVICE_PORT=$SERVICE_PORT --build-arg NPM_TOKEN=$NPM_TOKEN .; +exit 0; \ No newline at end of file diff --git a/scaffold/service/scripts/docker-run.sh b/scaffold/service/scripts/docker-run.sh new file mode 100755 index 0000000..f8f4960 --- /dev/null +++ b/scaffold/service/scripts/docker-run.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +docker run -p 4021:4021 {{{scaffold_docker_path}}}:latest; +exit 0; \ No newline at end of file diff --git a/scaffold/service/src/server.ts b/scaffold/service/src/server.ts index 30f31b1..1bb363e 100644 --- a/scaffold/service/src/server.ts +++ b/scaffold/service/src/server.ts @@ -115,13 +115,13 @@ export default (): Promise => auth: false, tags: {}, info: { - title: {{{scaffold_project_name}}}, - description: {{{scaffold_project_description}}}, + title: '{{{scaffold_project_name}}}', + description: '{{{scaffold_project_description}}}', version: '0.0.1', }, }, swaggerUiOptions: { - title: {{{scaffold_project_name}}}, + title: '{{{scaffold_project_name}}}', path: '/docs', authorization: false, auth: false,