Skip to content

Grazulex/shipmark

Repository files navigation

Shipmark Logo

ShipMark

πŸš€ Git Release Management Made Easy

Beautiful CLI β€’ Zero Dependencies β€’ Full Control

npm version License: MIT PRs Welcome Website

Automate your release workflow with an interactive CLI that generates changelogs, manages versions, and creates tagsβ€”all without external dependencies.

Website β€’ Quick Start β€’ Features β€’ CI/CD β€’ Commands


⚑ Quick Start

# Install globally
npm install -g @grazulex/shipmark

# Initialize configuration
shipmark init

# Check release status
shipmark status

# Create a release (interactive)
shipmark release

That's it! ShipMark will guide you through version selection, generate a changelog, create a tag, and push to remote.


✨ Features

🎯 Interactive Workflow

Guided prompts for version bumping with preview of all changes before execution. Never release blind again.

πŸ“ Automatic Changelog

Parses Conventional Commits to generate beautiful, organized changelogs.

🏷️ Semantic Versioning

Full semver support including major, minor, patch, and prerelease versions (alpha, beta, rc).

πŸ”§ Zero External Dependencies

Works with native Git only. No GitHub CLI, GitLab CLI, or other tools required.

πŸ€– CI/CD Ready

Non-interactive mode with auto-detection of version bumps based on commit types. Perfect for pipelines.

🎨 Beautiful Terminal UI

Colorful output, spinners, and progress indicators. Release management that feels modern.


πŸ–₯️ Commands

shipmark release

Interactive release workflow with changelog, tag, and push.

shipmark release                    # Interactive mode
shipmark release --dry-run          # Preview without executing
shipmark release --ci auto          # CI mode with auto version detection
shipmark release --ci minor         # CI mode with specific bump
shipmark release -p beta            # Create beta prerelease
shipmark release --skip-push        # Don't push to remote

shipmark status

Check release status before creating a release.

shipmark status                     # Show pending changes summary
shipmark status -v                  # Include commit details

Example output:

πŸ“¦ Release Status
──────────────────────────────────────────────────
  Branch:          main
  Package version: 1.2.3
  Latest tag:      v1.2.3
  Working tree:    clean

πŸ“ Pending Changes
──────────────────────────────────────────────────
  5 commits since v1.2.3

  Features      2
  Bug Fixes     2
  Documentation 1

πŸš€ Suggested Release
──────────────────────────────────────────────────
  Current:    1.2.3
  Next:       1.3.0 (minor)

shipmark changelog

Generate or preview changelog.

shipmark changelog                  # Update CHANGELOG.md
shipmark changelog --preview        # Preview without writing
shipmark changelog --from v1.0.0    # From specific tag

shipmark version

Manage project version.

shipmark version                    # Show current version
shipmark version bump               # Interactive bump
shipmark version bump minor         # Specific bump type
shipmark version set 2.0.0          # Set exact version

shipmark tag

Manage Git tags.

shipmark tag list                   # List all tags
shipmark tag latest                 # Show latest tag
shipmark tag create 1.2.0           # Create new tag
shipmark tag delete v1.2.0 -r       # Delete from local and remote

shipmark history

View release history with dates and commit counts.

shipmark history                    # Show release history
shipmark history -d                 # Include commit details
shipmark history -l 5               # Limit to last 5 releases

Example output:

Release History
──────────────────────────────────────────────────
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Version β”‚ Date       β”‚ Commits β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 1.3.0   β”‚ 2024-01-15 β”‚ 5       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 1.2.0   β”‚ 2024-01-10 β”‚ 8       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 1.1.0   β”‚ 2024-01-05 β”‚ 3       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

shipmark init

Initialize ShipMark configuration.

shipmark init                       # Interactive setup
shipmark init -y                    # Use defaults

πŸ€– CI/CD Integration

ShipMark works seamlessly in CI/CD pipelines with non-interactive mode.

GitHub Actions

name: Release

on:
  workflow_dispatch:
    inputs:
      bump:
        description: 'Version bump type'
        required: true
        default: 'auto'
        type: choice
        options:
          - auto
          - patch
          - minor
          - major

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install ShipMark
        run: npm install -g @grazulex/shipmark

      - name: Create Release
        run: shipmark release --ci ${{ inputs.bump }}
        env:
          GIT_AUTHOR_NAME: github-actions
          GIT_AUTHOR_EMAIL: github-actions@github.com
          GIT_COMMITTER_NAME: github-actions
          GIT_COMMITTER_EMAIL: github-actions@github.com

