This document describes the process of contributing to the reference FVM implementation (this project).
If you have a general FVM related question or idea, please either as on the Filecoin Slack, or open a new discussion in fvm-specs.
If you'd like to report a bug or suggest an enhancement in the reference FVM implementation, please file an issue.
To make a change to the FVM.
- When in doubt, open an issue first to discuss the change.
- Make your change.
- Write a test for your change.
- Update the crate's
CHANGELOG.md
. If you're making any breaking changes, prefix change with "BREAKING:". - Finally, open a PR.
To prepare a release.
- Make sure the crate's
CHANGELOG.md
is up-to-date (look throughgit log -- path/to/crate
). - Make sure the changes are well tested. See [builtin actors testing][builtin actors testing].
- Pick a next version (for each crate you're releasing). Look through the changelogs and carefully decide if it's a breaking release or not. Then read rust's semver documentation.
- Install
cargo-edit
(cargo install cargo-edit
). - Create a new branch.
- Use
cargo set-version
to set the version for each crate you're releasing. This will both update the crate version, and make all other crates in the workspace depend on the latest version. - Make sure the changelogs are all up-to-date, set the release date & version, and add a new "Unreleased" section.
- Commit your changes, and make a PR.
Once the release is prepared, it'll go through a review:
- Make sure that we're ready to release. E.g., make sure downstream can consume the release.
- Make sure that we're correctly following semver.
- Make sure that we're not missing anything in the changelogs.
Finally, an FVM "owner" will:
- Merge the release PR to master.
- For each released crate, create a git:
crate_name@crate_version
. - Run
cargo publish
for each released crate (in dependency order).
The crates in this workspace have the following structure:
If you're releasing any non-trivial changes to crates used by the builtin actors, please test them. This includes:
- Any crates in
ipld/
exceptcar
. shared/
(fvm_shared
).sdk/
(fvm_sdk
).
To test:
- Checkout this repo as
ref-fvm/
and and the builtin-actors repo asbuiltin-actors/
in the same directory. - Uncomment the "patch" section in
builtin-actors/Cargo.toml
that starts with:[patch.crates-io] fvm_shared = { path = "../ref-fvm/shared" } ...
- Run
cargo test --all
(or, at a minimum,cargo check --all --tests --lib
.
If that works, proceed with releasing these crates.