-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: Add DEVELOPMENT.md #584
Merged
Merged
Changes from 1 commit
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
# Welcome to the Guppy development guide <!-- omit in toc --> | ||
|
||
This guide is intended to help you get started with developing guppylang. | ||
|
||
If you find any errors or omissions in this document, please [open an issue](https://github.com/CQCL/guppylang/issues/new)! | ||
|
||
## #️⃣ Setting up the development environment | ||
|
||
You can setup the development environment in two ways: | ||
|
||
### The Nix way | ||
|
||
The easiest way to setup the development environment is to use the provided | ||
[`devenv.nix`](devenv.nix) file. This will setup a development shell with all the | ||
required dependencies. | ||
|
||
To use this, you will need to install [devenv](https://devenv.sh/getting-started/). | ||
Once you have it running, open a shell with: | ||
|
||
```bash | ||
devenv shell | ||
``` | ||
|
||
All the required dependencies should be available. You can automate loading the | ||
shell by setting up [direnv](https://devenv.sh/automatic-shell-activation/). | ||
|
||
### Manual setup | ||
|
||
To setup the environment manually you will need: | ||
|
||
- Just: https://just.systems/ | ||
- uv `>=0.3`: docs.astral.sh/uv/getting-started/installation | ||
|
||
The extended test suite has additional requirements. These are **optional**; tests that require them will be skipped if they are not installed. | ||
|
||
- Rust `>=1.75`: https://www.rust-lang.org/tools/install | ||
- `llvm-14`: https://apt.llvm.org/ | ||
aborgna-q marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Once you have these installed, you can install the required python dependencies and setup pre-commit hooks with: | ||
|
||
```bash | ||
just setup | ||
``` | ||
|
||
## 🏃 Running the tests | ||
|
||
To compile and test the code, run: | ||
|
||
```bash | ||
just test | ||
# or, to try a specific test | ||
just test -k test_name | ||
``` | ||
|
||
If you have Rust and `llvm-14` installed, this will include the integration | ||
tests automatically. If you need to export the integration test cases, use: | ||
|
||
```bash | ||
just export-integration-tests | ||
``` | ||
|
||
Run `just` to see all available commands. | ||
|
||
## 💅 Coding Style | ||
|
||
The python code in this repository is formatted using `ruff`. Most IDEs will | ||
provide automatic formatting on save, but you can also run the formatter manually: | ||
|
||
```bash | ||
just format | ||
``` | ||
|
||
We also use various linters to catch common mistakes and enforce best practices. To run these, use: | ||
|
||
```bash | ||
just check | ||
``` | ||
|
||
To quickly fix common issues, run: | ||
|
||
```bash | ||
just fix | ||
``` | ||
|
||
## 📈 Code Coverage | ||
|
||
We run coverage checks on the CI. Once you submit a PR, you can review the | ||
line-by-line coverage report on | ||
[codecov](https://app.codecov.io/gh/CQCL/guppylang/commits?branch=All%20branches). | ||
|
||
To generate the coverage info locally, simply run: | ||
|
||
```bash | ||
just coverage | ||
``` | ||
|
||
and open it with your favourite coverage viewer. In VSCode, you can use | ||
[`coverage-gutters`](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters). | ||
|
||
## 🌐 Contributing to Guppy | ||
|
||
We welcome contributions to Guppy! Please open [an issue](https://github.com/CQCL/guppylang/issues/new) or [pull request](https://github.com/CQCL/guppylang/compare) if you have any questions or suggestions. | ||
|
||
PRs should be made against the `main` branch, and should pass all CI checks before being merged. This includes using the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) format for the PR title. | ||
|
||
The general format of a contribution title should be: | ||
|
||
``` | ||
<type>(<scope>)!: <description> | ||
``` | ||
|
||
Where the scope is optional, and the `!` is only included if this is a semver breaking change that requires a major version bump. | ||
|
||
We accept the following contribution types: | ||
|
||
- feat: New features. | ||
- fix: Bug fixes. | ||
- docs: Improvements to the documentation. | ||
- style: Formatting, missing semi colons, etc; no code change. | ||
- refactor: Refactoring code without changing behaviour. | ||
- perf: Code refactoring focused on improving performance. | ||
- test: Adding missing tests, refactoring tests; no production code change. | ||
- ci: CI related changes. These changes are not published in the changelog. | ||
- chore: Updating build tasks, package manager configs, etc. These changes are not published in the changelog. | ||
- revert: Reverting previous commits. | ||
|
||
## :shipit: Releasing new versions | ||
|
||
We use automation to bump the version number and generate changelog entries | ||
based on the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) labels. Release PRs are created automatically | ||
for each package when new changes are merged into the `main` branch. Once the PR is | ||
approved by someone in the [release team](.github/CODEOWNERS) and is merged, the new package | ||
is published on PyPI or crates.io as appropriate. | ||
aborgna-q marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The changelog can be manually edited before merging the release PR. Note however | ||
that modifying the diff before other changes are merged will cause the | ||
automation to close the release PR and create a new one to avoid conflicts. | ||
|
||
Releases are managed by `release-please`. This tool always bumps the | ||
minor version (or the pre-release version if the previous version was a | ||
pre-release). | ||
|
||
To override the version getting released, you must merge a PR to `main` containing | ||
`Release-As: 0.1.0` in the description. | ||
Python pre-release versions should be formatted as `0.1.0a1` (or `b1`, `rc1`). | ||
|
||
### Patch releases | ||
|
||
Sometimes we need to release a patch version to fix a critical bug, but we don't want | ||
to include all the changes that have been merged into the main branch. In this case, | ||
you can create a new branch from the latest release tag and cherry-pick the commits | ||
you want to include in the patch release. | ||
|
||
You will need to modify the version and changelog manually in this case. Check | ||
the existing release PRs for examples on how to do this. Once the branch is | ||
ready, create a draft PR so that the release team can review it. | ||
|
||
The wheel building process and publication to PyPI is handled by the CI. | ||
Just create a [github release](https://github.com/CQCL/guppylang/releases/new) from the **unmerged** branch. | ||
The release tag should follow the format used in the previous releases, e.g. `hugr-py-v0.1.1`. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. mention the need to also merge the changelog/version changes back in to main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Formated the links as
[domain](long-url)
for clarity.