We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.
We use GitHub Flow, so all code changes happen through pull requests
Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests:
- Fork the repo and create your branch from
main
. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue that pull request!
In short, when you submit code changes, your submissions are understood to be under the same MIT License that covers the project.
Report bugs using GitHub's issues
We use GitHub issues to track public bugs. Report a bug by opening a new issue; it's that easy!
Great Bug Reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- Be specific!
- Give sample code if you can.
- What you expected would happen
- What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
People love thorough bug reports.
- 2 spaces for indentation rather than tabs
- You can try running
npm run lint
for style unification
In this section, you'll find the basic commands you need to run for building, testing, and maintaining the quality of the codebase.
This project is structured within an Nx Workspace, providing powerful tools and capabilities to enhance development practices. For more information, see the Nx Documentation.
The project is structured as a monorepo, with each package in the packages
directory.
To view the list of packages, run:
pnpm nx show projects
The e2e tests are located in the e2e
directory.
Nx uses a cache to speed up development. If you want to bypass the cache, you can use the --skip-nx-cache
flag:
pnpm nx build create-solana-dapp --skip-nx-cache
To compile the project and generate the necessary artifacts, use the build command:
pnpm build
To build an individual package, invoke the nx build
command with the project name:
pnpm nx build create-solana-dapp
You can build the project in watch mode by appending the --watch
flag for faster feedback:
pnpm nx build create-solana-dapp --watch
To ensure your contributions do not break any existing functionality, run the test suite with the following command:
pnpm test
To run the tests for a specific package, invoke the nx test
command with the project name:
pnpm nx test preset-react
You can run the tests in watch mode by appending the --watch
flag for faster feedback:
pnpm nx test preset-react --watch
To support better testing and tracking of changes to the generated applications, each template preset has snapshots
generated (which are committed). As part of the each preset's test
, its respective snapshot is checked to verify
generated output is as expected.
When making adjustments to a generator that affected the outputted scaffold, the respective preset's snapshot will need to be updated.
To update all snapshots, run the test
for each preset via NX with the update flag (i.e. -u
):
# full command
pnpm nx run-many --target test --skip-nx-cache -u
# or the shorthand script
pnpm test -u
It's important to maintain the coding standards of the project. Lint your code by executing:
pnpm lint
To lint a specific package, invoke the nx lint
command with the project name:
pnpm nx lint preset-react
If you want to quickly test your changes to the CLI, you can do the following:
Run the build in watch mode in one terminal:
pnpm nx build create-solana-dapp --watch
In another terminal, move to the directory where you want to test the create-solana-dapp
CLI and run by invoking the
node
command with the path to the compiled CLI:
cd /tmp
node ~/path/to/create-solana-dapp/dist/packages/create-solana-dapp/bin/index.js --help
The same goes for the solana-dev
CLI:
# In one terminal
pnpm nx build solana-dev --watch
# In another terminal
cd /tmp
node ~/path/to/create-solana-dapp/dist/packages/solana-dev/bin/index.js --help
If you want to test your changes to the CLI in a local registry, you can do the following:
Start the local registry:
pnpm local-registry
In another terminal, run the following command to publish the packages to the local registry:
pnpm local-publish <your-version>
Note: This will publish all the packages to the local registry with the local
tag. Therefore, to utilize any of these
packages from your local registry, you must specify using this same local
tag on the packages (e.g.
create-solana-dapp@local
).
Once that's done, with the local registry still running, you can run the create-solana-dapp
CLI by invoking the
following command:
npx create-solana-dapp@local
For example, this one-liner will create a new app with the latest version of the create-solana-dapp
CLI using the
React preset and yarn as the package manager:
npx --yes create-solana-dapp@local app-"$(date +%s)" --preset react --package-manager yarn
To check all the options, run:
npx create-solana-dapp@local --help
The local registry will be running at http://localhost:4873 and in order to use it, changes to the ~/.npmrc
file are
required. The local-registry script will do this for you, but it might fail to clean up after itself. If you run into
any issues, try removing the following lines from your ~/.npmrc
file:
registry=http://localhost:4873/
//localhost:4873/:_authToken=secretVerdaccioToken
and replace them with:
registry=https://registry.npmjs.org/
To run the e2e tests, use the following command:
pnpm nx e2e preset-react-e2e
This will spin up a local registry, publish a package with the e2e tag, and run the e2e tests.
We follow the Conventional Commits specification for commit:
fix
: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in semantic versioning).feat
: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in semantic versioning).BREAKING CHANGE
: a commit that has the text BREAKING CHANGE: at the beginning of its optional body or footer section introduces a breaking API change (correlating with MAJOR in semantic versioning). A BREAKING CHANGE can be part of commits of any type.- Others: commit types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the Angular convention) recommends build:, chore:, ci:, docs:, style:, refactor:, perf:, test:, and others.
By contributing, you agree that your contributions will be licensed under its MIT License.
This document was adapted from the open-source contribution guidelines for Facebook's Draft