cargo-get 1.4.0

Cargo plugin to easily query information from Cargo.toml files
cargo-get-1.4.0 is not a library.

Cargo plugin to easily query information from Cargo.toml files

crates.io CI GitHub Release

Overview

This plugin helps querying information from a Cargo.toml file and can be used in shell scripts or CI/CD pipelines. The plugin accepts only one flag at a time and returns a single string with the requested value. Some queries like eq. keywords or authors return multiple values which get separated by line breaks (each value on a new line).

This plugin is inspired by cargo-edit and presents itself as a lightweight wrapper around cargo_toml

Contribution

Thanks for your interest - we gratefully welcome contributions.

Questions can be asked in issues. To help us help you get pull requests merged quickly and smoothly, open an issue before submitted large changes. Please keep the contents of pull requests and commits short. Commit messages should include the intent of the commit. cargo-get uses rustfmt for formatting and clippy for linting.

Installation

Pre-built Binaries

  1. Download the binary for your CPU architecture from the GitHub latest release.
  2. Make the binary executable using chmod +x
  3. Place the binary in your $PATH and rename it to cargo-get.

Cargo

Ensure that you have a fairly recent version of rust/cargo installed.

$ cargo install cargo-get

(Please check cargo's documentation to learn how cargo install works and how to set up your system so it finds binaries installed by cargo.)

Examples

All Options

$ cargo get -h

Cargo plugin to easily query information from Cargo.toml files


Usage: cargo-get [OPTIONS] <COMMAND>

Commands:

  package.name

  package.edition

  package.rust_version

  package.version

  package.build

  package.workspace

  package.authors

  package.links

  package.description

  package.homepage

  package.readme

  package.keywords

  package.categories

  package.exclude

  package.include

  package.license

  package.license_file

  package.repository

  package.default_run

  package.publish

  package.resolver

  package.metadata

  workspace.members

  workspace.package.authors

  workspace.package.categories

  workspace.package.description

  workspace.package.documentation

  workspace.package.edition

  workspace.package.exclude

  workspace.package.homepage

  workspace.package.include

  workspace.package.keywords

  workspace.package.license

  workspace.package.license_file

  workspace.package.publish

  workspace.package.readme

  workspace.package.repository

  workspace.package.rust_version

  workspace.package.version

  help                             Print this message or the help of the given subcommand(s)

Options:

      --entry <PATH>                                 Path to the crate root to query

      --delimiter <Tab | CR | LF | CRLF | String>    Delimiter for array values

      --terminator <CR | LF | CRLF | NUL | String>   String terminator for printed values. (Defaults to `LF`)
  -h, --help                                         Print help

  -V, --version                                      Print version

Get Version

$ cargo get package.version

0.2.1


$ cargo get package.version --pretty

v0.2.1


$ cargo get package.version --major --minor --patch --pre

0

2

1

alpha2


$ cargo get package.version --major --minor --delimiter="."

0.2


Now it is also easy to run commands like:

git tag $(cargo get package.version --pretty)

Get keywords

$ cargo get package.keywords

command-line-utilities

development-tools::cargo-plugins

Custom delimiter

# Use one of Tab, CR, LF, CRLF or a custom string.


$ cargo get package.keywords --delimiter Tab

command-line-utilities 	development-tools::cargo-plugins


$ cargo get package.keywords --delimiter=" -- "

command-line-utilities -- development-tools::cargo-plugins


$ cargo get package.keywords --delimiter=";"

command-line-utilities;development-tools::cargo-plugins

Optional entry point

# Full path

$ cargo get package.name --entry="../../some/other/project/Cargo.toml"

some-other-project


# Directory

$ cargo get package.name --entry="../../some/other/project"

some-other-project


# Current directory

$ cargo get package.name

current-project

GitHub Actions

Please also have a look at this demo-repo

All fields

- name: Get Metadata
  id: metadata
  uses: nicolaiunrein/cargo-get@master

- name: Check variables
  run: |

    echo "Package Name"
    echo "${{ steps.metadata.outputs.package_name}}"
    echo "-----------------------------------------"

    echo "Package Version"
    echo "${{ steps.metadata.outputs.package_version}}"
    echo "-----------------------------------------"

    echo "Package Categories"
    echo "${{ steps.metadata.outputs.package_categories}}"
    echo "-----------------------------------------"

    echo "Package Keywords"
    echo "${{ steps.metadata.outputs.package_keywords}}"
    echo "-----------------------------------------"

Single value

- name: Get package name
  id: package_name
  uses: nicolaiunrein/cargo-get@master
  with:
    subcommand: package.name

- name: Print Output
  run: |

    echo ${{ steps.package_name.outputs.metadata }}