Skip to content
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

Adding a Gradle Build system to the Processing IDE #888

Open
wants to merge 103 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
ce06ac8
run app with the jetpack compose runner
Stefterv Nov 14, 2024
e082481
Run app with Java Mode
Stefterv Nov 14, 2024
07f05f3
Deprecation indicators and removed unused resources
Stefterv Nov 14, 2024
1983e5c
Merge branch 'processing:main' into main-gradle
Stefterv Nov 14, 2024
70208d3
Build sketches with new app bundler
Stefterv Nov 14, 2024
78da74d
Added all modules for JAR filesystem
Stefterv Nov 14, 2024
b1e4066
Work with external JDK
Stefterv Nov 14, 2024
d98cab9
Distribution icons
Stefterv Nov 14, 2024
9405e4a
First functional Composable
Stefterv Nov 14, 2024
27313b2
Proper styling
Stefterv Nov 14, 2024
28ab38a
Lottie animations
Stefterv Nov 14, 2024
a82ac33
Contribution Manager UI Test
Stefterv Nov 17, 2024
66cdcba
.idea meta files
Stefterv Nov 17, 2024
6be8114
Show local contributions
Stefterv Nov 17, 2024
cce5856
isUpdate & isInstalled & Contribution Pane
Stefterv Nov 17, 2024
86c5406
Contribution panel
Stefterv Nov 17, 2024
46b5d6c
Animation Test
Stefterv Nov 17, 2024
1adfe87
Added to the sketch menu
Stefterv Nov 17, 2024
138db84
Cleaned up ignored files
Stefterv Nov 17, 2024
3c27a73
Merge branch 'processing:main' into main-gradle
Stefterv Dec 7, 2024
8e29df6
backwards compatibility with ant
Stefterv Dec 9, 2024
fe25597
re-add bin files
Stefterv Dec 9, 2024
70a116a
.idea files
Stefterv Dec 9, 2024
b599df1
gradle ci/cd
Stefterv Dec 9, 2024
b33e095
Add generated code
Stefterv Dec 9, 2024
720793f
Update build-gradle.yml
Stefterv Dec 9, 2024
b031578
Create processing.png
Stefterv Dec 9, 2024
5697f33
Update build-gradle.yml
Stefterv Dec 9, 2024
1628d57
pre-processor gradle
Stefterv Dec 9, 2024
4f68bce
preprocessor decoupling
Stefterv Dec 9, 2024
ce4f379
Update build.gradle.kts
Stefterv Dec 9, 2024
5c40f12
windows fix
Stefterv Dec 9, 2024
fcc9ef1
LSP gradle build
Stefterv Dec 9, 2024
86f0d85
Added tests
Stefterv Dec 9, 2024
adf88f6
Fixed the tests
Stefterv Dec 9, 2024
1b09894
Fixed regressions
Stefterv Dec 14, 2024
805d8b2
Update build.gradle.kts
Stefterv Dec 14, 2024
85e84cf
Fixed another regression
Stefterv Dec 14, 2024
caada42
Fixed another regression
Stefterv Dec 14, 2024
852454f
Fixed load keywords
Stefterv Dec 14, 2024
4e893f9
get installed JDK platform independent
Stefterv Dec 14, 2024
89e991d
Reapply .gitignore
Stefterv Dec 14, 2024
91101c3
fixed missing preproc output
Stefterv Dec 14, 2024
63b251b
Update JavaBuild.java
Stefterv Dec 14, 2024
609ec6e
Embed JDK
Stefterv Dec 14, 2024
c7b77a4
Set permissions in Gradle instead
Stefterv Dec 14, 2024
a246d62
support windows
Stefterv Dec 14, 2024
8f58cd3
Update build-gradle.yml
Stefterv Dec 14, 2024
5190944
Merge branch 'processing:main' into main-gradle
Stefterv Dec 14, 2024
d013b57
Update build.yml
Stefterv Dec 14, 2024
0dca823
Update pull_request.yml
Stefterv Dec 14, 2024
4d0708d
Cleanup pull request signing
Stefterv Dec 14, 2024
fc40fdf
Update pull_request.yml
Stefterv Dec 14, 2024
8ddc54e
Update pull_request.yml
Stefterv Dec 14, 2024
f51c549
Use shared resources
Stefterv Dec 14, 2024
6e708a8
JOGL Dependencies fix
Stefterv Dec 15, 2024
08cb336
Dependencies centralisation
Stefterv Dec 15, 2024
b4afc51
Dependencies centralisation 2
Stefterv Dec 15, 2024
7b23c69
Fixed missing modules & Windows meta
Stefterv Dec 15, 2024
3cdfaa2
Bugfix
Stefterv Dec 15, 2024
957b61c
Jetpack Compose Compatibility
Stefterv Dec 15, 2024
0962013
Download Examples
Stefterv Dec 16, 2024
d057c46
Java Mode resources and Libraries
Stefterv Dec 16, 2024
972a489
Fixed autocomplete and all other preprocessor issues
Stefterv Dec 16, 2024
9b4f190
Cleanup unused fix
Stefterv Dec 16, 2024
284594f
Run target
Stefterv Dec 16, 2024
49e5878
Application export
Stefterv Dec 16, 2024
0b21d55
Fix install processing-java bug
Stefterv Dec 16, 2024
71a1e3c
Bugfix
Stefterv Dec 16, 2024
2f4a1f7
Bugfix
Stefterv Dec 16, 2024
5402de2
Removed different workfile
Stefterv Dec 16, 2024
22e3ec9
Add macOS pde:// and file associations
Stefterv Dec 17, 2024
dd99458
Camera and Microphone access
Stefterv Dec 17, 2024
4640865
Dynamic versioning
Stefterv Dec 17, 2024
eafd58a
Actions Versioning
Stefterv Dec 17, 2024
e0d9b8f
Fixed versioning error
Stefterv Dec 17, 2024
b378022
Update build-gradle.yml
Stefterv Dec 17, 2024
989c70d
versioning
Stefterv Dec 17, 2024
fa4f3ce
bugfix
Stefterv Dec 17, 2024
44d3adc
bugfix
Stefterv Dec 17, 2024
28859f1
Update build-gradle.yml
Stefterv Dec 17, 2024
b8e84da
New splash screen
Stefterv Dec 17, 2024
6618cad
macOS tItle bar tweak
Stefterv Dec 17, 2024
529a0e0
Theme selector compatibility
Stefterv Dec 17, 2024
7fb8b2f
Processing Website examples
Stefterv Dec 18, 2024
2fc0d69
Windows look & feel
Stefterv Dec 18, 2024
da29242
Move contribution url into centralised place
Stefterv Dec 19, 2024
0c39b27
Move update check centralized
Stefterv Dec 19, 2024
3953703
New splash image
Stefterv Dec 19, 2024
a249a44
Open new window if none are open
Stefterv Dec 20, 2024
b7a4003
Legacy Tasks explaination
Stefterv Dec 20, 2024
2ee27a8
Improve debugging experience
Stefterv Dec 20, 2024
b89efed
Documentation
Stefterv Dec 23, 2024
d1074db
Examples for Core development
Stefterv Dec 23, 2024
646806f
Update BUILD.md
SableRaf Dec 23, 2024
a03aa89
Remove .es. and liveSketch from extended examples
Stefterv Jan 9, 2025
cd7e6f6
Merge branch 'main-gradle' of https://github.com/Stefterv/processing4…
Stefterv Jan 9, 2025
a5985c3
Re-enable fullscreen test
Stefterv Jan 9, 2025
94dee41
Removed hardcoded JDK
Stefterv Jan 9, 2025
6df3bd4
Back to original contributions manager
Stefterv Jan 9, 2025
6eb3b14
Application export JDK and resources
Stefterv Jan 10, 2025
a9a92e9
fixed CI/CD
Stefterv Jan 12, 2025
ac7307c
Merge branch 'main' into main-gradle
Stefterv Jan 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/workflows/build-gradle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Pre-releases with Gradle
on:
push:
paths-ignore:
- '**/*.md'
- '.all-contributorsrc'

