Skip to content

Latest commit

 

History

History
131 lines (84 loc) · 3.9 KB

CONTRIBUTING.md

File metadata and controls

131 lines (84 loc) · 3.9 KB

Contributing

Pull requests are very welcome, but should be within the scope of the project, and follow the repository's code conventions. Before submitting a pull request, it's always good to file an issue, so we can discuss the details of the PR.

Reporting a Bug

  1. Ensure you've replicated the issue against main. There is a chance the issue may have already been fixed.

  2. Search for any similar issues (both opened and closed). There is a chance someone may have reported it already.

  3. Provide a demo of the bug isolated in a codesandbox.io. Sometimes this is not a possibility, in which case provide a detailed description along with any code snippets that would help in triaging the issue. If we cannot reproduce it, we will close it.

  4. The best way to demonstrate a bug is to build a failing test. This is not required, however, it will generally speed up the development process.

Submitting a pull request

  1. Fork the repository.

  2. Ensure that all tests are passing prior to submitting.

  3. If you are adding new functionality, or fixing a bug, provide test coverage.

  4. Follow syntax guidelines detailed below.

  5. Push the changes to your fork and submit a pull request. If this resolves any issues, please mark in the body fix #ID within the body of your pull request. This allows for github to automatically close the related issue once the pull request is merged.

  6. Last step, submit the pull request!

Development

Requirements

You can build & test with pnpm. At the moment version >= 9 is not supported:

pnpm i && pnpm t

To run examples:

npm run examples

Releases can be done with the following steps:

# Make sure you have GH_TOKEN setup as indicated by:
# https://github.com/lerna/lerna/blob/05ad1860e2da7fc16c9c0a072c9389e94792ab64/commands/version/README.md#--create-release-type
GH_TOKEN=xxxxxxx npm run prerelease
bazel build :dist
mkdir ../formatjs2
cp -rf dist/bin/formatjs_dist/ ../formatjs2/
# Use `--access=public` to publish new packages with `@formatjs/` scope.
cd ../formatjs2
npx pnpm -r publish --access=public

Updating tzdata version

tzdata requires Docker to be installed. This is because tzdata compilation requires make.

  1. Change IANA_TZ_VERSION in packages/intl-datetimeformat/index.bzl to the desired version

  2. Update the sha256 for tzdata & tzcode targets

  3. Run the Docker image & update the tz_data.tar.gz

bazel run //packages/intl-datetimeformat:update_tz_data
  1. Test to make sure everything passes

  2. New TimeZones or renames of TimeZones are not updated using the Bazel script. You need to manually update index.bzl.

Updating test snapshots

You can update the snapshot by running the test target + _update_snapshots, e.g

bazel run //packages/cli/integration-tests:compile_folder_integration_test_update_snapshots

Generating CLDR data

  1. Check out ./BUILD file for generatable data — which are identifiable via generate_src_file() call
   generate_src_file(
     name = "regex",
     ...
   )
  1. Create an empty file with the given src attribute — path is relative to module root
   touch packages/icu-messageformat-parser/regex.generated.ts
  1. Run update script
   bazel run //packages/icu-messageformat-parser:regex.update
  1. Verify
   bazel run //packages/icu-messageformat-parser:regex

Working on formatjs.io website

We use docusaurus for documentation. To run the website locally:

cd website
npx docusaurus start

To deploy:

cd website
GIT_PASS="<your_personal_token>" GIT_USER="your_username" DEPLOYMENT_BRANCH=main npx docusaurus deploy