All Projects → semantic-rs → Semantic Rs

semantic-rs / Semantic Rs

Licence: mit
🚀 Automatic crate publishing done right

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Semantic Rs

naersk
Build rust crates in Nix. No configuration, no code generation, no IFD. Sandbox friendly. [maintainer: @Patryk27]
Stars: ✭ 440 (+171.6%)
Mutual labels:  crates, cargo
Alexandrie
An alternative crate registry, implemented in Rust.
Stars: ✭ 251 (+54.94%)
Mutual labels:  cargo, crates
Meuse
A private Cargo crate registry, for Rust
Stars: ✭ 173 (+6.79%)
Mutual labels:  cargo, crates
cargo-esr
Extended Search & Ranking tool for crates.
Stars: ✭ 23 (-85.8%)
Mutual labels:  crates, cargo
kingslayer
A text-based adventure written in Rust
Stars: ✭ 28 (-82.72%)
Mutual labels:  crates, cargo
cargo-limit
Cargo with less noise: warnings are skipped until errors are fixed, Neovim integration, etc.
Stars: ✭ 105 (-35.19%)
Mutual labels:  crates, cargo
Naersk
Build rust crates in Nix. No configuration, no code generation, no IFD. Sandbox friendly.
Stars: ✭ 193 (+19.14%)
Mutual labels:  cargo, crates
crates
crates is an extension aims to help people to manage their dependencies for rust (crates.io & TOML).
Stars: ✭ 156 (-3.7%)
Mutual labels:  crates, cargo
cargo-trim
Binary application to clean up .cargo/registry & .cargo/git cache
Stars: ✭ 15 (-90.74%)
Mutual labels:  crates, cargo
Cargo Deny
❌ Cargo plugin for linting your dependencies 🦀
Stars: ✭ 533 (+229.01%)
Mutual labels:  cargo, crates
Coap Rs
A Constrained Application Protocol(CoAP) library implemented in Rust.
Stars: ✭ 128 (-20.99%)
Mutual labels:  crates
Stegbrute
Fast Steganography bruteforce tool written in Rust useful for CTF's
Stars: ✭ 134 (-17.28%)
Mutual labels:  cargo
Core Os Riscv
🖥️ An xv6-like operating system on RISC-V with multi-core support. Documentation available online.
Stars: ✭ 144 (-11.11%)
Mutual labels:  cargo
Multipart
A backend-agnostic extension for file uploads in HTTP libraries for Rust
Stars: ✭ 155 (-4.32%)
Mutual labels:  crates
Thermite
A Rake-based helper for building and distributing Rust-based Ruby extensions
Stars: ✭ 125 (-22.84%)
Mutual labels:  cargo
Ocean
A C/C++ build system/project manager written in Rust
Stars: ✭ 144 (-11.11%)
Mutual labels:  cargo
Anterofit
Strongly typed, asynchronous REST client framework for Rust.
Stars: ✭ 125 (-22.84%)
Mutual labels:  crates
Bnf
Parse BNF grammar definitions
Stars: ✭ 124 (-23.46%)
Mutual labels:  crates
Kernel Roulette
A kernel module written in Rust
Stars: ✭ 124 (-23.46%)
Mutual labels:  cargo
Newrustacean.com
The official website for the New Rustacean podcast
Stars: ✭ 161 (-0.62%)
Mutual labels:  cargo

semantic-rs

Build Status

The purpose of this tool is to help people to publish crates following the semver specification.

Right now if you're building a new crate publishing new versions includes a high amount of work. You need to decide if the new version will be either a new Major, Minor or Patch version. If that decision is made, the next step is to write a changelog with all the things changed. Then increase the version in Cargo.toml. Make a commit and a new tag for the new version and lastly publish it to crates.io. If you need to repeat these steps every time, chances are high you make mistakes. semantic-rs automates all these steps for you so you can focus more on developing new features instead.

