Skip to content

Commit

Permalink
fix: Docker関連ファイルの削除とTyposのスクリプトの追加 (#2239)
Browse files Browse the repository at this point in the history
* [add] #2206 typosのバイナリをダウンロードするスクリプトが必要なため

* [fix] #2206 windowsにてTyposのバイナリデータがダウンロードと解凍・削除されない不具合を修正した

* [fix] #2206 cross-envを使用しているためプラットフォームの違いを吸収するコマンドに修正した

* [fix] #2206 ダウンロードしたいバイナリがすでにある時に再度ダウンロードされるのではなく、スキップされるように修正した

* [fix] #2206 もしバイナリが既に存在する場合、ダウンロードをスキップするように修正した

* [fix] #2206 macosのCPUアーキテクチャの違いを考慮し最適なバイナリをダウンロードするように修正した

* [document] #2206 cargoを通したインストールではなくなったためそれに応じたドキュメントに修正した

* [delete] #2206 Docker関連のファイルは使用しないため

* [fix] #2206 バイナリをダウンロードする際に使用する渡すURLのオブジェクトを文字列にすることで無駄な処理を削減した

* [fix] #2206 Github以外に公開している場合のバイナリにも対処し、かつ、ダウンロードする処理を共通化して冗長な部分を削除した

* [fix] #2206 空行を入れていなかったため修正した

* [delete] #2206 typosは手動で行うため削除する

* [fix] #2206 linuxで.tar.gzファイルが解凍されない不具合を修正した

* [fix] #2206 タイポがあったため修正した

* [fix] #2206 定数であるのにコンスタントケースになっていないため修正した

* [fix] #2206 条件を間違えていたため修正した

* [fix] #2206 typosのCIが実行できていないため追加した

* [fix] #2206 TYPOS_URLSがstringまたはobjectを返すことになるため、型ガードを追加しなければならないことを修正した

* [fix] #2206 curlコマンドがない環境のためにnode-fetchを使用する方法に修正した

* [fix] #2206 変数であるのに定数として定義していたため修正した

* [fix] #2206 markdownlintのCIでエラーが出るため、typosのmarkdownファイルが存在するdocディレクトリとREADME.mdを削除するスクリプトを追加した

* Apply suggestions from code review

* Apply suggestions from code review

---------

Co-authored-by: Hiroshiba <[email protected]>
  • Loading branch information
gigi434 and Hiroshiba authored Sep 13, 2024
1 parent 6bac9f9 commit a43d28a
Show file tree
Hide file tree
Showing 9 changed files with 206 additions and 78 deletions.
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -231,3 +231,4 @@ jobs:
- run: npm run typecheck
- run: npm run lint
- run: npm run markdownlint
- run: npm run typos
24 changes: 0 additions & 24 deletions .github/workflows/typos.yml

This file was deleted.

2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ VITE_DEFAULT_ENGINE_INFOS=`[
- 命名に使っている英語が誤っていないことを確認します。

```bash
typos
npm run typos
```

- 個人環境でVOICEVOXを実行し、提出前に、一通り動くことを確認します。
Expand Down
14 changes: 0 additions & 14 deletions Dockerfile

This file was deleted.

3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,10 +217,9 @@ npm run lint
## タイポチェック

[typos](https://github.com/crate-ci/typos) を使ってタイポのチェックを行っています。
[typos をインストール](https://github.com/crate-ci/typos#install) した後

```bash
typos
npm run typos
```

でタイポチェックを行えます。
Expand Down
197 changes: 197 additions & 0 deletions build/downloadTypos.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
// @ts-check
/**
* OSに合ったtyposのバイナリをダウンロードするスクリプト。
*/
const { exec } = require("child_process");
const { promisify } = require("util");
const { platform, arch } = require("os");
const { join, resolve } = require("path");
const {
mkdirSync,
existsSync,
unlinkSync,
createWriteStream,
rmSync,
} = require("fs");
const fetch = require("node-fetch");

// OS名を定義するオブジェクト
const OS = {
LINUX: "linux",
MACOS: "darwin",
WINDOWS: "win32",
};
// CPUアーキテクチャ名を定義するオブジェクト
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
const TYPOS_URLS = {
[OS.MACOS]: {
[CPU_ARCHITECTURE.ARM]:
"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.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とCPUアーキテクチャ
const currentOS = platform();
const currentCpuArchitecture =
arch() === "arm64" ? CPU_ARCHITECTURE.ARM : CPU_ARCHITECTURE.X86_64;
// 7zバイナリのパス
// WARNING: 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);

/**
* コマンドを実行し、その進行状況を出力するヘルパー関数
* @param {Object} params - コマンド実行のパラメータ
* @param {string} params.command - 実行するシェルコマンド
* @param {string} params.description - コマンドの説明を表示するテキスト
*/
async function runCommand({ command, description }) {
console.log(`Running: ${description}`);
try {
await execAsync(command);
} catch (error) {
console.error(`An error occurred: ${error.message}`);
throw error;
}
}

/**
* 現在のOSとアーキテクチャに基づいてバイナリのダウンロード先URLを定数のオブジェクトから取得する関数
* @returns {string} バイナリをダウンロードするためのURL
*/
function getBinaryURL() {
const url = TYPOS_URLS[currentOS][currentCpuArchitecture];

if (!url) {
throw new Error(
`Unsupported OS or architecture: ${currentOS}, ${currentCpuArchitecture}`,
);
}

return url;
}

/**
* バイナリをダウンロードして解凍し、実行権限を付与する関数
* @param {Object} params - バイナリの情報を含むオブジェクト
* @param {string} params.url - ダウンロード先URL
*/
async function downloadAndUnarchive({ url }) {
const compressedFilePath = `${TYPOS_BINARY_PATH}/typos${currentOS === OS.WINDOWS ? ".zip" : ".tar.gz"}`;

// バイナリディレクトリが存在する場合ダウンロードをスキップし、存在しない場合はディレクトリを作成する
if (existsSync(TYPOS_BINARY_PATH)) {
console.log(`typos already downloaded`);
return;
} else {
mkdirSync(TYPOS_BINARY_PATH, { recursive: true });
}

// 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 (currentOS === OS.WINDOWS) {
// Windows用のZIPファイルを解凍
await runCommand({
command: `"${sevenZipBinaryPath}" x ${compressedFilePath} -o${TYPOS_BINARY_PATH}`,
description: `Extracting typos binary`,
});
} else {
const archiveFilePath = `${TYPOS_BINARY_PATH}/typos.tar`;

// .tar.gzファイルの解凍
await runCommand({
command: `"${sevenZipBinaryPath}" e ${compressedFilePath} -o${TYPOS_BINARY_PATH} -y`,
description: `Extracting typos.tar.gz file`,
});

// tarファイルの解凍
await runCommand({
command: `"${sevenZipBinaryPath}" 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);
}

// 解凍後に圧縮ファイルを削除
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関数実行
(async () => {
await main();
})();
7 changes: 4 additions & 3 deletions build/vendored/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |
33 changes: 0 additions & 33 deletions docker-compose.yml

This file was deleted.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": "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",
"browser:build": "cross-env VITE_TARGET=browser vite build",
"postinstall": "patch-package --patch-dir build/patches && electron-builder install-app-deps && 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",
Expand Down

0 comments on commit a43d28a

Please sign in to comment.