From 1d4b949cf305a10f8a5225b42591a642d88dd9a4 Mon Sep 17 00:00:00 2001 From: Pagan Gazzard Date: Mon, 3 Jan 2022 16:00:04 +0000 Subject: [PATCH] Convert lib/utils/deploy-legacy to typescript Change-type: patch --- .../{deploy-legacy.js => deploy-legacy.ts} | 114 +++++++++++------- package.json | 2 +- tsconfig.dev.json | 5 + tsconfig.js.json | 7 -- tsconfig.json | 3 +- 5 files changed, 75 insertions(+), 56 deletions(-) rename lib/utils/{deploy-legacy.js => deploy-legacy.ts} (65%) delete mode 100644 tsconfig.js.json diff --git a/lib/utils/deploy-legacy.js b/lib/utils/deploy-legacy.ts similarity index 65% rename from lib/utils/deploy-legacy.js rename to lib/utils/deploy-legacy.ts index 4f32a138..074e9cf2 100644 --- a/lib/utils/deploy-legacy.js +++ b/lib/utils/deploy-legacy.ts @@ -17,15 +17,27 @@ import { getVisuals } from './lazy'; import { promisify } from 'util'; +import type * as Dockerode from 'dockerode'; +import type Logger = require('./logger'); +import type { Request } from 'request'; -const getBuilderPushEndpoint = function (baseUrl, owner, app) { - const querystring = require('querystring'); +const getBuilderPushEndpoint = function ( + baseUrl: string, + owner: string, + app: string, +) { + const querystring = require('querystring') as typeof import('querystring'); const args = querystring.stringify({ owner, app }); return `https://builder.${baseUrl}/v1/push?${args}`; }; -const getBuilderLogPushEndpoint = function (baseUrl, buildId, owner, app) { - const querystring = require('querystring'); +const getBuilderLogPushEndpoint = function ( + baseUrl: string, + buildId: number, + owner: string, + app: string, +) { + const querystring = require('querystring') as typeof import('querystring'); const args = querystring.stringify({ owner, app, buildId }); return `https://builder.${baseUrl}/v1/pushLogs?${args}`; }; @@ -35,32 +47,37 @@ const getBuilderLogPushEndpoint = function (baseUrl, buildId, owner, app) { * @param {string} imageId * @param {string} bufferFile */ -const bufferImage = function (docker, imageId, bufferFile) { - const streamUtils = require('./streams'); +const bufferImage = function ( + docker: Dockerode, + imageId: string, + bufferFile: string, +): Promise { + const streamUtils = require('./streams') as typeof import('./streams'); const image = docker.getImage(imageId); const sizePromise = image.inspect().then((img) => img.Size); return Promise.all([image.get(), sizePromise]).then( ([imageStream, imageSize]) => - streamUtils.buffer(imageStream, bufferFile).then((bufferedStream) => { - // @ts-ignore adding an extra property - bufferedStream.length = imageSize; - return bufferedStream; - }), + streamUtils + .buffer(imageStream, bufferFile) + .then((bufferedStream: NodeJS.ReadableStream & { length?: number }) => { + bufferedStream.length = imageSize; + return bufferedStream as NodeJS.ReadableStream & { length: number }; + }), ); }; -const showPushProgress = function (message) { +const showPushProgress = function (message: string) { const visuals = getVisuals(); const progressBar = new visuals.Progress(message); progressBar.update({ percentage: 0 }); return progressBar; }; -const uploadToPromise = (uploadRequest, logger) => - new Promise(function (resolve, reject) { - const handleMessage = function (data) { +const uploadToPromise = (uploadRequest: Request, logger: Logger) => + new Promise<{ buildId: number }>(function (resolve, reject) { + uploadRequest.on('error', reject).on('data', function handleMessage(data) { let obj; data = data.toString(); logger.logDebug(`Received data: ${data}`); @@ -86,25 +103,24 @@ const uploadToPromise = (uploadRequest, logger) => default: reject(new Error(`Received unexpected reply from remote: ${data}`)); } - }; - - uploadRequest.on('error', reject).on('data', handleMessage); + }); }); /** * @returns {Promise<{ buildId: number }>} */ const uploadImage = function ( - imageStream, - token, - username, - url, - appName, - logger, -) { - const request = require('request'); - const progressStream = require('progress-stream'); - const zlib = require('zlib'); + imageStream: NodeJS.ReadableStream & { length: number }, + token: string, + username: string, + url: string, + appName: string, + logger: Logger, +): Promise<{ buildId: number }> { + const request = require('request') as typeof import('request'); + const progressStream = + require('progress-stream') as typeof import('progress-stream'); + const zlib = require('zlib') as typeof import('zlib'); // Need to strip off the newline const progressMessage = logger @@ -143,8 +159,15 @@ const uploadImage = function ( return uploadToPromise(uploadRequest, logger); }; -const uploadLogs = function (logs, token, url, buildId, username, appName) { - const request = require('request'); +const uploadLogs = function ( + logs: string, + token: string, + url: string, + buildId: number, + username: string, + appName: string, +) { + const request = require('request') as typeof import('request'); return request.post({ json: true, url: getBuilderLogPushEndpoint(url, buildId, username, appName), @@ -156,25 +179,24 @@ const uploadLogs = function (logs, token, url, buildId, username, appName) { }; /** - * @param {import('dockerode')} docker - * @param {import('./logger')} logger - * @param {string} token - * @param {string} username - * @param {string} url - * @param {{appName: string; imageName: string; buildLogs: string; shouldUploadLogs: boolean}} opts * - appName: the name of the app to deploy to * - imageName: the name of the image to deploy * - buildLogs: a string with build output */ export const deployLegacy = async function ( - docker, - logger, - token, - username, - url, - opts, -) { - const tmp = require('tmp'); + docker: Dockerode, + logger: Logger, + token: string, + username: string, + url: string, + opts: { + appName: string; + imageName: string; + buildLogs: string; + shouldUploadLogs: boolean; + }, +): Promise { + const tmp = require('tmp') as typeof import('tmp'); const tmpNameAsync = promisify(tmp.tmpName); // Ensure the tmp files gets deleted @@ -195,8 +217,8 @@ export const deployLegacy = async function ( // has occured before any data was written) this call will throw an // ugly error, just suppress it - require('fs') - .promises.unlink(bufferFile) + (require('fs') as typeof import('fs')).promises + .unlink(bufferFile) .catch(() => undefined), ); diff --git a/package.json b/package.json index dd1f560f..62fbd760 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "build:t": "npm run lint && npm run build:fast && npm run build:test", "build:src": "npm run lint && npm run build:fast && npm run build:test && npm run build:doc && npm run build:completion", "build:fast": "gulp pages && tsc && npx oclif manifest", - "build:test": "tsc -P ./tsconfig.dev.json --noEmit && tsc -P ./tsconfig.js.json --noEmit", + "build:test": "tsc -P ./tsconfig.dev.json --noEmit", "build:doc": "ts-node --transpile-only automation/capitanodoc/index.ts > docs/balena-cli.md", "build:completion": "node completion/generate-completion.js", "build:standalone": "ts-node --transpile-only automation/run.ts build:standalone", diff --git a/tsconfig.dev.json b/tsconfig.dev.json index 0b09ad58..70468eea 100644 --- a/tsconfig.dev.json +++ b/tsconfig.dev.json @@ -1,5 +1,10 @@ { "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true, + "noImplicitAny": false, + "checkJs": true + }, "include": [ "./automation/**/*", "./lib/**/*", diff --git a/tsconfig.js.json b/tsconfig.js.json deleted file mode 100644 index 5967fb2a..00000000 --- a/tsconfig.js.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.dev.json", - "compilerOptions": { - "noImplicitAny": false, - "checkJs": true - } -} diff --git a/tsconfig.json b/tsconfig.json index 3a509c21..f2face70 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,8 +18,7 @@ "./node_modules/etcher-sdk/typings", "./typings" ], - "preserveSymlinks": true, - "allowJs": true + "preserveSymlinks": true }, "include": [ "./lib/**/*",