Automated summary
Automates the release process for MobiSSH: version bumping across all touchpoints, changelog generation, validation, tagging, and GitHub release creation.
Strengths
- Synchronizes all version touchpoints
- Thorough validation (TypeScript, ESLint, Semgrep, unit and E2E tests) before tagging
- Structured changelog generation from commit history
- Automatically closes related issues
Limitations
- MobiSSH-specific, not a generic release skill
- Requires repository to follow commit prefix conventions
- CI validation may fail and block the process
When you need to cut an official release of MobiSSH with consistent versioning and a GitHub release.
For minor changes that do not require an official tag (e.g., a simple commit to main).
Security analysis
SafeThe skill describes a standard release process using local development tools (git, npm, gh, custom scripts) without any risky operations like downloading and executing remote scripts, exfiltrating secrets, or disabling safety features. All commands are typical for a CI/CD release workflow and run locally under the user's control.
No concerns found
How this analysis is madeExamples
releasetag a releaseCut a minor releasename: release description: Use when the user says "release", "tag a release", "cut a release", "bump version", "ship it", "publish", or "/release". Handles version bumping, changelog generation, validation, tagging, and GitHub release creation.
Release
Process reference:
.claude/process.mddefines the label taxonomy, workflow states, and conventions that this skill must follow.
Automated release process for MobiSSH. Handles version bumping across all touchpoints, changelog generation from git history, full validation, and tagging.
Version Touchpoints
Every release must update ALL of these in sync:
| File | Field | Example |
|------|-------|---------|
| server/package.json | "version" | "0.3.0" |
| public/sw.js | CACHE_NAME | 'mobissh-v17' |
The server reads version from server/package.json at startup and injects it as <meta name="app-version" content="{version}:{git-hash}">. The SW cache name must be bumped to invalidate old cached shells on client devices.
Root package.json has no version field (private workspace). Don't add one.
Step 1: Determine Next Version
# Latest tag and commits since
git describe --tags --abbrev=0
git log $(git describe --tags --abbrev=0)..HEAD --oneline | wc -l
git log $(git describe --tags --abbrev=0)..HEAD --oneline
Version bump rules (semver):
- Patch (0.2.x → 0.2.1): Only bug fixes, no new features, no breaking changes
- Minor (0.2.0 → 0.3.0): New features, new test infrastructure, refactors, new skills. No breaking API/protocol changes.
- Major (0.x → 1.0): Breaking changes to WS protocol, vault format, or deployment model
For MobiSSH's current maturity (pre-1.0), minor bumps are the norm. 85 commits with features = minor.
Step 2: Generate Changelog
Group commits since last tag by category. Parse commit prefixes:
| Prefix | Category |
|--------|----------|
| feat:, feat( | Features |
| fix:, fix( | Bug Fixes |
| refactor: | Refactoring |
| test: | Testing |
| chore:, build:, docs: | Maintenance |
| security: | Security |
| Merge pull request | Skip (noise) |
Format as a concise changelog section. Include issue numbers where present. Don't list every commit — group related work (e.g., "TypeScript migration Phases 0-5" not 10 separate phase commits).
Step 3: Validate
Run the full CI gate before tagging. ALL must pass:
npx tsc --noEmit # TypeScript typecheck
npx eslint src/ public/ server/ tests/ # ESLint
semgrep --config .semgrep/rules.yml --config p/typescript --config p/javascript src/ --no-git-ignore --error --severity WARNING # Semgrep
npx vitest run # Unit tests
npx playwright test # Headless E2E
If an emulator is available (adb devices | grep emulator), also run:
scripts/run-emulator-tests.sh
Do NOT tag if any validation fails. Fix first, commit, then re-run.
Step 4: Bump Versions
Update all touchpoints:
server/package.json: Update"version"fieldpublic/sw.js: IncrementCACHE_NAMEsuffix (e.g.,mobissh-v16→mobissh-v17)
The SW cache suffix is a monotonically increasing integer, not tied to semver. Just increment by 1 from whatever the current value is.
Step 5: Commit and Tag
git add server/package.json public/sw.js
git commit -m "release: v{VERSION}"
git tag -a "v{VERSION}" -m "{CHANGELOG_SUMMARY}"
The tag message should contain the full changelog section (not just the version number). This is the primary record of what changed.
Step 6: Close Fixed Issues
Scan the changelog commits for issue references (#N, fix(#N), feat(#N)). For each referenced issue that is still open:
- Check the issue is actually fixed by this release (read the issue, verify the fix commit)
- Close with a comment linking the release, and clean up delegation labels per
.claude/process.md:
scripts/gh-ops.sh close N --comment "Fixed in v{VERSION} ({COMMIT_SHA})"
scripts/gh-ops.sh labels N --rm bot --rm divergence
- Add the release version label:
scripts/gh-ops.sh labels N --add "v{VERSION}"
If there's no label for this version yet, create one:
gh label create "v{VERSION}" --description "Released in v{VERSION}" --color "0E8A16"
Don't close issues that are only partially addressed. If a commit references an issue but only fixes part of it, leave the issue open and add a comment noting partial progress.
Step 7: GitHub Release
Create a GitHub release with the changelog:
gh release create "v{VERSION}" --title "v{VERSION}" --notes "{CHANGELOG}"
Step 8: Push
Ask the user before pushing. Show what will be pushed:
git log origin/main..HEAD --oneline
git tag -l --sort=-version:refname | head -3
Then push:
git push origin main --follow-tags
Step 9: Post-Release Verification
After push, verify the production server if accessible:
scripts/server-ctl.sh ensure
scripts/server-ctl.sh status
Check that the version meta tag matches the new release.
SW Cache Name History
Track cache name bumps here for reference. The number is not semver — it's a monotonic counter for cache invalidation.
| Version | SW Cache | Notes | |---------|----------|-------| | v0.2.0 | mobissh-v16 | Last known state before this skill |
Anti-Patterns
- Don't skip validation: "It's just a version bump" is how broken releases ship.
- Don't forget sw.js: Stale cache name = users stuck on old code until they manually clear.
- Don't amend the release commit: If something needs fixing, make a new commit and a new patch release.
- Don't tag without committing version bumps first: The tag should point at the commit that contains the new version numbers.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/automated-release-process-mma3jr2d/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/automated-release-process-mma3jr2d' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/automated-release-process-mma3jr2d/download' --output '.skill-downloads/automated-release-process-mma3jr2d/SKILL.md.part' && mv '.skill-downloads/automated-release-process-mma3jr2d/SKILL.md.part' '.skill-downloads/automated-release-process-mma3jr2d/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/automated-release-process-mma3jr2d/SKILL.md' && test -s '.skill-downloads/automated-release-process-mma3jr2d/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/release' && cp -R '.skill-downloads/automated-release-process-mma3jr2d' '.claude/skills/release'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/automated-release-process-mma3jr2d'openskills read 'automated-release-process-mma3jr2d'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/automated-release-process-mma3jr2d/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Configure a Chat Channel with SecretRefs
DevOps
Set up chat channels using non-interactive commands, with secrets only as SecretRefs. Covers gather, mutate, repair, and prove steps for reliable delivery.
Investigate ClickHouse CI Failures
DevOps
Investigate a ClickHouse CI failure end-to-end from a PR or S3 report URL. Fetches failed tests, classifies flaky vs real regression, and checks for existing issues/fixes.
Ansible PR Review
DevOps
Reviews an Ansible PR following the project's standardized process, including changelog checks, test coverage validation, and feedback tracking.