From 7fc2bb5b4b38384dab781c7bd8bf6d16d1ce07c7 Mon Sep 17 00:00:00 2001 From: Virgil Calvez Date: Mon, 27 Apr 2026 17:16:33 +0200 Subject: [PATCH 1/8] Add GETTING_STARTED.md --- docs/contributor/GETTING_STARTED.md | 99 ++++++++++++++++++ .../assets/issue_form_selector.png | Bin 0 -> 39750 bytes 2 files changed, 99 insertions(+) create mode 100644 docs/contributor/GETTING_STARTED.md create mode 100644 docs/contributor/assets/issue_form_selector.png diff --git a/docs/contributor/GETTING_STARTED.md b/docs/contributor/GETTING_STARTED.md new file mode 100644 index 0000000000..91528ca2a0 --- /dev/null +++ b/docs/contributor/GETTING_STARTED.md @@ -0,0 +1,99 @@ +# Contributing to GraalPy: getting started + +Thanks for considering contributing to GraalPy. +This page aims at helping you through your first contribution to the project. + +For deep technical details and complete command references, see [CONTRIBUTING.md](./CONTRIBUTING.md). + +If you want help while getting started, join the [GraalVM community Slack](https://www.graalvm.org/slack-invitation/). + +## Quick path for your first contribution + +1. [Pick an issue](#1-pick-an-issue) +2. [Set up your environment](#2-set-up-your-environment) +3. [Make a change](#3-make-a-change) +4. [Run focused checks](#4-run-focused-checks) +5. [Open your Pull Request](#5-open-your-pull-request) + +--- + +## 1. Pick an issue + +Start with something small and well-scoped, for instance, issues labeled [good first issue](https://github.com/oracle/graalpython/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22). + +If there is no issue yet, create one from the [issue templates](https://github.com/oracle/graalpython/issues/new/choose) so the work is tracked and discussed. + +![Issue Form](/docs/contributor/assets/issue_form_selector.png) + +If you think you've found a security vulnerability, do not raise a GitHub issue and follow the instructions in our [security policy](https://github.com/oracle/graalpython/blob/master/SECURITY.md). + +## 2. Set up your environment + +You can contribute from: + +- **GitHub Codespaces** (quickest onboarding): see [Using a GitHub codespace](./CONTRIBUTING.md#using-a-github-codespace) +- **Your local machine**: see [Setting up on your machine](./CONTRIBUTING.md#setting-up-on-your-machine) + +Then do the minimal git setup: + +```bash +git checkout master +git pull +git checkout -b +``` + +Optional but recommended after setup: + +```bash +mx ideinit +``` + +## 3. Make a change + +Keep your first change small and easy to review (one issue, one objective, one PR). +Before editing, quickly identify where the code or tests live by checking the project structure in the +[Development Layout](https://github.com/oracle/graalpython/blob/master/docs/contributor/CONTRIBUTING.md#development-layout). + +If you use GitHub Codespaces with GitHub Copilot Pro, you can also run an AI coding agent in an isolated environment with access to Issues, PRs, and CI context. + +## 4. Run focused checks + +Before opening a PR, run tests affected by your changes. + +Common commands: + +- `mx clean`: clean build files +- `mx build`: build GraalPy +- `mx python-svm`: build GraalPy native +- `mx gate --tags python-unittest`: Python unit tests +- `mx gate --tags python-junit`: Java/JUnit tests +- `mx graalpytest ::`: run one targeted Python test + +Example: + +```bash +mx graalpytest graalpython/lib-python/3/test/test_threading.py::test.test_threading.ExceptHookTests.test_excepthook +``` + +If you need a complete list of commands, run `mx help` or check [CONTRIBUTING.md](./CONTRIBUTING.md). + +## 5. Open your Pull Request + +1. Push your branch to your fork +2. Open a PR against `master` +3. Mark it **Ready for review** when it is ready + +Important: + +- You must sign the [Oracle Contributor Agreement (OCA)](https://www.graalvm.org/community/contributors/) before merge +- CI unit tests run when the PR is ready for review (not in draft) +- Opening a PR early in your fork is fine if you want CI feedback + +--- + +## What to read next + +After your first contribution, continue with: + +- [CONTRIBUTING.md](./CONTRIBUTING.md) for full setup, workflows, and CI details +- [IMPLEMENTATION_DETAILS.md](./IMPLEMENTATION_DETAILS.md) for deeper architecture context diff --git a/docs/contributor/assets/issue_form_selector.png b/docs/contributor/assets/issue_form_selector.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c8cc64c5bee84699279fae31ace8d1d3304a1e GIT binary patch literal 39750 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 Date: Mon, 27 Apr 2026 17:29:19 +0200 Subject: [PATCH 2/8] Bump contributing to the top in readme.me and add video --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 53c220dee8..e24beb3df5 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,15 @@ GraalPy is a Python 3.12 compliant runtime. It has first-class support for embedding in Java and can turn Python applications into fast, standalone binaries. GraalPy is ready for production running pure Python code and has experimental support for many popular native extension modules. +## Contributing + +This project welcomes contributions from the community. Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md). + +If you're thinking about contributing something to this repository, you will need to sign the [Oracle Contributor Agreement](https://www.graalvm.org/community/contributors/) for us to able to merge your work. +Also take a look at the [code of conduct](https://www.graalvm.org/community/conduct/) for contributors. + +[![Contributing to Graalpy](https://img.youtube.com/vi/qeAUgXQR1h0/0.jpg)](https://www.youtube.com/watch?v=qeAUgXQR1h0) + ## Why GraalPy? **Low-overhead integration with Java and other languages** @@ -209,13 +218,6 @@ General documentation about [polyglot programming](https://www.graalvm.org/lates The best way to get in touch with us is to join the `#graalpy` channel on [GraalVM Slack][slack] or [tweet us][twitter]. -## Contributing - -This project welcomes contributions from the community. Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md). - -If you're thinking about contributing something to this repository, you will need to sign the [Oracle Contributor Agreement](https://www.graalvm.org/community/contributors/) for us to able to merge your work. -Also take a look at the [code of conduct](https://www.graalvm.org/community/conduct/) for contributors. - ## Security Consult the [security guide](./SECURITY.md) for our responsible security vulnerability disclosure process. From 0c477fb1c86992d9e4ca49ae4167544303abdc30 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:03 +0000 Subject: [PATCH 3/8] Applied suggestion --- docs/contributor/GETTING_STARTED.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributor/GETTING_STARTED.md b/docs/contributor/GETTING_STARTED.md index 91528ca2a0..b013ab9ff8 100644 --- a/docs/contributor/GETTING_STARTED.md +++ b/docs/contributor/GETTING_STARTED.md @@ -77,7 +77,7 @@ mx graalpytest graalpython/lib-python/3/test/test_threading.py::test.test_thread If you need a complete list of commands, run `mx help` or check [CONTRIBUTING.md](./CONTRIBUTING.md). -## 5. Open your Pull Request +## 5. Open your pull request 1. Push your branch to your fork 2. Open a PR against `master` From 3bf897a2d8d9f85f18d203b38a1275166099607b Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:14 +0000 Subject: [PATCH 4/8] Applied suggestion --- docs/contributor/GETTING_STARTED.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributor/GETTING_STARTED.md b/docs/contributor/GETTING_STARTED.md index b013ab9ff8..c40ee0a38d 100644 --- a/docs/contributor/GETTING_STARTED.md +++ b/docs/contributor/GETTING_STARTED.md @@ -42,7 +42,7 @@ git pull git checkout -b ``` -Optional but recommended after setup: +Optionally, after setup: ```bash mx ideinit From 05f29b5bfc5c7a905a419225c9201331d52f61ce Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:21 +0000 Subject: [PATCH 5/8] Applied suggestion --- docs/contributor/GETTING_STARTED.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributor/GETTING_STARTED.md b/docs/contributor/GETTING_STARTED.md index c40ee0a38d..f861bba5e5 100644 --- a/docs/contributor/GETTING_STARTED.md +++ b/docs/contributor/GETTING_STARTED.md @@ -34,7 +34,7 @@ You can contribute from: - **GitHub Codespaces** (quickest onboarding): see [Using a GitHub codespace](./CONTRIBUTING.md#using-a-github-codespace) - **Your local machine**: see [Setting up on your machine](./CONTRIBUTING.md#setting-up-on-your-machine) -Then do the minimal git setup: +Then do the minimal Git setup: ```bash git checkout master From 6382fa238a7a3b41e5bdfa2b2ba43728b915e48e Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:32 +0000 Subject: [PATCH 6/8] Applied suggestion --- docs/contributor/GETTING_STARTED.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributor/GETTING_STARTED.md b/docs/contributor/GETTING_STARTED.md index f861bba5e5..1d5d12cd8b 100644 --- a/docs/contributor/GETTING_STARTED.md +++ b/docs/contributor/GETTING_STARTED.md @@ -29,7 +29,7 @@ If you think you've found a security vulnerability, do not raise a GitHub issue ## 2. Set up your environment -You can contribute from: +You can contribute using one of the following environments: - **GitHub Codespaces** (quickest onboarding): see [Using a GitHub codespace](./CONTRIBUTING.md#using-a-github-codespace) - **Your local machine**: see [Setting up on your machine](./CONTRIBUTING.md#setting-up-on-your-machine) From 3640aa525ac8d62966a4bd6e4256fa40d3480992 Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:48 +0000 Subject: [PATCH 7/8] Applied suggestion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e24beb3df5..e9c787db27 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ GraalPy is ready for production running pure Python code and has experimental su This project welcomes contributions from the community. Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md). -If you're thinking about contributing something to this repository, you will need to sign the [Oracle Contributor Agreement](https://www.graalvm.org/community/contributors/) for us to able to merge your work. +If you’re considering contributing to this repository, you need to sign the [Oracle Contributor Agreement](https://www.graalvm.org/community/contributors/) before we can merge your changes. Also take a look at the [code of conduct](https://www.graalvm.org/community/conduct/) for contributors. [![Contributing to Graalpy](https://img.youtube.com/vi/qeAUgXQR1h0/0.jpg)](https://www.youtube.com/watch?v=qeAUgXQR1h0) From 636ac4124f36d698b6b94e4e869c1bfcbec15b7b Mon Sep 17 00:00:00 2001 From: Olya Gupalo Date: Tue, 28 Apr 2026 12:12:56 +0000 Subject: [PATCH 8/8] Applied suggestion --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9c787db27..f74709158f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ GraalPy is ready for production running pure Python code and has experimental su This project welcomes contributions from the community. Before submitting a pull request, please [review our contribution guide](./CONTRIBUTING.md). If you’re considering contributing to this repository, you need to sign the [Oracle Contributor Agreement](https://www.graalvm.org/community/contributors/) before we can merge your changes. -Also take a look at the [code of conduct](https://www.graalvm.org/community/conduct/) for contributors. +Also, review the [Code of Conduct](https://www.graalvm.org/community/conduct/) for contributors. [![Contributing to Graalpy](https://img.youtube.com/vi/qeAUgXQR1h0/0.jpg)](https://www.youtube.com/watch?v=qeAUgXQR1h0)