scud 0.11.0

The all-in-one tool for streamlining the many version control processes of your development workflow. WIP
scud-0.11.0 is not a library.

💨 scud

🚧 WIP 🚧

move fast because or as if driven by the wind.

A tool for streamlining the many version and source control processes of your development workflow written with an emphasis on general usage information and error diagnostics. Agnostic to your codebase’s internals and overall development environment, it just works.

  • 🏎️ Fast (Rust-powered)
  • 🧩 Modular
  • ⚙️ Configurable
  • ✨ Feature-rich
  • 🍱 Sane defaults

About

Scud aims to solve the following problems and integrate them into a single tool for enhancing and accelerating your workflow in any project:

  • Version Control
  • Source Control
  • Code Quality
  • Code Linting

Why build scud?

Scud was originally a tool I wanted to build for myself in an attempt to bridge the gap between making changes to my codebase locally and seeing them reflected on a remote repository. I wanted to be able to do this without having to repeatedly write a series of verbose commands, use an assortment of various tools to get the job done or go through some unique setup process for each new project I created.

Goals

I was interested in a tool that would provide:

  • Declarative Version and Source Control, a set of high-level, declarative operations for accelerating the repetitive tasks common in the development process of any project.
  • Agnostic to codebase internals and development environment, not tied to your codebase's language (i.e. works in Rust-based projects, but not JavaScript, Python), or to the developer's shell (i.e. works in Fish, but not Zsh, Bash, Elvish, etc.).
  • Easy to use, with a simple, intuitive interface.
  • Fast, performance isn't hindered by the underlying implementation details.
  • Useful diagnostics, inspired by Rust's compiler diagnostics, however not just error diagnostics, but also general usage information as well.
  • Hot Swappable, is simple to mix and match various version control systems and source control providers and allows the developer the ability to migrate between them with ease. Think Prisma but for version control and source control.
  • A gentle learning curve with reasonable familiarity for developers intimate with the underlying components (e.g. git, GitHub CLI, git-cliff, etc.).

Status

Scud is currently a work in progress, so its complete functionality is not yet finished. However, feel free to use it now, and update it when available. Scud will notify you during usage whenever a new update is available and provides a convenient update command, scud update [alias: scud up], which will update your local copy of scud to the latest version available.

Detailed below is a list of the current features and their status, as well as the roadmap for the future.

  • stage
    • Git
    • Mercurial
    • Breezy
    • Under the hood info
  • unstage
    • Git
    • Mercurial
    • Breezy
    • Under the hood info
  • commit
    • Git
    • Mercurial
    • Breezy
    • message-formatting
      • Conventional Commit Standard
      • Angular Commit Standard
      • None
  • commit-all
    • Git
    • Mercurial
    • Breezy
  • healthcheck
    • version control systems
      • Git
      • Mercurial
      • Breezy
    • source control providers
      • GitHub
      • GitLab
  • info
    • codebase
    • system

Roadmap:

  • Implement Shell tab completions for scud via clap_complete crate
  • Create man page for scud available for users by using man scud via clap_mangen crate
  • Autogenerated Changelog for git via git-cliff or [``], will have to investigate tools for other VCSs
  • Add support for gitoxide as underlying VCS
  • Experiment with distributing tool via docker container to allow for even faster onboarding of new developers by not having to install scud's dependencies on the developer's machine

NOTE: I aim to round out the core feature set of scud before exploring further functionality

Features and Functionality

For scud's declarative version control features (e.g. cap, commit, commit-all, push, pull, stage, state, unstage), scud is smart enough to detect the underlying version control system in which it is being used and will automatically use the appropriate commands, so you don't have to worry about the underlying implementation details, it just works.

⚡ Supercharged Commits

Scud supports a commit workflow that can produce commit messages following an assortment of commit message formats (Angular, Conventional, etc.) enabling developers to create human-readable commit messages in a simple, modular, and easily configurable manner.

🛤 Declarative and Rich Version Control Primitives

Scud provides a declarative, concise interface to the underlying version control system, allowing developers to create and iterate on software in a simple yet powerful fashion.

Getting Started

You can get started using scud by following one of the installation methods detailed below. Additionally, it's important that you have the required prerequisites installed before you start using scud.

Prerequisites

In order to get started using scud, it's important that you have Rust installed on your local machine which can be done via the simple one-liner,

# Install Rust and toolchain manager, rustup.
curl https://sh.rustup.rs -sSf | sh

as seen on the official Rust website.

Installation

From crates.io

scud can be installed from crates.io:

# Install scud from crates.io.
$ cargo install scud

Usage

Command Line Arguments

scud [SUBCOMMAND] [OPTIONS]

Options:

    -h, --help       Print help information
    -V, --version    Print version information

Subcommands:

# Useful when you have reached a codebase state you want to remember
commit         Commits all staged files in the current local repository. [alias: c]

# Useful for further streamlining the stage and commit process.
commit-all     Stages all modified files in the current local repository and then commits them. [alias: ca]

# Useful for quickly checking various metrics of interest.
info           Useful information and diagnostics about your system and codebase [alias: in]

# Useful for checking to see if your system is setup to work with all of the features of scud.
healthcheck    Checks to see required dependencies (i.e. version control systems, CLIs for source control providers) are installed. [alias: hc]

# Useful for quickly checking scud's subcommands and options.
help           Print this message or the help of the given subcommand(s).

# Useful for initializing a new local repository.
init           Initializes a local repository with a given VCS provider (currently supported: git, mercurial, breezy). [alias: i]

# Useful for streamlining the entire process of creating a local repository for your given project/app/library and getting a remote repository
# up and running in a matter of seconds. Supports a variety of different combinations of version control systems and source control providers.
new            Creates a new local repository in the current directory with a specified VCS, if one does not already exist (local repo).
               Additionally, initializes a corresponding remote repository with a specified source control provider. [alias: n]

# Useful for pushing your local commits to the remote repository.
push           Pushes all commits to the remote repository. [alias: ps]

# Useful for pulling remote commits to your local repository.
pull           Pulls all commits from the remote repository. [alias: pl]

# Useful for quickly setting up various scud dependencies onto your local system (i.e. git, bazaar, gh, glab, etc.),
# so you can focus your time on more important things.
setup          Streamlines the setup process for various version control systems and source control providers. [alias: su]

# Useful for staging all modified files in your local repository, making them ready to be committed.
stage          Stages all modified files in the current local repository ensuring they are ready to be committed. [alias: s]

# Useful for reverting changes made to files tracked by your version control system.
unstage        Unstages all modified files in the current local repository so they are ready to be committed again. [alias: u]

# Useful for useful updating scud to the latest version.
update         Handles the process of updating scud to the latest version. [alias: up]

NOTE: Many of scud's subcommands (where deemed appropriate) support the --dry-run flag for testing usage in a low-stakes environment, as well as the --info flag for getting a better idea of the operations scud is performing under the hood when the subcommand is issued.

Similar/Related Projects

  • cocogitto - Cocogitto is a set of cli tools for the conventional commit and semver specifications.
  • Commitizen - Create committing rules for projects 🚀 auto bump versions ⬆️ and auto changelog generation 📂
  • cz cli - The commitizen command line utility. #BlackLivesMatter
  • gitnow - Speed up your Git workflow. 🐠
  • gitflow - Git extensions to provide high-level repository operations for Vincent Driessen's branching model.

License

MIT

Copyright

Copyright © 2022, Josh Kersey