mirror of
https://github.com/strapi/strapi.git
synced 2025-09-18 13:02:18 +00:00
Merge pull request #12356 from strapi/docs/contributing
Docs: Update contributing guide
This commit is contained in:
commit
cb418829ca
163
CONTRIBUTING.md
163
CONTRIBUTING.md
@ -1,129 +1,117 @@
|
|||||||
# Contribute to Strapi
|
# Contribute to Strapi
|
||||||
|
|
||||||
Strapi is an open-source project administered by [the Strapi team](https://strapi.io/company). We appreciate your interest and efforts to contribute to Strapi.
|
Strapi is an open-source project administered by [the Strapi team](https://strapi.io/about-us). We appreciate your interest and efforts to contribute to Strapi. See the [LICENSE](https://github.com/strapi/strapi/blob/master/LICENSE) licensing information. All work done is available on GitHub.
|
||||||
|
|
||||||
All efforts to contribute are highly appreciated, we recommend you talk to a maintainer prior to spending a lot of time making a pull request that may not align with the project roadmap.
|
We highly appreciate your effort to contribute, but we recommend you talk to a maintainer before spending a lot of time making a pull request that may not align with the project roadmap. Whether it is from Strapi or contributors, every pull request goes through the same process.
|
||||||
|
|
||||||
## Open Development & Community Driven
|
|
||||||
|
|
||||||
Strapi is an open-source project. See the [LICENSE](https://github.com/strapi/strapi/blob/master/LICENSE) file for licensing information. All the work done is available on GitHub.
|
|
||||||
|
|
||||||
The core team and the contributors send pull requests which go through the same validation process.
|
|
||||||
|
|
||||||
## Feature Requests
|
## Feature Requests
|
||||||
|
|
||||||
Feature Requests by the community are highly encouraged. Please feel free to submit a [feature request](https://portal.productboard.com/strapi) or to upvote 👍 [an existing feature request](https://portal.productboard.com/strapi) in the ProductBoard.
|
Feature Requests by the community are highly encouraged. Feel free to submit a new one or upvote an existing feature request on [ProductBoard](https://portal.productboard.com/strapi).
|
||||||
|
|
||||||
## RFCs
|
## Request For Comments (RFC)
|
||||||
|
|
||||||
Some important changes in Strapi require some thoughts to be put into the design phase before starting working on a PR.
|
Larger chunks of changes to Strapi that might affect many users require a thorough design phase before starting working on a PR. We will do our best to respond as soon as possible, but since we need to discuss these proposals thoroughly, please do not expect them to be merged and accepted immediately.
|
||||||
|
|
||||||
The RFC (Request For Comments) process will help us create consensus among the core team and include as much feedback as possible from the community, for these upcoming changes.
|
The Request For Comments process will help us create consensus among the core team and include as much feedback as possible from the community for these upcoming changes.
|
||||||
|
|
||||||
Before contributing, you will probably have to create a RFC on this [strapi/rfcs](https://github.com/strapi/rfcs) repo.
|
A Request For Comments has to be created on the [strapi/rfcs](https://github.com/strapi/rfcs) repository.
|
||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
This project and everyone participating in it are governed by the [Strapi Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please read the [full text](CODE_OF_CONDUCT.md) so that you can read which actions may or may not be tolerated.
|
This project, and everyone participating in it, are governed by the [Strapi Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold it. Make sure to read the [full text](CODE_OF_CONDUCT.md) to understand which type of actions may or may not be tolerated.
|
||||||
|
|
||||||
## Contributor License Agreement (CLA)
|
## Contributor License Agreement (CLA)
|
||||||
|
|
||||||
### Individual
|
### Individual contribution
|
||||||
|
|
||||||
In order to accept your pull request, we need you to submit a CLA. You only need to do this once. If you are submitting a pull request for the first time, you can complete your CLA [here](https://cla.strapi.io/strapi/strapi) or just submit a Pull Request and our CLA Bot will ask you to sign the CLA before merging your Pull Request.
|
You need to sign a Contributor License Agreement (CLA) to accept your pull request. You only need to do this once. If you submit a pull request for the first time, you can complete your CLA [here](https://cla.strapi.io/strapi/strapi), or our CLA bot will automatically ask you to sign before merging the pull request.
|
||||||
|
|
||||||
### Company
|
### Company contribution
|
||||||
|
|
||||||
If you are making contributions to our repositories on behalf of your company, then we will need a Corporate Contributor License Agreement (CLA) signed. In order to do that, please contact us at [contributions@strapi.io](mailto:contributions@strapi.io).
|
If you make contributions to our repositories on behalf of your company, we will need a Corporate Contributor License Agreement (CLA) signed. To do that, please get in touch with us at [contributions@strapi.io](mailto:contributions@strapi.io).
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
Pull requests relating to fixing documentation for the latest release should be directed towards the [documentation repo](https://github.com/strapi/documentation). Please see the documentation [contributing guide](https://github.com/strapi/documentation/blob/main/CONTRIBUTING.md) for more information on how to make the documentation pull request.
|
Pull requests related to fixing documentation for the latest release should be directed towards the [documentation repository](https://github.com/strapi/documentation). Please follow the [documentation contributing guide](https://github.com/strapi/documentation/blob/main/CONTRIBUTING.md) for more information.
|
||||||
|
|
||||||
## Bugs
|
## Bugs
|
||||||
|
|
||||||
We are using [GitHub Issues](https://github.com/strapi/strapi/issues) to manage our public bugs. We keep a close eye on this so before filing a new issue, try to make sure the problem does not already exist.
|
Strapi is using [GitHub issues](https://github.com/strapi/strapi/issues) to manage bugs. We keep a close eye on them. Before filing a new issue, try to ensure your problem does not already exist.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Before Submitting a Pull Request
|
## Before Submitting a Pull Request
|
||||||
|
|
||||||
The core team will review your pull request and will either merge it, request changes to it, or close it.
|
The Strapi core team will review your pull request and either merge it, request changes, or close it.
|
||||||
|
|
||||||
**Before submitting your pull request** make sure the following requirements are fulfilled:
|
|
||||||
|
|
||||||
- Fork the repository and create your branch from `master`.
|
|
||||||
- Run `yarn setup` in the repository root.
|
|
||||||
- If you’ve fixed a bug or added code that should be tested, add the tests and then link the corresponding issue in either your commit or your PR!
|
|
||||||
- Ensure the test suites are passing:
|
|
||||||
- `yarn test:unit`
|
|
||||||
- `yarn test:front`
|
|
||||||
- Make sure your code lints (`yarn lint`).
|
|
||||||
|
|
||||||
## Contribution Prerequisites
|
## Contribution Prerequisites
|
||||||
|
|
||||||
- You have [Node](https://nodejs.org/en/) at >= v12 and <= v16 and [Yarn](https://yarnpkg.com/en/) at v1.2.0+.
|
- You have [Node.js](https://nodejs.org/en/) at version >= v14 and <= v16 and [Yarn](https://yarnpkg.com/en/) at v1.2.0+ installed.
|
||||||
- You are familiar with Git.
|
- You are familiar with [Git](https://git-scm.com).
|
||||||
|
|
||||||
|
**Before submitting your pull request** make sure the following requirements are fulfilled:
|
||||||
|
|
||||||
|
- Fork the repository and create your new branch from `master`.
|
||||||
|
- Run `yarn setup` in the root of the repository.
|
||||||
|
- If you've fixed a bug or added code that should be tested, please make sure to add tests
|
||||||
|
- Ensure the following test suites are passing:
|
||||||
|
- `yarn test:unit`
|
||||||
|
- `yarn test:front`
|
||||||
|
- Make sure your code lints by running `yarn lint`.
|
||||||
|
- If your contribution fixes an existing issue, please make sure to link it in your pull request.
|
||||||
|
|
||||||
## Development Workflow
|
## Development Workflow
|
||||||
|
|
||||||
_For users running on Apple Silicon M1, you may encounter errors thrown by `sharp`. You may need to re-install `libvps` or to build `sharp` manually following [this issue comment](https://github.com/lovell/sharp/issues/2460#issuecomment-751491241) in order to start the project._
|
### 1. Fork the [repository](https://github.com/strapi/strapi)
|
||||||
|
|
||||||
To facilitate the contribution, we have drastically reduced the amount of commands necessary to install the entire development environment.
|
[Go to the repository](https://github.com/strapi/strapi) and fork it using your own GitHub account.
|
||||||
|
|
||||||
First of all, you need to check if you're using the [required versions of Node.js and npm](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/deployment.html).
|
### 2. Clone your repository
|
||||||
|
|
||||||
Then, please follow the instructions below:
|
|
||||||
|
|
||||||
#### 1. Fork the [repository](https://github.com/strapi/strapi)
|
|
||||||
|
|
||||||
[Go to the repository](https://github.com/strapi/strapi) and fork it to your own GitHub account.
|
|
||||||
|
|
||||||
#### 2. Clone from your repository
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@github.com:YOUR_USERNAME/strapi.git
|
git clone git@github.com:YOUR_USERNAME/strapi.git
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. Install the dependencies
|
### 3. Install the dependencies
|
||||||
|
|
||||||
Go to the root of the repository.
|
Go to the root of the repository and run the setup:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd strapi && yarn setup
|
cd strapi
|
||||||
|
yarn setup
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 4. Start the example application
|
### 4. Start the example application
|
||||||
|
|
||||||
To start a test example application to test your changes quickly and also for the next step.
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd strapi/examples/getstarted && yarn develop
|
cd ./examples/getstarted
|
||||||
```
|
|
||||||
|
|
||||||
Read the `getstarted` application README [here](./examples/getstarted/README.md) for more details.
|
|
||||||
|
|
||||||
#### 5. Running the administration panel in development mode
|
|
||||||
|
|
||||||
**Start the administration panel server for development**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd strapi/packages/strapi-admin
|
|
||||||
yarn develop
|
yarn develop
|
||||||
```
|
```
|
||||||
|
|
||||||
The administration panel will be available at http://localhost:4000/admin
|
Make sure to read the [`getstarted` application README](./examples/getstarted/README.md) for more details.
|
||||||
|
|
||||||
|
### 5. Running the administration panel in development mode
|
||||||
|
|
||||||
|
Start the administration panel server for development:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ./packages/core/admin
|
||||||
|
yarn develop
|
||||||
|
```
|
||||||
|
|
||||||
|
The administration panel should now be available at http://localhost:4000/admin. Make sure the example application (step 4) is still running.
|
||||||
|
|
||||||
**Awesome! You are now able to contribute to Strapi.**
|
**Awesome! You are now able to contribute to Strapi.**
|
||||||
|
|
||||||
#### 6. Available commands
|
### 6. Available commands
|
||||||
|
|
||||||
- `yarn watch` starts yarn watch in all packages.
|
- `yarn watch` starts yarn watch in all packages.
|
||||||
- `yarn build` builds the `strapi-helper-plugin` (use this command when you develop in the administration panel).
|
- `yarn build` builds the `strapi-helper-plugin` (use this command when you develop in the administration panel).
|
||||||
- `yarn setup` installs the dependencies.
|
- `yarn setup` installs dependencies.
|
||||||
- `yarn lint` lints the codebase.
|
- `yarn lint` lints the codebase.
|
||||||
- `yarn test:clean` removes the coverage.
|
- `yarn test:clean` removes the coverage reports.
|
||||||
- `yarn test:front` runs the front-end related tests.
|
- `yarn test:front` runs front-end related tests.
|
||||||
- `yarn test:front:watch` runs an interactive test watcher for the front-end.
|
- `yarn test:front:watch` runs an interactive test watcher for the front-end.
|
||||||
- `yarn test:unit` runs the back-end unit tests.
|
- `yarn test:unit` runs the back-end unit tests.
|
||||||
- `yarn test:e2e` runs an end-to-end test suite.
|
- `yarn test:e2e` runs an end-to-end test suite.
|
||||||
@ -132,20 +120,19 @@ The administration panel will be available at http://localhost:4000/admin
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Running the e2e tests
|
## Running the End-To-End (e2e) tests
|
||||||
|
|
||||||
The end-to-end tests require a Strapi app to be able to run. You can generate a "test app" using `yarn test:generate-app <database>`:
|
The end-to-end tests require a Strapi app to be able to run. You can generate a "test app" using `yarn test:generate-app <database>`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ yarn test:generate-app sqlite
|
$ yarn test:generate-app sqlite
|
||||||
$ yarn test:generate-app mongo
|
|
||||||
$ yarn test:generate-app postgres
|
$ yarn test:generate-app postgres
|
||||||
$ yarn test:generate-app mysql
|
$ yarn test:generate-app mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
You require a new app every time you run the tests. Otherwise, the test suite will fail. A script is available to make this process easier: `node test/e2e.js`. It'll delete the current test app, generate a new one, and run the test suite.
|
A new app is required every time you run the end-to-end tests otherwise, the test suite will fail. A script is available to make this process easier: `node test/e2e.js`. It will delete the current test app, generate a new one and run the test suite.
|
||||||
|
|
||||||
**Changing the database:**
|
### Changing the database
|
||||||
|
|
||||||
By default the script `test/e2e,js` creates an app that uses `sqlite`. But you can run the test suites using different databases:
|
By default the script `test/e2e,js` creates an app that uses `sqlite`. But you can run the test suites using different databases:
|
||||||
|
|
||||||
@ -155,18 +142,18 @@ $ node test/e2e.js --db=postgres
|
|||||||
$ node test/e2e.js --db=mysql
|
$ node test/e2e.js --db=mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
**Running the tests for the CE**
|
### Running the tests for the Community Editon (CE)\*\*
|
||||||
|
|
||||||
The test suites will run the tests for the EE version of Strapi. Should you want to test the CE version you will need to use the ENV variable `STRAPI_DISABLE_EE`:
|
The test suites run the tests for the Enterprise Edition (EE) version of Strapi by default. Should you want to test the Community Edition (CE) version, you will need to set the environment variable `STRAPI_DISABLE_EE` to true:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ STRAPI_DISABLE_EE=true node test/e2e.js
|
$ STRAPI_DISABLE_EE=true node test/e2e.js
|
||||||
$ STRAPI_DISABLE_EE=true yarn test:e2e
|
$ STRAPI_DISABLE_EE=true yarn test:e2e
|
||||||
```
|
```
|
||||||
|
|
||||||
**Specifying a license to use for the EE e2e tests**
|
### Specifying a license to use for the Enterprise Edition (EE)
|
||||||
|
|
||||||
The EE tests need a valid license to run correctly. To specify which license to use you can use `STRAPI_LICENSE`. You can specify it in an env file or as a prefix to the cli command:
|
The Enterprise Edition tests need a valid license to run correctly. To specify a license, you can use the environment variable `STRAPI_LICENSE`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ STRAPI_LICENSE=<license> node test/e2e.js
|
$ STRAPI_LICENSE=<license> node test/e2e.js
|
||||||
@ -179,28 +166,28 @@ $ STRAPI_LICENSE=<license> yarn test:e2e
|
|||||||
|
|
||||||
### Repository Organization
|
### Repository Organization
|
||||||
|
|
||||||
We chose to use a monorepo design that exploits [Yarn Workspaces](https://yarnpkg.com/en/docs/workspaces) in the way [React](https://github.com/facebook/react/tree/master/packages) or [Babel](https://github.com/babel/babel/tree/master/packages) does. This allows the community to easily maintain the whole ecosystem, keep it up-to-date and consistent.
|
We chose to use a monorepo design using [Yarn Workspaces](https://yarnpkg.com/en/docs/workspaces) in the way [React](https://github.com/facebook/react/tree/master/packages) or [Babel](https://github.com/babel/babel/tree/master/packages) does. This allows us to maintain the whole ecosystem keep it up-to-date and consistent.
|
||||||
|
|
||||||
We do our best to keep the master branch as clean as possible, with tests passing at all times. However, it may happen that the master branch moves faster than the release cycle. Therefore check the [releases on npm](https://www.npmjs.com/package/strapi) so that you're always up-to-date with the latest stable version.
|
We do our best to keep the master branch as clean as possible, with tests passing at all times. However, the master branch can move faster than the release cycle. Therefore check the [releases on npm](https://www.npmjs.com/package/@strapi/strapi) so that you are always up-to-date with the latest stable version.
|
||||||
|
|
||||||
### Reporting an issue
|
### Reporting an issue
|
||||||
|
|
||||||
Before submitting an issue you need to make sure:
|
Before submitting an issue you need to make sure:
|
||||||
|
|
||||||
- You are experiencing a concrete technical issue with Strapi.
|
- You are experiencing a technical issue with Strapi.
|
||||||
- You have already searched for related [issues](https://github.com/strapi/strapi/issues), and found none open (if you found a related _closed_ issue, please link to it from your post).
|
- You have already searched for related [issues](https://github.com/strapi/strapi/issues) and found none open (if you found a related _closed_ issue, please link to it from your post).
|
||||||
- You are not asking a question about how to use Strapi or about whether or not Strapi has a certain feature. For general help using Strapi, you may:
|
- You are not asking a question about how to use Strapi or about whether or not Strapi has a certain feature. For general help using Strapi, you may:
|
||||||
- Refer to [the official Strapi documentation](https://strapi.io).
|
- Refer to the [official Strapi documentation](https://docs.strapi.io).
|
||||||
- Ask a member of the community in the [Strapi Discord Community](https://discord.strapi.io/).
|
- Ask a member of the community in the [Strapi Discord Community](https://discord.strapi.io/).
|
||||||
- Ask a question on [our community forum](https://forum.strapi.io).
|
- Ask a question on the [Strapi community forum](https://forum.strapi.io).
|
||||||
- Your issue title is concise, on-topic and polite.
|
- Your issue title is concise, on-topic, and polite.
|
||||||
- You can and do provide steps to reproduce your issue.
|
- You provide steps to reproduce the issue.
|
||||||
- You have tried all the following (if relevant) and your issue remains:
|
- You have tried all the following (if relevant), and your issue remains:
|
||||||
- Make sure you have the right application started.
|
- Make sure you have the right application started.
|
||||||
- Make sure the [issue template](.github/ISSUE_TEMPLATE) is respected.
|
- Make sure the [issue template](.github/ISSUE_TEMPLATE) is respected.
|
||||||
- Make sure your issue body is readable and [well formatted](https://guides.github.com/features/mastering-markdown).
|
- Make sure your issue body is readable and [well formatted](https://guides.github.com/features/mastering-markdown).
|
||||||
- Make sure you've killed the Strapi server with CTRL+C and started it again.
|
- Make sure you've stopped the Strapi server with CTRL+C and restarted it.
|
||||||
- Make sure the application you are using to reproduce the issue has a clean `node_modules` directory, meaning:
|
- Make sure your application has a clean `node_modules` directory, meaning:
|
||||||
- no dependencies are linked (e.g. you haven't run `yarn link`)
|
- you didn't link any dependencies (e.g., by running `yarn link`)
|
||||||
- that you haven't made any inline changes to files in the `node_modules` folder
|
- you haven't made any inline changes to files in the `node_modules` directory
|
||||||
- that you don't have any weird global dependency loops. The easiest way to double-check any of the above, if you aren't sure, is to run: `$ rm -rf node_modules && yarn cache clean && yarn`.
|
- you don't have any global dependency loops. If you aren't sure, the easiest way to double-check any of the above is to run: `$ rm -rf node_modules && yarn cache clean && yarn setup`.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user