A big welcome and thank you for considering contributing to Fadroma!
Reading and following these guidelines will help us make the contribution process easy and effective for everyone involved. It also communicates that you agree to respect the time of the developers managing and developing these open source projects. In return, we will reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests.
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
Before contributing please read our Code of Conduct which all contributors are expected to adhere to.
After you have determined that the issue is present in the latest version of the default branch, create an issue and provide the following information:
-
Use a descriptive title to identify the problem.
-
Explain the expected behavior
-
Describe the steps to reproduce the problem with as many details as necessary.
-
When providing code samples, please use code blocks
Similar to bug reports. Please provide the following information:
-
Use a descriptive title to identify the suggestion.
-
Provide a description of a suggested enhancement in as many details as necessary.
-
When providing code samples, please use code blocks
Requirements:
- Git
- Node 18+
- Rust
- Docker (make sure you can call
docker
withoutsudo
)
If you have write access to the Fadroma repo:
git clone --recursive [email protected]:hackbg/fadroma.git # clone with submodules
External contributors that don't have write access to the repo should instead fork Fadroma and clone from their fork's URL
git clone --recursive [email protected]:yourusername/fadroma.git # clone with submodules
- See also: submitting pull requests.
If you forget the --recursive
, you can initialize the submodules with:
cd fadroma # enter repo
git submodule update --init --recursive # init git submodules
- You may also need to run this command after switching branches
or other
git checkout
invocations that change the module pointer..
Fadroma's JS side is structured as a PNPM workspace. In recent versions of Node,
you should be able to enable PNPM with corepack enable
. Alternatively, use npm i -g pnpm
.
cd fadroma # enter workspace
corepack enable # enable pnpm
pnpm i # install dependencies
Now it's your time to shine. When implementing your contribution, you can use the following commands to check for correctness:
pnpm check # check types
pnpm test # show list of tests
pnpm test all # run full test suite
pnpm cov all # measure test coverage
- You can pass arguments to
pnpm test
andpnpm cov
that allow you to narrow down the scope of tests you run. Fewer tests run faster, and depend on fewer external services
git add .
git commit -m "feat(name): description"
- Longer commit messages are welcome.
- The preferred commit line format is roughly inspired by Conventional Commits, but does not conform to that specification.
- Some common prefixes are
feat
,fix
,break
,refactor
,chore
,docs
,wip
,release
. - Combine prefixes with
+
, e.g.feat(devnet)+fix(agent): feature in devnet needed fix in agent
- Version bumps should go in release commits e.g.
release(2.3.4,[email protected]): bugfix in agent
- When doing more than 1 thing in the same commit, try
git add -p .
to interactively separate sets of unrelated changes into separate commits.
To skip the pre-commit type check:
git commit --no-verify -m "feat(name): description"
- Skipping the pre-commit type check is not generally recommended.
- It's allowed within a feature branch (as an escape hatch for saving unfinished work), since the branch will have to pass CI (incl. typecheck) before merge.
- Also useful when you know you haven't changed any TS/JS code in your commit.
- The pre-commit check includes a
pnpm i
which may update one or morepnpm-lock.yaml
files. Currently, these are not automatically added to the commit; usegit add ...
andgit commit --amend --no-verify --no-edit
to add them to the last commit. - Avoid amending commits that are already pushed because you'll have to force push those, which makes submodules fragile.
First, update the version
field in the package.json
of the package that
you're releasing. If needed, update it in the package.json
of dependent packages.
Then, make a release commit:
git add .
git commit -m "release(component@version): description"
To test if a package is fit for publishing, use a "dry run":
pnpm release --dry-run # test that package can be publshed
To publish a package, run this in the package directory:
pnpm release # publish package to npm
- Fadroma uses
@hackbg/ubik
to "fix in post" some drama around TypeScript and ESM extensions.
Should you need to hack on Fadroma in the context of an existing project, it's easy to add it as a submodule:
git submodule add -b fix/something [email protected]:$YOURFORK/fadroma.git
git submodule update --init --recursive
git commit -m "added Fadroma as submodule"
TODO: Add this setup into @fadroma/create
When updating the base image (FROM
line) in a Dockerfile (such as the base build Dockerfile,
or the devnet Dockerfiles), make sure to preserve the registry URL prefix and SHA256 digest
of the base image. In the spirit of reproducible builds, this prevents a hostile build
environment from potentially replacing base images with its own versions for "optimization"
purposes.
Instructions are similar to those for bug reports. Please provide the following information:
-
If this is not a trivial fix, consider creating an issue to discuss first and later link to it from the PR.
-
Use a descriptive title for the pull request.
-
Follow Conventional Commit specification where sufficiently large or impactful change is made.
-
Provide a description of the changes in as many details as necessary.
-
Cool history doesn't change. We prefer to avoid rebases, as they necessitate overwriting history. An exception is
git pull --rebase
. Still, feel free to use what is most appropriate.
All PRs require at least one review approval before they can be merged. Each reviewer is responsible for all checked items unless they have indicated otherwise by leaving their handle next to specific items. In addition, use the following review explanations:
-
LGTM
without explicit approval means that the changes look good, but you haven't thoroughly reviewed all of the items. -
Approval
means that you have completed the review. In addition, follow these guidelines:-
Naming must be consistent with conventions and the rest of the codebase
-
Code must live in a reasonable location.
-
-
If you are only making "surface level" reviews, submit any notes as
Comments
without adding a review.