* improve docker file

* merge multiple RUNs into single one to reduce image size

* fix nodegit getReferences issue

* use multi stage to optimzie docker

* move swagger-ui-express from dev to prod
This commit is contained in:
Zhenglai Zhang 2020-01-19 17:02:22 +08:00 коммит произвёл GitHub
Родитель 6313dd34c1
Коммит 5b2239afd9
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 90 добавлений и 33 удалений

Просмотреть файл

@ -1 +1,5 @@
tmp
bin
buildcache
node_modules
.git

Просмотреть файл

@ -1,14 +1,36 @@
FROM node:10-alpine
# Base Stage
FROM alpine:3.11 as base
RUN mkdir /app
WORKDIR /app
ENV APK_ADD="nodejs-npm krb5-libs"
ENV APK_ADD_BUILD="nodejs-npm python krb5-dev curl-dev build-base libssh2-dev"
RUN apk update && apk upgrade && apk add --no-cache ${APK_ADD}
# Build Stage
FROM base as builder
RUN apk add --no-cache ${APK_ADD_BUILD}
COPY package.json package-lock.json .prettierrc.yml ./
RUN BUILD_ONLY=true JOBS=`nproc` npm ci
COPY . .
RUN npm run build
ARG SKIP_TEST
RUN if [ -z "${SKIP_TEST}" ]; then npm run test; fi
RUN npm prune --production
# Prod Stage
FROM base as prod
COPY package.json package-lock.json ./
COPY --from=builder /app/bin ./bin
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3009
COPY ./ ./
# Remove .npmrc in case it was injected at build time
RUN rm -f .npmrc
# Set environment to production
ENV NODE_ENV=production
CMD npm run start:prod

67
package-lock.json сгенерированный
Просмотреть файл

@ -1,6 +1,6 @@
{
"name": "git-rest-api",
"version": "0.3.2",
"version": "0.3.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -641,9 +641,9 @@
}
},
"@types/nodegit": {
"version": "0.24.8",
"resolved": "https://registry.npmjs.org/@types/nodegit/-/nodegit-0.24.8.tgz",
"integrity": "sha512-MgeLmeBsi8sOn0IzQuw+Il4Cw71MLUNm4du44ewd5riLXbni0DZLjWx7PJO2mVegsnv0WNosXrpifQnWJjjNkg==",
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/@types/nodegit/-/nodegit-0.26.1.tgz",
"integrity": "sha512-p9qGQImDs5QYCX44Njq/7chqW6DDq5y/Qb8H1yWhNLN6hCOBRiY8EIOmuPDqBLgrJqSM13dlbRDuyeYlEaAUlg==",
"dev": true,
"requires": {
"@types/node": "*"
@ -6240,20 +6240,53 @@
}
},
"nodegit": {
"version": "0.24.3",
"resolved": "https://registry.npmjs.org/nodegit/-/nodegit-0.24.3.tgz",
"integrity": "sha512-F9XpC5xzpoBgJXmdIRaD2z5DVG+iMttxFlzyCqmOu3y5y/DFuxBpzQtRND75oUOxJZh8sSlReVnXFV3PEyzvIw==",
"version": "0.26.4",
"resolved": "https://registry.npmjs.org/nodegit/-/nodegit-0.26.4.tgz",
"integrity": "sha512-HbGdk6zqI+3u3HhRLoOigut/Ns0Bm04WL0JPwsxJKalvpihOevrdTj7461wofANu/Vn5sdaq//VpeHLZTJQrlQ==",
"requires": {
"fs-extra": "^7.0.0",
"json5": "^2.1.0",
"lodash": "^4.17.11",
"nan": "^2.11.1",
"lodash": "^4.17.14",
"nan": "^2.14.0",
"node-gyp": "^4.0.0",
"node-pre-gyp": "^0.11.0",
"node-pre-gyp": "^0.13.0",
"promisify-node": "~0.3.0",
"ramda": "^0.25.0",
"request-promise-native": "^1.0.5",
"tar-fs": "^1.16.3"
},
"dependencies": {
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
},
"node-pre-gyp": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz",
"integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==",
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
}
}
},
"nodegit-promise": {
@ -7661,16 +7694,14 @@
}
},
"swagger-ui-dist": {
"version": "3.22.3",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.22.3.tgz",
"integrity": "sha512-tmjAsqT43pqg5UoiQ2805c+juX0ASSoI/Ash/0c19jjAOFtTfE93ZrzmFd9hjqVgre935CYeXT0uaku42Lu8xg==",
"dev": true
"version": "3.25.0",
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.25.0.tgz",
"integrity": "sha512-vwvJPPbdooTvDwLGzjIXinOXizDJJ6U1hxnJL3y6U3aL1d2MSXDmKg2139XaLBhsVZdnQJV2bOkX4reB+RXamg=="
},
"swagger-ui-express": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.0.6.tgz",
"integrity": "sha512-7YkBfVWRYjvnGITs7vygM8VNF91iUwX8ReHQaTD9I7q8Ky8SYXZ81gyFc+kovE34iSbCC1yW+n2oII3b3uSxXQ==",
"dev": true,
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.1.2.tgz",
"integrity": "sha512-bVT16qj6WdNlEKFkSLOoTeGuqEm2lfOFRq6mVHAx+viA/ikORE+n4CS3WpVcYmQzM4HE6+DUFgAWcMRBJNpjcw==",
"requires": {
"swagger-ui-dist": "^3.18.1"
}

Просмотреть файл

@ -38,7 +38,7 @@
"@types/helmet": "0.0.43",
"@types/jest": "^24.0.13",
"@types/node-fetch": "^2.3.5",
"@types/nodegit": "^0.24.8",
"@types/nodegit": "^0.26.1",
"@types/rimraf": "^2.0.2",
"@types/triple-beam": "^1.3.0",
"@types/uuid": "^3.4.4",
@ -49,7 +49,6 @@
"jest": "^24.8.0",
"jest-junit": "^6.4.0",
"prettier": "^1.18.2",
"swagger-ui-express": "^4.0.6",
"ts-jest": "^24.0.2",
"tslint": "^5.17.0",
"tslint-config-prettier": "^1.18.0",
@ -73,11 +72,12 @@
"helmet": "^3.18.0",
"hot-shots": "^6.3.0",
"node-fetch": "^2.6.0",
"nodegit": "^0.24.3",
"nodegit": "^0.26.4",
"reflect-metadata": "^0.1.13",
"rimraf": "^2.6.3",
"rxjs": "^6.5.2",
"sqlite3": "^4.0.9",
"swagger-ui-express": "^4.1.2",
"triple-beam": "^1.3.0",
"typeorm": "^0.2.18",
"uuid": "^3.3.2",

Просмотреть файл

@ -1,5 +1,5 @@
import { Injectable } from "@nestjs/common";
import { Reference, Repository } from "nodegit";
import { Repository } from "nodegit";
import { GitBranch } from "../../dtos";
import { GitBaseOptions, RepoService } from "../repo";
@ -19,7 +19,7 @@ export class BranchService {
}
public async listGitBranches(repo: Repository): Promise<GitBranch[]> {
const refs = await repo.getReferences(Reference.TYPE.LISTALL);
const refs = await repo.getReferences();
const branches = refs.filter(x => x.isRemote());
return Promise.all(