From fb99df6157d5728607578f1d551c188855adb47c Mon Sep 17 00:00:00 2001 From: "Patrik J. Braun" Date: Sat, 21 Dec 2019 18:14:28 +0100 Subject: [PATCH] installing ffmpeg with package manager for docker build --- .github/workflows/blank.yml | 2 +- docker/alpine/Dockerfile.build | 2 +- docker/debian-stretch/Dockerfile.build | 1 + gulpfile.ts | 50 +++++-- package-lock.json | 122 ++++++++++++++++++ package.json | 2 +- src/frontend/app/app.routing.ts | 2 +- .../app/model/network/user.service.ts | 2 +- 8 files changed, 166 insertions(+), 17 deletions(-) diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index 32216b84..b9b6d688 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -22,7 +22,7 @@ jobs: run: npm install --unsafe-perm - name: Create Release - run: npm run create-release + run: npm run create-release -- --skip-opt-packages=ffmpeg,ffprobe - uses: actions/upload-artifact@v1 with: name: pigallery2-release diff --git a/docker/alpine/Dockerfile.build b/docker/alpine/Dockerfile.build index b586dbc8..5f76e0d4 100644 --- a/docker/alpine/Dockerfile.build +++ b/docker/alpine/Dockerfile.build @@ -20,8 +20,8 @@ WORKDIR /app ENTRYPOINT ["npm", "start"] EXPOSE 80 ENV NODE_ENV=production -COPY --from=builder /build /app RUN apk add ffmpeg +COPY --from=builder /build /app RUN ln -s /app/data/config/config.json config.json VOLUME ["/app/data/config", "/app/data/db", "/app/data/images", "/app/data/tmp"] HEALTHCHECK --interval=30s --timeout=10s --retries=4 --start-period=60s \ diff --git a/docker/debian-stretch/Dockerfile.build b/docker/debian-stretch/Dockerfile.build index 953b480a..cd4cb97b 100644 --- a/docker/debian-stretch/Dockerfile.build +++ b/docker/debian-stretch/Dockerfile.build @@ -19,6 +19,7 @@ WORKDIR /app ENTRYPOINT ["npm", "start"] EXPOSE 80 ENV NODE_ENV=production +RUN apt-get update && apt-get install -y ffmpeg COPY --from=builder /build /app RUN ln -s /app/data/config/config.json config.json VOLUME ["/app/data/config", "/app/data/db", "/app/data/images", "/app/data/tmp"] diff --git a/gulpfile.ts b/gulpfile.ts index 65fe8ba1..8e1b94b2 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -3,7 +3,7 @@ import * as fs from 'fs'; import * as zip from 'gulp-zip'; import * as ts from 'gulp-typescript'; // @ts-ignore -import * as jsonModify from 'gulp-json-modify'; +import * as jeditor from 'gulp-json-editor'; const exec = require('child_process').exec; @@ -12,6 +12,19 @@ const translationFolder = 'translate'; const tsBackendProject = ts.createProject('tsconfig.json'); declare var process: NodeJS.Process; +const getSwitch = (name: string, def: string = null) => { + name = '--' + name; + for (let i = 0; i < process.argv.length; i++) { + if (process.argv[i].startsWith(name + '=')) { + return process.argv[i].replace(name + '=', '').trim(); + } + if (process.argv[i].startsWith(name) && i + 1 < process.argv.length) { + return process.argv[i + 1].trim(); + } + } + return def; +}; + gulp.task('build-backend', function () { return gulp.src([ 'src/common/**/*.ts', @@ -36,6 +49,7 @@ const createFrontendTask = (type: string, script: string) => { }); }; + const getLanguages = () => { if (!fs.existsSync('./src/frontend/' + translationFolder)) { return []; @@ -47,10 +61,8 @@ const getLanguages = () => { // get languages to filter let languageFilter: string[] = null; - for (let i = 0; i < process.argv.length; i++) { - if (process.argv[i].startsWith('--languages=')) { - languageFilter = process.argv[i].replace('--languages=', '').split(','); - } + if (getSwitch('languages')) { + languageFilter = getSwitch('languages').split(','); } let languages = files.map((f: string) => { @@ -90,6 +102,7 @@ gulp.task('copy-static', function () { return gulp.src([ 'src/backend/model/diagnostics/blank.jpg', 'README.md', + 'package-lock.json', 'LICENSE'], {base: '.'}) .pipe(gulp.dest('./release')); }); @@ -97,13 +110,26 @@ gulp.task('copy-static', function () { gulp.task('copy-package', function () { return gulp.src([ 'package.json'], {base: '.'}) - .pipe(jsonModify({ - key: 'devDependencies', - value: {} - })) - .pipe(jsonModify({ - key: 'scripts', - value: {'start': 'node ./src/backend/index.js'} + .pipe(jeditor((json: { + devDependencies: { [key: string]: string }, + scripts: { [key: string]: string }, + dependencies: { [key: string]: string }, + optionalDependencies: { [key: string]: string } + }) => { + delete json.devDependencies; + json.scripts = {start: 'node ./src/backend/index.js'}; + + if (getSwitch('skip-opt-packages')) { + const skipPackages = getSwitch('skip-opt-packages').split(','); + for (const pkg of skipPackages) { + for (const key of Object.keys(json.optionalDependencies)) { + if (key.indexOf(pkg) !== -1) { + delete json.optionalDependencies[key]; + } + } + } + } + return json; })) .pipe(gulp.dest('./release')); }); diff --git a/package-lock.json b/package-lock.json index d4065811..474c05e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6521,6 +6521,16 @@ "typedarray": "^0.0.6" } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -7185,6 +7195,12 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "default-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", @@ -7656,6 +7672,36 @@ "safer-buffer": "^2.1.0" } }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -9957,6 +10003,57 @@ } } }, + "gulp-json-editor": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/gulp-json-editor/-/gulp-json-editor-2.5.4.tgz", + "integrity": "sha512-3IdMYsSACfLFYipet9Rmpag7PEU059KnR6TWgfuAfz+ftyzN8yaEvf9vXAD5b9K9v711Ymcpqe6vWGQYfQJ/uQ==", + "dev": true, + "requires": { + "deepmerge": "^4.2.1", + "detect-indent": "^6.0.0", + "js-beautify": "^1.10.2", + "plugin-error": "^1.0.1", + "through2": "^3.0.1" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "detect-indent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", + "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "dev": true + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, "gulp-json-modify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/gulp-json-modify/-/gulp-json-modify-1.0.2.tgz", @@ -11666,6 +11763,19 @@ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.6.tgz", "integrity": "sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw==" }, + "js-beautify": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", + "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" + } + }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -14868,6 +14978,12 @@ "retry": "^0.10.0" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -16204,6 +16320,12 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", diff --git a/package.json b/package.json index ac057311..38c3bff0 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "core-js": "3.4.7", "ejs-loader": "0.3.5", "gulp": "4.0.2", - "gulp-json-modify": "1.0.2", + "gulp-json-editor": "2.5.4", "gulp-typescript": "5.0.1", "gulp-zip": "5.0.1", "hammerjs": "2.0.8", diff --git a/src/frontend/app/app.routing.ts b/src/frontend/app/app.routing.ts index ea6d3b1a..4508c9f3 100644 --- a/src/frontend/app/app.routing.ts +++ b/src/frontend/app/app.routing.ts @@ -38,7 +38,7 @@ export function galleryMatcherFunction( } return null; } - +// Todo: authguard - canActivate https://angular.io/api/router/CanActivate const ROUTES: Routes = [ { path: 'login', diff --git a/src/frontend/app/model/network/user.service.ts b/src/frontend/app/model/network/user.service.ts index 72485fe2..bb37e72d 100644 --- a/src/frontend/app/model/network/user.service.ts +++ b/src/frontend/app/model/network/user.service.ts @@ -8,7 +8,7 @@ import {ShareService} from '../../ui/gallery/share.service'; @Injectable() export class UserService { - + // Todo use JWT instead of costume cookie constructor(private _networkService: NetworkService, private _shareService: ShareService) { }