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.
Cargo.toml
(also committed)cargo package
for youYou need the following data beforehand:
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:
```bash
$ export GHTOKEN=
```
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:
bash
$ 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
To run semantic-rs's tests:
cargo test
../tests/integration/run-locally.sh
.Requirements:
- cmake
- OpenSSL development package
- Ubuntu: libssl-dev
, pkg-config
, zlib1g-dev
- Mac Homebrew: openssl
- Rust 1.15 or later
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:
bash
OPENSSL_INCLUDE_DIR=`brew --prefix openssl`/include \
OPENSSL_LIB_DIR=`brew --prefix openssl`/lib \
cargo build
Clone this project:
bash
$ git clone git@github.com:semantic-rs/semantic-rs.git
As a test project you can use this one: https://github.com/badboy/test-project.
Clone it as well:
bash
$ git clone https://github.com/badboy/test-project.git
In your top level directory there should be now the following two folders:
bash
$ 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:
``bash
$ 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 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.
Make sure to set the CI=true
environment variable to disable dry-run mode.
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.
This project is licensed under the MIT license.