Preflight and integration npx (#1096)

This commit is contained in:
matt korwel
2025-06-16 08:27:29 -07:00
committed by GitHub
parent a600588c20
commit df938d6ee8
24 changed files with 703 additions and 73 deletions

View File

@@ -59,10 +59,7 @@ If you'd like to get early feedback on your work, please use GitHub's **Draft Pu
#### 4. Ensure All Checks Pass
Before submitting your PR (and before marking a draft as "Ready for Review"), please ensure that all automated checks are passing. This includes:
- **Tests:** All existing tests must pass, and new code should be accompanied by new tests. Run `npm run test`.
- **Linting and Style:** Your code must adhere to our project's style guidelines. Run `npm run preflight` to check everything.
Before submitting your PR, ensure that all automated checks are passing by running `npm run preflight`. This command runs all tests, linting, and other style checks.
#### 5. Update Documentation
@@ -109,7 +106,7 @@ To build the entire project (all packages):
npm run build
```
This command typically compiles TypeScript to JavaScript, bundles assets, and prepares the packages for execution. Refer to `scripts/build.sh` and `package.json` scripts for more details on what happens during the build.
This command typically compiles TypeScript to JavaScript, bundles assets, and prepares the packages for execution. Refer to `scripts/build.js` and `package.json` scripts for more details on what happens during the build.
### Enabling Sandboxing
@@ -135,46 +132,53 @@ If youd like to run the source build outside of the gemini-cli folder you can
### Running Tests
To execute the test suite for the project:
This project contains two types of tests: unit tests and integration tests.
#### Unit Tests
To execute the unit test suite for the project:
```bash
npm run test
```
This will run tests located in the `packages/core` and `packages/cli` directories. Ensure tests pass before submitting any changes.
This will run tests located in the `packages/core` and `packages/cli` directories. Ensure tests pass before submitting any changes. For a more comprehensive check, it is recommended to run `npm run preflight`.
#### Important Note for Sandbox Users on macOS/Windows
#### Integration Tests
This project uses native dependencies (e.g., `tree-sitter`) that are compiled for a specific operating system.
The integration tests are designed to validate the end-to-end functionality of the Gemini CLI. They are not run as part of the default `npm run test` command.
When you run the application in the development sandbox via `npm start`, these dependencies are automatically rebuilt for the container's Linux environment.
Because of this, if you then try to run `npm run test` directly on your host machine (e.g., macOS), the tests will fail with an error similar to `dlopen` or `not a valid mach-o file`. This is because the test runner on your Mac cannot load the Linux-compiled dependencies from your `node_modules` folder.
#### The Solution:
To fix this, you must rebuild the native dependencies for your host machine's architecture before running the tests.
To run the integration tests, use the following command:
```bash
npm rebuild
npm run test:e2e
```
#### Recommended Workflow:
1. After using the sandboxed `npm start`, and before you want to run tests locally, run `npm rebuild` in your terminal.
2. Then, run `npm run test` as usual.
You will need to repeat the npm rebuild step any time you switch from running the sandboxed application back to running local tests.
For more detailed information on the integration testing framework, please see the [Integration Tests documentation](./docs/integration-tests.md).
### Linting and Preflight Checks
To ensure code quality, formatting consistency, and run final checks before committing:
To ensure code quality and formatting consistency, run the preflight check:
```bash
npm run preflight
```
This command usually runs ESLint, Prettier, and potentially other checks as defined in the project's `package.json`.
This command will run ESLint, Prettier, all tests, and other checks as defined in the project's `package.json`.
_ProTip_
after cloning create a git precommit hook file to ensure your commits are always clean.
```bash
echo "
# Run npm build and check for errors
if ! npm run preflight; then
echo "npm build failed. Commit aborted."
exit 1
fi
" > .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
```
#### Formatting