npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, πŸ‘‹, I’m Ryan HefnerΒ  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you πŸ™

Β© 2026 – Pkg Stats / Ryan Hefner

@mirta/cli

v0.4.11

Published

πŸ› οΈ Mirta Framework - the CLI

Readme

@mirta/cli

en ru NPM Version NPM Downloads

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ 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.1
pnpm mirta release minor
# 0.1.0
pnpm mirta release major
# 1.0.0
pnpm mirta release prepatch --preid alpha
# 0.0.1-alpha.0
pnpm mirta release preminor --preid alpha
# 0.1.0-alpha.0
pnpm mirta release premajor --preid alpha
# 1.0.0-alpha.0

Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ прСвСрсии

pnpm mirta release prerelease --preid alpha
# 0.0.1-alpha.1

pnpm mirta publish

ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² NPM, пропуская private: true.

⚠️ ΠžΠ±Ρ‹Ρ‡Π½ΠΎ запускаСтся Π² CI послС git push Ρ‚Π΅Π³Π° vX.X.X.

Π’Π΅Π³ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ опрСдСляСтся автоматичСски:

  • alpha β†’ --tag alpha
  • beta β†’ --tag beta
  • rc β†’ --tag rc

Π’ 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_ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, спСцифичныС для CLI
  • MIRTA_ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для использования Π² любом контСкстС Mirta
  • NODE_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 β€” ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ дСплоя.