jobs:
build:
name: Create Pre-release for ${{ matrix.os_prefix }} (${{ matrix.arch }})
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
# # compiling for arm32 needs a self-hosted runner on Raspi OS (32-bit)
# - os: self-hosted
# os_prefix: linux
# arch: arm
- os: ubuntu-latest
os_prefix: linux
arch: x64
- os: windows-latest
os_prefix: windows
arch: x64
- os: macos-latest
os_prefix: macos
arch: x64
- os: macos-latest
os_prefix: macos
arch: aarch64
# - os: macos-latest
# os_prefix: linux
# arch: aarch64
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
architecture: ${{ matrix.arch }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: ./gradlew packageDistributionForCurrentOS
- name: Add instructions
if: ${{ matrix.os_prefix == 'macos' }}
run: |
echo "run 'xattr -d com.apple.quarantine Processing-${version}.dmg' to remove the quarantine flag" > ./app/build/compose/binaries/main/dmg/INSTRUCTIONS_FOR_TESTING.txt
- name: Add artifact
uses: actions/upload-artifact@v4
with:
name: processing-${{github.sha}}${{ matrix.os_prefix }}-${{ matrix.arch }}
path: |
./app/build/compose/binaries/main/dmg/Processing-*.dmg
./app/build/compose/binaries/main/dmg/INSTRUCTIONS_FOR_TESTING.txt
./app/build/compose/binaries/main/msi/Processing-*.msi
./app/build/compose/binaries/main/deb/processing*.deb
retention-days: 1
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
# compiling for arm32 needs a self-hosted runner on Raspi OS (32-bit)
Expand Down
58 changes: 58 additions & 0 deletions .github/workflows/pull_request-gradle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Pull Requests
on:
pull_request:
paths-ignore:
- '**/*.md'
branches:
- main

jobs:
build:
name: Create Pull Request Build for ${{ matrix.os_prefix }} (${{ matrix.arch }})
runs-on: ${{ matrix.os }}
permissions:
pull-requests: write
contents: read
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
os_prefix: linux
arch: x64
- os: windows-latest
os_prefix: windows
arch: x64
- os: macos-latest
os_prefix: macos
arch: x64
- os: macos-latest
os_prefix: macos
arch: aarch64
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
architecture: ${{ matrix.arch }}
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build with Gradle
run: ./gradlew packageDistributionForCurrentOS
- name: Add instructions
if: ${{ matrix.os_prefix == 'macos' }}
run: |
echo "run 'xattr -d com.apple.quarantine Processing-${version}.dmg' to remove the quarantine flag" > ./app/build/compose/binaries/main/dmg/INSTRUCTIONS_FOR_TESTING.txt
- name: Add artifact
uses: actions/upload-artifact@v4
with:
name: processing-${{github.sha}}${{ matrix.os_prefix }}-${{ matrix.arch }}
path: |
./app/build/compose/binaries/main/dmg/Processing-*.dmg
./app/build/compose/binaries/main/dmg/INSTRUCTIONS_FOR_TESTING.txt
./app/build/compose/binaries/main/msi/Processing-*.msi
./app/build/compose/binaries/main/deb/processing*.deb
retention-days: 5
9 changes: 1 addition & 8 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ jobs:
pull-requests: write
contents: read
strategy:
fail-fast: false
matrix:
include:
# compiling for arm32 needs a self-hosted runner on Raspi OS (32-bit)
Expand Down Expand Up @@ -51,16 +52,8 @@ jobs:
architecture: ${{ matrix.arch }}
- name: Setup Ant
uses: cedx/setup-ant@v3
# - name: Install Certificates for Code Signing
# if: ${{ matrix.os_prefix == 'macos' }}
# uses: apple-actions/import-codesign-certs@v3
# with:
# p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
# p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
- name: Build Release
run: ant -noinput -buildfile build/build.xml ${{ matrix.os_prefix }}-dist -Dversion="${{ github.sha }}"
# env:
# PROCESSING_APP_SIGNING: ${{ secrets.CERTIFICATES_P12 != '' }}
- name: Add artifact
uses: actions/upload-artifact@v3
id: upload
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,12 @@ processing-examples
.gradle
core/build/
build/publish/
app/build
java/build/
/build/reports
/java/bin
/java/libraries/svg/bin
/java/preprocessor/build
/java/lsp/build
/.kotlin/sessions
/core/examples/build
6 changes: 6 additions & 0 deletions .idea/artifacts/app_desktop.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/artifacts/app_jvm.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 6 additions & 10 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions .idea/runConfigurations/Linux.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/runConfigurations/MacOS.xml

This file was deleted.

30 changes: 30 additions & 0 deletions .idea/runConfigurations/Processing.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions .idea/runConfigurations/Windows.xml

This file was deleted.

2 changes: 1 addition & 1 deletion .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 60 additions & 0 deletions BUILD.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# How to Build Processing

Great to see you are interested in contributing to Processing. To get started you will need to have an IDE to build and develop Processing. Our recommendation and what we use ourselves is Intellij IDEA.

## IntelliJ IDEA

First, [download the IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/download/). Make sure to select the "Community Edition", not "Ultimate". The Community Edition is free and built on open-source software. You may need to scroll down to find the download link. Then:

1. Clone the Processing4 repository to your machine locally
1. Open the cloned repository in IntelliJ IDEA CE
1. In the main menu, go to File > Project Structure > Project Settings > Project.
1. In the SDK Dropdown option, select a JDK version 17 or Download the jdk
1. Click the green Run Icon in the top right of the window. This is also where you can find the option to debug Processing.
1. Logs can be found in the `Build` or `Debug` pane on the bottom left of the window


## VSCode
1. Clone the Processing4 repository to your machine locally
1. Open the cloned repository in VScode
1. Wait for Gradle to set up the repository
1. (If you want debugging install [Debugger for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug) and [Java Extension Pack](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack))
1. Go to the Gradle Tab and click app -> Tasks -> compose desktop -> run

Instructions for other editors are welcome and feel free to contribute the documentation for those [here](#other-editors)


## Architecture
Processing is made of three distinct parts, the `Core`, `Java` and the `App`. The `Core` currently stands alone and `Java` and `App` depend on it. `Java` and `App` are currently interdependent but we are working on decoupling those two.

`Core`: The part of the code that gets bundled with your sketches, so the functionality like `ellipse(25,25,50,50);` The inner workings of that function can be found here.

`Java`: This is the pipeline that will take your `.pde` file and compile and run it. The PDE understands different _modes_ with `Java` being the primary one.

`App`: This is the PDE, the visual part of the editor that you see and work within when you use Processing.

### Examples

- You want to fix a bug with one of the argument of a function that you use in a sketch. The `Core` is probably where you would find the implementation of the function that you would like to modify.
- A feature/bug of the PDE editor has been driving you nuts, and you can no longer stand it. You would probably find your bug in the `App` section of this project.
- You've written a large sketch and Processing has become slow to compile, a place to improve this code can probably be found in the `Java` section.

## User interface
Traditionally Processing has been written in Java swing and Flatlaf (and some html & css). Since 2025 we have switched to include Jetpack Compose, for a variety of reasons but mostly for it's inter-compatibility. There were ideas to switch to a React based editor, but this approach allows us to slowly replace Java swing components to Jetpack Compose, Ship of Theseus style.

## Build system

We use `Gradle` as the build system for Processing. This used to be `Ant` but we have switched to be more in line with modern standards and to hopefully switch the internal build system in the `Java` mode to `Gradle` as well, unifying both systems for simplicity.

## Kotlin vs Java
Since introducing the Gradle build system we also support Kotlin within the repository. Refactors from Java to Kotlin are not really necessary at this stage, but all new functionality should be written in Kotlin.

Any classes that end in `..Kt.Java` are there for backwards compatibility with the `Ant` build system and can be removed when that is no longer necessary.

### Running Processing

The main task to run or debug the PDE is `app:run` this run the application with `compose desktop`

If your main concern is with the `Core` you don't need to start the whole PDE to test your changes. In IntelliJ IDEA you can select any of the sketches in `core/examples/src/.../` to run by click on the green arrow next to their main functions. This will just compile core and the example sketch. Feel free to also new examples for your newly added functionality.

## Other editors
Loading
Loading