diff --git a/.github/workflows/aws-ecr-push.yml b/.github/workflows/aws-ecr-push.yml new file mode 100644 index 0000000..50fd7a2 --- /dev/null +++ b/.github/workflows/aws-ecr-push.yml @@ -0,0 +1,62 @@ +name: CD/ECR + +on: + push: + branches: + - main + workflow_dispatch: + +env: + AWS_REGION: us-east-1 + +jobs: + build: + name: ECR + + strategy: + matrix: + service: [service-app, service-capital, service-clans, service-wars] + + runs-on: buildjet-4vcpu-ubuntu-2204-arm + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_REGION }} + + - name: Get ECR Registry + id: ecr-login + uses: aws-actions/amazon-ecr-login@V1 + + - name: Login to ECR + uses: docker/login-action@v1 + with: + registry: ${{ steps.ecr-login.outputs.registry }} + + - name: Set up Docker Buildkit + uses: docker/setup-buildx-action@v2 + with: + buildkitd-flags: --debug + + - name: Get Tags for Image + id: metadata + uses: docker/metadata-action@v3 + with: + images: ${{ steps.ecr-login.outputs.registry }}/${{ matrix.service }} + tags: | + type=raw,value=latest + + - name: Docker Build, Tag and Push to ECR + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/arm64 + push: true + tags: ${{ steps.metadata.outputs.tags }} + build-args: GIT_SHA=${{ github.sha }},SERVICE_NAME=${{ matrix.service }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..821f208 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,28 @@ +name: CI/CD + +on: + push: + pull_request: + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Use Node.js 18 + uses: actions/setup-node@v2 + with: + node-version: 18 + + - name: NPM Install + run: npm i + + - name: Run ESLint + run: npm run test + + - name: Build + run: npm run build diff --git a/apps/service-cron/src/app.controller.spec.ts b/apps/service-app/src/app.controller.spec.ts similarity index 100% rename from apps/service-cron/src/app.controller.spec.ts rename to apps/service-app/src/app.controller.spec.ts diff --git a/apps/service-cron/src/app.controller.ts b/apps/service-app/src/app.controller.ts similarity index 100% rename from apps/service-cron/src/app.controller.ts rename to apps/service-app/src/app.controller.ts diff --git a/apps/service-cron/src/app.module.ts b/apps/service-app/src/app.module.ts similarity index 100% rename from apps/service-cron/src/app.module.ts rename to apps/service-app/src/app.module.ts diff --git a/apps/service-cron/src/app.service.ts b/apps/service-app/src/app.service.ts similarity index 100% rename from apps/service-cron/src/app.service.ts rename to apps/service-app/src/app.service.ts diff --git a/apps/service-cron/src/main.ts b/apps/service-app/src/main.ts similarity index 100% rename from apps/service-cron/src/main.ts rename to apps/service-app/src/main.ts diff --git a/apps/service-cron/test/app.e2e-spec.ts b/apps/service-app/test/app.e2e-spec.ts similarity index 91% rename from apps/service-cron/test/app.e2e-spec.ts rename to apps/service-app/test/app.e2e-spec.ts index 1a013be..3ea33d9 100644 --- a/apps/service-cron/test/app.e2e-spec.ts +++ b/apps/service-app/test/app.e2e-spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import * as request from 'supertest'; -import { AppModule } from './../src/app.module'; +import { AppModule } from '../src/app.module'; describe('AppController (e2e)', () => { let app: INestApplication; diff --git a/apps/service-cron/test/jest-e2e.json b/apps/service-app/test/jest-e2e.json similarity index 100% rename from apps/service-cron/test/jest-e2e.json rename to apps/service-app/test/jest-e2e.json diff --git a/apps/service-cron/tsconfig.app.json b/apps/service-app/tsconfig.app.json similarity index 80% rename from apps/service-cron/tsconfig.app.json rename to apps/service-app/tsconfig.app.json index 4a2ad78..6b55eeb 100644 --- a/apps/service-cron/tsconfig.app.json +++ b/apps/service-app/tsconfig.app.json @@ -2,7 +2,7 @@ "extends": "../../tsconfig.json", "compilerOptions": { "declaration": false, - "outDir": "../../dist/apps/service-cron" + "outDir": "../../dist/apps/service-app" }, "include": ["src/**/*"], "exclude": ["node_modules", "dist", "test", "**/*spec.ts"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..eeb3c70 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.6' + +services: + service-app: + image: 432159388664.dkr.ecr.us-east-1.amazonaws.com/service-app:latest + container_name: service-app + restart: always + # build: + # context: . + # dockerfile: Dockerfile + env_file: + - .env + mem_limit: 1gb + environment: + - SERVICE_NAME=service-app + + service-capital: + image: 432159388664.dkr.ecr.us-east-1.amazonaws.com/service-capital:latest + container_name: service-capital + restart: always + # build: + # context: . + # dockerfile: Dockerfile + env_file: + - .env + mem_limit: 1gb + environment: + - SERVICE_NAME=service-capital + + service-clans: + image: 432159388664.dkr.ecr.us-east-1.amazonaws.com/service-clans:latest + container_name: service-clans + restart: always + # build: + # context: . + # dockerfile: Dockerfile + env_file: + - .env + mem_limit: 1gb + environment: + - SERVICE_NAME=service-clans + + service-wars: + image: 432159388664.dkr.ecr.us-east-1.amazonaws.com/service-wars:latest + container_name: service-wars + restart: always + # build: + # context: . + # dockerfile: Dockerfile + env_file: + - .env + mem_limit: 1gb + environment: + - SERVICE_NAME=service-app + diff --git a/libs/helper/src/helper.module.ts b/libs/helper/src/helper.module.ts new file mode 100644 index 0000000..1c154ea --- /dev/null +++ b/libs/helper/src/helper.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { HelperService } from './helper.service'; + +@Module({ + providers: [HelperService], + exports: [HelperService], +}) +export class HelperModule {} diff --git a/libs/helper/src/helper.service.ts b/libs/helper/src/helper.service.ts new file mode 100644 index 0000000..df03f28 --- /dev/null +++ b/libs/helper/src/helper.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class HelperService {} diff --git a/libs/helper/src/index.ts b/libs/helper/src/index.ts new file mode 100644 index 0000000..f8724a8 --- /dev/null +++ b/libs/helper/src/index.ts @@ -0,0 +1,2 @@ +export * from './helper.module'; +export * from './helper.service'; diff --git a/libs/helper/tsconfig.lib.json b/libs/helper/tsconfig.lib.json new file mode 100644 index 0000000..5bdb4a5 --- /dev/null +++ b/libs/helper/tsconfig.lib.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "declaration": true, + "outDir": "../../dist/libs/helper" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "test", "**/*spec.ts"] +} diff --git a/nest-cli.json b/nest-cli.json index 5983292..a1ac10b 100644 --- a/nest-cli.json +++ b/nest-cli.json @@ -1,25 +1,26 @@ { "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", - "sourceRoot": "apps/service-cron/src", + "sourceRoot": "apps/service-app/src", "compilerOptions": { "deleteOutDir": true, "webpack": false, - "tsConfigPath": "apps/service-cron/tsconfig.app.json" + "tsConfigPath": "apps/service-app/tsconfig.app.json" }, "generateOptions": { - "spec": false + "spec": false, + "flat": true }, "monorepo": true, - "root": "apps/service-cron", + "root": "apps/service-app", "projects": { - "service-cron": { + "service-app": { "type": "application", - "root": "apps/service-cron", + "root": "apps/service-app", "entryFile": "main", - "sourceRoot": "apps/service-cron/src", + "sourceRoot": "apps/service-app/src", "compilerOptions": { - "tsConfigPath": "apps/service-cron/tsconfig.app.json" + "tsConfigPath": "apps/service-app/tsconfig.app.json" } }, "service-capital": { @@ -102,6 +103,15 @@ "compilerOptions": { "tsConfigPath": "libs/elastic/tsconfig.lib.json" } + }, + "helper": { + "type": "library", + "root": "libs/helper", + "entryFile": "index", + "sourceRoot": "libs/helper/src", + "compilerOptions": { + "tsConfigPath": "libs/helper/tsconfig.lib.json" + } } } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index e522b0a..e54958e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "service-cron", + "name": "service-backend", "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "service-cron", + "name": "service-backend", "version": "0.0.1", "license": "UNLICENSED", "dependencies": { diff --git a/package.json b/package.json index 323061d..08b2427 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "service-cron", + "name": "service-backend", "version": "0.0.1", "description": "", "author": "", @@ -11,13 +11,13 @@ "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "node dist/apps/service-cron/main", + "start:prod": "node dist/apps/service-app/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./apps/service-cron/test/jest-e2e.json" + "test:e2e": "jest --config ./apps/service-app/test/jest-e2e.json" }, "dependencies": { "@elastic/elasticsearch": "^8.9.0", @@ -83,7 +83,8 @@ "^@app/mongodb(|/.*)$": "/libs/mongodb/src/$1", "^@app/redis(|/.*)$": "/libs/redis/src/$1", "^@app/auth(|/.*)$": "/libs/auth/src/$1", - "^@app/elastic(|/.*)$": "/libs/elastic/src/$1" + "^@app/elastic(|/.*)$": "/libs/elastic/src/$1", + "^@app/helper(|/.*)$": "/libs/helper/src/$1" } } } diff --git a/tsconfig.json b/tsconfig.json index 953f795..ecf1d68 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -54,7 +54,13 @@ ], "@app/elastic/*": [ "libs/elastic/src/*" - ] + ], + "@app/helper": [ + "libs/helper/src" + ], + "@app/helper/*": [ + "libs/helper/src/*" + ], } } } \ No newline at end of file