From e8afdf03c5041da624acce6bf8b9ac8482df2f6a Mon Sep 17 00:00:00 2001 From: Peter Vlugter Date: Wed, 13 Jul 2022 18:05:03 +1200 Subject: [PATCH] wip: disconnected streams on codegen download --- npm-js/kalix-scripts/bin/download-codegen.js | 38 ++++++++----- npm-js/kalix-scripts/package-lock.json | 58 ++++++++++++++++++-- npm-js/kalix-scripts/package.json | 4 +- 3 files changed, 80 insertions(+), 20 deletions(-) diff --git a/npm-js/kalix-scripts/bin/download-codegen.js b/npm-js/kalix-scripts/bin/download-codegen.js index 66e5ffc79..24a023e00 100644 --- a/npm-js/kalix-scripts/bin/download-codegen.js +++ b/npm-js/kalix-scripts/bin/download-codegen.js @@ -1,6 +1,8 @@ -const fetch = require('node-fetch'); +const axios = require('axios').default; const fs = require('fs'); const path = require('path'); +const stream = require('stream'); +const util = require('util'); const packageConfig = require('../package.json'); /** @@ -44,20 +46,28 @@ if (localBinary) { ? `https://repo.lightbend.com/raw/kalix/versions/${kalixCodegenVersion}/${releases[release]}.exe` : `https://repo.lightbend.com/raw/kalix/versions/${kalixCodegenVersion}/${releases[release]}`; console.info(`Fetching kalix-codegen-js from ${url}`); - fetch(url).then((response) => { - if (!response.ok) { - throw new Error( - `Error fetching Kalix codegen tool from [${url}]: ${response.statusText}.`, - ); - } - console.debug(`Saving to ${targetFile}`); - if (!fs.existsSync(binDir)) { - fs.mkdirSync(binDir); - } - const fileWriter = fs.createWriteStream(targetFile, { mode: 0o755 }); - response.body.pipe(fileWriter); - }); + axios + .get(url, { responseType: 'stream' }) + .then((response) => { + console.debug(`Saving to ${targetFile}`); + if (!fs.existsSync(binDir)) { + fs.mkdirSync(binDir); + } + + const streamPipeline = util.promisify(stream.pipeline); + const fileWriter = fs.createWriteStream(targetFile, { mode: 0o755 }); + return streamPipeline(response.data, fileWriter); + }) + .catch((failure) => { + const error = failure.isAxiosError + ? failure.response.statusText + : failure; + console.error('Failed to download Kalix codegen binary:', error); + if (fs.existsSync(targetFile)) { + fs.rmSync(targetFile); + } + }); } else { throw new Error( 'Unsupported platform. No prebuilt version of the Kalix codegen tool exists for this platform.', diff --git a/npm-js/kalix-scripts/package-lock.json b/npm-js/kalix-scripts/package-lock.json index cf6fc9d27..66215d3cb 100644 --- a/npm-js/kalix-scripts/package-lock.json +++ b/npm-js/kalix-scripts/package-lock.json @@ -4,6 +4,28 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -14,15 +36,43 @@ "which": "^2.0.1" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } }, "path-key": { "version": "3.1.1", diff --git a/npm-js/kalix-scripts/package.json b/npm-js/kalix-scripts/package.json index f3836aede..284bfd6e9 100644 --- a/npm-js/kalix-scripts/package.json +++ b/npm-js/kalix-scripts/package.json @@ -11,8 +11,8 @@ "npm": ">=6.0.0" }, "dependencies": { - "cross-spawn": "^7.0.3", - "node-fetch": "^2.6.1" + "axios": "^0.27.2", + "cross-spawn": "^7.0.3" }, "bin": { "kalix-scripts": "./bin/kalix-scripts.js"