diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4c2c0eb..6c232ba 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -9,7 +9,7 @@ on:
jobs:
build-release-files:
name: Build release files for ${{ matrix.arch }}-${{ matrix.platform }} with Rust ${{ matrix.toolchain }}
- if: github.repository_owner == 'clechasseur' # Don't build on forks # TODO replace with your GitHub username
+ if: github.repository_owner == 'clechasseur' # Don't build on forks
strategy:
matrix:
toolchain: [ stable ]
diff --git a/README.md b/README.md
index de9c2db..2870a07 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
This is a simple template repository for Rust projects that includes some default workflows and configuration files.
-## Usage
+## TL;DR
1. Create a new repository using this template (_Note_: do not include all branches, unless you want to end up with the test branch)
2. Clone your new repository
@@ -18,3 +18,178 @@ This is a simple template repository for Rust projects that includes some defaul
6. Adjust links in [CONTRIBUTING.md](./CONTRIBUTING.md), [DEVELOPMENT.md](./DEVELOPMENT.md), [SECURITY.md](./SECURITY.md) and [PULL_REQUEST_TEMPLATE.md](./.github/PULL_REQUEST_TEMPLATE.md)
7. ???
8. Profit!
+
+## More info
+
+This template is of course opinionated, but the following sections present how it is meant to be used.
+(This documentation assumes that you are familiar with Rust development; if not, you can refer to the [Cargo book](https://doc.rust-lang.org/cargo/) for more information on how to setup and manage Rust projects.)
+
+### Required tools
+
+In addition to a stable Rust toolchain, the template uses the following tools:
+
+* A Nightly Rust toolchain
+* [`just`](https://github.com/casey/just) (command runner, a `make` of sorts)
+* [`cargo-tarpaulin`](https://github.com/xd009642/tarpaulin) (code coverage tool)
+* [`cargo-hack`](https://github.com/taiki-e/cargo-hack) (CI helper, used by other tools)
+* [`cargo-minimal-versions`](https://github.com/taiki-e/cargo-minimal-versions) (MSRV helper tool)
+* [`cargo-msrv-prep`](https://github.com/clechasseur/msrv-prep) (MSRV helper tool)
+* [`cargo-msrv`](https://github.com/foresterre/cargo-msrv) (tool to determine MSRV)
+
+### `just`
+
+The template uses the [`just`](https://github.com/casey/just) command runner to define some build commands.
+This makes it easier to run common commands without having to remember any project-specific flags that might need to be passed.
+`just` commands are stored in a [`justfile`](./justfile) and are called _recipes_.
+
+Running `just` without argument will print the list of available recipes.
+The following table lists the most interesting ones.
+
+| Command | Purpose |
+|---------|---------|
+| `just tidy` | Run `clippy` and `rustfmt` on the project's code1 |
+| `just check` | Run `cargo check` on all workspace projects |
+| `just build` | Run `cargo build` on all workspace projects |
+| `just test` | Run `cargo test` for all tests in workspace |
+| `just tarpaulin` | Run `cargo tarpaulin` to execute tests with code coverage (see below) |
+| `just update` | Run `cargo update` |
+| `just doc` | Generate documentation with `rustdoc`; when run locally, opens the resulting doc when done (with `--open`) |
+| `just doc-coverage` | Produce a doc coverage report (an experimental `rustdoc` feature)1 |
+| `just msrv` | Determine the entire project's MSRV using `cargo-msrv` (see below) |
+| `just msrv-minimal` | Determine the MSRV of `lib` and `bin` crates only using `cargo-msrv` (see below) |
+| `just check-minimal` | Validate the minimal MSRV determined with `just msrv-minimal` (see below) |
+| `just test-package` | Run `cargo publish --dry-run` to test package publication |
+
+1 : these commands use Nightly Rust.
+
+The `justfile` also uses variables to determine what to run and what arguments to pass.
+These can be overridden when calling `just`, however.
+For example, you can override `toolchain` to run a command with another Rust toolchain:
+
+```sh
+just toolchain=nightly test
+```
+
+There are other variables as well; check out the beginning of the [`justfile`](./justfile) for details.
+
+### Workflows
+
+The template includes some GitHub workflows to perform common CI/CD tasks.
+
+| File | Triggers on... | Purpose |
+|------|----------------|---------|
+| [`audit-check.yml`](./.github/workflows/audit-check.yml) | `push`, `schedule` (every day) | Run security audits on the project's dependencies using [`cargo-audit`](https://rustsec.org/) |
+| [`ci.yml`](./.github/workflows/ci.yml) | `push` | All CI-related tasks: linting, running tests, checking MSRV, etc. |
+| [`release.yml`](./.github/workflows/release.yml) | `release` (`created` only) | Build release binaries and attach them to a GitHub release |
+
+By default, workflows are disabled (except for manual triggering).
+To enable them, edit the corresponding file to uncomment the appropriate event at the top of the file.
+There are also places where you will need to edit the files depending on your project's Rust version, etc.
+
+If you don't need one of the workflow (such as `release.yml` if your project does not publish binaries), you can simply delete the file.
+
+### Dependabot
+
+The template includes a [Dependabot config file](./.github/dependabot.yml) that instructs Dependabot to check your project's dependencies for updates.
+By default, Rust dependencies will be checked daily and GitHub actions will be checked weekly.
+You can modify the file to adapt it to your needs (or delete it if you don't use Dependabot).
+
+### `build.rs`
+
+The template include a Rust build script (see the [`build.rs`](./build.rs) file).
+This script will be compiled and executed before your crate's code is built and allows you to set some arguments or configuration values.
+For more details, see the appropriate [Cargo book section](https://doc.rust-lang.org/cargo/reference/build-scripts.html).
+
+If you do not need a build script, you can simply delete the file.
+
+### `rustfmt`
+
+The template includes a [`rustfmt.toml`](./rustfmt.toml) file to configure the `rustfmt` tool.
+This tool is a Rust code formatter; it can be executed via
+
+```sh
+just fmt
+```
+
+or in combination with `clippy` via
+
+```sh
+just tidy
+```
+
+The file contains configuration values that deviate from the defaults, but they require the use of a Nightly Rust toolchain to use them.
+If you do not use `rustfmt`, you can simply delete the config file.
+
+### Code coverage
+
+The template includes support for running tests with coverage using [`cargo-tarpaulin`](https://github.com/xd009642/tarpaulin).
+The tool uses the [`tarpaulin.toml`](./tarpaulin.toml) file to read configuration values; you can edit the file to adapt it to your needs as required.
+It's possible to run tests with coverage locally using
+
+```sh
+just tarpaulin
+```
+
+The [`ci.yml`](./.github/workflows/ci.yml) workflow also includes support for uploading coverage results to [codecov.io](https://codecov.io/).
+Coverage settings are controlled through the [`codecov.yml`](./codecov.yml) file (the coverage target, for example).
+In order to use this, you will need to link Codecov with your GitHub account; for more information, see Codecov's [GitHub tutorial](https://docs.codecov.com/docs/github-tutorial).
+(Also see [this warning](https://github.com/codecov/codecov-action?tab=readme-ov-file#dependabot) in order to allow proper coverage checks in Dependabot-created PRs.)
+
+### MSRV
+
+MSRV stands for _Minimum Supported Rust Version_.
+Lots of crates advertise their MSRV so that users can determine whether they can use the dependency in their own projects.
+It's also possible to specify the project's MSRV in your `Cargo.toml` file through the [`rust-version` field](https://doc.rust-lang.org/cargo/reference/manifest.html#the-rust-version-field).
+
+The template includes support for determining and validating the project's MSRV.
+
+#### Determining the MSRV for crate users
+
+In order to determine the minimal Rust version needed to build your crate from a user perspective, you need to check `lib` and `bin` crates only.
+If you installed all required tools, this can be determined by running
+
+```sh
+just msrv-minimal
+```
+
+This Rust version can then be configured in the CI workflow (see [`ci.yml`](./.github/workflows/ci.yml)'s `msrv-check` job).
+
+#### Determining the MSRV for the project iself
+
+In order to determine the minimal Rust version that can be used to build the project _itself_ (including any tests, examples, etc.), you can use
+
+```sh
+just msrv
+```
+
+This Rust version can then be configured in the CI workflow (see [`ci.yml`](./.github/workflows/ci.yml)'s `build` job).
+
+#### Validating the MSRV locally
+
+To validate the project's MSRV locally, you can use the `check-minimal` recipe.
+Assuming your project's MSRV is Rust 1.63.0, run
+
+```sh
+just toolchain=1.63.0 check-minimal
+```
+
+### Other stuff
+
+The template comes with a few more files to set you up for publishing an open-source Rust project, including:
+
+* [Issue templates](./.github/ISSUE_TEMPLATE) ([bug report](./.github/ISSUE_TEMPLATE/bug_report.md), [feature request](./.github/ISSUE_TEMPLATE/feature_request.md))
+* [Pull request template](./.github/PULL_REQUEST_TEMPLATE.md)
+* [`CODEOWNERS` file](./.github/CODEOWNERS) (see [About code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) on GitHub)
+* [Code of Conduct](./CODE_OF_CONDUCT.md) (uses the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/))
+* [Contributing guidelines](./CONTRIBUTING.md)
+* [Development guide](./DEVELOPMENT.md) (for people who want to contribute to the project)
+* [License](./LICENSE) (MIT license)
+* [Security policy](./SECURITY.md) (including a list of versions that are still supported and for which updates might be released to fix vulnerabilities)
+* [`.gitignore` file](./.gitignore) (with some Rust-oriented ignores)
+* [`.dockerignore` skeleton file](./.dockerignore) (in case you need to build Docker files for your project)
+
+You can remove any file you do not need; those that you keep might need to be adapted, especially those containing project links.
+
+## Questions? Comments?
+
+If you notice a problem in the template or would like to suggest an improvement, you can create an [issue](https://github.com/clechasseur/rust-template/issues/new).