@mirta/cli
v0.4.11
Published
π οΈ Mirta Framework - the CLI
Readme
@mirta/cli
Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ CLI-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ Π² ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
@mirta/cli β ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ:
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ,
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ
CHANGELOG(Π΅ΡΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½), - ΠΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π² NPM Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ
--provenanceΠ² CI, - Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ Wiren Board ΡΠ΅ΡΠ΅Π·
rsync.
Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π»ΡΠ±ΡΡ
ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
pnpm ΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΠ΅Π΄Π΅ Duktape Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ Wiren Board.
π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
pnpm add -wD @mirta/cliβ
ΠΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Mirta, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π»ΡΠ±ΡΡ
pnpm-ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ
Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΌ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
π ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ΅Π»ΠΈΠ·:
pnpm mirta releaseΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ β Π²Π΅ΡΡΠΈΠΈ ΠΎΠ±Π½ΠΎΠ²ΡΡΡΡ.
ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ (Π² CI ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ):
pnpm mirta publishΠΡΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΎΡΠΏΡΠ°Π²ΡΡΡΡ Π² NPM.
Π Π°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅:
pnpm mirta deployΠ‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΠΏΡΠΎΡΠΈΠ»Ρ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β default).
π§° ΠΠΎΠΌΠ°Π½Π΄Ρ
mirta [options]
ΠΡΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄:
--help(-h) β ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ.--version(-v) β Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²Π΅ΡΡΠΈΡ@mirta/cli.--locale <loc>β Π·Π°Π΄Π°ΡΡ ΡΠ·ΡΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (en,ru).--debugβ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π»ΠΎΠ³ΠΎΠ².
pnpm mirta release
ΠΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅Π»ΠΈΠ·: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΡΠΈΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΈΠΏ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (patch, minor, major, pre*) ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ Ρ ΠΏΠΎΠ»Π΅ΠΌ version.
ΠΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ Π½Π° ΡΡΠ°ΠΏΡ:
ΠΡΠ°ΠΏ 1: ΠΡΠΎΠ²Π΅ΡΠΊΠ° git-ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ git)
- Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ
origin. - Π£ΡΠΏΠ΅ΡΠ½ΠΎΡΡΡ CI (ΠΏΠΎ workflow
build).
ΠΡΠ°ΠΏ 2: ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
- ΠΠ»Ρ ΠΏΡΡΠ΅ΠΉ ΠΈΠ·
mirta.config.json#project.templates, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρpackage.json. - ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ (
dependencies,devDependencies) ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π΄ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ.
ΠΡΠ°ΠΏ 3: ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ CHANGELOG
- ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ
pnpm run changelog, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠΊΡΠΈΠΏΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠ°ΠΏ 4: Π€ΠΈΠΊΡΠ°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
- ΠΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ GitHub ΠΏΠΎ
sshΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈ ΡΠ΅Π³:git commit -m "release: vX.X.X" git tag vX.X.X - ΠΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΏΠΎ
httpsΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΡΠ°ΡΡΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΄Π»Ρ ΡΡΡΠ½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΎΠΏΡΠΈΠΈ
--dry-run β ΡΠΈΠΌΡΠ»ΡΡΠΈΡ Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
--preid <id> β ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΏΡΠ΅Π²Π΅ΡΡΠΈΠΈ (alpha.0, beta.1).
--skip-prompts β ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ.
--skip-git β Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈ ΡΠ΅Π³.
Π§Π°ΡΡΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈ ΡΠ΅Π»ΠΈΠ·Π΅. ΠΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ:
- ΠΠ°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ (
@mirta/[email protected]ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ@mirta/[email protected]), - ΠΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ ΡΠ΅Π»ΠΈΠ·Π°,
- Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
π‘ ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ workspace:* Π²ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈ ΡΠ΅Π»ΠΈΠ·Π΅.
Π€ΠΎΡΠΌΠ°Ρ major.minor.patch:
majorβ breaking changes,minorβ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π΅Π· Π½Π°ΡΡΡΠ΅Π½ΠΈΡ,patchβ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΠ΅ΡΡΠΈΠΈ Π΄ΠΎ 1.0.0 (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 0.4.0) ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌΠΈ:
Π»ΡΠ±ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ breaking changes.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π½Π° ΡΠ°ΠΉΡΠ΅ semver.org
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² dev-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ package.json ΠΏΠ°ΠΊΠ΅Ρ conventional-changelog-cli ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ:
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
}
}Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ². Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ:
- ΠΠ»ΠΈΠ½Π° β€ 50 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²,
- ΠΡΠ΅ΡΠΈΠΊΡΡ:
fix:,feat:,docs:,chore:ΠΈ Π΄Ρ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅: Commit Convention
Π Π°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΡΠΎΠ²Π½ΠΎ ΡΡ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
pnpm mirta release 1.2.3β οΈ ΠΠ΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ β NPM ΡΡΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ.
pnpm mirta release patch
# 0.0.1pnpm mirta release minor
# 0.1.0pnpm mirta release major
# 1.0.0pnpm mirta release prepatch --preid alpha
# 0.0.1-alpha.0pnpm mirta release preminor --preid alpha
# 0.1.0-alpha.0pnpm mirta release premajor --preid alpha
# 1.0.0-alpha.0ΠΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π²Π΅ΡΡΠΈΠΈ
pnpm mirta release prerelease --preid alpha
# 0.0.1-alpha.1pnpm mirta publish
ΠΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π² NPM, ΠΏΡΠΎΠΏΡΡΠΊΠ°Ρ private: true.
β οΈ ΠΠ±ΡΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² CI ΠΏΠΎΡΠ»Π΅ git push ΡΠ΅Π³Π° vX.X.X.
Π’Π΅Π³ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ:
alphaβ--tagalphabetaβ--tagbetarcβ--tagrc
Π CI Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ --provenance Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΎΠΏΡΠΈΠΈ
--dry-runβ ΡΠΈΠΌΡΠ»ΡΡΠΈΡ.--skip-buildβ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρpnpm run build.--skip-gitβ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ git-ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (Π°Π½Π°Π»ΠΎΠ³--no-git-checksΠ²pnpm publish).
pnpm mirta deploy
Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ Wiren Board ΡΠ΅ΡΠ΅Π· rsync ΠΏΠΎ SSH.
- Π’ΡΠ°Π½ΡΠΏΠΎΡΡ:
rsync -rtzgO(ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ, ΡΠΆΠ°ΡΠΈΠ΅, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π³ΡΡΠΏΠΏΡ, Π±Π΅Π· Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ ). - ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° WSL2: Π½Π° Windows ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ WSL.
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ:
- Π§Π΅ΡΠ΅Π· ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ
ssh-agent. - ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° PKCS#11 (Rutoken) ΠΈ SSH-ΠΊΠ»ΡΡΠ΅ΠΉ (Ρ ΠΏΠ°ΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠ°Π·ΠΎΠΉ ΠΈΠ»ΠΈ Π±Π΅Π· Π½Π΅Ρ).
ttlβ Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ°ΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠ°Π·Ρ/PIN Π² ssh-agent (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,1h).- ΠΠ°ΡΠΎΠ»ΡΠ½Π°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ssh-agent ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ TTL.
- Π§Π΅ΡΠ΅Π· ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ
- Π Π΅ΠΆΠΈΠΌ
--dry-run: ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. - Π‘ΠΈΠΌΠ»ΠΈΠ½ΠΊΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΎΠΏΡΠΈΠΈ
--config,-c <path>β ΠΏΡΡΡ ΠΊmirta.config.json.--profile,-p <name>β ΠΏΡΠΎΡΠΈΠ»Ρ Π΄Π΅ΠΏΠ»ΠΎΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:default).--to <conn>β ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.--dry-runβ ΡΠΈΠΌΡΠ»ΡΡΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.--insecureβ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ --to ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ:
- ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
mirta.config.json, - Π‘ΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
ssh://.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅ΠΊΡΠ΅ΡΡ
ΠΠ»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ°ΠΉΠ» .env.local (ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ git):
# .env.local
SSH_KEY=~/.ssh/id_ed25519
# ΠΠΎΡΡΡΠΏΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
WB_CONN_OPTIONS=`key=${SSH_KEY};ttl=1h30m`
WB_CONN_WORK=`ssh://[email protected];${WB_CONN_OPTIONS}`ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΡ:
WB_β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ CLIMIRTA_β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ MirtaNODE_ENVβ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
Π€ΠΎΡΠΌΠ°Ρ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ssh://[user@]host[:port][;param1=value1;param2=value2...]ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
|----------|---------|---------|
| pkcs11 | ΠΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ PKCS#11 (Rutoken) | pkcs11=/usr/lib/librtpkcs11ecp.so |
| key | ΠΡΡΡ ΠΊ SSH-ΠΊΠ»ΡΡΡ (ED25519, RSA) | key=~/.ssh/id_ed25519 |
| ttl | ΠΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ»ΡΡΠ° Π² ssh-agent | ttl=1h |
| wsl | ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² WSL2 Π΄Π»Ρ Windows | wsl=Debian |
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
pkcs11ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π°Π΄key, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΡ:
# SSH-ΠΊΠ»ΡΡ ED25519
ssh://[email protected];key=~/.ssh/id_ed25519;ttl=30m
# PKCS#11 ΡΠΎΠΊΠ΅Π½ (Rutoken) Ρ WSL2 Π½Π° Windows
ssh://[email protected];pkcs11=/usr/lib/librtpkcs11ecp.so;wsl=Ubuntu-22.04
# Π‘ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
ssh://deploy@${WB_HOST};key=${MIRTA_SSH_KEY}ΠΡΠ»ΠΈ ssh-agent Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ agent refused operation:
- ΠΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ PKCS#11 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ β ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠΈ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ
- ΠΡΠ΅Π²ΡΡΠ΅Π½ΠΎ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ Π²Π²ΠΎΠ΄Π° PIN-ΠΊΠΎΠ΄Π°, ΡΠΎΠΊΠ΅Π½ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½
ΠΡΠΈΠΌΠ΅Ρ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ mirta.config.json
{
// Π‘ΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌ
"connections": {
// ΠΠ΅Π· ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
"work": "${WB_CONN_WORK}",
// Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΠΊΡΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ
"home": "ssh://[email protected];${WB_CONN_OPTIONS};wsl=Ubuntu",
},
"deploy": {
// ΠΠ°Π±ΠΎΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
"mappings": {
"wb-rules-es5": [
{
// ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ° (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°)
"from": "dist/es5/wb-rules-rules",
// Π¦Π΅Π»Π΅Π²Π°Ρ ΠΏΠ°ΠΏΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅
"to": "/mnt/data/etc/wb-rules-rules",
// ΠΡΡΠΏΠΏΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
"toGroup": "developers",
// Π£Π΄Π°Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ Π² ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Π΅ΡΠ»ΠΈ ΠΈΡ
Π½Π΅Ρ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ
"cleanup": true,
// Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π°Π»ΡΡΡ ΠΏΡΠΈ cleanup: true
"protect": ["alarms.conf"]
},
// {
// Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ...
// }
]
},
// ΠΠ°ΡΠ°Π½Π΅Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ
"profiles": {
"default": {
// ΠΠ°ΡΡΠΈΠ² ΠΈΠΌΡΠ½ Π½Π°Π±ΠΎΡΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ» ΡΠ΅ΠΊΡΠΈΠΈ deploy.mappings
"mappings": ["wb-rules-es5"],
// ΠΠΌΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
"connection": "work",
// ΠΡΡΠΏΠΏΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
"toGroup": "developers"
}
}
}
}β Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ Π²ΡΡΡΠ½ΡΡ ΠΈ Π² CI:
- ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π»ΠΈΠ·.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ (ΠΎΡΠΊΠ°Ρ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΈ ΡΠ±ΠΎΠ΅).
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° git-ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ CI.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
--dry-run.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ:
- ΠΠ΅ΠΏΠ»ΠΎΠΉ Ρ
Rutoken, Π΄Π΅ΠΏΠ»ΠΎΠΉ Ρ ΠΊΠ»ΡΡΠΎΠΌED25519Π² WSL2 ΠΏΠΎΠ΄ Windows ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π² Linux Debian (Trixie).
β οΈ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Node.js (Π½Π΅ Π² Duktape).
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΈ ΡΠ΅Π³Π° β ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ssh-ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ GitHub.
WSL2 ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π΅ΠΏΠ»ΠΎΡ ΠΏΠΎΠ΄ Windows.
π ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Mirta
Π€Π°ΠΉΠ» mirta.config.json Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ @mirta/cli.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠΎΠ»Ρ:
project.templatesβ ΠΏΡΡΠΈ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρcreate-mirta).connectionsβ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.deploy.mappingsβ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.deploy.profilesβ ΠΏΡΠΎΡΠΈΠ»ΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ.
