Rust: Publishing crates using GitHub Actions
Publishing crates using CLI is easy. But why do it?
Wouldn’t it be much better if we could automate this entire process? GitHub Actions help us do just that.
The key part of the action is going to be
For those well versed with GitHub Actions, you probably already stopped reading.
However, for those of us new to GitHub Actions, we are going to go through with the entire process.
You can view the full file here
Getting a crates.io API token
You can login with GitHub on crates.io to create an account or login to your existing one.
Upon reaching crates.io, crates.io/me to open your Settings page, scroll down to New Token and generate one.
The name here is not very important you can choose any name for it but do remember to save the token.
Save a secret on GitHub Actions
- Open your repository
- Click on Settings
- Go to Secrets & variables in the Security Section
- Add a New Repository Secret
As is clear from here, you need to press the New repository secret button
Remember here the name matters. Personally I would recommend using CRATES_TOKEN here but if you change the name, remember to change it the next time as well
Writing our very own GitHub Action
Create the file
The first thing to do is create a file by the name of .github/workflows/publish.yml
You can change publish to something else without issues but publish is descriptive enough in this case
Specify how to trigger action
So we are triggering: -
- On push with tag (Recommended)
- Manually. (Makes it easy for me to explain it to you. But you can remove it)
Writing the job
Now that GitHub knows how to trigger, let us tell it how to get the job done
Pretty basic. We set the name and specify the OS
Checkout repo
Clone the repository to publish. Pretty basic
Install Rust
We are going to take the help of a very well known action for this.
Publish crate
The moment we have all been waiting for isn’t it?
If you have changed the name of the CRATES_TOKEN secret, you have to change secrets.CRATES_TOKEN to your tokens name
Full code
Why didn’t you use a fancy action for this?
In this case, because we don’t need to honestly.
Why didn’t we run tests?
For brevity.
You can run them very easily. Same command you use offline in fact.
Why do you like GitHub Actions?
- Free for an open source project
- Reduces the deployment effort because creating tags is easier
- No need to worry about saving or remembering the tokens
Creating tags for version updates? How!
First install cargo-bump
Then run
cargo bump minor — git-tag
Or it can be major or minor or patch. Semver style! Just like NPM
Then you can simply push to GitHub via
git push — follow-tags
Contact me
You can comment here or contact me via LinkedIn