Skip to content
Shipcheck

Getting started

Introduction

Shipcheck is a small command-line tool that answers one question: is this project actually ready to ship?

Run shipcheck in a project and it checks for the common release blockers: uncommitted changes, failing tests, a broken production build, missing environment variables, a missing README or license, an already-released version number and missing CI. Each check passes, warns, fails or is skipped, and the exit code tells scripts whether it's safe to continue.

Deploy only when ready
$ shipcheck && ./deploy.sh

Principles

  • Local and offline. No account, no API key, no network access and no telemetry. Your code never leaves your machine.
  • Zero setup. Test and build commands are detected for Go, Node.js, Python, Java, PHP and Rust. A config file is optional.
  • Read-only. Shipcheck never edits, deletes or commits your files. The only files written are the ones your own build writes, plus .shipcheck.yml when you run shipcheck init.
  • Scriptable. Stable exit codes and a JSON report make it easy to use in CI and deploy scripts.

What it checks

  • Git: Repository present, working tree clean, on the branch you ship from.
  • Tests: Detects your test runner and runs it. Fails if any test fails.
  • Production build: Runs your production build so compile errors surface before deploy.
  • Environment: Required variables are set, and values are never printed.
  • README: The project explains what it is and how to run it.
  • License: A license file exists, and common licenses are recognised.
  • Version: Finds your version, and warns if that version was already released.
  • CI: Continuous integration is configured. Recommended, not required.

What it is not

Shipcheck is a pre-shipping validation tool, not a deployment tool. It doesn't deploy, monitor, lint your code or manage infrastructure. It runs the commands you already have and checks the things that are easy to forget.

Next steps

  1. Install Shipcheck (Go 1.22 or newer).
  2. Follow the quick start to run your first check.
  3. Tune it with .shipcheck.yml if the defaults don't fit.

Found a mistake? Edit this page on GitHub