Short version: open a PR. The release pipeline is fully automated; if your PR title is in Conventional Commits format, it ships within a minute of merge.
git clone https://github.com/flamerged/sshshot.git
cd sshshot
corepack enable # activates the pinned Yarn 4
yarn install # generates yarn.lock + node_modules
yarn build # tsc → dist/
yarn typecheck # tsc --noEmit (fast, no output)
yarn test # vitest
yarn lint # eslint (type-aware rules — slow first time)
yarn format # prettier --writeNode ≥ 20 is the runtime requirement; the project pins Node 24 for development (.nvmrc) so yarn and npm versions match what CI ships releases with.
- Branch names:
<type>/<short-desc>where<type>is one offeat,fix,chore,docs,refactor,perf,test,ci,build,style,revert. Husky'spre-pushrejects anything else. - PR title: same prefix, e.g.
feat: add Xorfix: handle Y. The PR-title lint workflow validates this on every PR. - Squash-merge only: the PR title becomes the commit message on
master. semantic-release reads that to decide the version bump:fix:/perf:→ patch release (0.7.0 → 0.7.1)feat:→ minor release (0.7.0 → 0.8.0)chore:/docs:/refactor:/test:/ci:/build:/style:/revert:→ no release- Major bumps are explicitly not auto-released — tag manually when ready.
- Signed commits:
masterrequires GPG/SSH-signed commits. Setgit config commit.gpgsign trueand configure a signing key locally before your first commit.
Tests live under test/ and run against the source files. Add coverage when:
- You change a regex / parser (see
test/monitor-helpers.test.tsandtest/config.test.tsfor patterns) - You add a pure helper (export it and write a test)
- You fix a bug (add a regression test in the same PR)
Most of monitor.ts is OS-specific shell-outs that aren't unit-testable in CI — those changes land with manual smoke notes in the PR description ("tested on macOS Cmd+Shift+4 → ...").
Don't open a public Issue. See SECURITY.md for the disclosure path.
MIT. By submitting a PR you agree your contribution is licensed under the same.