Release Manager for Your Projects on Forgejo, Gitea, GitHub, and GitLab
Go to file
Christoph J. Scherr 872338c83f
cargo devel CI / cargo CI (push) Successful in 2m28s Details
Merge branch 'master' of
2024-04-26 14:24:29 +02:00
.gitea/workflows update cargo ci 2024-03-03 14:02:34 +01:00
.github/workflows update cargo ci 2024-03-03 14:02:34 +01:00
data/media basic readme 2024-01-23 22:12:15 +01:00
scripts fix release script 2024-02-02 00:06:32 +01:00
src more print error 2024-04-26 14:24:23 +02:00
.autocrate.yaml github should maybe work 2024-04-26 08:54:23 +02:00
.gitignore github should maybe work 2024-04-26 08:54:23 +02:00
Cargo.toml github should maybe work 2024-04-26 08:54:23 +02:00
LICENSE we are now GPL-3 2024-01-23 22:38:52 +01:00 security 2024-02-24 18:48:30 +01:00 security 2024-02-24 18:48:30 +01:00


Project badge License Gitea Release Gitea language count cargo checks and tests


Autocrate simplifies the creation and maintenance of releases for your Rust projects hosted on fancy git servers. By providing functionalities like creating releases uploading artifacts, publishing crates, and managing changelogs, Autocrate tries to streamline the release process. Although initially built for Forgejo, I plan to extend support to other platforms such as GitHub and GitLab.

Autocrate can then be used in CI/CD, or in projects without continuous integration to release software.

The software is built in Rust, and offers integration for Rust Projects with Cargo. In the future, using other tools and specifying custom scripts will become possible.

Take a look at the scripts directory! and are what I'm trying to get rid of.


  • Create and update releases on your Git platform
  • Publish crates to or other repositories
  • Upload artifacts, including binaries and signatures alongside your releases
  • Generate changelogs and release notes
  • Configure with a simple yaml file

Upcoming Features

Autocrate is still in pre-alpha, so the features listed above are still being worked on. For the future, the following Features are planned:

  • Support for platforms other than Forgejo
  • Custom artifact build scripts
  • Version bumping
  • Interactive and scriptable CLI interface
  • Publish a cargo workspace (that depends on it's own crates)

Getting Started

Before getting started with Autocrate, make sure you have the necessary prerequisites covered:

You can use autocrate init to set your workspace up with a basic .autocrate.yaml.


  • Git

If you want to compile it yourself

Install Rust, the officially recommended way is through Your distribution may offer a Rust distribution in your package manager as an alternative


Once the above pre-requisites are met, begin setting up Autocrate by running the following command in your terminal:

$ cargo install autocrate

This command downloads from and compiles Autocrate locally, making it readily accessible through your command line interfaces.

Configuring Autocrate

Create a YAML file named .autocrate.yml (or .yaml) in the root of your Git repository. It should contain the following parameters (replace the placeholders):

Parent Key Value Explanation
(root) changelog list of keys with this as parent (git-log etc) information on how a changelog is generated
changelog enable true/false If false, no changelog will be generated
changelog git-log true/false should a changelog be generated with git log?
(root) uses list of keys with this as parent (cargo etc) Marks features to be used by Autocrate
uses cargo list of keys with this as parent (publish etc) tells us that your project uses cargo
cargo publish true/false should we publish crates?
cargo registries registries see this A list of registries we should publish to. If empty defaults to
(root) api list of names, which each have the same keys defines the api we talk to
api.NAME type one of gitea,github,gitlab (currently only support for gitea Let's us know which api type we are talking to
api.NAME endpoint Base URL of the target server Let's us know which api type we are talking to
api.NAME auth list of keys with this as parent (user and pass) We probably need authentication on the target server
api.NAME.auth user a string Which user should we try to authenticate as
api.NAME.auth pass contains either of text, env or file sets the secret for authentication with this server
api.NAME.auth.pass text a authentication pass as clear text A secret for authentication of the server, probably a token
api.NAME.auth.pass env env var which contains the token A secret for authentication of the server, probably a token
api.NAME.auth.pass file file var which contains the token A secret for authentication of the server, probably a token

An example .autocrate.yaml could look like this:

  enable: true
  git-log: true

    publish: true
  # tokens are loaded from ~/.cargo/config.toml
    - default
    - cscherr

    type: github
      user: PlexSheep
        text: token_superimportantsecret
    type: gitea
      user: PlexSheep
        file: secrettoken.txt

After Autocrate has been bootstrapped, it will be released and published with itself, so you can take a look at this repositories .autocrate.yaml.

Using Autocrate

After you have your workspace with a .autocrate.yaml file, you can:

  • autocrapte release to create a release on your git server(s), optionally publishing too
  • autocrate publish to publish your crate to the specified registries(s) (default is
  • autocrate changelog to generate a changelog since the last tag


Autocrate is free software.

The Autocrate project is distributed under the terms of the GPL-3 License. Please refer to LICENSE for complete licensing details.

Project status

The project has started recently and is currently in pre-alpha. Many features are still missing or experimental


I'd be very happy to get contributions! Although the master repository is on my self hosted git server, you're free to create issues, PRs and so on GitHub. If enough activity comes around, moving to GitHub Codeberg might be a good idea.

If you have any questions, use issues and discussions tabs or write me an email to


If you find a security issue with this repository, it would be best if you sent me a mail to or reported it on GitHub.