Установка
Если пользуешься только GitHub Action, ставить ничего не надо: Action сам скачивает и кэширует бинарь.
Homebrew
Заголовок раздела «Homebrew»brew install jtprogru/tap/notiflowПокрывает macOS на Apple silicon и Intel, Linux на x86_64 и arm64. Автодополнения шелла ставятся вместе с формулой.
crates.io
Заголовок раздела «crates.io»cargo install notiflowСобирает из исходников, поэтому работает на любой платформе, которую поддерживает Rust — включая те, которых нет в релизной матрице. Нужен Rust 1.85 или новее.
Установка одной строкой
Заголовок раздела «Установка одной строкой»curl -fsSL https://raw.githubusercontent.com/jtprogru/notiflow/main/scripts/install.sh | shСкрипт определяет платформу, резолвит последний релиз, сверяет архив с checksums.txt из
того же релиза и ставит в /usr/local/bin. На системе без glibc сам выбирает статическую
сборку musl.
curl -fsSL .../install.sh | sh -s -- --version v2.0.1 --bin-dir ~/.local/binСкачать скрипт из интернета прямо в шелл — ровно столько доверия, сколько это и звучит. Прочитай его сначала или возьми другой канал.
Релизный архив
Заголовок раздела «Релизный архив»Каждый релиз публикует статический бинарь на платформу плюс checksums.txt и cosign-бандл
на каждый архив.
VERSION=v2.0.1TARGET=aarch64-apple-darwin # таблица нижеBASE="https://github.com/jtprogru/notiflow/releases/download/${VERSION}"
curl -fsSLO "${BASE}/notiflow-${TARGET}.tar.gz"curl -fsSLO "${BASE}/checksums.txt"grep " notiflow-${TARGET}.tar.gz$" checksums.txt | shasum -a 256 -c -
tar -xzf "notiflow-${TARGET}.tar.gz"sudo install -m 0755 notiflow /usr/local/bin/notiflow| Платформа | Target |
|---|---|
| Linux x86_64 (glibc) | x86_64-unknown-linux-gnu |
| Linux arm64 (glibc) | aarch64-unknown-linux-gnu |
| Linux x86_64 (статика) | x86_64-unknown-linux-musl |
| Linux arm64 (статика) | aarch64-unknown-linux-musl |
| macOS Apple silicon | aarch64-apple-darwin |
| macOS Intel | x86_64-apple-darwin |
| Windows x86_64 | x86_64-pc-windows-msvc |
Сборки musl полностью статические — то, что нужно внутри контейнера на alpine или
scratch.
Проверка подписи
Заголовок раздела «Проверка подписи»Контрольная сумма лежит там же, где архив, поэтому сама по себе она доказывает только целостность закачки. Чтобы доказать, что архив собран релизным workflow:
cosign verify-blob "notiflow-${TARGET}.tar.gz" \ --bundle "notiflow-${TARGET}.tar.gz.bundle" \ --certificate-identity-regexp '^https://github.com/jtprogru/notiflow/\.github/workflows/release\.yml@refs/tags/' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'На релизы также выпускаются build provenance attestations:
gh attestation verify "notiflow-${TARGET}.tar.gz" --repo jtprogru/notiflowРелизы начиная с v2.0.0 дополнительно несут отсоединённые GPG-подписи (файлы .asc
рядом с артефактами), сделанные ключом мейнтейнера:
pub ed25519 2025-04-14 [SC] [годен до: 2035-04-12] 6FE5 73A7 0EEF 276F CAB6 9C64 13B9 59D0 0CED AC9Duid Mikhail Savin (jtprogru) <jtprogru@gmail.com>Импортируйте ключ и проверьте подпись:
curl -fsSL https://jtprogru.github.io/notiflow/notiflow-signing-key.asc | gpg --importcurl -fsSLO "${BASE}/notiflow-${TARGET}.tar.gz.asc"gpg --verify "notiflow-${TARGET}.tar.gz.asc" "notiflow-${TARGET}.tar.gz"Тот же ключ лежит на keys.openpgp.org — эту копию стоит предпочесть, её раздаёт не
проект:
gpg --keyserver hkps://keys.openpgp.org --recv-keys 6FE573A70EEF276FCAB69C6413B959D00CEDAC9DВ любом случае сверьте отпечаток с приведённым выше. Ключ, скачанный тем же каналом, что и подписанный им файл, — это удобство, а не доказательство: доказательством служит отпечаток, сверенный с копией из другого источника.
Пре-релизы 2.0.0-alpha.1 и 2.0.0-alpha.2 старше ключа, .asc у них нет. cosign и
attestation есть у всех релизов, включая эти два.
Автодополнения
Заголовок раздела «Автодополнения»notiflow completions bash > /etc/bash_completion.d/notiflownotiflow completions zsh > "${fpath[1]}/_notiflow"notiflow completions fish > ~/.config/fish/completions/notiflow.fishpowershell и elvish тоже поддерживаются.
Внутри Action
Заголовок раздела «Внутри Action»Action резолвит версию, скачивает нужный архив, проверяет sha256 и кладёт в tool cache раннера. Чтобы дополнительно требовать проверку подписи cosign, поставь cosign раньше и включи вход:
- uses: sigstore/cosign-installer@v3- uses: jtprogru/notiflow@v2 with: verify_signature: true # ...Какую версию ставит Action
Заголовок раздела «Какую версию ставит Action»По приоритету:
- вход
version, если задан; - файл
VERSIONв дереве Action — штампуется при релизе, поэтому@v2,@v2.1.0и@<sha>дают детерминированный результат; GITHUB_ACTION_REF, если это semver-тег;- последний релиз через сеть, с предупреждением.
Только последний вариант может дать разный ответ двум запускам одного и того же запиненного workflow — поэтому он и предупреждает.