Skip to content
Snippets Groups Projects
Commit 7e451b42 authored by Jérôme POIRIER's avatar Jérôme POIRIER
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
Pipeline #66196 failed
Showing
with 714 additions and 0 deletions
/.env
\ No newline at end of file
stages:
- build
- test
- docker
- sonar
- deploy
# *********************************************************************************************
# * BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD *
# * BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD BUILD *
# *********************************************************************************************
build-back:
stage: build
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:16.11.1-alpine
script:
- cd back
- npm i
- npm run build
artifacts:
paths:
- ./back/node_modules
expire_in: 1h
only:
changes:
- .gitlab-ci.yml
- back/**/*
# *********************************************************************************************
# * TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST *
# * TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST *
# *********************************************************************************************
test-back:
stage: test
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:16.11.1-alpine
script:
- cd back
- npm run test:cov
artifacts:
paths:
- ./back/coverage/lcov.info
expire_in: 5 mins
only:
changes:
- .gitlab-ci.yml
- back/**/*
# *********************************************************************************************
# * SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR *
# * SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR SONAR *
# *********************************************************************************************
sonarqube-back:
stage: sonar
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
allow_failure: true
before_script:
- apk add --no-cache 'npm>7'
- cd back
- npm install --save sonar-scanner
image:
name: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/sonarsource/sonar-scanner-cli:4
entrypoint: [""]
variables:
SONAR_URL: http://sonarqube.forge.grandlyon.com:9000
GIT_STRATEGY: clone
GIT_DEPTH: 0
script:
- >
sonar-scanner
-Dsonar.projectName=${CI_PROJECT_NAME}-server
-Dsonar.projectVersion=1.0
-Dsonar.sourceEncoding=UTF-8
-Dsonar.projectBaseDir=.
-Dsonar.host.url=${SONAR_URL}
-Dsonar.projectKey=${SONAR_PROJECT_KEY_SERVER}
-Dsonar.login=${SONAR_TOKEN_SERVER}
-Dsonar.sources=src
-Dsonar.exclusions=**/main.ts,**/*.module.ts,**/*.spec.ts
# *********************************************************************************************
# * DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKE *
# * DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKER DOCKE *
# *********************************************************************************************
default:
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/docker:20.10.9-git
services:
- name: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/docker:20.10.9-dind
alias: docker
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
DEPENDENCY_PROXY: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/
# *********************************************************************************************
# Master
docker-backend-master:
stage: docker
only:
refs:
- master
changes:
- .gitlab-ci.yml
- back/**/*
before_script:
- docker info
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker login ${CI_DEPENDENCY_PROXY_SERVER} -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD}
script:
- docker build -t "$CI_REGISTRY_IMAGE/backend-files:stable" --build-arg DEPENDENCY_PROXY="$DEPENDENCY_PROXY" backend-files
- docker push "$CI_REGISTRY_IMAGE/backend-files:stable"
# *********************************************************************************************
# Release
docker-backend-release:
stage: docker
only:
refs:
- release
changes:
- .gitlab-ci.yml
- back/**/*
before_script:
- docker info
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker login ${CI_DEPENDENCY_PROXY_SERVER} -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD}
script:
- docker build -t "$CI_REGISTRY_IMAGE/backend-files:rc" --build-arg DEPENDENCY_PROXY="$DEPENDENCY_PROXY" backend-files
- docker push "$CI_REGISTRY_IMAGE/backend-files:rc"
# *********************************************************************************************
# Develop
docker-backend-develop:
stage: docker
only:
refs:
- develop
changes:
- .gitlab-ci.yml
- back/**/*
before_script:
- docker info
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker login ${CI_DEPENDENCY_PROXY_SERVER} -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD}
script:
- docker build -t "$CI_REGISTRY_IMAGE/backend-files:latest" --build-arg DEPENDENCY_PROXY="$DEPENDENCY_PROXY" backend-files
- docker push "$CI_REGISTRY_IMAGE/backend-files:latest"
# *********************************************************************************************
# MR
docker-backend-mr:
stage: docker
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"'
before_script:
- docker info
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
- docker login ${CI_DEPENDENCY_PROXY_SERVER} -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD}
script:
- docker build -t "$CI_REGISTRY_IMAGE/backend-files:MR" --build-arg DEPENDENCY_PROXY="$DEPENDENCY_PROXY" backend-files
- docker push "$CI_REGISTRY_IMAGE/backend-files:MR"
# *********************************************************************************************
# * DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLO *
# * DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLOY DEPLO *
# *********************************************************************************************
# *********************************************************************************************
# Reusable anchors
.replacement_scripts: &replacement_scripts
- find deployment/ -name '*.yml' -exec sed -i "s/NAMESPACE_ENV/$NAMESPACE_ENV/g" {} \;
- find deployment/ -name '*.deployment.yml' -exec sed -i "s/FS_GROUP/$FS_GROUP/g" {} \;
- find deployment/ -name '*.deployment.yml' -exec sed -i "s/IMG_TAG/$IMG_TAG/g" {} \;
- find deployment/ -name '*.deployment.yml' -exec sed -i "s/REPLICA_ENV/$REPLICA_ENV/g" {} \;
# Config map
- sed -i "s|APP_LOG_DIR|$APP_LOG_DIR|g" deployment/00-backend-files.config-map.yml
- sed -i "s|APP_LOG_MAX_LEVEL|$APP_LOG_MAX_LEVEL|g" deployment/00-backend-files.config-map.yml
- sed -i "s|DOCUMENTS_DIR|$DOCUMENTS_DIR|g" deployment/00-backend-files.config-map.yml
- sed -i "s|NODE_ENV|$NODE_ENV|g" deployment/00-backend-files.config-map.yml
- sed -i "s|RATE_LIMIT_MAX|$RATE_LIMIT_MAX|g" deployment/00-backend-files.config-map.yml
# Secrets
- sed -i "s|API_KEY|$API_KEY|g" deployment/00-backend-files.secrets.yml
# *********************************************************************************************
# Master
deploy-master:
stage: deploy
environment:
name: pro
inherit:
default: false
variables: false
only:
- master
variables:
NAMESPACE_ENV: "p01"
REPLICA_ENV: 1
IMG_TAG: "stable"
FS_GROUP: 100084
before_script:
- *replacement_scripts
- export KUBECONFIG=$KUBECFG_PRO
script:
- oc apply -f deployment/
tags:
- ns-spi-p01-syn
# *********************************************************************************************
# Release
deploy-rec:
stage: deploy
environment:
name: rec
inherit:
default: false
variables: false
only:
- release
variables:
NAMESPACE_ENV: "r01"
REPLICA_ENV: 1
IMG_TAG: "rc"
FS_GROUP: 100082
before_script:
- *replacement_scripts
- export KUBECONFIG=$KUBECFG_REC
script:
- oc apply -f deployment/
tags:
- ns-spi-r01-syn
# *********************************************************************************************
# Develop
deploy-develop:
stage: deploy
environment:
name: dev
inherit:
default: false
variables: false
only:
- develop
variables:
NAMESPACE_ENV: "d01"
REPLICA_ENV: 1
IMG_TAG: "latest"
FS_GROUP: 100083
before_script:
- *replacement_scripts
- export KUBECONFIG=$KUBECFG_DEV
script:
- oc apply -f deployment/
tags:
- ns-spi-d01-syn
# *********************************************************************************************
# MR
deploy-mr:
stage: deploy
environment:
name: dev
inherit:
default: false
variables: false
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"'
# when: manual
allow_failure: true
variables:
NAMESPACE_ENV: "d01"
REPLICA_ENV: 1
IMG_TAG: "MR"
FS_GROUP: 100083
before_script:
- *replacement_scripts
- export KUBECONFIG=$KUBECFG_DEV
script:
- oc apply -f deployment/
tags:
- ns-spi-d01-syn
# Résumé du problème
_Donnez une description brève du problème._
# Les étapes pour reproduire le bug
_Listez les étapes qui vous permettent de reproduire ce bug, cette étape est très importante._
# Quel serait le comportement attendu ?
# Logs et/ou screenshots
# Possible corrections
# Changelog
Indications complémentaires des évolutions faites pour la recette des POs.
/label ~"type::bug"
# Contexte
Rappeler les éléments de contexte liés à cette évolution.
# Objectif
Qu'est ce que va permettre cette évolution ?
# Règles de gestion
Toutes les régles de gestion liées à cette évolution.
# Ressources
Éléments divers nécessaire pour réaliser cette évolution (logo, documents, designs...)
# Tâches
Tâches à réaliser techniquement pour réaliser cette évolution.
# Changelog
Indications complémentaires des évolutions faites pour la recette des POs.
# What bug does this MR resolve?
Describe in detail, what was the bug, how your merge request resolve it.
# How to set up and validate locally
List all steps to set up and validate the changes on local environment.
MR acceptance checklist to be completed by the chosen reviewer:
- item 1
# Deployment
List the informations that may be relevant to deployment
Related to #issue-number
# What does this MR do and why?
Describe in detail what your merge request does and why.
# How to set up and validate locally
List all steps to set up and validate the changes on local environment.
MR acceptance checklist to be completed by the chosen reviewer:
- item 1
# Deployment
List the informations that may be relevant to deployment
Related to #issue-number
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to localhost:9129",
"skipFiles": ["<node_internals>/**"],
"outFiles": ["${workspaceFolder}/back/dist/**/*.js"],
"localRoot": "${workspaceFolder}/back/dist",
"remoteRoot": "/usr/src/app/dist",
"smartStep": true,
"address": "127.0.0.1",
"port": 9129
}
]
}
{
"typescript.preferences.importModuleSpecifier": "relative",
"editor.formatOnSave": true,
"search.exclude": {
"**/node_modules": true,
"**/back/csv/laposte_hexasmal.csv": true,
"**/back/dist/*": true,
"**/back/sql/*": true,
"**/logs/*": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
# Backend files
## Description
Serveur exposant une API REST dédiée à la gestion de fichiers.
# compiled output
/dist
/node_modules
# Logs
logs
log
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
#documents
documents
# OS
.DS_Store
# Tests
/coverage
/.nyc_output
# IDEs and editors
/.idea
.project
.classpath
.c9/
.settings/
*.sublime-workspace
# IDE - VSCode
.history/*
# App config
environments/dev.env
# Gitlab
.gitlab-ci.yml
uploads
{
'arrowParens': 'always',
'bracketSpacing': true,
'printWidth': 150,
'semi': true,
'singleQuote': true,
'tabWidth': 2,
'trailingComma': 'all',
'useTabs': false,
}
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach to localhost:9129",
"skipFiles": ["<node_internals>/**"],
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
"localRoot": "${workspaceFolder}/dist",
"remoteRoot": "/usr/src/app/dist",
"smartStep": true,
"address": "127.0.0.1",
"port": 9129
}
]
}
{
"typescript.preferences.importModuleSpecifier": "relative",
"editor.formatOnSave": true,
"search.exclude": {
"**/node_modules": true,
"**/csv/laposte_hexasmal.csv": true,
"**/sql/*": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
# *********************************************************************************************
# * BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER B *
# * BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER BUILDER B *
# *********************************************************************************************
ARG DEPENDENCY_PROXY=
FROM ${DEPENDENCY_PROXY}node:16.11.1-alpine AS builder
WORKDIR /app
COPY . /app
COPY package.json /app/package.json
RUN npm install \
&& npm run build \
&& npm i ts-node \
&& npm prune --production
# *********************************************************************************************
# * PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD *
# * PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD PROD *
# *********************************************************************************************
ARG DEPENDENCY_PROXY=
FROM ${DEPENDENCY_PROXY}node:16.11.1-alpine
# Log4j folder have to be writable to openshift user
# RUN mkdir -p /home/node/log
# RUN chgrp -R 0 /home/node/log && chmod -R g=u /home/node/log
USER node
WORKDIR /home/node
COPY --from=builder /app/package*.json /home/node/
COPY --from=builder /app/node_modules/ /home/node/node_modules/
COPY --from=builder /app/dist/ /home/node/dist/
EXPOSE 9100
CMD ["node", "--trace-warnings", "dist/main.js"]
# Backend files
## Description
## Developpement
Installer [Node.js](https://nodejs.org/en/)
```bash
cd back
npm install
cp environements/sample.env environements/dev.env # if needed
npm run dev
```
### Running the app
```bash
$ npm run dev
```
### Test
```bash
$ npm run test:all # launch all tests with limited memory leaks
$ npm run test <subfilename> # launch a subset of tests
```
## Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
## Stay in touch
- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)
## License
Nest is [MIT licensed](LICENSE).
NODE_ENV="dev"
DOCUMENTS_DIR="/documents"
API_KEY='BACKEND_FILE_API_KEY'
RATE_LIMIT_MAX=5000
# *********************************************************************************************
# * LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG L *
# * LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG LOG L *
# *********************************************************************************************
APP_LOG_DIR=logs
# error < warn < log < debug < verbose
APP_LOG_MAX_LEVEL=debug
\ No newline at end of file
import 'reflect-metadata';
{
"collection": "@nestjs/schematics",
"sourceRoot": "src"
}
This diff is collapsed.
{
"name": "rsa-back",
"version": "4.3.23",
"description": "",
"author": "",
"license": "MIT",
"scripts": {
"build": "tsc -p tsconfig.build.json",
"start": "nest start",
"dev": "nest start --debug 0.0.0.0:9129 --watch",
"start:prod": "node dist/main.js",
"format-all": "prettier --write \"src/**/*.ts\"",
"tslint-check": "tslint-config-prettier-check ./tslint.json",
"lint": "tslint -p tsconfig.json -c tslint.json",
"test": "jest",
"test:all": "node --expose-gc ./node_modules/.bin/jest --runInBand --logHeapUsage # limit Jest memory usage",
"test:clear": "jest --clearCache",
"test:cov": "jest --coverage",
"test:debug": "node --expose-gc --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand --logHeapUsage"
},
"dependencies": {
"@nestjs/common": "8.2.4",
"@nestjs/core": "8.2.4",
"@nestjs/microservices": "8.2.4",
"@nestjs/passport": "^8.0.1",
"@nestjs/platform-express": "8.2.4",
"@nestjs/swagger": "5.1.5",
"@nestjs/terminus": "8.0.3",
"@types/multer": "^1.4.7",
"axios": "0.24.0",
"class-transformer": "0.5.1",
"class-validator": "0.13.2",
"dotenv": "^10.0.0",
"express-rate-limit": "5.5.1",
"form-data": "4.0.0",
"fs-extra": "10.0.0",
"helmet": "4.6.0",
"iconv-lite": "^0.6.3",
"joi": "17.5.0",
"passport": "^0.4.0",
"passport-headerapikey": "^1.2.2",
"rxjs": "7.5.1",
"swagger-ui-express": "4.3.0",
"winston": "^3.8.2",
"winston-daily-rotate-file": "^4.7.1"
},
"devDependencies": {
"@nestjs/cli": "^8.1.6",
"@nestjs/testing": "8.2.4",
"@types/bcrypt": "5.0.0",
"@types/bull": "3.15.7",
"@types/cookie-parser": "1.4.2",
"@types/cron": "1.7.3",
"@types/crypto-js": "4.1.0",
"@types/csurf": "1.11.2",
"@types/dotenv": "8.2.0",
"@types/express": "4.17.13",
"@types/express-rate-limit": "5.1.3",
"@types/express-serve-static-core": "4.17.27",
"@types/fs-extra": "9.0.13",
"@types/jest": "27.4.0",
"@types/mustache": "4.1.2",
"@types/node": "17.0.8",
"@types/nodemailer": "6.4.4",
"@types/passport": "^1.0.7",
"@types/passport-http": "^0.3.9",
"@types/passport-jwt": "3.0.6",
"@types/passport-local": "1.0.34",
"@types/puppeteer": "5.4.4",
"@types/qs": "6.9.7",
"@types/serve-static": "1.13.10",
"@types/supertest": "2.0.11",
"@types/uuid": "8.3.4",
"@types/validator": "13.7.1",
"cli-highlight": "2.1.11",
"concurrently": "7.0.0",
"highlight.js": "11.3.1",
"husky": "7.0.4",
"jest": "27.4.7",
"prettier": "2.5.1",
"pretty-quick": "3.1.3",
"reflect-metadata": "0.1.13",
"supertest": "6.1.6",
"ts-jest": "27.1.2",
"ts-mockito": "2.6.1",
"ts-node": "^10.7.0",
"tsconfig-paths": "3.12.0",
"tslint": "6.1.3",
"tslint-config-prettier": "1.18.0",
"tslint-plugin-prettier": "2.3.0",
"typescript": "4.5.4"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"coverageDirectory": "../coverage",
"testEnvironment": "node",
"setupFiles": [
"../jest-setup-file.ts"
],
"resetMocks": true,
"restoreMocks": true
},
"husky": {
"hooks": {
"pre-commit": "pretty-quick --staged"
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment