/ship-workflow
Automated release pipeline: merges main, runs tests, pre-landing review, version bump, changelog, bisectable commits, and PR creation. Triggers on: "ship it", "release this", "prepare for release", "open a PR", "push and PR", "land this", "/ship-workflow".
$ npx -y skills add Mathews-Tom/armory --skill ship-workflow --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ship-workflow
Context preview
The summary Claude sees to decide when to auto-load this skill.
Automated release pipeline: merges main, runs tests, pre-landing review, version bump, changelog, bisectable commits, and PR creation. Triggers on: "ship it", "release this", "prepare for release", "open a PR", "push and PR", "land this", "/ship-workflow".
SKILL.md
ship-workflow.SKILL.mdname: ship-workflow
description: 'Automated release pipeline: merges main, runs tests, pre-landing review, version bump, changelog, bisectable commits, and PR creation. Triggers on: "ship it", "release this", "prepare for release", "open a PR", "push and PR", "land this", "/ship-workflow".'
metadata:
version: 1.0.1
category: review
tags: [release, ci-cd, pull-request, changelog]
difficulty: intermediate
phase: ship
Ship Workflow
Automated release pipeline that takes a feature branch from working state to merged PR. Executes a deterministic sequence of pre-flight checks, testing, review, versioning, and PR creation — stopping immediately on any failure with specific remediation instructions.
Pipeline Overview
pre-flight → merge main → test → review → version bump → changelog → bisectable commits → push → PR
Each step has explicit stop conditions. The pipeline never auto-resolves ambiguity.
---
Step 1: Pre-flight Checks
Run all three checks before proceeding:
1. **Not on default branch** — detect the default branch dynamically:
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
If the current branch matches: STOP. Instruct the user to create a feature branch.
2. **Clean working tree** — `git status --porcelain` must produce no output. If dirty: STOP. List the uncommitted files and instruct the user to commit or stash.
3. **Up-to-date with remote** — `git fetch origin` then compare local HEAD with `origin/<current-branch>`. If the remote is ahead: STOP. Instruct the user to pull or rebase.
If any check fails, STOP with the specific remediation instruction. Do not proceed.
---
Step 2: Merge Default Branch
git fetch origin
git merge origin/<default-branch>
- If merge conflicts occur: STOP. Report the conflicting files. Do not auto-resolve.
- If clean: proceed.
---
Step 3: Run Tests
Detect the test command from project configuration using `references/project-detection.md`:
| Indicator | Test Command | | ----------------------------------- | ------------------------------------ | | `Makefile` with `test` target | `make test` | | `package.json` with `test` script | `<detected-pkg-manager> run test` | | `pyproject.toml` with pytest config | `uv run pytest` (or detected runner) | | `Cargo.toml` | `cargo test` | | `go.mod` | `go test ./...` | | `Gemfile` + `Rakefile` | `bundle exec rake test` |
Detection order: check each indicator top-to-bottom; use the first match.
- If tests fail: STOP. Report the failure output. Do not proceed.
- If no test command detected: warn the user and ask whether to proceed without tests.
---
Step 4: Pre-Landing Review
Invoke the `pre-landing-review` skill if available. Otherwise, perform a lightweight diff review against the default branch:
git diff origin/<default-branch>...HEAD
Review the diff for:
- Obvious bugs or logic errors
- Security concerns (credentials, injection vectors)
- Missing error handling on new code paths
Classification:
- **CRITICAL** findings: STOP. Resolve before proceeding.
- **INFORMATIONAL** findings: note them for inclusion in the PR description. Proceed.
---
Step 5: Version Bump
Detect the version strategy from project configuration using `references/project-detection.md`:
| Indicator | Version Location | | -------------------------------- | ----------------------------- | | `VERSION` file | Update file contents directly | | `package.json` `version` field | Update the field | | `pyproject.toml` `version` field | Update the field | | `Cargo.toml` `version` field | Update the field | | Git tags only | Create tag at push time |
Default bump level: **PATCH**.
- For **MINOR** or **MAJOR** bumps: STOP. Confirm with the user before proceeding.
- If no version strategy detected: skip the version bump entirely. Note the skip in
the PR description.
---
Step 6: Update Changelog
- If `CHANGELOG.md` exists: prepend an entry in [Keep a Changelog](https://keepachangelog.com/) format.
- If no changelog file exists: skip.
Auto-generate the entry from commit messages since the last tag or release. Group entries by conventional commit type:
## [<new-version>] - <date>
### Added
- feat: ...
### Fixed
- fix: ...
### Changed
- refactor: ...
---
Step 7: Create Bisectable Commits
Organize staged changes into logical, bisectable commit groups in this order:
1. **Infrastructure / config changes** — build files, CI config, dependencies 2. **Models / services / core logic** — domain layer, business rules 3. **Controllers / views / API endpoints** — presentation and routing 4. **Version bump + changelog** — always last
Each commit uses a descriptive conventional commit message. Each commit should pass tests independently when possible (verify if CI turnaround allows it; otherwise trust the ordering).
If all changes are already committed in a reasonable structure, skip reorganization.
---
Step 8: Push and Create PR
git push -u origin <current-branch>
Create the PR:
gh pr create \
--title "<conventional-format-title>" \
--body "<generated-body>"
PR body includes:
- Summary of changes (grouped by commit)
- Test results (pass confirmation)
- Version bump details (old → new, or "skipped")
- Any INFORMATIONAL findings from Step 4
Output the PR URL as the final result.
---
Stop Conditions
The pipeline halts immediately and reports when any of these occur:
| Condition | Step | Action | | ------------------------ | ---- | ----------------------------------
Read more
name: ship-workflow description: 'Automated release pipeline: merges main, runs tests, pre-landing review, version bump, changelog, bisectable commits, and PR creation. Triggers on: "ship it", "release this", "prepare for release", "open a PR", "push and PR", "land this", "/ship-workflow".' metadata: version: 1.0.1 category: review tags: [release, ci-cd, pull-request, changelog] difficulty: intermediate phase: ship
Ship Workflow
Automated release pipeline that takes a feature branch from working state to merged PR. Executes a deterministic sequence of pre-flight checks, testing, review, versioning, and PR creation — stopping immediately on any failure with specific remediation instructions.
Pipeline Overview
pre-flight → merge main → test → review → version bump → changelog → bisectable commits → push → PR
Each step has explicit stop conditions. The pipeline never auto-resolves ambiguity.
---
Step 1: Pre-flight Checks
Run all three checks before proceeding:
1. **Not on default branch** — detect the default branch dynamically:
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
If the current branch matches: STOP. Instruct the user to create a feature branch.
2. **Clean working tree** — `git status --porcelain` must produce no output. If dirty: STOP. List the uncommitted files and instruct the user to commit or stash.
3. **Up-to-date with remote** — `git fetch origin` then compare local HEAD with `origin/<current-branch>`. If the remote is ahead: STOP. Instruct the user to pull or rebase.
If any check fails, STOP with the specific remediation instruction. Do not proceed.
---
Step 2: Merge Default Branch
git fetch origin git merge origin/<default-branch>
- If merge conflicts occur: STOP. Report the conflicting files. Do not auto-resolve.
- If clean: proceed.
---
Step 3: Run Tests
Detect the test command from project configuration using `references/project-detection.md`:
| Indicator | Test Command | | ----------------------------------- | ------------------------------------ | | `Makefile` with `test` target | `make test` | | `package.json` with `test` script | `<detected-pkg-manager> run test` | | `pyproject.toml` with pytest config | `uv run pytest` (or detected runner) | | `Cargo.toml` | `cargo test` | | `go.mod` | `go test ./...` | | `Gemfile` + `Rakefile` | `bundle exec rake test` |
Detection order: check each indicator top-to-bottom; use the first match.
- If tests fail: STOP. Report the failure output. Do not proceed.
- If no test command detected: warn the user and ask whether to proceed without tests.
---
Step 4: Pre-Landing Review
Invoke the `pre-landing-review` skill if available. Otherwise, perform a lightweight diff review against the default branch:
git diff origin/<default-branch>...HEAD
Review the diff for:
- Obvious bugs or logic errors
- Security concerns (credentials, injection vectors)
- Missing error handling on new code paths
Classification:
- **CRITICAL** findings: STOP. Resolve before proceeding.
- **INFORMATIONAL** findings: note them for inclusion in the PR description. Proceed.
---
Step 5: Version Bump
Detect the version strategy from project configuration using `references/project-detection.md`:
| Indicator | Version Location | | -------------------------------- | ----------------------------- | | `VERSION` file | Update file contents directly | | `package.json` `version` field | Update the field | | `pyproject.toml` `version` field | Update the field | | `Cargo.toml` `version` field | Update the field | | Git tags only | Create tag at push time |
Default bump level: **PATCH**.
- For **MINOR** or **MAJOR** bumps: STOP. Confirm with the user before proceeding.
- If no version strategy detected: skip the version bump entirely. Note the skip in
the PR description.
---
Step 6: Update Changelog
- If `CHANGELOG.md` exists: prepend an entry in [Keep a Changelog](https://keepachangelog.com/) format.
- If no changelog file exists: skip.
Auto-generate the entry from commit messages since the last tag or release. Group entries by conventional commit type:
## [<new-version>] - <date> ### Added - feat: ... ### Fixed - fix: ... ### Changed - refactor: ...
---
Step 7: Create Bisectable Commits
Organize staged changes into logical, bisectable commit groups in this order:
1. **Infrastructure / config changes** — build files, CI config, dependencies 2. **Models / services / core logic** — domain layer, business rules 3. **Controllers / views / API endpoints** — presentation and routing 4. **Version bump + changelog** — always last
Each commit uses a descriptive conventional commit message. Each commit should pass tests independently when possible (verify if CI turnaround allows it; otherwise trust the ordering).
If all changes are already committed in a reasonable structure, skip reorganization.
---
Step 8: Push and Create PR
git push -u origin <current-branch>
Create the PR:
gh pr create \ --title "<conventional-format-title>" \ --body "<generated-body>"
PR body includes:
- Summary of changes (grouped by commit)
- Test results (pass confirmation)
- Version bump details (old → new, or "skipped")
- Any INFORMATIONAL findings from Step 4
Output the PR URL as the final result.
---
Stop Conditions
The pipeline halts immediately and reports when any of these occur:
| Condition | Step | Action | | ------------------------ | ---- | ----------------------------------
Curated, production-grade skills, agents, hooks, rules, commands, utilities, and presets for AI coding agents. No magic, no demos — battle-tested workflows built for developers who use AI seriously.
Repo: Mathews-Tom/armory
Other skills on armory.
- /adr-writer
Generates Architecture Decision Records capturing context, rationale, alternatives, and consequences in numbered status-tracked format. Triggers on: "write an ADR", "document this decision", "architecture decision record", "decision record", "design decision", "ADR for".
Open skill - /agent-builder
Build AI agents and automate Claude Code programmatically via the Claude Agent SDK and headless CLI mode. Covers Python SDK, claude -p, SDK MCP servers, hooks, sessions. Triggers on: "build an agent", "agent SDK", "headless mode", "automate Claude", "programmatic agent".
Open skill - /api-docs-generator
Audits and enhances FastAPI and REST API documentation: missing descriptions, response codes, examples, docstrings, Pydantic models, OpenAPI spec. Triggers on: "generate API docs", "document this API", "OpenAPI for", "FastAPI docs", "document endpoints", "swagger docs".
Open skill - /architecture-diagram
Generate layered architecture diagrams as self-contained HTML with inline SVG icons, CSS Grid containers, and connection overlays. Triggers on: "architecture diagram", "infra diagram", "system diagram", "deployment diagram", "topology", "draw architecture". NOT for architecture
Open skill - /architecture-reviewer
Architecture reviews across 7 dimensions (structural, scalability, enterprise readiness, performance, security, ops, data) with scored reports. Triggers on: "review architecture", "critique design", "audit system", "assess scalability", "enterprise readiness", "technical due
Open skill - /arxiv-figures
Optimize and prepare figures for arXiv submission: format conversion (EPS/PDF/PNG/JPG), size reduction, metadata stripping, processor compatibility (DVI vs PDFLaTeX). Triggers on: "optimize figures for arXiv", "reduce figure size", "convert figures for arXiv", "fix arXiv
Open skill

