From 744122b1b8dc9884e57638bb7f86776598714a62 Mon Sep 17 00:00:00 2001 From: Pagan Gazzard Date: Thu, 14 May 2020 12:21:23 +0100 Subject: [PATCH] Update typescript to 3.9 Change-type: patch --- lib/actions/deploy.js | 201 +++++++++++++++++++++--------------------- lib/utils/compose.js | 2 +- npm-shrinkwrap.json | 36 ++++---- package.json | 6 +- 4 files changed, 124 insertions(+), 121 deletions(-) diff --git a/lib/actions/deploy.js b/lib/actions/deploy.js index 4d9b50af..48026d80 100644 --- a/lib/actions/deploy.js +++ b/lib/actions/deploy.js @@ -54,110 +54,113 @@ const deployProject = function(docker, logger, composeOpts, opts) { } // find which services use images that already exist locally - return Promise.map(project.descriptors, function(d) { - // unconditionally build (or pull) if explicitly requested - if (opts.shouldPerformBuild) { - return d; - } - return docker - .getImage(typeof d.image === 'string' ? d.image : d.image.tag) - .inspect() - .return(d.serviceName) - .catchReturn(); - }) - .filter(d => !!d) - .then(function(servicesToSkip) { - // multibuild takes in a composition and always attempts to - // build or pull all services. we workaround that here by - // passing a modified composition. - const compositionToBuild = _.cloneDeep(project.composition); - compositionToBuild.services = _.omit( - compositionToBuild.services, - servicesToSkip, - ); - if (_.size(compositionToBuild.services) === 0) { - logger.logInfo( - 'Everything is up to date (use --build to force a rebuild)', - ); - return {}; + return ( + Promise.map(project.descriptors, function(d) { + // unconditionally build (or pull) if explicitly requested + if (opts.shouldPerformBuild) { + return d; } - return compose - .buildProject( - docker, - logger, - project.path, - project.name, - compositionToBuild, - opts.app.arch, - opts.app.device_type, - opts.buildEmulated, - opts.buildOpts, - composeOpts.inlineLogs, - opts.convertEol, - composeOpts.dockerfilePath, - composeOpts.nogitignore, - ) - .then(builtImages => _.keyBy(builtImages, 'serviceName')); + return docker + .getImage(typeof d.image === 'string' ? d.image : d.image.tag) + .inspect() + .return(d.serviceName) + .catchReturn(); }) - .then(builtImages => - project.descriptors.map( - d => - builtImages[d.serviceName] ?? { - serviceName: d.serviceName, - name: typeof d.image === 'string' ? d.image : d.image.tag, - logs: 'Build skipped; image for service already exists.', - props: {}, - }, - ), - ) - .then(function(images) { - if (opts.app.application_type?.[0]?.is_legacy) { - const { deployLegacy } = require('../utils/deploy-legacy'); - - const msg = getChalk().yellow( - 'Target application requires legacy deploy method.', + .filter(d => !!d) + .then(function(servicesToSkip) { + // multibuild takes in a composition and always attempts to + // build or pull all services. we workaround that here by + // passing a modified composition. + const compositionToBuild = _.cloneDeep(project.composition); + compositionToBuild.services = _.omit( + compositionToBuild.services, + servicesToSkip, ); - logger.logWarn(msg); - - return Promise.join( - docker, - logger, - sdk.auth.getToken(), - sdk.auth.whoami(), - sdk.settings.get('balenaUrl'), - { - // opts.appName may be prefixed by 'owner/', unlike opts.app.app_name - appName: opts.appName, - imageName: images[0].name, - buildLogs: images[0].logs, - shouldUploadLogs: opts.shouldUploadLogs, - }, - deployLegacy, - ).then(releaseId => - // @ts-ignore releaseId should be inferred as a number because that's what deployLegacy is - // typed as returning but the .js type-checking doesn't manage to infer it correctly due to - // Promise.join typings - sdk.models.release.get(releaseId, { $select: ['commit'] }), - ); - } - return Promise.join( - sdk.auth.getUserId(), - sdk.auth.getToken(), - sdk.settings.get('apiUrl'), - (userId, auth, apiEndpoint) => - compose.deployProject( + if (_.size(compositionToBuild.services) === 0) { + logger.logInfo( + 'Everything is up to date (use --build to force a rebuild)', + ); + return {}; + } + return compose + .buildProject( docker, logger, - project.composition, - images, - opts.app.id, - userId, - `Bearer ${auth}`, - apiEndpoint, - !opts.shouldUploadLogs, - ), - ); - }); + project.path, + project.name, + compositionToBuild, + opts.app.arch, + opts.app.device_type, + opts.buildEmulated, + opts.buildOpts, + composeOpts.inlineLogs, + opts.convertEol, + composeOpts.dockerfilePath, + composeOpts.nogitignore, + ) + .then(builtImages => _.keyBy(builtImages, 'serviceName')); + }) + .then(builtImages => + project.descriptors.map( + d => + builtImages[d.serviceName] ?? { + serviceName: d.serviceName, + name: typeof d.image === 'string' ? d.image : d.image.tag, + logs: 'Build skipped; image for service already exists.', + props: {}, + }, + ), + ) + // @ts-ignore slightly different return types of partial vs non-partial release + .then(function(images) { + if (opts.app.application_type?.[0]?.is_legacy) { + const { deployLegacy } = require('../utils/deploy-legacy'); + + const msg = getChalk().yellow( + 'Target application requires legacy deploy method.', + ); + logger.logWarn(msg); + + return Promise.join( + docker, + logger, + sdk.auth.getToken(), + sdk.auth.whoami(), + sdk.settings.get('balenaUrl'), + { + // opts.appName may be prefixed by 'owner/', unlike opts.app.app_name + appName: opts.appName, + imageName: images[0].name, + buildLogs: images[0].logs, + shouldUploadLogs: opts.shouldUploadLogs, + }, + deployLegacy, + ).then(releaseId => + // @ts-ignore releaseId should be inferred as a number because that's what deployLegacy is + // typed as returning but the .js type-checking doesn't manage to infer it correctly due to + // Promise.join typings + sdk.models.release.get(releaseId, { $select: ['commit'] }), + ); + } + return Promise.join( + sdk.auth.getUserId(), + sdk.auth.getToken(), + sdk.settings.get('apiUrl'), + (userId, auth, apiEndpoint) => + compose.deployProject( + docker, + logger, + project.composition, + images, + opts.app.id, + userId, + `Bearer ${auth}`, + apiEndpoint, + !opts.shouldUploadLogs, + ), + ); + }) + ); }) .then(function(release) { logger.outputDeferredMessages(); diff --git a/lib/utils/compose.js b/lib/utils/compose.js index 48d66c80..d3827578 100644 --- a/lib/utils/compose.js +++ b/lib/utils/compose.js @@ -195,7 +195,7 @@ function originalTarDirectory(dir, param) { const getFiles = () => // @ts-ignore `klaw` returns a `Walker` which is close enough to a stream to work but ts complains - streamToPromise(klaw(dir)) + Promise.resolve(streamToPromise(klaw(dir))) .filter(item => !item.stats.isDirectory()) .map(item => item.path); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index d474a2cf..e3c43ed5 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -141,12 +141,6 @@ "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", "dev": true }, - "coffee-script": { - "version": "1.12.7", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", - "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", - "dev": true - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -873,9 +867,9 @@ } }, "@types/bluebird": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.30.tgz", - "integrity": "sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw==" + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.31.tgz", + "integrity": "sha512-0PKlnDIxOh3xJHwJpVONR2PP11LhdM+QYiLJGLIbzMqRwLAPxN6lQar2RpdRhfIEh/HjVMgMdhHWJA0CgC5X6w==" }, "@types/body-parser": { "version": "1.19.0", @@ -3482,6 +3476,12 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, "coffeelint": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/coffeelint/-/coffeelint-1.16.2.tgz", @@ -16498,9 +16498,9 @@ } }, "source-map-support": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.17.tgz", - "integrity": "sha512-bwdKOBZ5L0gFRh4KOxNap/J/MpvX9Yxsq9lFDx65s3o7F/NiHy7JRaGIS8MwW6tZPAq9UXE207Il0cfcb5yu/Q==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -17450,9 +17450,9 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" }, "ts-node": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.0.tgz", - "integrity": "sha512-rwkXfOs9zmoHrV8xE++dmNd6ZIS+nmHHCxcV53ekGJrxFLMbp+pizpPS07ARvhwneCIECPppOwbZHvw9sQtU4w==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", + "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -17619,9 +17619,9 @@ } }, "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz", + "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==", "dev": true }, "udif": { diff --git a/package.json b/package.json index e11250bc..4e88bf41 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "@octokit/plugin-throttling": "^2.7.1", "@octokit/rest": "^16.43.1", "@types/archiver": "^2.1.3", - "@types/bluebird": "^3.5.30", + "@types/bluebird": "^3.5.31", "@types/body-parser": "^1.19.0", "@types/chai": "^4.2.11", "@types/chai-as-promised": "^7.1.1", @@ -160,8 +160,8 @@ "rewire": "^4.0.1", "simple-git": "^1.131.0", "sinon": "^7.5.0", - "ts-node": "^8.9.0", - "typescript": "^3.8.3" + "ts-node": "^8.10.1", + "typescript": "^3.9.2" }, "dependencies": { "@balena/dockerignore": "^1.0.2",