[ “${{ matrix.build.OS }}”=”windows-2022” ] 最近、ミッションをパッケージ化しました git-cliff (changelog generator written Rust) で NPM 私の友達 @atlj の友達と。 バイナリの配布に関する明確な技術的深みがあり、率直に言って、構成要素全体が問題なく機能する方法に驚くほど平和であるため、これはブログに掲載するためのインテリジェントなトピックになる可能性が高いと思いました. それでは、単純な Rust ミッションを作成し、NPM 用に装備して、GitHub Actions.
Q : ちょっと待って、何? NPM は Javascript に関しては正直だったと思います!? A: 本当のことを言うと、いいえ。 バイナリを実行してパッケージ化するためのツールの正直なトピックを公正に保持したい限り、トピックになりたいと思うでしょう。 それはもはや基本的に Rust の装備になりたいとは思っていません。 と設計図 その他 装備の設置・完成時。 これがNPMがとても恐ろしい理由です! – もう 1 つのブログのトピック Q: はい、検索します。 しかし…なぜこれを設計図にするのですか? もう正直にバイナリをダウンロードして高速化することはできませんか? A: この要求に対する答えとして、 との会話を詳しく説明したいと思います。 @atlj。 それはもはや本物の会話ではないことを報告してください。 または、私たちも設計図を作成します。 すべての問題にもかかわらず、ここにあります: atlj: おーるふん、装備しましょう NPM の git-cliff これにより、フロントエンド開発者がよりアクセスしやすくなり、npx は、インストール/作業に非常に役立ちます.
orhun: そうですね。 しかし、どのように設計図を作成するのでしょうか? atlj: このsh*tをテストしてください: レフトフック (GitHub) & レフトフック (NPM) オルフン: ああ、それは Rush ミッションで、NPM 装備を持っています。 atlj: ええ、同じものを設計できます。 またはさらに良い. : 私はダウンしています. そのため、財団は lefthook から来ました。このように蓄積して git-cliff. 完璧に機能しました! 正しい速度:
npx git-cliff@most modernA : 私を見つけてください。 🐇 NPM まずはNPMとはこれは、NPM レジストリが機能する絶対的な最良のプロットです。 NPM (「ノード バンドル マネージャー」のすべての問題を高速化する前に) Javascript ランタイム環境のデフォルトの機器マネージャーです Node.js。 これは、ショー ライン クライアント (npm を備えています。 )) および NPM レジストリ として知られる、公開および有料の非公開機能のオンライン データベース。 関数をプッシュできるキーはここにあります。 NPM レジストリ内の関数は [ “${{ matrix.build.OS }}”=”windows-2022” ] にあります。 CommonJS レイアウトでメタデータ ファイルを JSON レイアウト (
equipment.json
)。 登録簿は提出のための審査の仕事を保持しなくなりました。そこで機能するシステムが学んだことは、間違いなく栄光、恐怖、または悪意のあるものである可能性があります. NPM は、ユーザー レポートに依存して、そのような機能を蓄積します。 npm audit を使用して、おびえた依存関係を手動で調べることができること。 . 機器または機器によって指定された依存関係を入れること、高速化したい npm install . 多様化されたハンドでは、npx が可能でした。コミュニティ内にインストールされているか、リモートでフェッチされているNPM機器からの任意のショーを高速化するのに脆弱です。 すべてのセットアップと実行を処理します。 そういう意味では npm install のショートカットと判断できます。 & npm 速度 . このブログの最後に、ソフトウェア プログラムの導入/高速化を目指しています。 npxで. 概要 Rust ソフトウェア プログラムを WASM NPM レジストリ用にパッケージ化します。 あれはwasm-pack
) ジョブ自体。 このマナーについて詳しく読めること ここ と こちら. 代わりに、多様なターゲット向けにビルドできる バイナリ を配布します (つまり、アーキテクチャ/プラットフォーム)。 各NPM機器は、ラッピングの責任を負います。ターゲット固有のバイナリであり、エンド ユーザーに公開される「間違った」機器が存在します。 これが、このパッケージング方法がより移植性が高い理由です。なぜなら、最も効率的な方法は、多様なアーキテクチャのバイナリをまとめて持ってきて、バイナリ内部の NPM 関数にスペースを空ける必要があるからです. [ “${{ matrix.build.OS }}”=”windows-2022” ] ダメージを与えましょう: [ “${{ matrix.build.OS }}”=”windows-2022” ] ここでは、equipment.json の次の利点を利用しています。 :
置き場
: この自己規律は、機器内のメインの実行可能ファイル (ショーまたはネイティブ ファイルのタイトル) を指します。 機器がグローバルにインストールされると、そのファイルはグローバル コンテナ リスト全体にリンクされます。 例として、Unix が好きな OS では、index.js スクリプトを /usr/native/bin/myapp に そして家の窓の場合、これは全体的に で cmd ファイルを作成する可能性がありますC:ユーザーAppDataRoamingnpmmyapp.cmd を実行します) index.js script.
ここで報告すべき要素の 1 つは、bin で参照されているファイルです。 保持する必要があります #!/usr/bin/env node なので shebang、それ以外の場合、スクリプトは なしで開始されます) node 実行可能.
- オプションの依存関係: この自己規律は、脆弱である可能性がある依存関係のためのものですが、もはや機器にとって厳密には必須ではありません。 基本的に最も近代的なアーキテクチャに適切な機器を最も効率的にインストールする必要があるため、この自己規律でターゲット固有の NPM 機能を指定することに成功します。
しかしながら、私たちがどのように青写真を区別しているか多様化されたターゲットと、もはや必須ではない依存関係を入れる必要があることを知っていますか? 事実上、os および cpu
多様化した中から正直な依存関係をフィルタリングするために私たちと仲良くしてください依存関係 os: 機器がどの操作技術を使用するかを指定します。
CPU
: 機器が動作する CPU アーキテクチャを指定します。 考えられる値は、’arm’、’arm64’、’ia32’、’mips’、’mipsel’、’ppc’、’ppc64’、’s390’、’s390x’、’x64′ です。 . 包装 私たちのミッション関連は、次の可能性があります: $ git ls-tree -r –title-most効率的 頭 | 木 –fromfile . ├── カーゴロック ├── Cargo.toml
# ———- ——> Rust ソフトウェア プログラムのマニフェスト ├── .github
│ └── ワークフロー │ └── cd.yml # ————> 自動リリースの GitHub Actions ワークフロー├── .gitignore ├── npm │ ├── アプリ │ │ ├── Equipment.json [ “${{ matrix.build.OS }}”=”windows-2022” ] # ——> 間違った NPM 式のメタデータイプメント │ │ ├── src │ │ └── index.ts # ——> 間違った NPM 機器 (バイナリ エグゼキュータ) のエントリポイント │ │ ├── tsconfig.json │ │ └── fable.lock │ └── equipment.json.tmpl # —–> ターゲット固有の NPM 関数のテンプレート └── src └── main.rs # —————> Rust ソフトウェア プログラムのエントリポイント まずは簡単な Rust ミッションを作りましょう:$ 貨物ノベル - 置き場 アプリ && CD アプリ/ $ 貨物速度
ハイヤ、ワールド! 次に、追加する必要があります。私たちの「間違った」機器の equipment.json 次のようなファイル (一部のフィールドは削除されています):
{
"題名": "アプリ", 」モデル": "0.1.0", ) "置き場": "lib/index.js" , 「スクリプト」 : {
」 typecheck": "tsc --noEmit", "リ nt」: 「eslint」 , "lint:repair": "eslint. - 修理"、 「青写真」 : "tsc", "dev" : "fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
こちらで検索したいので、 '' は、すべてのターゲット パーツへの必須の依存関係ではなくなりました。 特定の機能により、NPM は実行時に完全に基づいて正直な機器に蓄積できます。 それでは、これらの関数を生成するためのテンプレートを追加しましょう. え、ちょっと待って. 「生成」って言った?
# —–> ターゲット固有の NPM 関数のテンプレート └── src └── main.rs # —————> Rust ソフトウェア プログラムのエントリポイント まずは簡単な Rust ミッションを作りましょう:$ 貨物ノベル - 置き場 アプリ && CD アプリ/ $ 貨物速度
まずは簡単な Rust ミッションを作りましょう:$ 貨物ノベル - 置き場 アプリ && CD アプリ/ $ 貨物速度
$ 貨物ノベル - 置き場 アプリ && CD アプリ/ $ 貨物速度
ハイヤ、ワールド! 次に、追加する必要があります。私たちの「間違った」機器の equipment.json 次のようなファイル (一部のフィールドは削除されています):
{
"題名": "アプリ", 」モデル": "0.1.0", ) "置き場": "lib/index.js" , 「スクリプト」 : {
」 typecheck": "tsc --noEmit", "リ nt」: 「eslint」 , "lint:repair": "eslint. - 修理"、 「青写真」 : "tsc", "dev" : "fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
こちらで検索したいので、 '' は、すべてのターゲット パーツへの必須の依存関係ではなくなりました。 特定の機能により、NPM は実行時に完全に基づいて正直な機器に蓄積できます。 それでは、これらの関数を生成するためのテンプレートを追加しましょう. え、ちょっと待って. 「生成」って言った?
{
"題名": "アプリ", 」モデル": "0.1.0", ) "置き場": "lib/index.js" , 「スクリプト」 : {
」 typecheck": "tsc --noEmit", "リ nt」: 「eslint」 , "lint:repair": "eslint. - 修理"、 「青写真」 : "tsc", "dev" : "fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
こちらで検索したいので、 '' は、すべてのターゲット パーツへの必須の依存関係ではなくなりました。 特定の機能により、NPM は実行時に完全に基づいて正直な機器に蓄積できます。 それでは、これらの関数を生成するためのテンプレートを追加しましょう. え、ちょっと待って. 「生成」って言った?
: "lib/index.js" , 「スクリプト」 : {
」 typecheck": "tsc --noEmit", "リ nt」: 「eslint」 , "lint:repair": "eslint. - 修理"、 「青写真」 : "tsc", "dev" : "fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
こちらで検索したいので、 '' は、すべてのターゲット パーツへの必須の依存関係ではなくなりました。 特定の機能により、NPM は実行時に完全に基づいて正直な機器に蓄積できます。 それでは、これらの関数を生成するためのテンプレートを追加しましょう.: 「eslint」 , "lint:repair": "eslint. - 修理"、 「青写真」 : "tsc", "dev" : "fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
"fable blueprint && node lib/index.js" }, "devDependencies" : { "@種類/ノード": "^18.11.18", "@typescript-eslint/eslint-plugin": "^5.48.0", "@typescript-eslint/parser": 」 ^5.48.0",
"eslint"
: "^8.31.0", "タイプスクリプト": "^4.9.4" }, "optionalDependencies": {
"app-linux-arm64": "0.1.0"、 "app-darwin-x64": "0.1.0"
,
「app-darwin-arm64」: "0.1.0", 「app-home windows-x64」:
"0.1.0"
, "アプリ- home windows-arm64"
:
"0.1.0"
}}
え、ちょっと待って. 「生成」って言った?
はい、判断します を通じて NPM 関数を生成するための真のアドバイス信頼できる展開 6 つの多様なフォルダーを取得するためのワークフローと equipment.json
はミッション内のデータを記録します。 これらの機能を調整する最も効率的な要素は、title です。 、os 、および cpu フィールドなので、テンプレートからenvsubst(1).
これを熟考すると、次のテンプレートで進めることができます:
{"題名"
: “${node_pkg}”
, “モデル”:
“${node_version}”、
“os” : 、 “CPU”
: ["${node_arch}"] }わかりました、それはクールです。バイナリを構築する設計図を保持しますか?
真の需要。 equipment.json ファイルを作成し、バイナリをブループリントします:
├── app-linux- x64$ rg--recordsdata npm | 木 --fromfile
。 └── npm
# -------------- --> 間違った機器│ ├── Equipment.json ) │ ├── src │ │ └── 目次.ts
# ---> エグゼキュータ │ ├── tsconfig.json │ └── fable.lock
# ——> linux 用生成機器
│ ├── ビン│ │ └──アプリ # ——–> バイナリ │ └── equipment.json # —> メタデータ
└── equipment.json.tmpl
これで、必須ではなくなった正直な依存関係が間違った機器と一緒にインストールされ、これがバイナリを保持する可能性があることがわかりました。 しかし、どのように青写真を検出し、青写真を作成するのでしょうか? 事実上、これが src/index.ts を取得した理由です。 :#!/usr/bin/env ノード 輸入 { spawnSync }
から “子プロセス”; /
内部 `node_modules` にある実行可能なコースを返します ネーミング規則は app-${os}-${arch} プラットフォームが「rob32」または「cygwin」の場合、実行可能ファイルには「.exe」拡張子が含まれます。 @検索する https://nodejs.org/api/os.html#osarch @検索する https://nodejs.org/api/os.html#osplatform @実例 "x/xx/node_modules/app-darwin-arm64"
*/
特徴 getExePath() { const
アーチ
=仕事.アーチ; させて os =
仕事. プラットホーム なので ストリング; させて 拡大 =
“” ; もしも ([“win32”, “cygwin”]. 含む[ “${{ matrix.build.OS }}” =“windows-2022” ] (仕事. プラットホーム)) { OS=
「ホームウィンドウ」
; 拡大 = “。EXE”; }
努力 {// バイナリは内部 `node_modules` に配置されるため、`require.earn を ` の下側で呼び出すだけです )
戻る 必須。の下側に稼ぎます) (`a pp-${os}-${arch}/bin/app${extension}` ); }
ロブ (へ) { )投げる 小説 エラー( `ソフトウェア プログラム バイナリ内部を取得できませんでした${os}-${arch} の node_modules` ); }
} / 実行します引数を持つソフトウェア プログラムは、nodejs spawn の排気 */ 特徴 速度() { const args =仕事.
argv. スラッシュ (2
); const プロセス結果=spawnSync ( getExePath
(), args, { stdio:
「継承」 }) ; 仕事. 出口(処理結果.保つ ?? 0); }
速度();
寓話の設計図
、これはおそらくlib/index.js
にインテリジェントです これでスペース内のすべての問題を取得した後、単にこれらの関数をポストすることができますnpm投稿。 または、機器を構築するための NPM レジストリで、必須の依存関係がもはや平和的である可能性がなくなったことを報告してください。 これは、間違った機器を投稿しようとする前に、必須ではなくなったすべての依存関係を投稿する必要があることを意味します。 それ以外の場合は、次のようなエラーが発生する可能性があります:エラーエラーが発生しました:「https://registry.npmjs.org/app-linux-x64: もう学習していません」。 recordsdata たまたまワームだと判断した場合は、「/home/runner/work/packaging-rust-for-npm/packaging-rust」で提供されているワークアウトでワームドキュメントを作成してください-for-npm/npm/app/fable-error.log". recordsdata このショーに関するドキュメントについては、https://yarnpkg.com/en/doctors/cli/install にアクセスしてください。 エラー: 終了コード 1 で完了しました。
オートメーション
GitHub Actions ノートが押されたとき、またはリベレートが作成されたときに実行されるワークフロー。
上記で検索したいので、今すぐ我々は バイナリを構築し、ターゲット固有の NPM を公開するためのブループリント マトリックス機能。 そのために、次の行列を作成できます:マトリックス
: 青写真 ):
: 安定、 目標:- { 名前: )linux-x64-glibc
, OS : ubuntu-2 0.04, ツールチェーン
x86_64- unknown-linux-gnu,
} - { 名前: linux-arm64-glibc ,
OS :
ubuntu-20.04 , ツールチェーン: 安定,
目標: aarch64-unknown-linux-gnu ,
} - {
名前:rob32-x64-msvc
,OS : ホーム Windows-2022, T OOLCHAIN: 安定,
目標:
x86_64-ノートブック コンピューター-ホーム Windows-msvc , }
- { 名前: rob32-arm64 -msvc
、OS : ホーム Windows-2022
, ツールチェーン: 安定, 目標: aarch64-ノートブック コンピューター-ホーム Windows-msvc, } - {
名前: ダーウィン-x64 , OS : macos-11 , ツールチェーン: 安定, 目標:
: macos-11x86_64-アップル-ダーウィン,} - {
名前:
ダーウィン- arm64
, OS
、
).ツールチェーン
: 安定 , 目標:aarch64-アップル-ダーウィン、
}ここで、すべてのマトリックス自己規律で次のフィールドを取得したとします:
名前: 設計図の識別 (
の形式) -- OS
: ジョブを高速化するためのマシンのファッション (つまり、ランナー)。
ツールチェーン : のファッションRustツールチェーン. 目標
: のファッション
Rust ターゲット (つまり、ターゲット トリプル). 肝心な半分後で NAME を排出することができますNPM機器のタイトルを回収します。 例として linux-x64-glibc は に対応します。 -linux-x64 .
次に、次のように、すべてのブループリント ターゲットのバイナリをブループリントできます: actions/checkout@v3 - 題名: Rep 22 シチュエーション 解放モデル シェル: bash 速度 : echo "RELEASE_VERSION=${GITHUB_REF: 11}">> $GITHUB_ENV
- 題名: )Rustツールチェーンのセットアップ はを排気します:
actions-rs/toolchain @v1 と: ツールチェーン:${{ matrix.blueprint.TOOLCHAIN }} 目標 : ${{ マトリックス.ブループリント.ターゲット }}オーバーライド : 倫理的 - 題名: 形 は
を排気します: actions-rs/cargo@v1 と: 見せる: 設計図 [ "${{ matrix.build.OS }}"="windows-2022" ] args: --liberate --locked --target ${{ matrix.blueprint.TARGET } } 排気腐った: ${{ matrix.blueprint.OS=='ubuntu-20.04' }} # Linux ビルドの場合は `rotten` を排出 その後、いずれかのプロットまたは反対の方法で NPM 機器を生成し、投稿します: - title: ノードのセットアップ
は以下を使い果たします: actions/set-node@ v3
ツールチェーン:${{ matrix.blueprint.TOOLCHAIN }} 目標 : ${{ マトリックス.ブループリント.ターゲット }}オーバーライド : 倫理的 - 題名: 形 は
オーバーライド : 倫理的 - 題名: 形 は
その後、いずれかのプロットまたは反対の方法で NPM 機器を生成し、投稿します: - title: ノードのセットアップ
は以下を使い果たします: actions/set-node@ v3 と: ノードモデル: 「16」 レジストリ URL: "https://registry.npmjs.org" )- タイトル: NPM に公開 シェル: bash 速度: | CD
npm
# トピックバイナリ タイトル 置き場="アプリ"
# 青写真マトリックスのタイトルから OS とアーキテクチャを回収します # report: ハイフンで区切ると前半がOSで2dが建築学、建築物、建築様式 node_os = $(エコー "${{ matrix.blueprint.NAME }}" | 切る -d )'-' -f1) 書き出す node_os node_arch=
$(エコー "${{ matrix.blueprint.NAME }}" |
切る -d '-' -f2)
書き出す node_arch [ "${{ matrix.build.OS }}"="windows-2022" ]
# トピックのモデル 書き出す node_version[ "${{ matrix.build.OS }}" ="windows-2022" ] ="${{ env.RELEASE_VERSION }}" # トピック 機器名 # report: 'home windows' を OS タイトルとして排出「rob32」に優先して
もしも [ "${{ matrix.build.OS }}" ="windows-2022" ]; それから 書き出す node_pkg="${bin}-ホーム ウィンドウ-${node_arch}"そうしないと 書き出す node_pkg="${bin}-${node_os}- ${node_arch}" f 私 # 機器リストの製造
mkdir -p "${node_pkg}/bin" )# テンプレートから equipment.json を生成 envsubst < package.json.tmpl >
"${node_pkg}/equipment.json " # バイナリを機器にコピー # レポート: ホーム Windows バイナリの拡張子は '.exe' です もしも [ "${{ matrix.build.OS }}" ="windows-2022" ]; それから 置き場="${bin}.exe"
fi cp "../target/${{matrix.blueprint.TARGET} }/liberate/${bin}" "${node_pkg}/bin" # 装備を投稿 CD "${node_pkg}" npm post --への入場料を獲得 公共 env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
最後のステップとして、別の 1 つのジョブで間違った機器を投稿します: post-npm-wrong
: 題名: 間違ったNPM装備を公開 nt ニーズ : post-npm-binaries [ "${{ matrix.build.OS }}"="windows-2022" ] [ "${{ matrix.build.OS }}"="windows-2022" ] 走る: ubuntu-20.04 歩数: - 題名: チェックアウト は["${node_arch}"]を排気します: actions/checkout@v3 - 題名: ノードのセットアップ は
を排気します: 行動/setup-node@v3 と:
ノードモデル
: "16" レジストリのURL: "https://registry.npmjs.org" ) - 題名: 装備公開[ "${{ matrix.build.OS }}"="windows-2022" ] シェル: bash
速度:| cd npm/アプリ fable install # では、必須の依存関係をレジストリ内で最新のものにする必要がなくなりました 寓話の青写真 npm post -- 一般公開への入場料を獲得 env :
NODE_AUTH_TOKEN
: ${{ secrets.NPM_TOKEN }}
ワークフロー ファイル全体は次のとおりです:
`cd.yml` (*クリックして展開*) 題名: 継続的展開 の上: 押す: タグ[ "${{ matrix.build.OS }}" ="windows-2022" ] : - "v*.*.*" 仕事
: post-npm-binaries : 題名: NPM 関数の公開 走る: ${{matrix.blueprint.os}} 技術: フェイルラピッド : 間違い マトリックス
:
名前: linux-x64-glibc
, ) OS: ubuntu-20.04 , ツールチェーン: 安定, 目標: x86_64-unknown-linux-gnu , } - { 名前: linux-arm64-glibc, OS : ubuntu-20.04,
ツールチェーン : 安定, 目標: aarch64-unknown-linux-gnu, } - {
名前: rob32-x64-msvc、 OS: ホーム Windows-2022 、 ツールチェーン
:安定、 目標: x86_64-ノートブック コンピューター-ホーム ウィンドウズ-msvc, } - { 名前: rob32-arm64-msvc , OS :
ホーム Windows-2022 ,
ツールチェーン : 安定, 目標: aarch64 -ノートパソコン- ホーム windows-msvc、 } - {
OS : macos-11 , ツールチェーン: 安定, 目標: x86_64-アップル-ダーウィン, } - { 名前: ダーウィン- arm64
, OS
: マックOS -11、 )ツールチェーン: 安定, 目標: aarch64 -アップルダーウィン、 } 歩数 : - 題名: チェックアウト は[ "${{ matrix.build.OS }}"="windows-2022" ]を排気します: actions/checkout@v3 - 題名: Rep 22 シチュエーション解放モデル シェル: bash 速度: echo "RELEASE_VERSION=${GITHUB_REF: 11}">> $GITHUB_ENV
- 題名: Rust ツールチェーンのセットアップ はを排出する) ):actions-rs/toolchain@v1 と: ツールチェーン: ${{ matrix.blueprint.TOOLCHAIN }} 目標: ${{ マトリックス.ブループリント.ターゲット}} 以上 rride: 倫理的 ) -
題名:
形 はを排気します : actions-rs/cargo@v1 と: 見せる: 設計図 引数: --liberate --locked --target ${{ matrix.blueprint.TARGET }} 排気腐った ):${{ matrix.blueprint.OS=='ubuntu-20.04' }} # Linux ビルドの場合は `rotten` を排出
-
題名: ノードのセットアップ
はの排気を行います: アクション/セットアップ- node@v3
と
: ノードモデル: "16" レジストリURL
: 「https://registry.npmjs.org」 -
題名: NPM に公開 シェル: bash 速度: | CD npm # バイナリ タイトルのトピック bin="アプリ" # 引き上げブループリント マトリックス タイトルの OS とアーキテクチャ # レポート: ハイフンで区切ると、前半がOS、2dがアーキテクチャ node_os=$ (echo "${{ matrix.blueprint.NAME }}" | cut -d '-' -f1)
node_os のエクスポート node_arch=$(echo " ${{ matrix.blueprint.NAME }}" | カット -d '-' -f2) エクスポート node_arch # モデルのトピック export node_version="${{ env.RELEASE_VERSION }}" # 機器名のトピック # レポート: 'rob32' に優先して OS タイトルとして 'home windows' を排出
もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから export node_pkg="${bin}-home windows-${node_arch}"
そうしないと
export node_pkg=" ${bin}-${node_os}-${node_arch}" ファイ
# 機器リストの製造 mkdir - p "${node_pkg}/bin" # テンプレートから equipment.json を生成 envsubst "${node_pkg}/equipment.json" # バイナリを機器にコピーします # 報告: 自宅 wi Windows バイナリの拡張子は「.exe」です もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから bin="${bin}.exe" フィ
cp "../target/${{ 行列.blueprint.TARGET }}/liberate/${bin}" "${node_pkg}/bin" # 装備を投稿する cd "${node_pkg} " npm post -- 一般公開への入場料を獲得 env : NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} post-npm-wrong
: ) 題名: 間違った NPM 機器を公開します ニーズ: post-npm-binaries 走る: ubuntu-20.04 ) 歩数: -題名 : チェックアウト はを排出します) : )actions/checkout@v3 - 題名 : ノードのセットアップ はを排出する) :actions/setup-node@v3と : ノードモデル: 「16」[ "${{ matrix.build.OS }}"="windows-2022" ]
レジストリのURL: )"https://registry.npmjs.org" ) -
題名 : 装備公開
シェル: )bash 速度:| cd npm/アプリ fable install # では、必須の依存関係をレジストリ内で最新のものにする必要がなくなりました 寓話の青写真 npm post -- 一般公開への入場料を獲得 env :
NODE_AUTH_TOKEN
: ${{ secrets.NPM_TOKEN }}
< package.json.tmpl >
"${node_pkg}/equipment.json " # バイナリを機器にコピー # レポート: ホーム Windows バイナリの拡張子は '.exe' です もしも [ "${{ matrix.build.OS }}" ="windows-2022" ]; それから 置き場="${bin}.exe" # 装備を投稿 CD "${node_pkg}" npm post --への入場料を獲得 公共 env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
最後のステップとして、別の 1 つのジョブで間違った機器を投稿します: post-npm-wrong
: 題名: 間違ったNPM装備を公開 nt ニーズ : post-npm-binaries [ "${{ matrix.build.OS }}"="windows-2022" ] [ "${{ matrix.build.OS }}"="windows-2022" ] 走る: ubuntu-20.04 歩数: - 題名: チェックアウト は["${node_arch}"]を排気します: actions/checkout@v3 - 題名: ノードのセットアップ は
を排気します: 行動/setup-node@v3 と:
ノードモデル
: "16" レジストリのURL: "https://registry.npmjs.org" ) - 題名: 装備公開[ "${{ matrix.build.OS }}"="windows-2022" ] シェル: bash
速度:| cd npm/アプリ fable install # では、必須の依存関係をレジストリ内で最新のものにする必要がなくなりました 寓話の青写真 npm post -- 一般公開への入場料を獲得 env :
NODE_AUTH_TOKEN
: ${{ secrets.NPM_TOKEN }}
"v*.*.*"仕事
: post-npm-binaries : 題名: NPM 関数の公開 走る:
${{matrix.blueprint.os}} 技術:
フェイルラピッド :
間違い マトリックス
:
名前: linux-x64-glibc
, ) OS: ubuntu-20.04 , ツールチェーン: 安定, 目標: x86_64-unknown-linux-gnu , } - { 名前: linux-arm64-glibc, OS : ubuntu-20.04,
ツールチェーン : 安定, 目標: aarch64-unknown-linux-gnu, } - {
名前: rob32-x64-msvc、 OS: ホーム Windows-2022 、 ツールチェーン
:安定、 目標: x86_64-ノートブック コンピューター-ホーム ウィンドウズ-msvc, } - { 名前: rob32-arm64-msvc , OS :
ホーム Windows-2022 ,
ツールチェーン : 安定, 目標: aarch64 -ノートパソコン- ホーム windows-msvc、 } - {
OS : macos-11 , ツールチェーン: 安定, 目標: x86_64-アップル-ダーウィン, } - { 名前: ダーウィン- arm64
, OS
: マックOS -11、 )ツールチェーン: 安定, 目標: aarch64 -アップルダーウィン、 } 歩数 : - 題名: チェックアウト は[ "${{ matrix.build.OS }}"="windows-2022" ]を排気します: actions/checkout@v3 - 題名: Rep 22 シチュエーション解放モデル シェル: bash 速度: echo "RELEASE_VERSION=${GITHUB_REF: 11}">> $GITHUB_ENV
- 題名: Rust ツールチェーンのセットアップ はを排出する) ):actions-rs/toolchain@v1 と: ツールチェーン: ${{ matrix.blueprint.TOOLCHAIN }} 目標: ${{ マトリックス.ブループリント.ターゲット}} 以上 rride: 倫理的 ) -
題名:
形 はを排気します : actions-rs/cargo@v1 と: 見せる: 設計図 引数: --liberate --locked --target ${{ matrix.blueprint.TARGET }} 排気腐った ):${{ matrix.blueprint.OS=='ubuntu-20.04' }} # Linux ビルドの場合は `rotten` を排出
-
題名: ノードのセットアップ
はの排気を行います: アクション/セットアップ- node@v3
と
: ノードモデル: "16" レジストリURL
: 「https://registry.npmjs.org」 -
題名: NPM に公開 シェル: bash 速度: | CD npm # バイナリ タイトルのトピック bin="アプリ" # 引き上げブループリント マトリックス タイトルの OS とアーキテクチャ # レポート: ハイフンで区切ると、前半がOS、2dがアーキテクチャ node_os=$ (echo "${{ matrix.blueprint.NAME }}" | cut -d '-' -f1)
node_os のエクスポート node_arch=$(echo " ${{ matrix.blueprint.NAME }}" | カット -d '-' -f2) エクスポート node_arch # モデルのトピック export node_version="${{ env.RELEASE_VERSION }}" # 機器名のトピック # レポート: 'rob32' に優先して OS タイトルとして 'home windows' を排出
もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから export node_pkg="${bin}-home windows-${node_arch}"
そうしないと
export node_pkg=" ${bin}-${node_os}-${node_arch}" ファイ
# 機器リストの製造 mkdir - p "${node_pkg}/bin" # テンプレートから equipment.json を生成 envsubst "${node_pkg}/equipment.json" # バイナリを機器にコピーします # 報告: 自宅 wi Windows バイナリの拡張子は「.exe」です もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから bin="${bin}.exe" フィ
cp "../target/${{ 行列.blueprint.TARGET }}/liberate/${bin}" "${node_pkg}/bin" # 装備を投稿する cd "${node_pkg} " npm post -- 一般公開への入場料を獲得 env : NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} post-npm-wrong
: ) 題名: 間違った NPM 機器を公開します ニーズ: post-npm-binaries 走る: ubuntu-20.04 ) 歩数: -題名 : チェックアウト はを排出します) : )actions/checkout@v3 - 題名 : ノードのセットアップ はを排出する) :actions/setup-node@v3と : ノードモデル: 「16」[ "${{ matrix.build.OS }}"="windows-2022" ]
レジストリのURL: )"https://registry.npmjs.org" ) -
題名 : 装備公開
シェル: )bash 速度:| cd npm/アプリ fable install # では、必須の依存関係をレジストリ内で最新のものにする必要がなくなりました 寓話の青写真 npm post -- 一般公開への入場料を獲得 env :
NODE_AUTH_TOKEN
: ${{ secrets.NPM_TOKEN }}
ツールチェーン: 安定, 目標: x86_64-unknown-linux-gnu , } - { 名前: linux-arm64-glibc, OS : ubuntu-20.04,
ツールチェーン : 安定, 目標: aarch64-unknown-linux-gnu, } - {
名前: rob32-x64-msvc、 OS: ホーム Windows-2022 、 ツールチェーン
:安定、 目標: x86_64-ノートブック コンピューター-ホーム ウィンドウズ-msvc, } - { 名前: rob32-arm64-msvc , OS :
ホーム Windows-2022 ,
ツールチェーン : 安定, 目標: aarch64 -ノートパソコン- ホーム windows-msvc、 } - {
OS : macos-11 , ツールチェーン: 安定, 目標: x86_64-アップル-ダーウィン, } - { 名前: ダーウィン- arm64
, OS
: マックOS -11、 )ツールチェーン: 安定, 目標: aarch64 -アップルダーウィン、 } 歩数 : - 題名: チェックアウト は[ "${{ matrix.build.OS }}"="windows-2022" ]を排気します: actions/checkout@v3 - 題名: Rep 22 シチュエーション解放モデル シェル: bash 速度: echo "RELEASE_VERSION=${GITHUB_REF: 11}">> $GITHUB_ENV
- 題名: Rust ツールチェーンのセットアップ はを排出する) ):actions-rs/toolchain@v1 と: ツールチェーン: ${{ matrix.blueprint.TOOLCHAIN }} 目標: ${{ マトリックス.ブループリント.ターゲット}} 以上 rride: 倫理的 ) -
題名:
形 はを排気します : actions-rs/cargo@v1 と: 見せる: 設計図 引数: --liberate --locked --target ${{ matrix.blueprint.TARGET }} 排気腐った ):${{ matrix.blueprint.OS=='ubuntu-20.04' }} # Linux ビルドの場合は `rotten` を排出
-
題名: ノードのセットアップ
はの排気を行います: アクション/セットアップ- node@v3
と
: ノードモデル: "16" レジストリURL
: 「https://registry.npmjs.org」 -
題名: NPM に公開 シェル: bash 速度: | CD npm # バイナリ タイトルのトピック bin="アプリ" # 引き上げブループリント マトリックス タイトルの OS とアーキテクチャ # レポート: ハイフンで区切ると、前半がOS、2dがアーキテクチャ node_os=$ (echo "${{ matrix.blueprint.NAME }}" | cut -d '-' -f1)
node_os のエクスポート node_arch=$(echo " ${{ matrix.blueprint.NAME }}" | カット -d '-' -f2) エクスポート node_arch # モデルのトピック export node_version="${{ env.RELEASE_VERSION }}" # 機器名のトピック # レポート: 'rob32' に優先して OS タイトルとして 'home windows' を排出
もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから export node_pkg="${bin}-home windows-${node_arch}"
そうしないと
export node_pkg=" ${bin}-${node_os}-${node_arch}" ファイ
# 機器リストの製造 mkdir - p "${node_pkg}/bin" # テンプレートから equipment.json を生成 envsubst "${node_pkg}/equipment.json" # バイナリを機器にコピーします # 報告: 自宅 wi Windows バイナリの拡張子は「.exe」です もしも [ "${{ matrix.build.OS }}"="windows-2022" ]; それから bin="${bin}.exe" フィ
cp "../target/${{ 行列.blueprint.TARGET }}/liberate/${bin}" "${node_pkg}/bin" # 装備を投稿する cd "${node_pkg} " npm post -- 一般公開への入場料を獲得 env : NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} post-npm-wrong
: ) 題名: 間違った NPM 機器を公開します ニーズ: post-npm-binaries 走る: ubuntu-20.04 ) 歩数: -題名 : チェックアウト はを排出します) : )actions/checkout@v3 - 題名 : ノードのセットアップ はを排出する) :actions/setup-node@v3と : ノードモデル: 「16」[ "${{ matrix.build.OS }}"="windows-2022" ]
レジストリのURL: )"https://registry.npmjs.org" ) -
題名 : 装備公開
シェル: )bash 速度:| cd npm/アプリ fable install # では、必須の依存関係をレジストリ内で最新のものにする必要がなくなりました 寓話の青写真 npm post -- 一般公開への入場料を獲得 env :
NODE_AUTH_TOKEN
: ${{ secrets.NPM_TOKEN }}
なぜ排気
app-rob32-x64 に優先?
GitHub Actions ワークフロー ファイルをたまたま読んだことがあると思いますが、app-home windows-x64
の排気もapp-rob32-x64
である可能性がありますブループリント マトリックスには既に rob32-x64-msvc という名前を付けているため、より簡単です。 . そのスワップの理由は、NPM レジストリ自体です:
npm ERR! 403 403 禁止 – PUT https://registry.npmjs.org/app-rob32-x64 – バンドル タイトルが未承諾メールの検出をトリガーしました。 間違っていると判断した場合は、https://npmjs.com/improve まで改善にご連絡ください。 まるで、NPM は機器名の数字を好まず、未承諾メールとして認識しているように聞こえます。 疲れるように聞こえるかもしれませんが、倫理的である必要があります。 サイバー Web 上の他の私たちも、このミッションでさらに被害を受けました:
つまらないnpm 😡 チップのタイトルはpcf8575ですが、どのタイトルを平和に使いこなせるでしょうか?ランダムなNPMの犠牲者 結論 このマニュアルが、NPM での Rust イニシアチブを実行するのが大好きなクレイジーなものを設計しなければならない私たちにとって貴重なものになることを願っています! 完全なコードは、このリポジトリで学習できます: https://github.com/orhun/packaging-rust-for-npmまたは、私は改善に手を差し伸べ、実際に彼らは私が を投稿するのを助けました) rob32
装備 [ "${{ matrix.build.OS }}"="windows-2022" ] Hiya Orhun、 あなたが抱えていた問題について聞いてすみません 私たちは現在、いくつかのブロックの関係を開始しています機器名に付けました。 私たちの希望は、これが私たちが経験しているすべてのセキュリティと迷惑メールの懸念に役立つ可能性があることです. 改善するにつれて、私たちはブロックを超えて切り替えるためにジャムになっています。 git-cliff-rob32-x64 を公開しました および git-cliff-rob32-arm64 機能と転送された書き込みは、あなたの またはフン に機能へのアクセス権を獲得します ユーザー神話しかし、home windowsという名前を正直に保持する方が良いでしょう 未承諾メール保護メカニズムに対処する必要がないため 結果 Rust ミッションに NPM 関数を公開した後、使い果たしたい npx ソフトウェア プログラムを挿入/高速化します。 例として:
$ npx git-cliff@most modern )次の機能を入れたい: git-クリフ@1.1.2 続行します?
(はい) はいの代わりにnpx、排出したい ダム これは Rust で書かれたより早い違いです:$ dum install git-cliff $ ダムスピード git-cliff
乾杯!
𝚆𝚊𝚝𝚌𝚑 𝙽𝙾𝚆 📺