Refacto Dockerfile
This commit is contained in:
parent
7ca07d6c69
commit
73060466df
@ -1,24 +0,0 @@
|
|||||||
version: 2.1
|
|
||||||
|
|
||||||
orbs:
|
|
||||||
path-filtering: circleci/path-filtering@0.1.3
|
|
||||||
|
|
||||||
setup: true
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
setup-workflow:
|
|
||||||
jobs:
|
|
||||||
- path-filtering/filter:
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- dev
|
|
||||||
- main
|
|
||||||
- preprod
|
|
||||||
base-revision: <<pipeline.git.branch>>
|
|
||||||
config-path: .circleci/workflows.yml
|
|
||||||
mapping: |
|
|
||||||
src/.* src true
|
|
||||||
devops/.* devops true
|
|
||||||
.gitleaksignore src true
|
|
||||||
.gitleaksignore devops true
|
|
@ -1,228 +0,0 @@
|
|||||||
version: 2.1
|
|
||||||
orbs:
|
|
||||||
kubernetes: circleci/kubernetes@1.0.0
|
|
||||||
helm: circleci/helm@2.0.1
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
project-name:
|
|
||||||
type: string
|
|
||||||
description: Name of the global project, it will be used for the container registry, example -> tezoslink (has frontend and backend modules)
|
|
||||||
default: tezoslink
|
|
||||||
|
|
||||||
project-module:
|
|
||||||
type: string
|
|
||||||
description: Name of the app or module of the project, it will be used for the container registry, for example tezoslink has a front and back app, example -> front
|
|
||||||
default: p1-api
|
|
||||||
|
|
||||||
dockerfile-location:
|
|
||||||
type: string
|
|
||||||
description: Location of the Dockerfile from the root of the repo
|
|
||||||
default: .
|
|
||||||
|
|
||||||
project-helm-values:
|
|
||||||
type: string
|
|
||||||
description: Index of values in the helm chart file, example -> testApp
|
|
||||||
default: tezosLink
|
|
||||||
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
################## DO NOT EDIT #########################
|
|
||||||
########################################################
|
|
||||||
src:
|
|
||||||
type: boolean
|
|
||||||
description: This is the directory of the app, used to trigger app build & deploy
|
|
||||||
default: false
|
|
||||||
|
|
||||||
devops:
|
|
||||||
type: boolean
|
|
||||||
description: This is the directory of the devops, used to trigger devops only deploy
|
|
||||||
default: false
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
|
|
||||||
###################################################################
|
|
||||||
################ COMMANDS #######################
|
|
||||||
###################################################################
|
|
||||||
commands:
|
|
||||||
install-yq:
|
|
||||||
parameters:
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
default: v4.27.3
|
|
||||||
steps:
|
|
||||||
- run:
|
|
||||||
name: Install YQ
|
|
||||||
command: >
|
|
||||||
curl -L -o ${HOME}/yq
|
|
||||||
https://github.com/mikefarah/yq/releases/download/<< parameters.version
|
|
||||||
>>/yq_linux_amd64
|
|
||||||
chmod +x ${HOME}/yq
|
|
||||||
${HOME}/yq --version
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
default:
|
|
||||||
docker:
|
|
||||||
- image: cimg/base:stable
|
|
||||||
steps:
|
|
||||||
- run:
|
|
||||||
name: Nothing to do
|
|
||||||
command: echo There is nothing to do
|
|
||||||
|
|
||||||
verify-tag:
|
|
||||||
docker:
|
|
||||||
- image: cimg/base:stable
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- install-yq
|
|
||||||
- run:
|
|
||||||
name: Get name of project from repo url
|
|
||||||
command: echo "export NAMESPACE=$(echo '<<pipeline.project.git_url>>' | sed 's:.*/::')">> $BASH_ENV
|
|
||||||
- run:
|
|
||||||
name: Slugify name from repo url
|
|
||||||
command: echo "export NAMESPACE=$(echo $NAMESPACE | awk '{gsub(/[^0-9a-zA-Z .-]/,""); gsub(/^[ \t\r\n]+/, ""); gsub(/[ \t\r\n]+$/, ""); gsub(/[ ]+/,"-"); print tolower($0);}')">> $BASH_ENV
|
|
||||||
- run:
|
|
||||||
name: Extract TAG from Chart.yaml
|
|
||||||
command: echo "export TAG=$(${HOME}/yq '.appVersion' devops/Chart.yaml )" >> $BASH_ENV
|
|
||||||
- run:
|
|
||||||
name: Verify if TAG is in Chart.yaml
|
|
||||||
command: |
|
|
||||||
if [ -z "1" ]
|
|
||||||
then
|
|
||||||
echo "Tag is either null or missformed (check documentation)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- run:
|
|
||||||
name: Tag is 1
|
|
||||||
command: echo 1
|
|
||||||
- setup_remote_docker:
|
|
||||||
version: 20.10.12
|
|
||||||
docker_layer_caching: true
|
|
||||||
- run:
|
|
||||||
name: Login to SCW registry
|
|
||||||
command: docker login rg.fr-par.scw.cloud/$NAMESPACE -u nologin -p $SCW_SECRET_KEY
|
|
||||||
- run:
|
|
||||||
name: Check if TAG already exists in registry
|
|
||||||
command: docker manifest inspect rg.fr-par.scw.cloud/<<pipeline.parameters.project-name>>/<<pipeline.parameters.project-module>>:1 && exit 1 || echo 'TAG is available'
|
|
||||||
- run:
|
|
||||||
when: on_fail
|
|
||||||
command: echo 'Please review your tag'
|
|
||||||
|
|
||||||
run-gitleaks:
|
|
||||||
docker:
|
|
||||||
- image: zricethezav/gitleaks:v8.15.0
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- run:
|
|
||||||
name: Create scan directory
|
|
||||||
command: mkdir /tmp/gitleaks
|
|
||||||
- run:
|
|
||||||
name: Starting scan
|
|
||||||
command: gitleaks detect --source . --log-opts "-p -n 1" -r /tmp/gitleaks/scan.json -v
|
|
||||||
- store_artifacts:
|
|
||||||
path: /tmp/gitleaks/scan.json
|
|
||||||
|
|
||||||
build-docker-image:
|
|
||||||
machine:
|
|
||||||
image: ubuntu-2004:202010-01
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- install-yq
|
|
||||||
- run:
|
|
||||||
name: Create persistent workspace
|
|
||||||
command: mkdir -p workspace
|
|
||||||
- run:
|
|
||||||
name: Extract TAG from Chart.yaml
|
|
||||||
command: echo "export TAG=$(${HOME}/yq '.appVersion' devops/Chart.yaml )" >> $BASH_ENV
|
|
||||||
- run:
|
|
||||||
name: Display Tag
|
|
||||||
command: echo You are building version 1
|
|
||||||
- run:
|
|
||||||
name: Build image
|
|
||||||
command: >
|
|
||||||
docker build
|
|
||||||
--tag rg.fr-par.scw.cloud/<<pipeline.parameters.project-name>>/<<pipeline.parameters.project-module>>:1
|
|
||||||
<<pipeline.parameters.dockerfile-location>> | while read line; do echo "$(date +%T) > $line"; done;
|
|
||||||
- run:
|
|
||||||
name: Save image
|
|
||||||
command: >
|
|
||||||
docker save
|
|
||||||
-o workspace/tezoslink-back.tar
|
|
||||||
rg.fr-par.scw.cloud/<<pipeline.parameters.project-name>>/<<pipeline.parameters.project-module>>:1
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: workspace
|
|
||||||
paths:
|
|
||||||
- tezoslink-back.tar
|
|
||||||
|
|
||||||
|
|
||||||
push-docker-image:
|
|
||||||
docker:
|
|
||||||
- image: cimg/base:stable
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- install-yq
|
|
||||||
- attach_workspace:
|
|
||||||
# at: /tmp/workspace
|
|
||||||
at: /workspace
|
|
||||||
- run:
|
|
||||||
name: Extract TAG from Chart.yaml
|
|
||||||
command: echo "export TAG=$(${HOME}/yq '.appVersion' devops/Chart.yaml )" >> $BASH_ENV
|
|
||||||
- run:
|
|
||||||
name: Display Tag
|
|
||||||
command: echo You are pushing version 1
|
|
||||||
- setup_remote_docker:
|
|
||||||
version: 20.10.12
|
|
||||||
docker_layer_caching: true
|
|
||||||
- run:
|
|
||||||
name: Login to SCW registry
|
|
||||||
command: docker login rg.fr-par.scw.cloud -u nologin -p $SCW_SECRET_KEY
|
|
||||||
- run:
|
|
||||||
name: Load docker image from workspace
|
|
||||||
# command: docker load -i /tmp/workspace/tezoslink-back.tar
|
|
||||||
command: docker load -i /workspace/tezoslink-back.tar
|
|
||||||
- run:
|
|
||||||
name: Push image
|
|
||||||
command: docker push rg.fr-par.scw.cloud/<<pipeline.parameters.project-name>>/<<pipeline.parameters.project-module>>:1
|
|
||||||
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
version: 2
|
|
||||||
build-scan-push-deploy-stg:
|
|
||||||
when: <<pipeline.parameters.src>>
|
|
||||||
jobs:
|
|
||||||
- run-gitleaks:
|
|
||||||
filters: &filters-stg
|
|
||||||
branches:
|
|
||||||
only: application-segmentation-2
|
|
||||||
- verify-tag:
|
|
||||||
filters:
|
|
||||||
<<: *filters-stg
|
|
||||||
requires:
|
|
||||||
- run-gitleaks
|
|
||||||
- build-docker-image:
|
|
||||||
# requires:
|
|
||||||
# - verify-tag
|
|
||||||
context:
|
|
||||||
- application-segmentation-2
|
|
||||||
filters:
|
|
||||||
<<: *filters-stg
|
|
||||||
- push-docker-image:
|
|
||||||
context:
|
|
||||||
- application-segmentation-2
|
|
||||||
filters:
|
|
||||||
<<: *filters-stg
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
|
||||||
when:
|
|
||||||
and:
|
|
||||||
# - not: <<pipeline.parameters.devops>>
|
|
||||||
- not: <<pipeline.parameters.src>>
|
|
||||||
jobs:
|
|
||||||
- default:
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- dev
|
|
@ -4,7 +4,6 @@ orbs:
|
|||||||
kubernetes: circleci/kubernetes@1.0.0
|
kubernetes: circleci/kubernetes@1.0.0
|
||||||
helm: circleci/helm@2.0.1
|
helm: circleci/helm@2.0.1
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-push-docker-image:
|
build-push-docker-image:
|
||||||
docker:
|
docker:
|
||||||
@ -16,15 +15,10 @@ jobs:
|
|||||||
- setup_remote_docker:
|
- setup_remote_docker:
|
||||||
version: 20.10.12
|
version: 20.10.12
|
||||||
docker_layer_caching: true
|
docker_layer_caching: true
|
||||||
- run: docker login rg.fr-par.scw.cloud/tezoslink -u nologin -p $SCW_SECRET_KEY
|
- run: docker login rg.fr-par.scw.cloud/lecoffre -u nologin -p $SCW_SECRET_KEY
|
||||||
- run: docker build --tag rg.fr-par.scw.cloud/tezoslink/p1-api:$TAG -f Dockerfiles/Dockerfile.api .
|
- run: docker build --tag rg.fr-par.scw.cloud/lecoffre/api:$TAG devops/ .
|
||||||
- run: docker push rg.fr-par.scw.cloud/tezoslink/p1-api:$TAG
|
- run: docker push rg.fr-par.scw.cloud/lecoffre/api:$TAG
|
||||||
- run: docker login rg.fr-par.scw.cloud/tezoslink -u nologin -p $SCW_SECRET_KEY
|
|
||||||
- run: docker build --tag rg.fr-par.scw.cloud/tezoslink/p1-frontend:$TAG -f Dockerfiles/Dockerfile.front .
|
|
||||||
- run: docker push rg.fr-par.scw.cloud/tezoslink/p1-frontend:$TAG
|
|
||||||
- run: docker login rg.fr-par.scw.cloud/tezoslink -u nologin -p $SCW_SECRET_KEY
|
|
||||||
- run: docker build --tag rg.fr-par.scw.cloud/tezoslink/p1-proxy:$TAG -f Dockerfiles/Dockerfile.proxy .
|
|
||||||
- run: docker push rg.fr-par.scw.cloud/tezoslink/p1-proxy:$TAG
|
|
||||||
|
|
||||||
deploy-docker-image:
|
deploy-docker-image:
|
||||||
docker:
|
docker:
|
||||||
@ -40,15 +34,11 @@ jobs:
|
|||||||
name: Deploy
|
name: Deploy
|
||||||
command: >
|
command: >
|
||||||
helm upgrade
|
helm upgrade
|
||||||
tezos-link helm-charts-p2 -i -f helm-charts-p2/values.yaml
|
lecoffre-back devops/charts -i -f devops/charts/values.yaml
|
||||||
-n tezos-link
|
-n lecoffre-back
|
||||||
--create-namespace
|
--create-namespace
|
||||||
--set api.image.tag=$TAG
|
--set api.image.tag=$TAG
|
||||||
--set api.image.repository='rg.fr-par.scw.cloud/tezoslink/p1-api'
|
--set api.image.repository='rg.fr-par.scw.cloud/lecoffre/api'
|
||||||
--set front.image.tag=$TAG
|
|
||||||
--set front.image.repository='rg.fr-par.scw.cloud/tezoslink/p1-frontend'
|
|
||||||
--set proxy.image.tag=$TAG
|
|
||||||
--set proxy.image.repository='rg.fr-par.scw.cloud/tezoslink/p1-proxy'
|
|
||||||
|
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
# Install dependencies only when needed
|
|
||||||
FROM node:19-alpine AS deps
|
|
||||||
|
|
||||||
WORKDIR leCoffre
|
|
||||||
|
|
||||||
RUN npm install -D prisma@4.11.0
|
|
||||||
COPY package.json ./
|
|
||||||
COPY src/common/databases/schema.prisma ./src/common/databases/schema.prisma
|
|
||||||
RUN npx prisma generate
|
|
||||||
RUN npm install --frozen-lockfile
|
|
||||||
|
|
||||||
# Rebuild the source code only when needed
|
|
||||||
FROM node:19-alpine AS builder
|
|
||||||
|
|
||||||
WORKDIR leCoffre
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN apk update && apk add openssh-client git
|
|
||||||
|
|
||||||
COPY id_ed25519 /root/.ssh/id_ed25519
|
|
||||||
RUN chmod 600 ~/.ssh/id_ed25519
|
|
||||||
RUN eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_ed25519
|
|
||||||
RUN ssh-keyscan github.com smart-chain-fr/leCoffre-resources.git >> /root/.ssh/known_hosts
|
|
||||||
|
|
||||||
COPY node_modules ./node_modules
|
|
||||||
RUN npx prisma generate
|
|
||||||
RUN npm run build
|
|
||||||
|
|
||||||
# Production image, copy all the files and run next
|
|
||||||
FROM node:19-alpine AS production
|
|
||||||
|
|
||||||
WORKDIR leCoffre
|
|
||||||
|
|
||||||
RUN adduser -D lecoffreuser --uid 10000 && chown -R lecoffreuser .
|
|
||||||
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/node_modules ./node_modules
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/dist/api ./dist/api
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/dist/entries ./dist/entries
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/dist/common ./dist/common
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/src/common/databases/ ./src/common/databases/
|
|
||||||
COPY --from=builder --chown=lecoffreuser leCoffre/package.json ./package.json
|
|
||||||
|
|
||||||
USER lecoffreuser
|
|
||||||
|
|
||||||
CMD ["npm", "run", "api:start"]
|
|
||||||
EXPOSE 3001
|
|
51
devops/Dockerfile
Normal file
51
devops/Dockerfile
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Install dependencies only when needed
|
||||||
|
FROM node:19-alpine AS deps
|
||||||
|
|
||||||
|
WORKDIR leCoffre-back
|
||||||
|
|
||||||
|
RUN npm install -D prisma@4.11.0
|
||||||
|
COPY package.json ./
|
||||||
|
COPY src/common/databases/schema.prisma ./src/common/databases/schema.prisma
|
||||||
|
RUN npx prisma generate
|
||||||
|
|
||||||
|
ARG FINGERPRINT
|
||||||
|
ENV FINGERPRINT=$FINGERPRINT
|
||||||
|
COPY id_rsa_${FINGERPRINT} /root/.ssh/id_ed25519
|
||||||
|
RUN chmod 600 ~/.ssh/id_ed25519
|
||||||
|
RUN eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_ed25519
|
||||||
|
RUN ssh-keyscan github.com smart-chain-fr/leCoffre-back-resources.git >> /root/.ssh/known_hosts
|
||||||
|
RUN npm cache clean --force
|
||||||
|
RUN npm install --frozen-lockfile -g npm-cache
|
||||||
|
|
||||||
|
# Rebuild the source code only when needed
|
||||||
|
FROM node:19-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR leCoffre-back
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
RUN apk update && apk add openssh-client git
|
||||||
|
|
||||||
|
COPY node_modules ./node_modules
|
||||||
|
|
||||||
|
RUN npx prisma generate
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Production image, copy all the files and run next
|
||||||
|
FROM node:19-alpine AS production
|
||||||
|
|
||||||
|
WORKDIR leCoffre-back
|
||||||
|
|
||||||
|
RUN unset FINGERPRINT
|
||||||
|
RUN adduser -D lecoffre-back-user --uid 10000 && chown -R lecoffre-back-user .
|
||||||
|
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/node_modules ./node_modules
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/dist/app/api ./dist/api
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/dist/entries ./dist/entries
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/dist/common ./dist/common
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/src/common/databases/ ./src/common/databases/
|
||||||
|
COPY --from=builder --chown=lecoffre-back-user leCoffre-back/package.json ./package.json
|
||||||
|
|
||||||
|
USER lecoffre-back-user
|
||||||
|
|
||||||
|
CMD ["npm", "run", "api:start"]
|
||||||
|
EXPOSE 3001
|
33
package-lock.json
generated
33
package-lock.json
generated
@ -20,6 +20,7 @@
|
|||||||
"le-coffre-ressources": "github.com:smart-chain-fr/leCoffre-resources.git",
|
"le-coffre-ressources": "github.com:smart-chain-fr/leCoffre-resources.git",
|
||||||
"module-alias": "^2.2.2",
|
"module-alias": "^2.2.2",
|
||||||
"next": "^13.1.5",
|
"next": "^13.1.5",
|
||||||
|
"node-cache": "^5.1.2",
|
||||||
"node-schedule": "^2.1.1",
|
"node-schedule": "^2.1.1",
|
||||||
"prisma-query": "^2.0.0",
|
"prisma-query": "^2.0.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
@ -431,6 +432,14 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/clone": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/combined-stream": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -994,6 +1003,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/node-cache": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
|
||||||
|
"dependencies": {
|
||||||
|
"clone": "2.x"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/node-schedule": {
|
"node_modules/node-schedule": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@ -1838,6 +1858,11 @@
|
|||||||
"client-only": {
|
"client-only": {
|
||||||
"version": "0.0.1"
|
"version": "0.0.1"
|
||||||
},
|
},
|
||||||
|
"clone": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
|
||||||
|
},
|
||||||
"combined-stream": {
|
"combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -2157,6 +2182,14 @@
|
|||||||
"styled-jsx": "5.1.1"
|
"styled-jsx": "5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-cache": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
|
||||||
|
"requires": {
|
||||||
|
"clone": "2.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node-schedule": {
|
"node-schedule": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
"le-coffre-ressources": "github.com:smart-chain-fr/leCoffre-resources.git",
|
"le-coffre-ressources": "github.com:smart-chain-fr/leCoffre-resources.git",
|
||||||
"module-alias": "^2.2.2",
|
"module-alias": "^2.2.2",
|
||||||
"next": "^13.1.5",
|
"next": "^13.1.5",
|
||||||
|
"node-cache": "^5.1.2",
|
||||||
"node-schedule": "^2.1.1",
|
"node-schedule": "^2.1.1",
|
||||||
"prisma-query": "^2.0.0",
|
"prisma-query": "^2.0.0",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user