#ci #cli #release-automation

app cranko

A cross-platform, cross-language release automation tool

16 unstable releases (3 breaking)

new 0.3.3 Oct 18, 2020
0.3.2 Oct 17, 2020
0.3.0 Sep 28, 2020
0.2.3 Sep 24, 2020
0.0.27 Sep 17, 2020

#311 in Command line utilities

Download history 56/week @ 2020-09-01 24/week @ 2020-09-08 28/week @ 2020-09-15 71/week @ 2020-09-22 47/week @ 2020-09-29 1/week @ 2020-10-06 46/week @ 2020-10-13

82 downloads per month

MIT license

315KB
6.5K SLoC

Build Status

cranko

Cranko is a release automation tool implementing the just-in-time versioning workflow. It is cross-platform, installable as a single executable, supports multiple languages and packaging systems, and is designed from the ground up to work with monorepos.

To learn more, check out the book!

Installation

Cranko is delivered as a single standalone executable for easy installation on continuous integration systems. On Unix-like systems (including macOS), the following command will drop an executable named cranko in the current directory:

curl --proto '=https' --tlsv1.2 -sSf https://pkgw.github.io/cranko/fetch-latest.sh | sh

On Windows systems, the following command will do the same in a PowerShell window:

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://pkgw.github.io/cranko/fetch-latest.ps1'))

For more details and additional methods, see the Installation section of the book.

Getting Started

Because Cranko is a workflow tool, to really start using it you’ll need to learn a bit about how it works and then think about how to integrate it into your development processes. To learn more, check out the Getting Started and Just-in-Time Versioning sections of the book.

Development Roadmap

Cranko is still a new project and is lacking many features that would be useful. Here are some of the things on the radar:

  • Built-in support for more languages / frameworks:
    • Rust
    • NPM
    • Python
    • Visual Studio?
  • Per-repo config file
    • Identify upstream remote from its URL
    • Customize project configuration
      • Custom per-project "rewriter" additions
    • Defined "unaffiliated" projects
  • Revamp error handling infrastructure
  • cranko bootstrap command to help people onboard
  • Figure out how we're going to make a test suite for this beast

Here are some larger projects that would be cool:

  • Split the main implementation into multiple crates
  • Pluggable framework for auto-generating release notes (e.g., taking advantage of Conventional Commit formats, auto-linking to GitHub pull requests)
  • Pluggable framework for knowing when releases should be made and/or determining how to bump version numbers (e.g., Conventional Commits plus semantic-release type standards)
  • Pluggable framework for deciding which commits affect which projects
  • Additional templates for release notes, tag names, etc. etc.
  • More robust CLI interface for querying the project/release graph so that external tools can build on Cranko as a base layer.

cargo Features

The cranko Cargo package provides the following optional features:

  • vendored-openssl — builds the git2 dependency with its vendored-openssl feature, which uses a builtin OpenSSL library rather than attempting to link with the system version. This is useful when cross-compiling because often the target environment lacks OpenSSL.

Contributions

Are welcome! Please open pull requests or issues against the pkgw/cranko repository.

Legalities

Cranko copyrights are held by Peter Williams and the Cranko project contributors. Source code is licensed under the MIT License.

Dependencies

~27MB
~560K SLoC