139 lines
5.9 KiB
Markdown
139 lines
5.9 KiB
Markdown
# Contributing
|
|
|
|
Thanks for your interest in contributing to WooCommerce Blocks! Below are some developer docs for working with the project.
|
|
|
|
To get started you need to install all required dependencies by running the following command in the plugin directory.
|
|
|
|
```bash
|
|
npm install && composer install
|
|
```
|
|
|
|
## NPM commands
|
|
|
|
We have a set of scripts in npm to automate important developer tasks.
|
|
|
|
### Build
|
|
|
|
- Run `$ npm run build` to build all assets for production.
|
|
- Run `$ npm start` to run the development build and watch for changes.
|
|
|
|
These scripts compile the code using `webpack`.
|
|
|
|
You can also run `$ npx webpack` to run the development build and not keep watching.
|
|
|
|
### Lint
|
|
|
|
Run `$ npm run lint` to check code against our linting rules.
|
|
|
|
This script runs 3 sub-commands: `lint:php`, `lint:css`, `lint:js`. Use these to run linters across the codebase (linters check for valid syntax).
|
|
|
|
- `lint:php` runs phpcs via composer, which uses the [phpcs.xml](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/phpcs.xml) ruleset.
|
|
- `lint:css` runs stylelint over all the scss code in `assets/css`, using the rules in [.stylelintrc.json.](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/.stylelintrc.json)
|
|
- `lint:js` runs eslint over all the JavaScript, using the rules in [.eslintrc.js.](https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/master/.eslintrc.js)
|
|
|
|
### Test
|
|
|
|
Run `$ npm run test` to run unit tests on the JavaScript.
|
|
|
|
The test scripts use [wp-scripts](https://github.com/WordPress/gutenberg/tree/master/packages/scripts) to run jest for component and unit testing.
|
|
|
|
- `test:update` updates the snapshot tests for components, used if you change a component that has tests attached.
|
|
- Use `test:watch` to keep watch of files and automatically re-run tests.
|
|
|
|
### Create an installable zip package
|
|
|
|
Run `$ npm run package-plugin` to trigger install and build, and then create a zip file which you can use to install WooCommerce Blocks in WordPress admin.
|
|
|
|
## Releasing new versions of blocks
|
|
|
|
These instructions cover new releases of the blocks plugin for those with commit access.
|
|
|
|
### Prerequisites
|
|
|
|
- Have [Github's Hub](https://github.com/github/hub) cli installed and authenticated.
|
|
|
|
**Before any release** ensure you update:
|
|
|
|
- The `readme.txt` file supported versions, changelog and list of blocks if the release includes new blocks.
|
|
|
|
> Note: version numbers will automatically be updated in files via the deploy script (see `bin/version-changes.sh`).
|
|
|
|
### Tagging new releases on GitHub
|
|
|
|
Tagging a new version on GitHub can be done by running the following script:
|
|
|
|
```shell
|
|
$ npm run deploy
|
|
```
|
|
|
|
This will trigger a build and then run the release script (found in `/bin/github-deploy.sh`). This tags a new version and creates the GitHub release from your current branch.
|
|
|
|
__Important:__ Before running the deploy script ensure you have committed all changes to GitHub and that you have the correct branch checked out that you wish to release.
|
|
|
|
If you want to add additional details or a binary file to the release after deployment, [you can edit the release here](https://github.com/woocommerce/woocommerce-gutenberg-products-block/releases).
|
|
|
|
### Pushing new releases to WordPress.org
|
|
|
|
If you have SVN commit access to the WordPress.org plugin repository you can run the following script to prepare a new version:
|
|
|
|
```shell
|
|
$ npm run release
|
|
```
|
|
|
|
This will ask for a tagged version number, check it out from GitHub, check out the SVN repository, and prepare all files. It will give you a command when it's finished to do the actual commit; you have a chance to test/check the files before pushing to WordPress.org.
|
|
|
|
__Important:__ Before running the release script ensure you have already pushed a new release to GitHub.
|
|
|
|
### Bumping the version
|
|
|
|
After you release, create a commit to master that updates the version to the next minor with a `-dev` suffix. For example, if you just released `2.5.0`, you'd do an update changing the version to `2.6.0-dev`. See an [example here](https://github.com/woocommerce/woocommerce-gutenberg-products-block/commit/e27f053e7be0bf7c1d376f5bdb9d9999190ce158).
|
|
|
|
## Updating a single file in WordPress.org
|
|
|
|
Sometimes, we need to update a single file in WordPress.org without wanting to do a full release, for example, updating the `readme.txt` versions or descriptions. In order to do that, refer to the _[Editing Existing Files](https://developer.wordpress.org/plugins/wordpress-org/how-to-use-subversion/#editing-existing-files)_ section of the Subversion guide in developer.wordpress.org or follow these steps:
|
|
|
|
1. Checkout the plugin repo:
|
|
|
|
```
|
|
svn co "http://plugins.svn.wordpress.org/woo-gutenberg-products-block/"
|
|
cd woo-gutenberg-products-block
|
|
```
|
|
|
|
2. Modify the files you want to change in `trunk` or `tags/x.y.z`.
|
|
|
|
3. Check your changes with:
|
|
|
|
```
|
|
svn stat
|
|
svn diff
|
|
```
|
|
|
|
4. Commit the changes to the server:
|
|
|
|
```
|
|
svn ci -m "Updated readme.txt description"
|
|
```
|
|
|
|
## Publishing `@woocommerce/block-library`
|
|
|
|
In the past, we published the blocks to NPM at [@woocommerce/block-library](https://www.npmjs.com/package/@woocommerce/block-library).
|
|
|
|
**Note: since version 2.3.0 `@woocommerce/block-library` has been deprecated, you shouldn't publish a new version without first discussing it with the team**
|
|
|
|
To release a new version, perform the following steps:
|
|
|
|
- Run `npm pack` to prep a `.tgz` file.
|
|
- Optionally test the package by uploading this onto a test site.
|
|
- Run `npm publish --access public`, which will push the version up to npm.
|
|
|
|
## Legacy builds
|
|
|
|
This plugin supports two type of builds:
|
|
|
|
- legacy builds (assets have `-legacy` suffix on their file names)
|
|
- main builds (without the `-legacy` prefix)
|
|
|
|
The legacy builds are loaded in a site environment where the WordPress version doesn't meet minimum requirements for a components used in a set build.
|
|
|
|
You can read more about legacy builds in the [this doc](./assets/js/legacy/README.md).
|