From 17502c88a392c5bb5af1674c586dbb8859177b28 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Tue, 13 Aug 2024 15:46:19 +0000 Subject: [PATCH 01/23] =?UTF-8?q?[add]=20#2206=20typos=E3=81=AE=E3=83=90?= =?UTF-8?q?=E3=82=A4=E3=83=8A=E3=83=AA=E3=82=92=E3=83=80=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E3=81=99=E3=82=8B=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=88=E3=81=8C=E5=BF=85=E8=A6=81=E3=81=AA?= =?UTF-8?q?=E3=81=9F=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 228 +++++++++++++++++++++++++++++++++++++++++ package.json | 5 +- 2 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 build/downloadTypos.js diff --git a/build/downloadTypos.js b/build/downloadTypos.js new file mode 100644 index 0000000000..61e9143ebe --- /dev/null +++ b/build/downloadTypos.js @@ -0,0 +1,228 @@ +// @ts-check +/** + * OSに合ったtyposのバイナリをダウンロードするスクリプト。 + */ +const { exec } = require("child_process"); +const { promisify } = require("util"); +const { platform } = require("os"); +const { join, resolve } = require("path"); +const { mkdirSync, existsSync, unlinkSync } = require("fs"); +const fetch = require("node-fetch"); + +// バイナリデータの保存パス +const BINARY_BASE_DIR = resolve(__dirname, "vendored"); +// 環境構築したいバイナリデータの配列オブジェクト +const WANT_TO_DOWNLOAD_BINARIES = [ + { + name: "typos", + repo: "crate-ci/typos", + version: "latest", + }, + // { + // name: 'anotherBinary', + // repo: 'some-other-repo/some-binary', + // version: 'v1.2.3', // 指定したバージョン + // } +]; + +// OSのコマンドを非同期関数として処理させるために必要な関数 +const execAsync = promisify(exec); + +/** + * コマンドを実行し、その進行状況を出力するヘルパー関数 + * + * @param {string} command - 実行するシェルコマンド + * @param {string} description - コマンドの説明を表示するテキスト + */ +async function runCommand(command, description) { + console.log(`実行中: ${description} ...`); + try { + const { stdout, stderr } = await execAsync(command); + if (stdout) console.log(stdout); + if (stderr) console.error(stderr); + } catch (error) { + console.error(`エラーが発生しました: ${error.message}`); + throw error; + } +} + +/** + * バイナリをダウンロードして解凍し、実行権限を付与する関数 + * + * @param {Object} binaries - バイナリの情報を含むオブジェクト + * @param {Function} downloadBinaryFunction - OSに応じたバイナリのダウンロード関数 + */ +async function processBinaries(binaries, downloadBinaryFunction) { + binaries.map(async (binary) => { + try { + console.log(`${binary.name} のダウンロードURLを取得中...`); + const url = await getBinaryURL(binary.repo, binary.version); + + // インストール処理 + await downloadBinaryFunction(binary.name, url); + } catch (err) { + console.error( + `${binary.name} のインストール中にエラーが発生しました: ${err.message}`, + ); + } + }); +} + +/** + * OSに応じた関数を選択し、バイナリデータを処理する関数 + * + * @param {Array} binaries - 複数のバイナリの情報を含む配列オブジェクト + */ +async function main(binaries) { + const os = platform(); + let downloadBinaryFunction; + + console.log(`使用しているOS: ${os}`); + + // OSに応じたインストール関数を選択 + switch (os) { + case "linux": + downloadBinaryFunction = downloadBinaryForLinux; + break; + case "darwin": + downloadBinaryFunction = downloadBinaryForMac; + break; + case "win32": + downloadBinaryFunction = downloadBinaryForWin; + break; + default: + throw new Error("サポートされていないOSです"); + } + + // バイナリデータを処理 + await processBinaries(binaries, downloadBinaryFunction); +} + +/** + * GitHub APIを使って、リポジトリのリリースから各プラットフォームのダウンロードURLを取得する関数 + * + * @param {string} repo - GitHubリポジトリの名前(例: 'crate-ci/typos') + * @param {string} [version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) + * @returns {Promise} 各プラットフォームのダウンロードURLを含むオブジェクト + */ +async function getBinaryURL(repo, version = "latest") { + const apiUrl = + version === "latest" + ? `https://api.github.com/repos/${repo}/releases/latest` + : `https://api.github.com/repos/${repo}/releases/tags/${version}`; + + const response = await fetch(apiUrl); + if (!response.ok) { + throw new Error( + `指定されたバージョン "${version}" のリリース情報が見つかりませんでした。`, + ); + } + + const data = await response.json(); + const url = { + linux: null, + darwin: null, + win32: null, + }; + + data.assets.forEach((asset) => { + if (asset.name.includes("linux")) url.linux = asset.browser_download_url; + else if (asset.name.includes("apple-darwin")) + url.darwin = asset.browser_download_url; + else if (asset.name.includes("windows")) + url.win32 = asset.browser_download_url; + }); + + return url; +} + +/** + * Linuxのための環境をセットアップし、バイナリをインストールする関数 + * @param {string} name - バイナリの名前 + * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + */ +async function downloadBinaryForLinux(name, url) { + const binaryPath = join(BINARY_BASE_DIR, name); + + if (!existsSync(binaryPath)) { + mkdirSync(binaryPath, { recursive: true }); + } + + const tarballPath = `${binaryPath}/${name}.tar.gz`; + + await runCommand( + `curl -L ${url.linux} -o ${tarballPath}`, + `${name}バイナリのダウンロード`, + ); + await runCommand( + `tar -xzvf ${tarballPath} -C ${binaryPath}`, + "バイナリの解凍", + ); + await runCommand( + `chmod +x ${binaryPath}/${name}`, + "バイナリに実行権限を付与", + ); + + // 解凍後に圧縮ファイルを削除 + unlinkSync(tarballPath); +} + +/** + * Windowsのための環境をセットアップし、バイナリをインストールする関数 + * @param {string} name - バイナリの名前 + * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + */ +async function downloadBinaryForWin(name, url) { + const binaryPath = join(BINARY_BASE_DIR, name); + + if (!existsSync(binaryPath)) { + mkdirSync(binaryPath, { recursive: true }); + } + + const zipPath = `${binaryPath}/${name}.zip`; + + await runCommand( + `curl -L ${url.win32} -o ${zipPath}`, + `${name}バイナリのダウンロード`, + ); + await runCommand(`tar -xf ${zipPath} -C ${binaryPath}`, "バイナリの解凍"); + + // 解凍後に圧縮ファイルを削除 + unlinkSync(zipPath); +} + +/** + * macOSのための環境をセットアップし、バイナリをインストールする関数 + * @param {string} name - バイナリの名前 + * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + */ +async function downloadBinaryForMac(name, url) { + const binaryPath = join(BINARY_BASE_DIR, name); + + if (!existsSync(binaryPath)) { + mkdirSync(binaryPath, { recursive: true }); + } + + const tarballPath = `${binaryPath}/${name}.tar.gz`; + + await runCommand( + `curl -L ${url.darwin} -o ${tarballPath}`, + `${name}バイナリのダウンロード`, + ); + await runCommand( + `tar -xzvf ${tarballPath} -C ${binaryPath}`, + "バイナリの解凍", + ); + await runCommand( + `chmod +x ${binaryPath}/${name}`, + "バイナリに実行権限を付与", + ); + + // 解凍後に圧縮ファイルを削除 + unlinkSync(tarballPath); +} + +// main関数実行 +(async () => { + await main(WANT_TO_DOWNLOAD_BINARIES); +})(); diff --git a/package.json b/package.json index 1b21df166e..eb843f526b 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,12 @@ "fmt": "eslint --ext .js,.vue,.ts *.config.* src tests build .storybook --fix", "markdownlint": "markdownlint --ignore node_modules/ --ignore dist/ --ignore dist_electron/ ./", "typecheck": "vue-tsc --noEmit", + "typos": "./build/vendored/typos/typos", "electron:build": "cross-env VITE_TARGET=electron vite build && electron-builder --config electron-builder.config.js --publish never", "electron:serve": "cross-env VITE_TARGET=electron vite", "browser:serve": "cross-env VITE_TARGET=browser vite", "browser:build": "cross-env VITE_TARGET=browser vite build", - "postinstall": "electron-builder install-app-deps && node build/download7z.js", + "postinstall": "electron-builder install-app-deps && node build/download7z.js && node build/downloadTypos.js", "postuninstall": "electron-builder install-app-deps", "license:generate": "node build/generateLicenses.js", "license:merge": "node build/mergeLicenses.js", @@ -128,4 +129,4 @@ "vue-tsc": "2.0.24", "yargs": "17.2.1" } -} +} \ No newline at end of file From 3539b044abfa31549553066eaf4e735453fe3674 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Wed, 14 Aug 2024 12:14:50 +0900 Subject: [PATCH 02/23] =?UTF-8?q?[fix]=20#2206=20windows=E3=81=AB=E3=81=A6?= =?UTF-8?q?Typos=E3=81=AE=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA=E3=83=87?= =?UTF-8?q?=E3=83=BC=E3=82=BF=E3=81=8C=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=A8=E8=A7=A3=E5=87=8D=E3=83=BB=E5=89=8A?= =?UTF-8?q?=E9=99=A4=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7?= =?UTF-8?q?=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 23 ++++++++++++++--------- package.json | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 61e9143ebe..7911061784 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -9,8 +9,10 @@ const { join, resolve } = require("path"); const { mkdirSync, existsSync, unlinkSync } = require("fs"); const fetch = require("node-fetch"); -// バイナリデータの保存パス -const BINARY_BASE_DIR = resolve(__dirname, "vendored"); +// 全バイナリデータのパス +const BINARY_BASE_PATH = resolve(__dirname, "vendored"); +// 7zのバイナリデータのパス +const SEVEN_ZIP_BINARY_PATH = join(BINARY_BASE_PATH, "7z", "7za.exe"); // 環境構築したいバイナリデータの配列オブジェクト const WANT_TO_DOWNLOAD_BINARIES = [ { @@ -142,7 +144,7 @@ async function getBinaryURL(repo, version = "latest") { * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForLinux(name, url) { - const binaryPath = join(BINARY_BASE_DIR, name); + const binaryPath = join(BINARY_BASE_PATH, name); if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); @@ -173,22 +175,25 @@ async function downloadBinaryForLinux(name, url) { * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForWin(name, url) { - const binaryPath = join(BINARY_BASE_DIR, name); + const binaryPath = join(BINARY_BASE_PATH, name); if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); } - const zipPath = `${binaryPath}/${name}.zip`; + const zipFilePath = `${binaryPath}\\${name}.zip`; await runCommand( - `curl -L ${url.win32} -o ${zipPath}`, + `curl -L ${url.win32} -o ${zipFilePath}`, `${name}バイナリのダウンロード`, ); - await runCommand(`tar -xf ${zipPath} -C ${binaryPath}`, "バイナリの解凍"); + await runCommand( + `"${SEVEN_ZIP_BINARY_PATH}" x ${zipFilePath} -o${binaryPath}`, + "zipファイルを解凍中...", + ); // 解凍後に圧縮ファイルを削除 - unlinkSync(zipPath); + unlinkSync(zipFilePath); } /** @@ -197,7 +202,7 @@ async function downloadBinaryForWin(name, url) { * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForMac(name, url) { - const binaryPath = join(BINARY_BASE_DIR, name); + const binaryPath = join(BINARY_BASE_PATH, name); if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); diff --git a/package.json b/package.json index eb843f526b..44be354165 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "fmt": "eslint --ext .js,.vue,.ts *.config.* src tests build .storybook --fix", "markdownlint": "markdownlint --ignore node_modules/ --ignore dist/ --ignore dist_electron/ ./", "typecheck": "vue-tsc --noEmit", - "typos": "./build/vendored/typos/typos", + "typos": "cross-env-shell \"[ $OS == 'Windows_NT' ] && build\\vendored\\typos\\typos.exe || ./build/vendored/typos/typos\"", "electron:build": "cross-env VITE_TARGET=electron vite build && electron-builder --config electron-builder.config.js --publish never", "electron:serve": "cross-env VITE_TARGET=electron vite", "browser:serve": "cross-env VITE_TARGET=browser vite", From a70e64e58648a2650ba10927ccc65e3a5ee0cc0e Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sat, 17 Aug 2024 23:39:19 +0900 Subject: [PATCH 03/23] =?UTF-8?q?[fix]=20#2206=20cross-env=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B=E3=81=9F?= =?UTF-8?q?=E3=82=81=E3=83=97=E3=83=A9=E3=83=83=E3=83=88=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=BC=E3=83=A0=E3=81=AE=E9=81=95=E3=81=84=E3=82=92=E5=90=B8?= =?UTF-8?q?=E5=8F=8E=E3=81=99=E3=82=8B=E3=82=B3=E3=83=9E=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 44be354165..536efcc7b5 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "fmt": "eslint --ext .js,.vue,.ts *.config.* src tests build .storybook --fix", "markdownlint": "markdownlint --ignore node_modules/ --ignore dist/ --ignore dist_electron/ ./", "typecheck": "vue-tsc --noEmit", - "typos": "cross-env-shell \"[ $OS == 'Windows_NT' ] && build\\vendored\\typos\\typos.exe || ./build/vendored/typos/typos\"", + "typos": "cross-env ./build/vendored/typos/typos", "electron:build": "cross-env VITE_TARGET=electron vite build && electron-builder --config electron-builder.config.js --publish never", "electron:serve": "cross-env VITE_TARGET=electron vite", "browser:serve": "cross-env VITE_TARGET=browser vite", From 35321fe4e3f8d246b932ecb06e75443dd6ed1da6 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sun, 18 Aug 2024 00:00:59 +0900 Subject: [PATCH 04/23] =?UTF-8?q?[fix]=20#2206=20=E3=83=80=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E3=81=97=E3=81=9F=E3=81=84?= =?UTF-8?q?=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA=E3=81=8C=E3=81=99=E3=81=A7?= =?UTF-8?q?=E3=81=AB=E3=81=82=E3=82=8B=E6=99=82=E3=81=AB=E5=86=8D=E5=BA=A6?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E3=81=AE=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=80=81=E3=82=B9=E3=82=AD=E3=83=83=E3=83=97=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 76 +++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 7911061784..4e385c5f8f 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -56,11 +56,21 @@ async function runCommand(command, description) { */ async function processBinaries(binaries, downloadBinaryFunction) { binaries.map(async (binary) => { + // もし各バイナリのディレクトリがあるならダウンロードされているとみなし、スキップする + const binaryPath = join(BINARY_BASE_PATH, binary.name); + const binaryFilePath = join(binaryPath, binary.name); + + if (existsSync(binaryFilePath)) { + console.log(`${binary.name} already downloaded`); + return; + } + try { console.log(`${binary.name} のダウンロードURLを取得中...`); + // 各バイナリのGithubのリポジトリのURLを探す const url = await getBinaryURL(binary.repo, binary.version); - // インストール処理 + // 各バイナリのダウンロード await downloadBinaryFunction(binary.name, url); } catch (err) { console.error( @@ -70,36 +80,6 @@ async function processBinaries(binaries, downloadBinaryFunction) { }); } -/** - * OSに応じた関数を選択し、バイナリデータを処理する関数 - * - * @param {Array} binaries - 複数のバイナリの情報を含む配列オブジェクト - */ -async function main(binaries) { - const os = platform(); - let downloadBinaryFunction; - - console.log(`使用しているOS: ${os}`); - - // OSに応じたインストール関数を選択 - switch (os) { - case "linux": - downloadBinaryFunction = downloadBinaryForLinux; - break; - case "darwin": - downloadBinaryFunction = downloadBinaryForMac; - break; - case "win32": - downloadBinaryFunction = downloadBinaryForWin; - break; - default: - throw new Error("サポートされていないOSです"); - } - - // バイナリデータを処理 - await processBinaries(binaries, downloadBinaryFunction); -} - /** * GitHub APIを使って、リポジトリのリリースから各プラットフォームのダウンロードURLを取得する関数 * @@ -139,7 +119,7 @@ async function getBinaryURL(repo, version = "latest") { } /** - * Linuxのための環境をセットアップし、バイナリをインストールする関数 + * Linuxに合わせたバイナリをダウンロードするための関数 * @param {string} name - バイナリの名前 * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ @@ -170,7 +150,7 @@ async function downloadBinaryForLinux(name, url) { } /** - * Windowsのための環境をセットアップし、バイナリをインストールする関数 + * Windowsに合わせたバイナリをダウンロードするための関数 * @param {string} name - バイナリの名前 * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ @@ -197,7 +177,7 @@ async function downloadBinaryForWin(name, url) { } /** - * macOSのための環境をセットアップし、バイナリをインストールする関数 + * macOSに合わせたバイナリをダウンロードするための関数 * @param {string} name - バイナリの名前 * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト */ @@ -227,6 +207,34 @@ async function downloadBinaryForMac(name, url) { unlinkSync(tarballPath); } +/** + * OSに応じた関数を選択し、バイナリデータを処理する関数 + * + * @param {Array} binaries - 複数のバイナリの情報を含む配列オブジェクト + */ +async function main(binaries) { + const os = platform(); + let downloadBinaryFunction; + + // OSに応じたインストール関数を選択 + switch (os) { + case "linux": + downloadBinaryFunction = downloadBinaryForLinux; + break; + case "darwin": + downloadBinaryFunction = downloadBinaryForMac; + break; + case "win32": + downloadBinaryFunction = downloadBinaryForWin; + break; + default: + throw new Error("サポートされていないOSです"); + } + + // バイナリデータを処理 + await processBinaries(binaries, downloadBinaryFunction); +} + // main関数実行 (async () => { await main(WANT_TO_DOWNLOAD_BINARIES); From c1c44a2f486b3840bb3f3c6ec9d8890491a0fe93 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sun, 18 Aug 2024 18:38:12 +0900 Subject: [PATCH 05/23] =?UTF-8?q?[fix]=20#2206=20=E3=82=82=E3=81=97?= =?UTF-8?q?=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA=E3=81=8C=E6=97=A2=E3=81=AB?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B=E5=A0=B4=E5=90=88=E3=80=81?= =?UTF-8?q?=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E3=82=B9=E3=82=AD=E3=83=83=E3=83=97=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 116 +++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 50 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 4e385c5f8f..230985406b 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -13,7 +13,7 @@ const fetch = require("node-fetch"); const BINARY_BASE_PATH = resolve(__dirname, "vendored"); // 7zのバイナリデータのパス const SEVEN_ZIP_BINARY_PATH = join(BINARY_BASE_PATH, "7z", "7za.exe"); -// 環境構築したいバイナリデータの配列オブジェクト +// ダウンロードしたいバイナリデータの配列オブジェクト const WANT_TO_DOWNLOAD_BINARIES = [ { name: "typos", @@ -26,7 +26,12 @@ const WANT_TO_DOWNLOAD_BINARIES = [ // version: 'v1.2.3', // 指定したバージョン // } ]; - +// OS名を定義するオブジェクト +const OS = { + LINUX: "linux", + MACOS: "darwin", + WINDOWS: "win32", +}; // OSのコマンドを非同期関数として処理させるために必要な関数 const execAsync = promisify(exec); @@ -39,9 +44,7 @@ const execAsync = promisify(exec); async function runCommand(command, description) { console.log(`実行中: ${description} ...`); try { - const { stdout, stderr } = await execAsync(command); - if (stdout) console.log(stdout); - if (stderr) console.error(stderr); + await execAsync(command); } catch (error) { console.error(`エラーが発生しました: ${error.message}`); throw error; @@ -55,37 +58,53 @@ async function runCommand(command, description) { * @param {Function} downloadBinaryFunction - OSに応じたバイナリのダウンロード関数 */ async function processBinaries(binaries, downloadBinaryFunction) { - binaries.map(async (binary) => { - // もし各バイナリのディレクトリがあるならダウンロードされているとみなし、スキップする - const binaryPath = join(BINARY_BASE_PATH, binary.name); - const binaryFilePath = join(binaryPath, binary.name); - - if (existsSync(binaryFilePath)) { - console.log(`${binary.name} already downloaded`); - return; - } - - try { - console.log(`${binary.name} のダウンロードURLを取得中...`); - // 各バイナリのGithubのリポジトリのURLを探す - const url = await getBinaryURL(binary.repo, binary.version); - - // 各バイナリのダウンロード - await downloadBinaryFunction(binary.name, url); - } catch (err) { - console.error( - `${binary.name} のインストール中にエラーが発生しました: ${err.message}`, - ); - } - }); + // 各バイナリを非同期で並行してダウンロードする + await Promise.all( + binaries.map(async (binary) => { + // もしバイナリが既に存在する場合、ダウンロードをスキップする + const binaryPath = join(BINARY_BASE_PATH, binary.name); + let binaryFilePath; + + // OSに応じたバイナリを確認し、存在するならダウンロードをスキップする + switch (platform()) { + case OS.LINUX: + binaryFilePath = `${binaryPath}/${binary.name}`; + break; + case OS.MACOS: + binaryFilePath = `${binaryPath}/${binary.name}`; + break; + case OS.WINDOWS: + binaryFilePath = `${binaryPath}\\${binary.name}.exe`; + break; + default: + throw new Error("サポートされていないOSです"); + } + + if (existsSync(binaryFilePath)) { + console.log(`${binary.name} already downloaded`); + return; + } + + try { + console.log(`${binary.name} のダウンロードURLを取得中...`); + const url = await getBinaryURL(binary.repo, binary.version); + + await downloadBinaryFunction({ name: binary.name, url }); + } catch (err) { + console.error( + `${binary.name} のインストール中にエラーが発生しました: ${err.message}`, + ); + } + }), + ); } /** - * GitHub APIを使って、リポジトリのリリースから各プラットフォームのダウンロードURLを取得する関数 + * GitHub APIを使って、リポジトリのリリースから特定のOSのダウンロードURLを取得する関数 * * @param {string} repo - GitHubリポジトリの名前(例: 'crate-ci/typos') * @param {string} [version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) - * @returns {Promise} 各プラットフォームのダウンロードURLを含むオブジェクト + * @returns {Promise} 特定のOSに対応するバイナリのダウンロードURL */ async function getBinaryURL(repo, version = "latest") { const apiUrl = @@ -101,6 +120,7 @@ async function getBinaryURL(repo, version = "latest") { } const data = await response.json(); + const url = { linux: null, darwin: null, @@ -120,18 +140,17 @@ async function getBinaryURL(repo, version = "latest") { /** * Linuxに合わせたバイナリをダウンロードするための関数 - * @param {string} name - バイナリの名前 - * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} binary - バイナリの情報を含むオブジェクト */ -async function downloadBinaryForLinux(name, url) { +async function downloadBinaryForLinux({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); + const tarballPath = `${binaryPath}/${name}.tar.gz`; + // もし各バイナリのディレクトリがないなら新しく作成する if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); } - const tarballPath = `${binaryPath}/${name}.tar.gz`; - await runCommand( `curl -L ${url.linux} -o ${tarballPath}`, `${name}バイナリのダウンロード`, @@ -151,18 +170,17 @@ async function downloadBinaryForLinux(name, url) { /** * Windowsに合わせたバイナリをダウンロードするための関数 - * @param {string} name - バイナリの名前 - * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} binary - バイナリの情報を含むオブジェクト */ -async function downloadBinaryForWin(name, url) { +async function downloadBinaryForWin({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); + const zipFilePath = `${binaryPath}\\${name}.zip`; + // もし各バイナリのディレクトリがないなら新しく作成する if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); } - const zipFilePath = `${binaryPath}\\${name}.zip`; - await runCommand( `curl -L ${url.win32} -o ${zipFilePath}`, `${name}バイナリのダウンロード`, @@ -178,18 +196,17 @@ async function downloadBinaryForWin(name, url) { /** * macOSに合わせたバイナリをダウンロードするための関数 - * @param {string} name - バイナリの名前 - * @param {Object} url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} binary - バイナリの情報を含むオブジェクト */ -async function downloadBinaryForMac(name, url) { +async function downloadBinaryForMac({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); + const tarballPath = `${binaryPath}/${name}.tar.gz`; + // もし各バイナリのディレクトリがないなら新しく作成する if (!existsSync(binaryPath)) { mkdirSync(binaryPath, { recursive: true }); } - const tarballPath = `${binaryPath}/${name}.tar.gz`; - await runCommand( `curl -L ${url.darwin} -o ${tarballPath}`, `${name}バイナリのダウンロード`, @@ -213,18 +230,17 @@ async function downloadBinaryForMac(name, url) { * @param {Array} binaries - 複数のバイナリの情報を含む配列オブジェクト */ async function main(binaries) { - const os = platform(); let downloadBinaryFunction; // OSに応じたインストール関数を選択 - switch (os) { - case "linux": + switch (platform()) { + case OS.LINUX: downloadBinaryFunction = downloadBinaryForLinux; break; - case "darwin": + case OS.MACOS: downloadBinaryFunction = downloadBinaryForMac; break; - case "win32": + case OS.WINDOWS: downloadBinaryFunction = downloadBinaryForWin; break; default: From 0645e30e5e69bcd8e25e313a2e456e86671aa314 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sun, 18 Aug 2024 22:27:45 +0900 Subject: [PATCH 06/23] =?UTF-8?q?[fix]=20#2206=20macos=E3=81=AECPU?= =?UTF-8?q?=E3=82=A2=E3=83=BC=E3=82=AD=E3=83=86=E3=82=AF=E3=83=81=E3=83=A3?= =?UTF-8?q?=E3=81=AE=E9=81=95=E3=81=84=E3=82=92=E8=80=83=E6=85=AE=E3=81=97?= =?UTF-8?q?=E6=9C=80=E9=81=A9=E3=81=AA=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA?= =?UTF-8?q?=E3=82=92=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 135 ++++++++++++++++++++++++----------------- 1 file changed, 80 insertions(+), 55 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 230985406b..f0267f2718 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -4,7 +4,7 @@ */ const { exec } = require("child_process"); const { promisify } = require("util"); -const { platform } = require("os"); +const { platform, arch } = require("os"); const { join, resolve } = require("path"); const { mkdirSync, existsSync, unlinkSync } = require("fs"); const fetch = require("node-fetch"); @@ -37,11 +37,11 @@ const execAsync = promisify(exec); /** * コマンドを実行し、その進行状況を出力するヘルパー関数 - * - * @param {string} command - 実行するシェルコマンド - * @param {string} description - コマンドの説明を表示するテキスト + * @param {Object} params - コマンド実行のパラメータ + * @param {string} params.command - 実行するシェルコマンド + * @param {string} params.description - コマンドの説明を表示するテキスト */ -async function runCommand(command, description) { +async function runCommand({ command, description }) { console.log(`実行中: ${description} ...`); try { await execAsync(command); @@ -54,10 +54,11 @@ async function runCommand(command, description) { /** * バイナリをダウンロードして解凍し、実行権限を付与する関数 * - * @param {Object} binaries - バイナリの情報を含むオブジェクト - * @param {Function} downloadBinaryFunction - OSに応じたバイナリのダウンロード関数 + * @param {Object} params - バイナリをダウンロードするための情報を含むオブジェクト + * @param {Array} params.binaries - バイナリの情報を含む配列オブジェクト + * @param {Function} params.downloadBinaryFunction - OSに応じたバイナリのダウンロード関数 */ -async function processBinaries(binaries, downloadBinaryFunction) { +async function processBinaries({ binaries, downloadBinaryFunction }) { // 各バイナリを非同期で並行してダウンロードする await Promise.all( binaries.map(async (binary) => { @@ -87,7 +88,10 @@ async function processBinaries(binaries, downloadBinaryFunction) { try { console.log(`${binary.name} のダウンロードURLを取得中...`); - const url = await getBinaryURL(binary.repo, binary.version); + const url = await getBinaryURL({ + repo: binary.repo, + version: binary.version, + }); await downloadBinaryFunction({ name: binary.name, url }); } catch (err) { @@ -100,13 +104,13 @@ async function processBinaries(binaries, downloadBinaryFunction) { } /** - * GitHub APIを使って、リポジトリのリリースから特定のOSのダウンロードURLを取得する関数 - * - * @param {string} repo - GitHubリポジトリの名前(例: 'crate-ci/typos') - * @param {string} [version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) - * @returns {Promise} 特定のOSに対応するバイナリのダウンロードURL + * GitHub APIを使って、リポジトリのリリースから特定のOSのバイナリをダウンロードするURLを取得する関数 + * @param {Object} params - Githubからバイナリをダウンロードするための情報を含むオブジェクト + * @param {string} params.repo - GitHubリポジトリの名前(例: 'crate-ci/typos') + * @param {string} [params.version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) + * @returns {Promise} 特定のOSに対応するバイナリのダウンロードするためのURLを含んだオブジェクト */ -async function getBinaryURL(repo, version = "latest") { +async function getBinaryURL({ repo, version = "latest" }) { const apiUrl = version === "latest" ? `https://api.github.com/repos/${repo}/releases/latest` @@ -121,16 +125,19 @@ async function getBinaryURL(repo, version = "latest") { const data = await response.json(); + // Githubのリリース情報から各OSに最適化されたバイナリをダウンロードするURLを定義する const url = { linux: null, - darwin: null, + darwin_arm64: null, + darwin_x64: null, win32: null, }; - data.assets.forEach((asset) => { if (asset.name.includes("linux")) url.linux = asset.browser_download_url; - else if (asset.name.includes("apple-darwin")) - url.darwin = asset.browser_download_url; + else if (asset.name.includes("aarch64-apple-darwin")) + url.darwin_arm64 = asset.browser_download_url; + else if (asset.name.includes("x86_64-apple-darwin")) + url.darwin_x64 = asset.browser_download_url; else if (asset.name.includes("windows")) url.win32 = asset.browser_download_url; }); @@ -141,6 +148,8 @@ async function getBinaryURL(repo, version = "latest") { /** * Linuxに合わせたバイナリをダウンロードするための関数 * @param {Object} binary - バイナリの情報を含むオブジェクト + * @param {string} binary.name - バイナリの名前 + * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForLinux({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -151,18 +160,18 @@ async function downloadBinaryForLinux({ name, url }) { mkdirSync(binaryPath, { recursive: true }); } - await runCommand( - `curl -L ${url.linux} -o ${tarballPath}`, - `${name}バイナリのダウンロード`, - ); - await runCommand( - `tar -xzvf ${tarballPath} -C ${binaryPath}`, - "バイナリの解凍", - ); - await runCommand( - `chmod +x ${binaryPath}/${name}`, - "バイナリに実行権限を付与", - ); + await runCommand({ + command: `curl -L ${url.linux} -o ${tarballPath}`, + description: `${name}バイナリのダウンロード`, + }); + await runCommand({ + command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, + description: "バイナリの解凍", + }); + await runCommand({ + command: `chmod +x ${binaryPath}/${name}`, + description: "バイナリに実行権限を付与", + }); // 解凍後に圧縮ファイルを削除 unlinkSync(tarballPath); @@ -171,6 +180,8 @@ async function downloadBinaryForLinux({ name, url }) { /** * Windowsに合わせたバイナリをダウンロードするための関数 * @param {Object} binary - バイナリの情報を含むオブジェクト + * @param {string} binary.name - バイナリの名前 + * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForWin({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -181,14 +192,14 @@ async function downloadBinaryForWin({ name, url }) { mkdirSync(binaryPath, { recursive: true }); } - await runCommand( - `curl -L ${url.win32} -o ${zipFilePath}`, - `${name}バイナリのダウンロード`, - ); - await runCommand( - `"${SEVEN_ZIP_BINARY_PATH}" x ${zipFilePath} -o${binaryPath}`, - "zipファイルを解凍中...", - ); + await runCommand({ + command: `curl -L ${url.win32} -o ${zipFilePath}`, + description: `${name}バイナリのダウンロード`, + }); + await runCommand({ + command: `"${SEVEN_ZIP_BINARY_PATH}" x ${zipFilePath} -o${binaryPath}`, + description: "zipファイルを解凍中...", + }); // 解凍後に圧縮ファイルを削除 unlinkSync(zipFilePath); @@ -197,6 +208,8 @@ async function downloadBinaryForWin({ name, url }) { /** * macOSに合わせたバイナリをダウンロードするための関数 * @param {Object} binary - バイナリの情報を含むオブジェクト + * @param {string} binary.name - バイナリの名前 + * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト */ async function downloadBinaryForMac({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -207,18 +220,29 @@ async function downloadBinaryForMac({ name, url }) { mkdirSync(binaryPath, { recursive: true }); } - await runCommand( - `curl -L ${url.darwin} -o ${tarballPath}`, - `${name}バイナリのダウンロード`, - ); - await runCommand( - `tar -xzvf ${tarballPath} -C ${binaryPath}`, - "バイナリの解凍", - ); - await runCommand( - `chmod +x ${binaryPath}/${name}`, - "バイナリに実行権限を付与", - ); + // armとx86_x64それぞれに最適なバイナリをダウンロードする + const archType = arch(); + let downloadUrl; + if (archType === "arm64") { + downloadUrl = url.darwin_arm64; + } else if (archType === "x64") { + downloadUrl = url.darwin_x64; + } else { + throw new Error("サポートされていないmacOSアーキテクチャです"); + } + + await runCommand({ + command: `curl -L ${downloadUrl} -o ${tarballPath}`, + description: `${name}バイナリのダウンロード`, + }); + await runCommand({ + command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, + description: "バイナリの解凍", + }); + await runCommand({ + command: `chmod +x ${binaryPath}/${name}`, + description: "バイナリに実行権限を付与", + }); // 解凍後に圧縮ファイルを削除 unlinkSync(tarballPath); @@ -227,9 +251,10 @@ async function downloadBinaryForMac({ name, url }) { /** * OSに応じた関数を選択し、バイナリデータを処理する関数 * - * @param {Array} binaries - 複数のバイナリの情報を含む配列オブジェクト + * @param {Object} params - メイン処理のパラメータ + * @param {Array} params.binaries - 複数のバイナリの情報を含む配列オブジェクト */ -async function main(binaries) { +async function main({ binaries }) { let downloadBinaryFunction; // OSに応じたインストール関数を選択 @@ -248,10 +273,10 @@ async function main(binaries) { } // バイナリデータを処理 - await processBinaries(binaries, downloadBinaryFunction); + await processBinaries({ binaries, downloadBinaryFunction }); } // main関数実行 (async () => { - await main(WANT_TO_DOWNLOAD_BINARIES); + await main({ binaries: WANT_TO_DOWNLOAD_BINARIES }); })(); From 4c2b448b02e5a694598aebd6776d5694518ec5bc Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sun, 18 Aug 2024 22:37:52 +0900 Subject: [PATCH 07/23] =?UTF-8?q?[document]=20#2206=20cargo=E3=82=92?= =?UTF-8?q?=E9=80=9A=E3=81=97=E3=81=9F=E3=82=A4=E3=83=B3=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=BC=E3=83=AB=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81=E3=81=9D=E3=82=8C=E3=81=AB?= =?UTF-8?q?=E5=BF=9C=E3=81=98=E3=81=9F=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AB=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 2 +- README.md | 3 +-- build/vendored/README.md | 7 ++++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5a974e6fb4..9d64827eb0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -241,7 +241,7 @@ VITE_DEFAULT_ENGINE_INFOS=`[ - 命名に使っている英語が誤っていないことを確認します。 ```bash - typos + npm run typos ``` - 個人環境でVOICEVOXを実行し、提出前に、一通り動くことを確認します。 diff --git a/README.md b/README.md index 30518730d1..2dceec829e 100644 --- a/README.md +++ b/README.md @@ -212,10 +212,9 @@ npm run lint ## タイポチェック [typos](https://github.com/crate-ci/typos) を使ってタイポのチェックを行っています。 -[typos をインストール](https://github.com/crate-ci/typos#install) した後 ```bash -typos +npm run typos ``` でタイポチェックを行えます。 diff --git a/build/vendored/README.md b/build/vendored/README.md index 5d4a0839f5..92b0828c66 100644 --- a/build/vendored/README.md +++ b/build/vendored/README.md @@ -2,6 +2,7 @@ このディレクトリはダウンロードしたファイルを格納するためのものです。 -| ディレクトリ名 | 内容 | ダウンローダー | -| -------------- | ------------------------------ | --------------------- | -| `7z` | [7-Zip](http://www.7-zip.org/) | `build/download7z.js` | +| ディレクトリ名 | 内容 | ダウンローダー | +| -------------- | ------------------------------------------ | ------------------------ | +| `7z` | [7-Zip](http://www.7-zip.org/) | `build/download7z.js` | +| `typos` | [typos](https://github.com/crate-ci/typos) | `build/downloadTypos.js` | \ No newline at end of file From 8adb48b549e88e333cab237c3e8f32de065a4f80 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sun, 18 Aug 2024 22:41:01 +0900 Subject: [PATCH 08/23] =?UTF-8?q?[delete]=20#2206=20Docker=E9=96=A2?= =?UTF-8?q?=E9=80=A3=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AF?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=AA=E3=81=84=E3=81=9F=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 14 -------------- docker-compose.yml | 33 --------------------------------- 2 files changed, 47 deletions(-) delete mode 100644 Dockerfile delete mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ec007cb85b..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:18.13.0 - -WORKDIR /opt -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup_install.sh -RUN chmod 755 rustup_install.sh -RUN echo 1 | sh rustup_install.sh -y -ENV PATH="/root/.cargo/bin:$PATH" -RUN cargo install typos-cli -COPY . /work -WORKDIR /work -RUN npm ci -EXPOSE 3000 - -CMD ["/bin/sh"] diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 77117ea2bd..0000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -version: '3' -services: - test: - build: . - working_dir: /work - # If you don't have node_modules, use "npm ci", install node_modules into the your directory. - # Use command bellow - # `docker-compose up -d --build` - # The container will stop automatically after install - # If you have node_modules already, you comment out '# command: "npm ci"' - - # command: "npm ci" - - - # After node_modules install, use command bellow to exec "/bin/sh" and the container will remain. - # `docker-compose up -d` - # To access container, use command bellow - # `docker exec -it voicevox_test_1 /bin/bash` - - # command: "/bin/sh" - - - # If you want test automatically (test runs when you save any files), use this command property and view logs - # Use Command bellow - # `docker logs --tail 1000 -f voicevox_test_1` - - command: "npm run test-watch:unit " - ports: - - 3000:3000 - volumes: - - .:/work:cached - tty: true - stdin_open: true From 6456c069ec4462709c4aa73acf7ff0021c966a45 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Wed, 21 Aug 2024 21:55:44 +0900 Subject: [PATCH 09/23] =?UTF-8?q?[fix]=20#2206=20=E3=83=90=E3=82=A4?= =?UTF-8?q?=E3=83=8A=E3=83=AA=E3=82=92=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=99=E3=82=8B=E9=9A=9B=E3=81=AB=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E3=81=99=E3=82=8B=E6=B8=A1=E3=81=99URL=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=82=92?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=81=AB=E3=81=99=E3=82=8B=E3=81=93?= =?UTF-8?q?=E3=81=A8=E3=81=A7=E7=84=A1=E9=A7=84=E3=81=AA=E5=87=A6=E7=90=86?= =?UTF-8?q?=E3=82=92=E5=89=8A=E6=B8=9B=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 108 ++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 56 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index f0267f2718..1d4385a799 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -32,6 +32,10 @@ const OS = { MACOS: "darwin", WINDOWS: "win32", }; +// 動作しているPCのOS文字列 +const CURRENT_OS = platform(); +// 動作しているOSのCPUアーキテクチャ文字列 +const CURRENT_CPU_ARCHITECTURE = arch(); // OSのコマンドを非同期関数として処理させるために必要な関数 const execAsync = promisify(exec); @@ -42,11 +46,11 @@ const execAsync = promisify(exec); * @param {string} params.description - コマンドの説明を表示するテキスト */ async function runCommand({ command, description }) { - console.log(`実行中: ${description} ...`); + console.log(`Running: ${description}`); try { await execAsync(command); } catch (error) { - console.error(`エラーが発生しました: ${error.message}`); + console.error(`An error occured: ${error.message}`); throw error; } } @@ -67,7 +71,7 @@ async function processBinaries({ binaries, downloadBinaryFunction }) { let binaryFilePath; // OSに応じたバイナリを確認し、存在するならダウンロードをスキップする - switch (platform()) { + switch (CURRENT_OS) { case OS.LINUX: binaryFilePath = `${binaryPath}/${binary.name}`; break; @@ -78,7 +82,7 @@ async function processBinaries({ binaries, downloadBinaryFunction }) { binaryFilePath = `${binaryPath}\\${binary.name}.exe`; break; default: - throw new Error("サポートされていないOSです"); + throw new Error("Unsupported OS"); } if (existsSync(binaryFilePath)) { @@ -87,7 +91,7 @@ async function processBinaries({ binaries, downloadBinaryFunction }) { } try { - console.log(`${binary.name} のダウンロードURLを取得中...`); + console.log(`Fetching download URL for ${binary.name}`); const url = await getBinaryURL({ repo: binary.repo, version: binary.version, @@ -96,7 +100,7 @@ async function processBinaries({ binaries, downloadBinaryFunction }) { await downloadBinaryFunction({ name: binary.name, url }); } catch (err) { console.error( - `${binary.name} のインストール中にエラーが発生しました: ${err.message}`, + `An error occurred during ${binary.name} installation: ${err.message}`, ); } }), @@ -108,7 +112,7 @@ async function processBinaries({ binaries, downloadBinaryFunction }) { * @param {Object} params - Githubからバイナリをダウンロードするための情報を含むオブジェクト * @param {string} params.repo - GitHubリポジトリの名前(例: 'crate-ci/typos') * @param {string} [params.version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) - * @returns {Promise} 特定のOSに対応するバイナリのダウンロードするためのURLを含んだオブジェクト + * @returns {Promise} 特定のOSに対応するバイナリのダウンロードするためのURL文字列 */ async function getBinaryURL({ repo, version = "latest" }) { const apiUrl = @@ -119,37 +123,40 @@ async function getBinaryURL({ repo, version = "latest" }) { const response = await fetch(apiUrl); if (!response.ok) { throw new Error( - `指定されたバージョン "${version}" のリリース情報が見つかりませんでした。`, + `Release information for the specified version "${version}" could not be found.`, ); } const data = await response.json(); // Githubのリリース情報から各OSに最適化されたバイナリをダウンロードするURLを定義する - const url = { - linux: null, - darwin_arm64: null, - darwin_x64: null, - win32: null, - }; - data.assets.forEach((asset) => { - if (asset.name.includes("linux")) url.linux = asset.browser_download_url; - else if (asset.name.includes("aarch64-apple-darwin")) - url.darwin_arm64 = asset.browser_download_url; - else if (asset.name.includes("x86_64-apple-darwin")) - url.darwin_x64 = asset.browser_download_url; - else if (asset.name.includes("windows")) - url.win32 = asset.browser_download_url; + const asset = data.assets.find((asset) => { + if (CURRENT_OS === OS.LINUX && asset.name.includes("linux")) + return true; + else if (CURRENT_OS === OS.WINDOWS && asset.name.includes("windows")) + return true; + else if ( + CURRENT_OS === OS.MACOS && + CURRENT_CPU_ARCHITECTURE === "arm64" && + asset.name.includes("aarch64-apple-darwin") + ) + return true; + else if ( + CURRENT_OS === OS.MACOS && + CURRENT_CPU_ARCHITECTURE === "x64" && + asset.name.includes("x86_64-apple-darwin") + ) + return true; }); - return url; + return asset.browser_download_url; } /** * Linuxに合わせたバイナリをダウンロードするための関数 - * @param {Object} binary - バイナリの情報を含むオブジェクト - * @param {string} binary.name - バイナリの名前 - * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} params - バイナリの情報を含むオブジェクト + * @param {string} params.name - バイナリの名前 + * @param {string} params.url - 各プラットフォームのダウンロードURL */ async function downloadBinaryForLinux({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -161,16 +168,16 @@ async function downloadBinaryForLinux({ name, url }) { } await runCommand({ - command: `curl -L ${url.linux} -o ${tarballPath}`, - description: `${name}バイナリのダウンロード`, + command: `curl -L ${url} -o ${tarballPath}`, + description: `Downloading ${name} binary`, }); await runCommand({ command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, - description: "バイナリの解凍", + description: `Extracting ${name} binary`, }); await runCommand({ command: `chmod +x ${binaryPath}/${name}`, - description: "バイナリに実行権限を付与", + description: `Granting execute permissions to the ${name} binary`, }); // 解凍後に圧縮ファイルを削除 @@ -179,9 +186,9 @@ async function downloadBinaryForLinux({ name, url }) { /** * Windowsに合わせたバイナリをダウンロードするための関数 - * @param {Object} binary - バイナリの情報を含むオブジェクト - * @param {string} binary.name - バイナリの名前 - * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} params - バイナリの情報を含むオブジェクト + * @param {string} params.name - バイナリの名前 + * @param {string} params.url - 各プラットフォームのダウンロードURL */ async function downloadBinaryForWin({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -193,12 +200,12 @@ async function downloadBinaryForWin({ name, url }) { } await runCommand({ - command: `curl -L ${url.win32} -o ${zipFilePath}`, - description: `${name}バイナリのダウンロード`, + command: `curl -L ${url} -o ${zipFilePath}`, + description: `Downloading ${name} binary`, }); await runCommand({ command: `"${SEVEN_ZIP_BINARY_PATH}" x ${zipFilePath} -o${binaryPath}`, - description: "zipファイルを解凍中...", + description: `Extracting ${name} binary`, }); // 解凍後に圧縮ファイルを削除 @@ -207,9 +214,9 @@ async function downloadBinaryForWin({ name, url }) { /** * macOSに合わせたバイナリをダウンロードするための関数 - * @param {Object} binary - バイナリの情報を含むオブジェクト - * @param {string} binary.name - バイナリの名前 - * @param {Object} binary.url - 各プラットフォームのダウンロードURLを含むオブジェクト + * @param {Object} params - バイナリの情報を含むオブジェクト + * @param {string} params.name - バイナリの名前 + * @param {string} params.url - 各プラットフォームのダウンロードURL */ async function downloadBinaryForMac({ name, url }) { const binaryPath = join(BINARY_BASE_PATH, name); @@ -220,28 +227,17 @@ async function downloadBinaryForMac({ name, url }) { mkdirSync(binaryPath, { recursive: true }); } - // armとx86_x64それぞれに最適なバイナリをダウンロードする - const archType = arch(); - let downloadUrl; - if (archType === "arm64") { - downloadUrl = url.darwin_arm64; - } else if (archType === "x64") { - downloadUrl = url.darwin_x64; - } else { - throw new Error("サポートされていないmacOSアーキテクチャです"); - } - await runCommand({ - command: `curl -L ${downloadUrl} -o ${tarballPath}`, - description: `${name}バイナリのダウンロード`, + command: `curl -L ${url} -o ${tarballPath}`, + description: `Downloading ${name} binary`, }); await runCommand({ command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, - description: "バイナリの解凍", + description: `Extracting ${name} binary`, }); await runCommand({ command: `chmod +x ${binaryPath}/${name}`, - description: "バイナリに実行権限を付与", + description: `Granting execute permissions to the ${name} binary`, }); // 解凍後に圧縮ファイルを削除 @@ -258,7 +254,7 @@ async function main({ binaries }) { let downloadBinaryFunction; // OSに応じたインストール関数を選択 - switch (platform()) { + switch (CURRENT_OS) { case OS.LINUX: downloadBinaryFunction = downloadBinaryForLinux; break; @@ -269,7 +265,7 @@ async function main({ binaries }) { downloadBinaryFunction = downloadBinaryForWin; break; default: - throw new Error("サポートされていないOSです"); + throw new Error("Unsupported OS"); } // バイナリデータを処理 From cc565e8de89beedcb8146a1f92710cd50b964b61 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sat, 24 Aug 2024 20:05:24 +0900 Subject: [PATCH 10/23] =?UTF-8?q?[fix]=20#2206=20Github=E4=BB=A5=E5=A4=96?= =?UTF-8?q?=E3=81=AB=E5=85=AC=E9=96=8B=E3=81=97=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AE=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA?= =?UTF-8?q?=E3=81=AB=E3=82=82=E5=AF=BE=E5=87=A6=E3=81=97=E3=80=81=E3=81=8B?= =?UTF-8?q?=E3=81=A4=E3=80=81=E3=83=80=E3=82=A6=E3=83=B3=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E5=85=B1?= =?UTF-8?q?=E9=80=9A=E5=8C=96=E3=81=97=E3=81=A6=E5=86=97=E9=95=B7=E3=81=AA?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 315 +++++++++++++---------------------------- 1 file changed, 101 insertions(+), 214 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 1d4385a799..8bde0f5ef1 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -7,36 +7,48 @@ const { promisify } = require("util"); const { platform, arch } = require("os"); const { join, resolve } = require("path"); const { mkdirSync, existsSync, unlinkSync } = require("fs"); -const fetch = require("node-fetch"); -// 全バイナリデータのパス -const BINARY_BASE_PATH = resolve(__dirname, "vendored"); -// 7zのバイナリデータのパス -const SEVEN_ZIP_BINARY_PATH = join(BINARY_BASE_PATH, "7z", "7za.exe"); -// ダウンロードしたいバイナリデータの配列オブジェクト -const WANT_TO_DOWNLOAD_BINARIES = [ - { - name: "typos", - repo: "crate-ci/typos", - version: "latest", - }, - // { - // name: 'anotherBinary', - // repo: 'some-other-repo/some-binary', - // version: 'v1.2.3', // 指定したバージョン - // } -]; // OS名を定義するオブジェクト const OS = { LINUX: "linux", MACOS: "darwin", WINDOWS: "win32", }; -// 動作しているPCのOS文字列 +// CPUアーキテクチャ名を定義するオブジェクト +const CPU_ARCHITECTURE = { + x86_64: "x86_64", + arm: "aarch64", +}; +// 現在のOSとCPUアーキテクチャ const CURRENT_OS = platform(); -// 動作しているOSのCPUアーキテクチャ文字列 -const CURRENT_CPU_ARCHITECTURE = arch(); -// OSのコマンドを非同期関数として処理させるために必要な関数 +const CURRENT_CPU_ARCHITECTURE = + arch() === "arm64" ? CPU_ARCHITECTURE.arm : CPU_ARCHITECTURE.x86_64; +// 全バイナリのパス +const BINARY_BASE_PATH = resolve(__dirname, "vendored"); +// typosのバイナリのパス +const TYPOS_BINARY_PATH = resolve(BINARY_BASE_PATH, "typos"); +// 7zバイナリのパス(.exeの有無を考慮) +const SEVEN_ZIP_BINARY_NAME = CURRENT_OS === OS.WINDOWS ? "7za.exe" : "7zz"; +const SEVEN_ZIP_BINARY_PATH = join( + BINARY_BASE_PATH, + "7z", + SEVEN_ZIP_BINARY_NAME, +); +// 各OSとアーキテクチャに対応するtyposバイナリのダウンロード先URL +const TYPOS_URLS = { + [OS.MACOS]: { + [CPU_ARCHITECTURE.arm]: + "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-aarch64-apple-darwin.tar.gz", + [CPU_ARCHITECTURE.x86_64]: + "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-apple-darwin.tar.gz", + }, + [OS.LINUX]: + "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-unknown-linux-musl.tar.gz", + [OS.WINDOWS]: + "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-pc-windows-msvc.zip", +}; + +// 非同期でOSコマンドを処理するための関数 const execAsync = promisify(exec); /** @@ -56,223 +68,98 @@ async function runCommand({ command, description }) { } /** - * バイナリをダウンロードして解凍し、実行権限を付与する関数 - * - * @param {Object} params - バイナリをダウンロードするための情報を含むオブジェクト - * @param {Array} params.binaries - バイナリの情報を含む配列オブジェクト - * @param {Function} params.downloadBinaryFunction - OSに応じたバイナリのダウンロード関数 - */ -async function processBinaries({ binaries, downloadBinaryFunction }) { - // 各バイナリを非同期で並行してダウンロードする - await Promise.all( - binaries.map(async (binary) => { - // もしバイナリが既に存在する場合、ダウンロードをスキップする - const binaryPath = join(BINARY_BASE_PATH, binary.name); - let binaryFilePath; - - // OSに応じたバイナリを確認し、存在するならダウンロードをスキップする - switch (CURRENT_OS) { - case OS.LINUX: - binaryFilePath = `${binaryPath}/${binary.name}`; - break; - case OS.MACOS: - binaryFilePath = `${binaryPath}/${binary.name}`; - break; - case OS.WINDOWS: - binaryFilePath = `${binaryPath}\\${binary.name}.exe`; - break; - default: - throw new Error("Unsupported OS"); - } - - if (existsSync(binaryFilePath)) { - console.log(`${binary.name} already downloaded`); - return; - } - - try { - console.log(`Fetching download URL for ${binary.name}`); - const url = await getBinaryURL({ - repo: binary.repo, - version: binary.version, - }); - - await downloadBinaryFunction({ name: binary.name, url }); - } catch (err) { - console.error( - `An error occurred during ${binary.name} installation: ${err.message}`, - ); - } - }), - ); -} - -/** - * GitHub APIを使って、リポジトリのリリースから特定のOSのバイナリをダウンロードするURLを取得する関数 - * @param {Object} params - Githubからバイナリをダウンロードするための情報を含むオブジェクト - * @param {string} params.repo - GitHubリポジトリの名前(例: 'crate-ci/typos') - * @param {string} [params.version='latest'] - インストールしたい特定のバージョン(省略した場合は最新バージョン) - * @returns {Promise} 特定のOSに対応するバイナリのダウンロードするためのURL文字列 + * 現在のOSとアーキテクチャに基づいてバイナリのダウンロード先URLを定数のオブジェクトから取得する関数 + * @returns {string} バイナリをダウンロードするためのURL */ -async function getBinaryURL({ repo, version = "latest" }) { - const apiUrl = - version === "latest" - ? `https://api.github.com/repos/${repo}/releases/latest` - : `https://api.github.com/repos/${repo}/releases/tags/${version}`; +function getBinaryURL() { + let url; - const response = await fetch(apiUrl); - if (!response.ok) { - throw new Error( - `Release information for the specified version "${version}" could not be found.`, - ); + switch (CURRENT_OS) { + case OS.MACOS: + url = TYPOS_URLS[OS.MACOS][CURRENT_CPU_ARCHITECTURE]; + break; + case OS.LINUX: + url = TYPOS_URLS[OS.LINUX]; + break; + case OS.WINDOWS: + url = TYPOS_URLS[OS.WINDOWS]; + break; + default: + throw new Error(`Unsupported OS: ${CURRENT_OS}`); } - const data = await response.json(); - - // Githubのリリース情報から各OSに最適化されたバイナリをダウンロードするURLを定義する - const asset = data.assets.find((asset) => { - if (CURRENT_OS === OS.LINUX && asset.name.includes("linux")) - return true; - else if (CURRENT_OS === OS.WINDOWS && asset.name.includes("windows")) - return true; - else if ( - CURRENT_OS === OS.MACOS && - CURRENT_CPU_ARCHITECTURE === "arm64" && - asset.name.includes("aarch64-apple-darwin") - ) - return true; - else if ( - CURRENT_OS === OS.MACOS && - CURRENT_CPU_ARCHITECTURE === "x64" && - asset.name.includes("x86_64-apple-darwin") - ) - return true; - }); - - return asset.browser_download_url; -} - -/** - * Linuxに合わせたバイナリをダウンロードするための関数 - * @param {Object} params - バイナリの情報を含むオブジェクト - * @param {string} params.name - バイナリの名前 - * @param {string} params.url - 各プラットフォームのダウンロードURL - */ -async function downloadBinaryForLinux({ name, url }) { - const binaryPath = join(BINARY_BASE_PATH, name); - const tarballPath = `${binaryPath}/${name}.tar.gz`; - - // もし各バイナリのディレクトリがないなら新しく作成する - if (!existsSync(binaryPath)) { - mkdirSync(binaryPath, { recursive: true }); + if (typeof url !== "string") { + throw new Error("Failed to determine the download URL."); } - await runCommand({ - command: `curl -L ${url} -o ${tarballPath}`, - description: `Downloading ${name} binary`, - }); - await runCommand({ - command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, - description: `Extracting ${name} binary`, - }); - await runCommand({ - command: `chmod +x ${binaryPath}/${name}`, - description: `Granting execute permissions to the ${name} binary`, - }); - - // 解凍後に圧縮ファイルを削除 - unlinkSync(tarballPath); + return url; } /** - * Windowsに合わせたバイナリをダウンロードするための関数 + * バイナリをダウンロードして解凍し、実行権限を付与する関数 * @param {Object} params - バイナリの情報を含むオブジェクト - * @param {string} params.name - バイナリの名前 - * @param {string} params.url - 各プラットフォームのダウンロードURL + * @param {string} params.url - ダウンロード先URL */ -async function downloadBinaryForWin({ name, url }) { - const binaryPath = join(BINARY_BASE_PATH, name); - const zipFilePath = `${binaryPath}\\${name}.zip`; - - // もし各バイナリのディレクトリがないなら新しく作成する - if (!existsSync(binaryPath)) { - mkdirSync(binaryPath, { recursive: true }); +async function downloadBinary({ url }) { + const compressedFilePath = `${TYPOS_BINARY_PATH}/typos${CURRENT_OS === OS.WINDOWS ? ".zip" : ".tar.gz"}`; + + // バイナリディレクトリが存在する場合ダウンロードをスキップし、存在しない場合はディレクトリを作成する + if (existsSync(TYPOS_BINARY_PATH)) { + console.log(`typos already downloaded`); + return; + } else { + mkdirSync(TYPOS_BINARY_PATH, { recursive: true }); } await runCommand({ - command: `curl -L ${url} -o ${zipFilePath}`, - description: `Downloading ${name} binary`, - }); - await runCommand({ - command: `"${SEVEN_ZIP_BINARY_PATH}" x ${zipFilePath} -o${binaryPath}`, - description: `Extracting ${name} binary`, + command: `curl -L ${url} -o ${compressedFilePath}`, + description: `Downloading typos binary`, }); - // 解凍後に圧縮ファイルを削除 - unlinkSync(zipFilePath); -} - -/** - * macOSに合わせたバイナリをダウンロードするための関数 - * @param {Object} params - バイナリの情報を含むオブジェクト - * @param {string} params.name - バイナリの名前 - * @param {string} params.url - 各プラットフォームのダウンロードURL - */ -async function downloadBinaryForMac({ name, url }) { - const binaryPath = join(BINARY_BASE_PATH, name); - const tarballPath = `${binaryPath}/${name}.tar.gz`; - - // もし各バイナリのディレクトリがないなら新しく作成する - if (!existsSync(binaryPath)) { - mkdirSync(binaryPath, { recursive: true }); + if (CURRENT_OS === OS.WINDOWS) { + // Windows用のZIPファイルを解凍 + await runCommand({ + command: `"${SEVEN_ZIP_BINARY_PATH}" x ${compressedFilePath} -o${TYPOS_BINARY_PATH}`, + description: `Extracting typos binary`, + }); + } else { + const archiveFilePath = `${TYPOS_BINARY_PATH}/typos.tar`; + + // .tar.gzファイルの解凍 + await runCommand({ + command: `"${SEVEN_ZIP_BINARY_PATH}" e ${compressedFilePath} -o${TYPOS_BINARY_PATH} -y`, + description: `Extracting typos.tar.gz file`, + }); + + // tarファイルの解凍 + await runCommand({ + command: `"${SEVEN_ZIP_BINARY_PATH}" x ${archiveFilePath} -o${TYPOS_BINARY_PATH} -y`, + description: `Extracting typos.tar file`, + }); + + // バイナリに実行権限を付与 + await runCommand({ + command: `chmod +x ${TYPOS_BINARY_PATH}/typos`, + description: `Granting execute permissions to typos binary`, + }); + + // 解凍後にアーカイブファイルを削除 + unlinkSync(archiveFilePath); } - await runCommand({ - command: `curl -L ${url} -o ${tarballPath}`, - description: `Downloading ${name} binary`, - }); - await runCommand({ - command: `tar -xzvf ${tarballPath} -C ${binaryPath}`, - description: `Extracting ${name} binary`, - }); - await runCommand({ - command: `chmod +x ${binaryPath}/${name}`, - description: `Granting execute permissions to the ${name} binary`, - }); - // 解凍後に圧縮ファイルを削除 - unlinkSync(tarballPath); + unlinkSync(compressedFilePath); } /** - * OSに応じた関数を選択し、バイナリデータを処理する関数 - * - * @param {Object} params - メイン処理のパラメータ - * @param {Array} params.binaries - 複数のバイナリの情報を含む配列オブジェクト + * OSに応じてバイナリデータを処理する関数 */ -async function main({ binaries }) { - let downloadBinaryFunction; - - // OSに応じたインストール関数を選択 - switch (CURRENT_OS) { - case OS.LINUX: - downloadBinaryFunction = downloadBinaryForLinux; - break; - case OS.MACOS: - downloadBinaryFunction = downloadBinaryForMac; - break; - case OS.WINDOWS: - downloadBinaryFunction = downloadBinaryForWin; - break; - default: - throw new Error("Unsupported OS"); - } - - // バイナリデータを処理 - await processBinaries({ binaries, downloadBinaryFunction }); +async function main() { + const url = getBinaryURL(); + await downloadBinary({ url }); } // main関数実行 (async () => { - await main({ binaries: WANT_TO_DOWNLOAD_BINARIES }); + await main(); })(); From a5c42e3f4191f870a33662ec83bfa0112d65d833 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sat, 24 Aug 2024 21:04:21 +0900 Subject: [PATCH 11/23] =?UTF-8?q?[fix]=20#2206=20=E7=A9=BA=E8=A1=8C?= =?UTF-8?q?=E3=82=92=E5=85=A5=E3=82=8C=E3=81=A6=E3=81=84=E3=81=AA=E3=81=8B?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/vendored/README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/vendored/README.md b/build/vendored/README.md index 92b0828c66..01c2f840d9 100644 --- a/build/vendored/README.md +++ b/build/vendored/README.md @@ -5,4 +5,4 @@ | ディレクトリ名 | 内容 | ダウンローダー | | -------------- | ------------------------------------------ | ------------------------ | | `7z` | [7-Zip](http://www.7-zip.org/) | `build/download7z.js` | -| `typos` | [typos](https://github.com/crate-ci/typos) | `build/downloadTypos.js` | \ No newline at end of file +| `typos` | [typos](https://github.com/crate-ci/typos) | `build/downloadTypos.js` | diff --git a/package.json b/package.json index 536efcc7b5..c18ec2e5cb 100644 --- a/package.json +++ b/package.json @@ -129,4 +129,4 @@ "vue-tsc": "2.0.24", "yargs": "17.2.1" } -} \ No newline at end of file +} From b2b4cebe181055ac97fc9e235f5959b36814c604 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Sat, 24 Aug 2024 21:13:16 +0900 Subject: [PATCH 12/23] =?UTF-8?q?[delete]=20#2206=20typos=E3=81=AF?= =?UTF-8?q?=E6=89=8B=E5=8B=95=E3=81=A7=E8=A1=8C=E3=81=86=E3=81=9F=E3=82=81?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/typos.yml | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 .github/workflows/typos.yml diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml deleted file mode 100644 index ea745552b4..0000000000 --- a/.github/workflows/typos.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Check typos - -on: - push: - pull_request: - branches: - - '**' - workflow_dispatch: - -defaults: - run: - shell: bash - -jobs: - typos: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: typos-action - uses: crate-ci/typos@v1.21.0 - with: - files: ". .github" From 2d620bd0f4a4f09260861e3e7b008e9f9fff5ea9 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 26 Aug 2024 17:34:50 +0900 Subject: [PATCH 13/23] =?UTF-8?q?[fix]=20#2206=20linux=E3=81=A7.tar.gz?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8C=E8=A7=A3=E5=87=8D?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 8bde0f5ef1..039ff50066 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -27,8 +27,9 @@ const CURRENT_CPU_ARCHITECTURE = const BINARY_BASE_PATH = resolve(__dirname, "vendored"); // typosのバイナリのパス const TYPOS_BINARY_PATH = resolve(BINARY_BASE_PATH, "typos"); -// 7zバイナリのパス(.exeの有無を考慮) -const SEVEN_ZIP_BINARY_NAME = CURRENT_OS === OS.WINDOWS ? "7za.exe" : "7zz"; +// 7zバイナリのパス linuxとmacで異なるバイナリでないとエラーが出ることに注意 +const SEVEN_ZIP_BINARY_NAME = + CURRENT_OS === OS.WINDOWS ? "7za.exe" : OS.MACOS ? "7zz" : "7zzs"; const SEVEN_ZIP_BINARY_PATH = join( BINARY_BASE_PATH, "7z", From 2aee48208a5d1fb79ae4c523ce4f81fe90e89bca Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 26 Aug 2024 17:40:04 +0900 Subject: [PATCH 14/23] =?UTF-8?q?[fix]=20#2206=20=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=9D=E3=81=8C=E3=81=82=E3=81=A3=E3=81=9F=E3=81=9F=E3=82=81?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 039ff50066..5272cb9035 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -63,7 +63,7 @@ async function runCommand({ command, description }) { try { await execAsync(command); } catch (error) { - console.error(`An error occured: ${error.message}`); + console.error(`An error occurred: ${error.message}`); throw error; } } From 83870042e0b69157e841658a51decf167a3c059d Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 26 Aug 2024 17:48:58 +0900 Subject: [PATCH 15/23] =?UTF-8?q?[fix]=20#2206=20=E5=AE=9A=E6=95=B0?= =?UTF-8?q?=E3=81=A7=E3=81=82=E3=82=8B=E3=81=AE=E3=81=AB=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=88=E3=82=B1=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=82=81=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 5272cb9035..7d5ea4622d 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -22,7 +22,7 @@ const CPU_ARCHITECTURE = { // 現在のOSとCPUアーキテクチャ const CURRENT_OS = platform(); const CURRENT_CPU_ARCHITECTURE = - arch() === "arm64" ? CPU_ARCHITECTURE.arm : CPU_ARCHITECTURE.x86_64; + arch() === "arm64" ? CPU_ARCHITECTURE.ARM : CPU_ARCHITECTURE.X86_64; // 全バイナリのパス const BINARY_BASE_PATH = resolve(__dirname, "vendored"); // typosのバイナリのパス @@ -38,9 +38,9 @@ const SEVEN_ZIP_BINARY_PATH = join( // 各OSとアーキテクチャに対応するtyposバイナリのダウンロード先URL const TYPOS_URLS = { [OS.MACOS]: { - [CPU_ARCHITECTURE.arm]: + [CPU_ARCHITECTURE.ARM]: "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-aarch64-apple-darwin.tar.gz", - [CPU_ARCHITECTURE.x86_64]: + [CPU_ARCHITECTURE.X86_64]: "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-apple-darwin.tar.gz", }, [OS.LINUX]: From b9a9768d080dedbe0fd208457a3b3695de499fc3 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 26 Aug 2024 18:38:17 +0900 Subject: [PATCH 16/23] =?UTF-8?q?[fix]=20#2206=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E3=82=92=E9=96=93=E9=81=95=E3=81=88=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=9F=E3=82=81=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 7d5ea4622d..f06efaf2bb 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -29,7 +29,11 @@ const BINARY_BASE_PATH = resolve(__dirname, "vendored"); const TYPOS_BINARY_PATH = resolve(BINARY_BASE_PATH, "typos"); // 7zバイナリのパス linuxとmacで異なるバイナリでないとエラーが出ることに注意 const SEVEN_ZIP_BINARY_NAME = - CURRENT_OS === OS.WINDOWS ? "7za.exe" : OS.MACOS ? "7zz" : "7zzs"; + CURRENT_OS === OS.WINDOWS + ? "7za.exe" + : CURRENT_OS === OS.MACOS + ? "7zz" + : "7zzs"; const SEVEN_ZIP_BINARY_PATH = join( BINARY_BASE_PATH, "7z", From 6a34889a80b0c27111810221d93aec209e7298e9 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 2 Sep 2024 00:39:05 +0900 Subject: [PATCH 17/23] =?UTF-8?q?[fix]=20#2206=20typos=E3=81=AECI=E3=81=8C?= =?UTF-8?q?=E5=AE=9F=E8=A1=8C=E3=81=A7=E3=81=8D=E3=81=A6=E3=81=84=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=82=81=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 890b8185d6..40f0a26122 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -231,3 +231,4 @@ jobs: - run: npm run typecheck - run: npm run lint - run: npm run markdownlint + - run: npm run typos From ee91136dc21bf8f57aa9e6c6e8444ea3407b688d Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 2 Sep 2024 01:09:58 +0900 Subject: [PATCH 18/23] =?UTF-8?q?[fix]=20#2206=20TYPOS=5FURLS=E3=81=8Cstri?= =?UTF-8?q?ng=E3=81=BE=E3=81=9F=E3=81=AFobject=E3=82=92=E8=BF=94=E3=81=99?= =?UTF-8?q?=E3=81=93=E3=81=A8=E3=81=AB=E3=81=AA=E3=82=8B=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=80=81=E5=9E=8B=E3=82=AC=E3=83=BC=E3=83=89=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=AA=E3=81=91=E3=82=8C=E3=81=B0=E3=81=AA?= =?UTF-8?q?=E3=82=89=E3=81=AA=E3=81=84=E3=81=93=E3=81=A8=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index f06efaf2bb..6077e2321b 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -43,14 +43,18 @@ const SEVEN_ZIP_BINARY_PATH = join( const TYPOS_URLS = { [OS.MACOS]: { [CPU_ARCHITECTURE.ARM]: - "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-aarch64-apple-darwin.tar.gz", + "https://github.com/crate-ci/typos/releases/download/v1.21.0/typos-v1.21.0-aarch64-apple-darwin.tar.gz", [CPU_ARCHITECTURE.X86_64]: - "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-apple-darwin.tar.gz", + "https://github.com/crate-ci/typos/releases/download/v1.21.0/typos-v1.21.0-x86_64-apple-darwin.tar.gz", + }, + [OS.LINUX]: { + [CPU_ARCHITECTURE.X86_64]: + "https://github.com/crate-ci/typos/releases/download/v1.21.0/typos-v1.21.0-x86_64-unknown-linux-musl.tar.gz", + }, + [OS.WINDOWS]: { + [CPU_ARCHITECTURE.X86_64]: + "https://github.com/crate-ci/typos/releases/download/v1.21.0/typos-v1.21.0-x86_64-pc-windows-msvc.zip", }, - [OS.LINUX]: - "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-unknown-linux-musl.tar.gz", - [OS.WINDOWS]: - "https://github.com/crate-ci/typos/releases/download/v1.23.7/typos-v1.23.7-x86_64-pc-windows-msvc.zip", }; // 非同期でOSコマンドを処理するための関数 @@ -77,24 +81,12 @@ async function runCommand({ command, description }) { * @returns {string} バイナリをダウンロードするためのURL */ function getBinaryURL() { - let url; - - switch (CURRENT_OS) { - case OS.MACOS: - url = TYPOS_URLS[OS.MACOS][CURRENT_CPU_ARCHITECTURE]; - break; - case OS.LINUX: - url = TYPOS_URLS[OS.LINUX]; - break; - case OS.WINDOWS: - url = TYPOS_URLS[OS.WINDOWS]; - break; - default: - throw new Error(`Unsupported OS: ${CURRENT_OS}`); - } + const url = TYPOS_URLS[CURRENT_OS][CURRENT_CPU_ARCHITECTURE]; - if (typeof url !== "string") { - throw new Error("Failed to determine the download URL."); + if (!url) { + throw new Error( + `Unsupported OS or architecture: ${CURRENT_OS}, ${CURRENT_CPU_ARCHITECTURE}`, + ); } return url; From e9a4b247ad606787cda7ace938430098bbb03980 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 2 Sep 2024 05:53:42 +0900 Subject: [PATCH 19/23] =?UTF-8?q?[fix]=20#2206=20curl=E3=82=B3=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=81=8C=E3=81=AA=E3=81=84=E7=92=B0=E5=A2=83?= =?UTF-8?q?=E3=81=AE=E3=81=9F=E3=82=81=E3=81=ABnode-fetch=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B=E6=96=B9=E6=B3=95=E3=81=AB?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 6077e2321b..6c82ce0c5b 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -6,7 +6,8 @@ const { exec } = require("child_process"); const { promisify } = require("util"); const { platform, arch } = require("os"); const { join, resolve } = require("path"); -const { mkdirSync, existsSync, unlinkSync } = require("fs"); +const { mkdirSync, existsSync, unlinkSync, createWriteStream } = require("fs"); +const fetch = require("node-fetch"); // OS名を定義するオブジェクト const OS = { @@ -97,7 +98,7 @@ function getBinaryURL() { * @param {Object} params - バイナリの情報を含むオブジェクト * @param {string} params.url - ダウンロード先URL */ -async function downloadBinary({ url }) { +async function downloadAndUnarchive({ url }) { const compressedFilePath = `${TYPOS_BINARY_PATH}/typos${CURRENT_OS === OS.WINDOWS ? ".zip" : ".tar.gz"}`; // バイナリディレクトリが存在する場合ダウンロードをスキップし、存在しない場合はディレクトリを作成する @@ -108,9 +109,17 @@ async function downloadBinary({ url }) { mkdirSync(TYPOS_BINARY_PATH, { recursive: true }); } - await runCommand({ - command: `curl -L ${url} -o ${compressedFilePath}`, - description: `Downloading typos binary`, + // node-fetchでバイナリをメモリ上にダウンロードした後、ローカルに保存する + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to download binary: ${response.statusText}`); + } + + const fileStream = createWriteStream(compressedFilePath); + await new Promise((resolve, reject) => { + response.body.pipe(fileStream); + response.body.on("error", reject); + fileStream.on("finish", resolve); }); if (CURRENT_OS === OS.WINDOWS) { @@ -153,7 +162,7 @@ async function downloadBinary({ url }) { */ async function main() { const url = getBinaryURL(); - await downloadBinary({ url }); + await downloadAndUnarchive({ url }); } // main関数実行 From 6d8483af4c69479dafc39563e2081da6b48015e8 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Fri, 6 Sep 2024 01:38:03 +0900 Subject: [PATCH 20/23] =?UTF-8?q?[fix]=20#2206=20=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E3=81=A7=E3=81=82=E3=82=8B=E3=81=AE=E3=81=AB=E5=AE=9A=E6=95=B0?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6=E5=AE=9A=E7=BE=A9=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=9F=E3=82=81=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 46 +++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 6c82ce0c5b..d51f59d55a 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -17,29 +17,13 @@ const OS = { }; // CPUアーキテクチャ名を定義するオブジェクト const CPU_ARCHITECTURE = { - x86_64: "x86_64", - arm: "aarch64", + X86_64: "x86_64", + ARM: "aarch64", }; -// 現在のOSとCPUアーキテクチャ -const CURRENT_OS = platform(); -const CURRENT_CPU_ARCHITECTURE = - arch() === "arm64" ? CPU_ARCHITECTURE.ARM : CPU_ARCHITECTURE.X86_64; // 全バイナリのパス const BINARY_BASE_PATH = resolve(__dirname, "vendored"); // typosのバイナリのパス const TYPOS_BINARY_PATH = resolve(BINARY_BASE_PATH, "typos"); -// 7zバイナリのパス linuxとmacで異なるバイナリでないとエラーが出ることに注意 -const SEVEN_ZIP_BINARY_NAME = - CURRENT_OS === OS.WINDOWS - ? "7za.exe" - : CURRENT_OS === OS.MACOS - ? "7zz" - : "7zzs"; -const SEVEN_ZIP_BINARY_PATH = join( - BINARY_BASE_PATH, - "7z", - SEVEN_ZIP_BINARY_NAME, -); // 各OSとアーキテクチャに対応するtyposバイナリのダウンロード先URL const TYPOS_URLS = { [OS.MACOS]: { @@ -58,6 +42,18 @@ const TYPOS_URLS = { }, }; +// 現在のOSとCPUアーキテクチャ +const currentOS = platform(); +const currentCpuArchitecture = + arch() === "arm64" ? CPU_ARCHITECTURE.ARM : CPU_ARCHITECTURE.X86_64; +// 7zバイナリのパス linuxとmacで異なるバイナリでないとエラーが出ることに注意 +const sevenZipBinaryName = + currentOS === OS.WINDOWS + ? "7za.exe" + : currentOS === OS.MACOS + ? "7zz" + : "7zzs"; +const sevenZipBinaryPath = join(BINARY_BASE_PATH, "7z", sevenZipBinaryName); // 非同期でOSコマンドを処理するための関数 const execAsync = promisify(exec); @@ -82,11 +78,11 @@ async function runCommand({ command, description }) { * @returns {string} バイナリをダウンロードするためのURL */ function getBinaryURL() { - const url = TYPOS_URLS[CURRENT_OS][CURRENT_CPU_ARCHITECTURE]; + const url = TYPOS_URLS[currentOS][currentCpuArchitecture]; if (!url) { throw new Error( - `Unsupported OS or architecture: ${CURRENT_OS}, ${CURRENT_CPU_ARCHITECTURE}`, + `Unsupported OS or architecture: ${currentOS}, ${currentCpuArchitecture}`, ); } @@ -99,7 +95,7 @@ function getBinaryURL() { * @param {string} params.url - ダウンロード先URL */ async function downloadAndUnarchive({ url }) { - const compressedFilePath = `${TYPOS_BINARY_PATH}/typos${CURRENT_OS === OS.WINDOWS ? ".zip" : ".tar.gz"}`; + const compressedFilePath = `${TYPOS_BINARY_PATH}/typos${currentOS === OS.WINDOWS ? ".zip" : ".tar.gz"}`; // バイナリディレクトリが存在する場合ダウンロードをスキップし、存在しない場合はディレクトリを作成する if (existsSync(TYPOS_BINARY_PATH)) { @@ -122,10 +118,10 @@ async function downloadAndUnarchive({ url }) { fileStream.on("finish", resolve); }); - if (CURRENT_OS === OS.WINDOWS) { + if (currentOS === OS.WINDOWS) { // Windows用のZIPファイルを解凍 await runCommand({ - command: `"${SEVEN_ZIP_BINARY_PATH}" x ${compressedFilePath} -o${TYPOS_BINARY_PATH}`, + command: `"${sevenZipBinaryPath}" x ${compressedFilePath} -o${TYPOS_BINARY_PATH}`, description: `Extracting typos binary`, }); } else { @@ -133,13 +129,13 @@ async function downloadAndUnarchive({ url }) { // .tar.gzファイルの解凍 await runCommand({ - command: `"${SEVEN_ZIP_BINARY_PATH}" e ${compressedFilePath} -o${TYPOS_BINARY_PATH} -y`, + command: `"${sevenZipBinaryPath}" e ${compressedFilePath} -o${TYPOS_BINARY_PATH} -y`, description: `Extracting typos.tar.gz file`, }); // tarファイルの解凍 await runCommand({ - command: `"${SEVEN_ZIP_BINARY_PATH}" x ${archiveFilePath} -o${TYPOS_BINARY_PATH} -y`, + command: `"${sevenZipBinaryPath}" x ${archiveFilePath} -o${TYPOS_BINARY_PATH} -y`, description: `Extracting typos.tar file`, }); From 1472a72a79d5bd28e05ac8803ce0291c986fe8e5 Mon Sep 17 00:00:00 2001 From: "wagatsuma.yuichi" Date: Mon, 9 Sep 2024 15:25:02 +0900 Subject: [PATCH 21/23] =?UTF-8?q?[fix]=20#2206=20markdownlint=E3=81=AECI?= =?UTF-8?q?=E3=81=A7=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=8C=E5=87=BA=E3=82=8B?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=80=81typos=E3=81=AEmarkdown=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8C=E5=AD=98=E5=9C=A8=E3=81=99?= =?UTF-8?q?=E3=82=8Bdoc=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=83=AA=E3=81=A8README.md=E3=82=92=E5=89=8A=E9=99=A4=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/downloadTypos.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index d51f59d55a..7a75cc7c27 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -6,7 +6,13 @@ const { exec } = require("child_process"); const { promisify } = require("util"); const { platform, arch } = require("os"); const { join, resolve } = require("path"); -const { mkdirSync, existsSync, unlinkSync, createWriteStream } = require("fs"); +const { + mkdirSync, + existsSync, + unlinkSync, + createWriteStream, + rmSync, +} = require("fs"); const fetch = require("node-fetch"); // OS名を定義するオブジェクト @@ -153,12 +159,35 @@ async function downloadAndUnarchive({ url }) { unlinkSync(compressedFilePath); } +/** + * /build/vendored/typos ディレクトリから不要なファイルとディレクトリを削除する関数 + */ +function cleanupTyposDirectory() { + const typosDocDirPath = join(TYPOS_BINARY_PATH, "doc"); + const typosReadmeFilePath = join(TYPOS_BINARY_PATH, "README.md"); + + // doc ディレクトリの削除 + if (existsSync(typosDocDirPath)) { + rmSync(typosDocDirPath, { recursive: true }); + console.log(`Deleted directory: ${typosDocDirPath}`); + } + + // README.md ファイルの削除 + if (existsSync(typosReadmeFilePath)) { + unlinkSync(typosReadmeFilePath); + console.log(`Deleted file: ${typosReadmeFilePath}`); + } +} + /** * OSに応じてバイナリデータを処理する関数 */ async function main() { const url = getBinaryURL(); await downloadAndUnarchive({ url }); + + // 不要なファイルとディレクトリを削除 + cleanupTyposDirectory(); } // main関数実行 From 4e7c3ae2881262071952555342432d917919c756 Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Sat, 14 Sep 2024 00:42:16 +0900 Subject: [PATCH 22/23] Apply suggestions from code review --- build/downloadTypos.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/build/downloadTypos.js b/build/downloadTypos.js index 7a75cc7c27..5bc11945b0 100644 --- a/build/downloadTypos.js +++ b/build/downloadTypos.js @@ -26,11 +26,11 @@ const CPU_ARCHITECTURE = { X86_64: "x86_64", ARM: "aarch64", }; -// 全バイナリのパス +// ダウンロードしたバイナリを格納するディレクトリ const BINARY_BASE_PATH = resolve(__dirname, "vendored"); // typosのバイナリのパス const TYPOS_BINARY_PATH = resolve(BINARY_BASE_PATH, "typos"); -// 各OSとアーキテクチャに対応するtyposバイナリのダウンロード先URL +// 各OSとアーキテクチャに対応するtyposバイナリのダウンロードURL const TYPOS_URLS = { [OS.MACOS]: { [CPU_ARCHITECTURE.ARM]: @@ -48,11 +48,12 @@ const TYPOS_URLS = { }, }; -// 現在のOSとCPUアーキテクチャ +// 動作環境でのOSとCPUアーキテクチャ const currentOS = platform(); const currentCpuArchitecture = arch() === "arm64" ? CPU_ARCHITECTURE.ARM : CPU_ARCHITECTURE.X86_64; -// 7zバイナリのパス linuxとmacで異なるバイナリでないとエラーが出ることに注意 +// 7zバイナリのパス +// WARNING: linuxとmacで異なるバイナリでないとエラーが出る const sevenZipBinaryName = currentOS === OS.WINDOWS ? "7za.exe" From a538cbd2679db479724c48b986b56d3733b4739a Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Sat, 14 Sep 2024 00:52:38 +0900 Subject: [PATCH 23/23] Apply suggestions from code review --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0faef33c75..45320e577d 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "electron:serve": "cross-env VITE_TARGET=electron vite", "browser:serve": "cross-env VITE_TARGET=browser vite", "browser:build": "cross-env VITE_TARGET=browser vite build", - "postinstall": "electron-builder install-app-deps && node build/download7z.js && node build/downloadTypos.js && node build/download7z.js", + "postinstall": "patch-package --patch-dir build/patches && electron-builder install-app-deps && node build/download7z.js && node build/downloadTypos.js", "postuninstall": "electron-builder install-app-deps", "license:generate": "node build/generateLicenses.js", "license:merge": "node build/mergeLicenses.js",