CI Mode Options

Option Description
--ci auto Auto-detect bump from commits (breaking→major, feat→minor, else→patch)
--ci patch Force patch bump
--ci minor Force minor bump
--ci major Force major bump
--ci prerelease Increment prerelease version

CI Output Variables

In CI mode, ShipMark outputs variables for pipeline consumption:

SHIPMARK_VERSION=1.3.0
SHIPMARK_TAG=v1.3.0
SHIPMARK_BUMP=minor

βš™οΈ Configuration

ShipMark uses .shipmarkrc.yml for configuration:

changelog:
  file: "CHANGELOG.md"
  includeHash: true
  includeDate: true

version:
  files:
    - "package.json"                    # Node.js
    - "pyproject.toml"                  # Python (PEP 621, Poetry, Setuptools)
    - path: "helm/values.yaml"          # Helm/YAML with custom key
      key: "image.tag"
      prefix: ""                        # No "v" prefix for Docker tags
  tagPrefix: "v"
  tagMessage: "Release {version}"
  commitMessage: "chore(release): {version}"
  syncCheck: true                       # Warn if versions differ before release

commits:
  conventional: true

git:
  push: true
  pushTags: true
  signTags: false
  signCommits: false

Multi-File Version Support

ShipMark can update version in multiple files across different ecosystems:

File Type Auto-detected Config Example
package.json Yes "package.json"
pyproject.toml Yes (PEP 621, Poetry, Setuptools) "pyproject.toml"
*.yaml / *.yml With key path path: "values.yaml", key: "image.tag"

Example for React + Python monorepo:

version:
  files:
    - "frontend/package.json"
    - "backend/pyproject.toml"
    - path: "deploy/helm/values.yaml"
      key: "image.tag"
      prefix: ""
  syncCheck: true

πŸ“‹ Conventional Commits

ShipMark parses Conventional Commits to organize your changelog:

Prefix Section Bump
feat: Features minor
fix: Bug Fixes patch
docs: Documentation patch
refactor: Code Refactoring patch
perf: Performance patch
test: Tests patch
chore: Chores patch
BREAKING CHANGE: ⚠️ Breaking Changes major

πŸ”’ Version Bumping

Type Example When to use
patch 1.0.0 β†’ 1.0.1 Bug fixes, minor changes
minor 1.0.0 β†’ 1.1.0 New features (backwards compatible)
major 1.0.0 β†’ 2.0.0 Breaking changes
prepatch 1.0.0 β†’ 1.0.1-alpha.1 Testing a patch
preminor 1.0.0 β†’ 1.1.0-alpha.1 Testing a feature
premajor 1.0.0 β†’ 2.0.0-alpha.1 Testing breaking changes
prerelease 1.0.0-alpha.1 β†’ 1.0.0-alpha.2 Next prerelease iteration

πŸš€ Installation

npm (Recommended)

npm install -g @grazulex/shipmark

npx (No install)

npx @grazulex/shipmark release

Verify Installation

shipmark --version

πŸ“Š Comparison

Feature ShipMark semantic-release release-it standard-version
Zero Config βœ… ❌ ⚠️ ⚠️
Interactive Mode βœ… ❌ βœ… ❌
CI Mode βœ… βœ… βœ… βœ…
No External Deps βœ… ❌ ❌ ⚠️
Dry Run Preview βœ… Full ⚠️ Limited ⚠️ Limited ⚠️ Limited
Status Command βœ… ❌ ❌ ❌
Actively Maintained βœ… βœ… βœ… ❌ Deprecated

🀝 Contributing

Contributions are welcome! Whether it's:

  • πŸ› Bug reports
  • ✨ Feature requests
  • πŸ“ Documentation improvements
  • πŸ”§ Code contributions

πŸ“„ License

MIT Β© Grazulex


🌐 Website β€’ πŸ“¦ npm β€’ πŸ› Issues β€’ πŸ’¬ Discussions


Built with ❀️ for developers who value simplicity

Star this repo if ShipMark helps your workflow! ⭐

About

Git Release Management Made Easy

Topics

Resources

Stars

Watchers

Forks

Contributors