Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Docker関連ファイルの削除とTyposのスクリプトの追加 #2239

Merged
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
17502c8
[add] #2206 typosのバイナリをダウンロードするスクリプトが必要なため
gigi434 Aug 13, 2024
3539b04
[fix] #2206 windowsにてTyposのバイナリデータがダウンロードと解凍・削除されない不具合を修正した
gigi434 Aug 14, 2024
a70e64e
[fix] #2206 cross-envを使用しているためプラットフォームの違いを吸収するコマンドに修正した
gigi434 Aug 17, 2024
35321fe
[fix] #2206 ダウンロードしたいバイナリがすでにある時に再度ダウンロードされるのではなく、スキップされるように修正した
gigi434 Aug 17, 2024
c1c44a2
[fix] #2206 もしバイナリが既に存在する場合、ダウンロードをスキップするように修正した
gigi434 Aug 18, 2024
0645e30
[fix] #2206 macosのCPUアーキテクチャの違いを考慮し最適なバイナリをダウンロードするように修正した
gigi434 Aug 18, 2024
4c2b448
[document] #2206 cargoを通したインストールではなくなったためそれに応じたドキュメントに修正した
gigi434 Aug 18, 2024
8adb48b
[delete] #2206 Docker関連のファイルは使用しないため
gigi434 Aug 18, 2024
6456c06
[fix] #2206 バイナリをダウンロードする際に使用する渡すURLのオブジェクトを文字列にすることで無駄な処理を削減した
gigi434 Aug 21, 2024
cc565e8
[fix] #2206 Github以外に公開している場合のバイナリにも対処し、かつ、ダウンロードする処理を共通化して冗長な部分を削除した
gigi434 Aug 24, 2024
a5c42e3
[fix] #2206 空行を入れていなかったため修正した
gigi434 Aug 24, 2024
b2b4ceb
[delete] #2206 typosは手動で行うため削除する
gigi434 Aug 24, 2024
2d620bd
[fix] #2206 linuxで.tar.gzファイルが解凍されない不具合を修正した
gigi434 Aug 26, 2024
2aee482
[fix] #2206 タイポがあったため修正した
gigi434 Aug 26, 2024
8387004
[fix] #2206 定数であるのにコンスタントケースになっていないため修正した
gigi434 Aug 26, 2024
b9a9768
[fix] #2206 条件を間違えていたため修正した
gigi434 Aug 26, 2024
6a34889
[fix] #2206 typosのCIが実行できていないため追加した
gigi434 Sep 1, 2024
ee91136
[fix] #2206 TYPOS_URLSがstringまたはobjectを返すことになるため、型ガードを追加しなければならないことを修正した
gigi434 Sep 1, 2024
e9a4b24
[fix] #2206 curlコマンドがない環境のためにnode-fetchを使用する方法に修正した
gigi434 Sep 1, 2024
6d8483a
[fix] #2206 変数であるのに定数として定義していたため修正した
gigi434 Sep 5, 2024
1472a72
[fix] #2206 markdownlintのCIでエラーが出るため、typosのmarkdownファイルが存在するdocディレクトリ…
gigi434 Sep 9, 2024
3a45518
Merge branch 'main' into feature/#2206/FixAroundDockerEnvironment
Hiroshiba Sep 13, 2024
4e7c3ae
Apply suggestions from code review
Hiroshiba Sep 13, 2024
a538cbd
Apply suggestions from code review
Hiroshiba Sep 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Hiroshiba marked this conversation as resolved.
Show resolved Hide resolved

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(判断メモです!)

こちらのファイルは他のファイルに比べるとコメントが結構多めで、一部冗長な箇所もあるなと感じました!
が、問題なさそうと思いました!

ここはビルドでしか使われなく、おそらく滅多に変更されることはないと思われます。
よく変更される箇所でしたらより洗練する方がいいかもしれませんが、ここはあまり変更されない場所なので、丁寧にコメントされているのはOKだと思います!

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");
Hiroshiba marked this conversation as resolved.
Show resolved Hide resolved

// 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);
});
Comment on lines +121 to +126
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(ただのコメントです)

ここ、たぶんパイプ経由で保存している感じですよね。
Node.js的にはもっとスマートの解決策があって、responseからバイナリーを得て、fs.writeFileなどで普通にファイル出力する方が一般的かもです。
もし次書く機会あればぜひ・・・!


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",
sevenc-nanashi marked this conversation as resolved.
Show resolved Hide resolved
"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": "electron-builder install-app-deps && node build/download7z.js && node build/downloadTypos.js && node build/download7z.js",
Hiroshiba marked this conversation as resolved.
Show resolved Hide resolved
"postuninstall": "electron-builder install-app-deps",
"license:generate": "node build/generateLicenses.js",
"license:merge": "node build/mergeLicenses.js",
Expand Down
Loading