Workflow

  • Install semantic-rs on your machine.
  • Follow the Angular.js commit message conventions when you commit changes to your repository
  • When you're done with development, run semantic-rs
  • Based on your changes it determines the next version number, generates a changelog, commits it and creates a new tag
  • It also increases the version number in Cargo.toml (also committed)
  • Runs cargo package for you
  • Creates a release on GitHub
  • Publishes the new version to crates.io
  • Done 🚀

Usage

Installation via crates.io

Ubuntu:

$ sudo apt-get install -y cmake libssl-dev pkg-config zlib1g-dev
$ cargo install semantic-rs

Prerequisites

You need the following data beforehand:

Run it

semantic-rs depends on some data being passed in via environment variables. In our examples we specify those variables explicitly but if you run semantic-rs frequently you may want to configure those in your shell's configuration file.

Setting GIT_COMITTER_NAME and GIT_COMMITTER_EMAIL is optional. If you omit those, we default to the settings from your (global) git configuration.

If you run semantic-rs without any arguments, it operates on your current working directory:

$ export GH_TOKEN=<GHTOKEN>
$ export CARGO_TOKEN=<CARGOTOKEN>
$ export GIT_COMMITTER_NAME=<Your name>
$ export GIT_COMMITTER_EMAIL=<Your email>
$ semantic-rs
#...

By default it runs in dry-run mode. This means it doesn't perform changes automatically. You see which steps would be performed and also the resulting changelog.

To perform the changes, pass -w as an argument:

$ semantic-rs -w=yes

This performs the following operations:

  • Create or update Changelog.md containing everything that changed
  • Create a new commit containing the following changes:
    • Changelog.md
    • An updated Cargo.toml with the new version number
  • Create a new annotated git tag pointing to the last commit created recently and including the Changelog for the new version
  • A new version published to crates.io
  • A new release on GitHub
  • Push the new commit and tag to GitHub

Development

Requirements:

  • cmake
  • OpenSSL development package
    • Ubuntu: libssl-dev, pkg-config, zlib1g-dev
    • Mac Homebrew: openssl
  • Rust 1.15 or later

For OS X > 10.10

Note that since OS X 10.11 Apple doesn't ship development headers for OpenSSL anymore. In order to get it working, you need to run cargo with these variables configured:

OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include \
OPENSSL_LIB_DIR=`brew --prefix openssl`/lib \
cargo build

Build locally

Clone this project:

$ git clone [email protected]:semantic-rs/semantic-rs.git

As a test project you can use this one: https://github.com/badboy/test-project.

Clone it as well:

$ git clone https://github.com/badboy/test-project.git

In your top level directory there should be now the following two folders:

$ ls -l
semantic-rs
test-project

Change into the semantic-rs folder and run cargo build. Then you can run semantic-rs against the test project:

$ cargo run -- -p ../test-project
   Compiling semantic-rs v0.1.0 (file:///Users/janschulte/projects/semantic-rs/semantic-rs)
     Running `target/debug/semantic-rs -p ../test-project`
semantic.rs 🚀
Analyzing your repository
Current version: 2.0.3
Analyzing commits
Commits analyzed. Bump would be Minor
New version would be: 2.1.0
Would write the following Changelog:
====================================
## v2.1.0 (2016-07-03)


#### Features

*   Math mode ([24afa46f](24afa46f))

#### Bug Fixes

*   Into the void ([9e54f4bf](9e54f4bf))

====================================
Would create annotated git tag

Since -w yes was not passed, it only prints out what it would do. Note that if you run it on your local machine the output may differ.

Running the tests

To run semantic-rs's tests:

  • unit tests: cargo test.
  • integration tests: ./tests/integration/run-locally.sh.

Run semantic-rs in CI environment

Make sure to set the CI=true environment variable to disable dry-run mode.

Contributing

Bug reports and pull requests are welcome on GitHub. You can find more information about contributing in the CONTRIBUTING.md. This project is intended to be a safe, welcoming space for collaboration and discussion, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

This project is licensed under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].