diff --git a/.drone.yml b/.drone.yml index 6cc56aa..8bc071a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,20 +1,100 @@ --- kind: pipeline -name: tests:latest +name: tests:node_latest clone: disable: true steps: -- name: checkout pr - image: alpine/git - commands: - - git clone $DRONE_REMOTE_URL . - - git checkout $DRONE_SOURCE_BRANCH - - mv .env.ci .env -- name: run tests - image: node:alpine - commands: - - yarn - - yarn test:ci + - name: checkout pr + image: alpine/git + commands: + - git clone $DRONE_REMOTE_URL . + - git checkout $DRONE_SOURCE_BRANCH + - mv .env.ci .env + - name: run tests + image: node:alpine + commands: + - yarn + - yarn test:ci trigger: event: - - pull_request \ No newline at end of file + - pull_request + +--- +kind: pipeline +type: docker +name: build:dev + +steps: + - name: build featurebranch + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + repo: registry.odit.services/lfk/backend + tags: + - dev + registry: registry.odit.services + when: + branch: + - dev + event: + - push + +trigger: + branch: + - dev + event: + - push + +--- +kind: pipeline +type: docker +name: build:latest + +steps: + - name: build featurebranch + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + repo: registry.odit.services/lfk/backend + tags: + - latest + registry: registry.odit.services + +trigger: + branch: + - main + event: + - push + +--- +kind: pipeline +type: docker +name: build:tags + +steps: + - name: build featurebranch + image: plugins/docker + depends_on: [clone] + settings: + username: + from_secret: DOCKER_REGISTRY_USER + password: + from_secret: DOCKER_REGISTRY_PASSWORD + repo: registry.odit.services/lfk/backend + tags: + - $DRONE_TAG + registry: registry.odit.services + +trigger: + branch: + - main + event: + - tag \ No newline at end of file diff --git a/.env.ci b/.env.ci index 6103f14..d96e21a 100644 --- a/.env.ci +++ b/.env.ci @@ -5,4 +5,4 @@ DB_PORT=unused DB_USER=unused DB_PASSWORD=bla DB_NAME=./test.sqlite -NODE_ENV=production \ No newline at end of file +NODE_ENV=dev \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 089c4de..fe4793a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,16 @@ -FROM node:alpine +# Typescript Build +FROM node:14.15.1-alpine3.12 WORKDIR /app -COPY ./package.json ./ -RUN yarn -COPY ./ ./ -ENTRYPOINT [ "yarn","dev" ] \ No newline at end of file +COPY package.json ./ +RUN npm i -g pnpm +RUN pnpm i +COPY tsconfig.json ormconfig.js ./ +COPY src ./src +RUN pnpm run build +# final image +FROM node:14.15.1-alpine3.12 +COPY package.json ormconfig.js ./ +RUN npm i -g pnpm +RUN pnpm i --prod +COPY --from=0 /app/dist dist +ENTRYPOINT ["node", "dist/app.js"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7ca0bb8..bcb856b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,18 +6,26 @@ services: - 4010:4010 environment: APP_PORT: 4010 - DB_TYPE: postgres - DB_HOST: backend_db - DB_PORT: 5432 - DB_USER: lfk - DB_PASSWORD: changeme - DB_NAME: lfk + DB_TYPE: sqlite + DB_HOST: bla + DB_PORT: bla + DB_USER: bla + DB_PASSWORD: bla + DB_NAME: dev.sqlite NODE_ENV: production - backend_db: - image: postgres:11-alpine - environment: - POSTGRES_DB: lfk - POSTGRES_PASSWORD: changeme - POSTGRES_USER: lfk - ports: - - 5432:5432 \ No newline at end of file + # APP_PORT: 4010 + # DB_TYPE: postgres + # DB_HOST: backend_db + # DB_PORT: 5432 + # DB_USER: lfk + # DB_PASSWORD: changeme + # DB_NAME: lfk + # NODE_ENV: production + # backend_db: + # image: postgres:11-alpine + # environment: + # POSTGRES_DB: lfk + # POSTGRES_PASSWORD: changeme + # POSTGRES_USER: lfk + # ports: + # - 5432:5432 diff --git a/ormconfig.js b/ormconfig.js new file mode 100644 index 0000000..0cb8778 --- /dev/null +++ b/ormconfig.js @@ -0,0 +1,16 @@ +const dotenv = require('dotenv'); +dotenv.config(); +// +const SOURCE_PATH = process.env.NODE_ENV === 'production' ? 'dist' : 'src'; +module.exports = { + type: process.env.DB_TYPE, + host: process.env.DB_HOST, + port: process.env.DB_PORT, + username: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + // entities: ["src/**/entities/*.ts"], + entities: [ `${SOURCE_PATH}/**/entities/*{.ts,.js}` ], + seeds: [ `${SOURCE_PATH}/**/seeds/*{.ts,.js}` ] + // seeds: ['src/seeds/*.ts'], +}; diff --git a/ormconfig.ts b/ormconfig.ts deleted file mode 100644 index aa5f916..0000000 --- a/ormconfig.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { config } from 'dotenv'; -config(); - -export default { - type: process.env.DB_TYPE, - host: process.env.DB_HOST, - port: process.env.DB_PORT, - username: process.env.DB_USER, - password: process.env.DB_PASSWORD, - database: process.env.DB_NAME, - entities: ["src/models/entities/*.ts"], - seeds: ['src/seeds/*.ts'], -}; diff --git a/package.json b/package.json index 6821661..f61f52b 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,7 @@ "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", - "helmet": "^4.2.0", "jsonwebtoken": "^8.5.1", - "multer": "^1.4.2", "mysql": "^2.18.1", "pg": "^8.5.1", "reflect-metadata": "^0.1.13", @@ -44,23 +42,20 @@ "typeorm": "^0.2.29", "typeorm-routing-controllers-extensions": "^0.2.0", "typeorm-seeding": "^1.6.1", + "sqlite3": "^5.0.0", "uuid": "^8.3.1" }, "devDependencies": { "@types/cors": "^2.8.8", - "@types/dotenv": "^8.2.0", "@types/express": "^4.17.9", "@types/jest": "^26.0.16", "@types/jsonwebtoken": "^8.5.0", - "@types/multer": "^1.4.4", "@types/node": "^14.14.9", "@types/swagger-ui-express": "^4.1.2", "@types/uuid": "^8.3.0", "axios": "^0.21.0", - "dotenv-safe": "^8.2.0", "jest": "^26.6.3", "nodemon": "^2.0.6", - "sqlite3": "^5.0.0", "start-server-and-test": "^1.11.6", "ts-jest": "^26.4.4", "ts-node": "^9.0.0", @@ -80,7 +75,6 @@ "ignore": [ "src/tests/*", "docs/*" - ], - "delay": "2500" + ] } } diff --git a/src/app.ts b/src/app.ts index 588d6a1..9adc9b3 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,13 +6,14 @@ import { config, e as errors } from './config'; import loaders from "./loaders/index"; import { ErrorHandler } from './middlewares/ErrorHandler'; +const CONTROLLERS_FILE_EXTENSION = process.env.NODE_ENV === 'production' ? 'js' : 'ts'; const app = createExpressServer({ authorizationChecker: authchecker, middlewares: [ErrorHandler], development: config.development, cors: true, routePrefix: "/api", - controllers: [__dirname + "/controllers/*.ts"], + controllers: [`${__dirname}/controllers/*.${CONTROLLERS_FILE_EXTENSION}`], }); async function main() { diff --git a/tsconfig.json b/tsconfig.json index dfd4d15..b28ff11 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "target": "ES2020", "module": "commonjs", "rootDir": "./src", - "outDir": "./build", + "outDir": "./dist", "esModuleInterop": true, "strict": false, "experimentalDecorators": true,