From bf4f4c96ea9cdbcd383775c26f58aa84e955f4a8 Mon Sep 17 00:00:00 2001 From: Varun5711 Date: Sat, 12 Jul 2025 03:36:30 +0530 Subject: [PATCH] feat: add Dockerfile and docker-compose for dev env --- .codecov 2.yml | 13 +++ .dockerignore | 3 + .editorconfig 2 | 19 ++++ .gitattributes 2 | 1 + .gitignore 2 | 58 ++++++++++ .gitpod 2.yml | 4 + .prettierignore 2 | 26 +++++ CODE_OF_CONDUCT 2.md | 5 + CONTRIBUTING.md | 255 ++++--------------------------------------- Dockerfile | 16 +++ LICENSE 2 | 22 ++++ docker-compose.yml | 13 +++ 12 files changed, 203 insertions(+), 232 deletions(-) create mode 100644 .codecov 2.yml create mode 100644 .dockerignore create mode 100644 .editorconfig 2 create mode 100644 .gitattributes 2 create mode 100644 .gitignore 2 create mode 100644 .gitpod 2.yml create mode 100644 .prettierignore 2 create mode 100644 CODE_OF_CONDUCT 2.md create mode 100644 Dockerfile create mode 100644 LICENSE 2 create mode 100644 docker-compose.yml diff --git a/.codecov 2.yml b/.codecov 2.yml new file mode 100644 index 000000000000..ac4bb1e7e916 --- /dev/null +++ b/.codecov 2.yml @@ -0,0 +1,13 @@ +codecov: + require_ci_to_pass: false + +comment: false + +coverage: + status: + patch: + default: + target: auto + project: + default: + target: auto diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000000..f639e8373bb8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules +.git +.cache \ No newline at end of file diff --git a/.editorconfig 2 b/.editorconfig 2 new file mode 100644 index 000000000000..63a501ede3a9 --- /dev/null +++ b/.editorconfig 2 @@ -0,0 +1,19 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org +# +# Some of these options are also respected by Prettier + +root = true + +[*] +indent_style = space +indent_size = 2 + +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{md,snap}] +trim_trailing_whitespace = false diff --git a/.gitattributes 2 b/.gitattributes 2 new file mode 100644 index 000000000000..6313b56c5784 --- /dev/null +++ b/.gitattributes 2 @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.gitignore 2 b/.gitignore 2 new file mode 100644 index 000000000000..e5e2becde3c4 --- /dev/null +++ b/.gitignore 2 @@ -0,0 +1,58 @@ +.idea +.DS_STORE +.eslintcache +*.swp +*~ +/examples/*/node_modules/ + +/e2e/*/node_modules +/e2e/*/.pnp +/e2e/*/.pnp.js +!/e2e/presets/json/node_modules +!/e2e/presets/js/node_modules +/e2e/transform/*/coverage +/e2e/transform/*/node_modules + +/node_modules + +/packages/*/build/ +/packages/*/dist/ +/packages/*/coverage/ +/packages/*/node_modules/ + +/website/.docusaurus +/website/.cache-loader +/website/build +/website/backers.json +/website/node_modules +/website/yarn.lock +/website/i18n/* + +/benchmarks/*/node_modules/ + +/reports/* + +coverage +lerna-debug.log +npm-debug.log +npm-debug.log* +yarn-error.log* +junit.xml +package-lock.json + +*.tsbuildinfo +api-extractor.json + +# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored but nested for e2e directories +**/.yarn/* +!**/.yarn/patches +!**/.yarn/releases +!**/.yarn/plugins +!**/.yarn/sdks +!**/.yarn/versions +**/.pnp.* + +crowdin-cli.jar + +# We don't want these temp files +packages/jest-worker/src/workers/__tests__/__temp__ diff --git a/.gitpod 2.yml b/.gitpod 2.yml new file mode 100644 index 000000000000..bf16762be50c --- /dev/null +++ b/.gitpod 2.yml @@ -0,0 +1,4 @@ +# Commands to start on workspace startup. See https://www.gitpod.io/docs/config-gitpod-file +tasks: + - init: yarn install && yarn run build + command: yarn run watch diff --git a/.prettierignore 2 b/.prettierignore 2 new file mode 100644 index 000000000000..0d516049dd16 --- /dev/null +++ b/.prettierignore 2 @@ -0,0 +1,26 @@ +.idea +.DS_STORE +.eslintcache +*.swp +*~ +api-extractor.json +coverage + +/packages/*/build +/packages/*/dist +/packages/jest-config/src/__tests__/jest-preset.json +/packages/pretty-format/__benchmarks__/world.geo.json + +# Breaks tests +/e2e/coverage-handlebars/greet.hbs + +# Third-party script +packages/jest-diff/src/cleanupSemantic.ts + +/website/.docusaurus +/website/backers.json +/website/build +/website/versions.json + +**/.yarn +**/.pnp.* diff --git a/CODE_OF_CONDUCT 2.md b/CODE_OF_CONDUCT 2.md new file mode 100644 index 000000000000..12d4498d9838 --- /dev/null +++ b/CODE_OF_CONDUCT 2.md @@ -0,0 +1,5 @@ +# Code of Conduct + +Jest is an OpenJS Foundation project and subscribes to its code of conduct. + +It is available at https://code-of-conduct.openjsf.org/. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38485642a6d1..d11f7967b52b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,250 +1,41 @@ -# How to Contribute +Sure! Here’s a simple and clean CONTRIBUTING.md with just the essential commands and no extra explanation: -## Code of Conduct +⸻ -Jest has adopted the OpenJS Code of Conduct that we expect project participants to adhere to. See [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md). +# Contributing -## Open Development - -All work on Jest happens directly on [GitHub](/). Both core team members and external contributors send pull requests which go through the same review process. - -### `main` is unsafe - -We will do our best to keep `main` in good shape, with tests passing at all times. But in order to move fast, we will make API changes that your application might not be compatible with. We will do our best to communicate these changes and always version appropriately so you can lock into a specific version if need be. - -### Workflow and Pull Requests - -_Before_ submitting a pull request, please make sure the following is done… - -1. Fork the repo and create your branch from `main`. A guide on how to fork a repository: https://help.github.com/articles/fork-a-repo/ - - Open terminal (e.g. Terminal, iTerm, Git Bash or Git Shell) and type: - - ```sh-session - $ git clone https://github.com//jest - $ cd jest - $ git checkout -b my_branch - ``` - - Note: Replace `` with your GitHub username - -1. Jest uses [Yarn](https://yarnpkg.com/) for running development scripts. If you haven't already done so, please run [`corepack enable`](https://nodejs.org/api/corepack.html#workflows). - -1. Make sure you have `python` installed. Python is required by [node-gyp](https://github.com/nodejs/node-gyp) that is used when running `yarn install`. - - To check your version of Python and ensure it's installed you can type: - - ```sh - python --version - ``` - -1. Make sure you have a compatible version of `node` installed (As of November 15th, 2023, `v20.x` is recommended). - - ```sh - node -v - ``` - -1. Run `yarn install`. - - ```sh - yarn install - ``` - -1. Run `yarn build` to transpile TypeScript to JavaScript and type check the code - - ```sh - yarn build - ``` - -1. If you've added code that should be tested, add tests. You can use watch mode that continuously transforms changed files to make your life easier. - - ```sh - # in the background - yarn watch - ``` - -1. If you've changed APIs, update the documentation. - -1. Ensure the test suite passes via `yarn jest`. To run the test suite you may need to install [Mercurial](https://www.mercurial-scm.org/) (`hg`). On macOS, this can be done using [homebrew](http://brew.sh/): `brew install hg`. - - ```sh-session - $ brew install hg # maybe - $ yarn test - ``` - -#### Changelog entries - -All changes that add a feature to or fix a bug in any of Jest's packages require a changelog entry containing the names of the packages affected, a description of the change, and the number of and link to the pull request. Try to match the structure of the existing entries. - -For significant changes to the documentation or website and things like cleanup, refactoring, and dependency updates, the "Chore & Maintenance" section of the changelog can be used. - -You can add or edit the changelog entry in the GitHub web interface once you have opened the pull request and know the number and link to it. - -Make sure to alphabetically order your entry based on the package name. If you have changed multiple packages, separate them with a comma. - -#### Testing - -Code that is written needs to be tested to ensure that it achieves the desired behaviour. Tests either fall into a unit test or an integration test. - -##### Unit tests - -Some of the packages within Jest have a `__tests__` directory. This is where unit tests reside in. If the scope of your work only requires a unit test, this is where you will write it in. Tests here usually don't require much of any setup. - -##### Integration tests - -There will be situations however where the work you have done cannot be tested alone using unit tests. In situations like this, you should write an integration test for your code. The integration tests reside within the `e2e` directory. Within this directory, there is a `__tests__` directory. This is where you will write the integration test itself. The tests within this directory execute jest itself using `runJest.js` and assertions are usually made on one if not all the output of the following `status`, `stdout` and `stderr`. The other sub directories within the `e2e` directory are where you will write the files that jest will run for your integration tests. Feel free to take a look at any of the tests in the `__tests__` directory within `e2e` to have a better sense of how it is currently being done. - -It is possible to run the integration test itself manually to inspect that the new behaviour is indeed correct. Here is a small code snippet of how to do just that. This is useful when debugging a failing test. +## Setup ```bash -$ cd e2e/clear-cache -$ node ../../packages/jest-cli/bin/jest.js # It is possible to use `node --inspect` -PASS __tests__/clear_cache.test.js -✓ stub (3ms) - -Test Suites: 1 passed, 1 total -Tests: 1 passed, 1 total -Snapshots: 0 total -Time: 0.232 s, estimated 1 s -Ran all test suites. -``` - -## Checking Constraints - -We use [Yarn Constraints](https://yarnpkg.com/features/constraints) to enforce various rules across the repository. They are declared inside the [`yarn.config.cjs` file](https://github.com/jestjs/jest/blob/main/yarn.config.cjs) and their purposes are documented with comments. +git clone https://github.com/YOUR_USERNAME/jest.git +cd jest +corepack enable +yarn install --immutable -Constraints can be checked with `yarn constraints`, and fixed with `yarn constraints --fix`. Generally speaking: +Create a Branch -- Workspaces must not depend on conflicting ranges of dependencies. Use the `-i,--interactive` flag and select "Reuse" when installing dependencies and you shouldn't ever have to deal with this rule. +git checkout -b feat/your-feature-name -- A dependency doesn't appear in both `dependencies` and `devDependencies` of the same workspace. +Lint & Format -- Workspaces must point our repository through the `repository` field. - -##### Using jest-jasmine2 - -There may be cases where you want to run jest using `jest-jasmine2` instead of `jest-circus` (which is the default runner) for integration testing. In situations like this, set the environment variable `JEST_JASMINE` to 1. That will configure jest to use `jest-jasmine2`. So something like this. - -```bash -JEST_JASMINE=1 yarn jest -``` +yarn lint +yarn prettier --write . -#### Additional Workflow for any changes made to website or docs +Run Tests -If you are making changes to the website or documentation, test the website folder and run the server to check if your changes are being displayed accurately. +yarn test -1. Locate to the website directory and install any website specific dependencies by typing in `yarn`. Following steps are to be followed for this purpose from the root directory. - ```sh-session - $ cd website # Only needed if you are not already in the website directory - $ yarn - $ node fetchSupporters.js - $ yarn start - ``` -1. You can run a development server to check if the changes you made are being displayed accurately by running `yarn start` in the website directory. +Commit & Push -The Jest website also offers documentation for older versions of Jest, which you can edit in `website/versioned_docs`. After making changes to the current documentation in `docs`, please check if any older versions of the documentation have a copy of the file where the change is also relevant and apply the changes to the `versioned_docs` as well. +git add . +git commit -m "feat: your message" +git push origin feat/your-feature-name -### Contributor License Agreement (CLA) +Create Pull Request -In order to accept your pull request, we need you to submit a CLA. You only need to do this once, so if you've done this for another OpenJS open source project, you're good to go. If you are submitting a pull request for the first time, a bot will verify and guide you on how to sign it. +Go to your fork on GitHub and click “Compare & pull request”. -## How to try a development build of Jest in another project +--- -To build Jest: - -```sh-session -$ cd /path/to/your/Jest_clone - -# Do one of the following: - -# Check out a commit from another contributor, and then -$ yarn run watch - -# Or, save your changes to Jest, and then -$ yarn test +Let me know if you want to add a Docker section or test workflow too. ``` - -To run tests in another project with the development build of Jest: - -```sh-session -$ cd /path/to/another/project - -$ node /path/to/your/JestClone/packages/jest/bin/jest [options] # run jest-cli/bin/jest.js in the development build -``` - -- To decide whether to specify any options, see `test` under `scripts` in the `package.json` file of the other project. - -## Bugs - -### Where to Find Known Issues - -We will be using GitHub Issues for our public bugs. We will keep a close eye on this and try to make it clear when we have an internal fix in progress. Before filing a new issue, try to make sure your problem doesn't already exist. - -### Reporting New Issues - -The best way to get your bug fixed is to provide a reduced test case. Please provide a public repository with a runnable example. - -### Docs translation - -We get translations from Crowdin, see https://crowdin.com/project/jest-v2. Any and all help is very much appreciated! - -### Security Bugs - -See [SECURITY.md](./SECURITY.md) for the safe disclosure of security bugs. With that in mind, please do not file public issues; go through the process outlined there. - -## How to Get in Touch - -[`#testing` on Reactiflux](https://discord.gg/j6FKKQQrW9) - -## Code Conventions - -- 2 spaces for indentation (no tabs). -- 80 character line length is strongly preferred. -- Prefer `'` over `"`. -- ES6 syntax when possible. -- Use [TypeScript](https://www.typescriptlang.org/). -- Use semicolons; -- Trailing commas, -- Avd abbr wrds. - -## Credits - -This project exists thanks to all the people who [contribute](CONTRIBUTING.md). - - - -### [Backers](https://opencollective.com/jest#backer) - -Thank you to all our backers! 🙏 - - - -### [Sponsors](https://opencollective.com/jest#sponsor) - -Support this project by becoming a sponsor. Your logo will show up here with a link to your website. - - - -## License - -By contributing to Jest, you agree that your contributions will be licensed under its MIT license. - -## Publishing a new release - -This project uses [`lerna-lite`](https://github.com/lerna-lite/lerna-lite) to publish to npm. To publish a new release, run: - -```sh -$ yarn lerna publish -``` - -This will prompt you for which versions to release. - -After the release is published, you can create a new release on GitHub with the release notes (copied from [CHANGELOG.md](./CHANGELOG.md)). - -In order to publish a pre-release, the same steps apply, but you need to specify some extra flags: - -```sh -$ yarn lerna publish *version-number* --preid alpha --pre-dist-tag next --dist-tag next -``` - -Where `version-number` is e.g. `30.0.0-alpha.5`. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000000..1c1996e9504e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM node:20 + +# Enable corepack and use correct yarn version +RUN corepack enable && corepack prepare yarn@4.9.2 --activate + +# Set working directory +WORKDIR /app + +# Copy all files +COPY . . + +# Install dependencies +RUN yarn install --immutable + +# Default command +CMD ["yarn", "test"] \ No newline at end of file diff --git a/LICENSE 2 b/LICENSE 2 new file mode 100644 index 000000000000..b862434861bd --- /dev/null +++ b/LICENSE 2 @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. +Copyright Contributors to the Jest project. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000000..23245938deb0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3.8' + +services: + jest: + build: . + volumes: + - .:/app + - jest_node_modules:/app/node_modules + working_dir: /app + command: yarn test + +volumes: + jest_node_modules: