### Software Requirements
You should have the following things installed:
* Git
* Java 25 - should be as unmodified as possible (Recommended: [Eclipse Adoptium](https://adoptium.net/temurin/releases/))
* Maven (Note that the [Maven Wrapper](https://maven.apache.org/tools/wrapper/) is shipped with the repo)
### Recommended setup
* Install `IntelliJ`
* Recommended setup actions
* Disable not needed plugins
* Disable [telemetry](https://www.jetbrains.com/help/idea/settings-usage-statistics.html)
* Configure the available memory
* Import the project
* You will get prompted to install the required plugins
* Ensure that everything is encoded in `UTF-8`
* Ensure that the JDK/Java-Version is correct
#### [SpringBoot-Developer-Tools](https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.devtools)
... should automatically be enabled.
If you are changing a file and build the project, parts of the app get restarted.
Bigger changes may require a complete restart.
* [Vaadin automatically reloads the UI on each restart](https://vaadin.com/docs/latest/flow/configuration/live-reload/spring-boot).
You can control this behavior with the ``vaadin.devmode.liveReload.enabled`` property (default: ``true``).
## Releasing
Before releasing:
* Consider doing a `test-deployment` before actually releasing.
* Check the [changelog](CHANGELOG.md)
If the `develop` is ready for release, create a pull request to the `master`-Branch and merge the changes
When the release is finished do the following:
* Merge the auto-generated PR (with the incremented version number) back into the `develop`
* Ensure that [Vaadin Directory](https://vaadin.com/directory/) syncs the update and maybe update the component / version there
### Release failures
There are 2 modes of release failure:
1. The remote server was e.g. down and non of the artifacts got published
2. There was a build failure during release and only parts of the artifacts got released
In case 1 we can re-release the existing version,
in case 2 we have to release a new version when we can't get the artifacts deleted (as is the case with Maven Central)
#### How-to: Re-Releasing an existing version
1. Delete the release on GitHub
2. Delete the release Git tag from the repo (locally and remote!)
3. Delete the ``master``-Branch and re-create it from the ``develop`` branch (or reset it to the state before the release-workflow commits have been done)
* This requires __temporarily__ removing the branch protection
* Once this was done a new release is triggered immediately!
#### How-to: Releasing a new version
1. Merge the ``master`` branch back into ``develop`` (or another temporary branch)
2. Make sure all master branch versions are prepared for a new release
e.g. if the broken release was ``1.0.0`` the version should now be at ``1.0.1-SNAPSHOT`` - the ``SNAPSHOT`` is important for the workflow!
3. Mark the broken release as broken e.g. inside the Changelog, GitHub Release page, etc.
You can use something like this:
```
> [!WARNING]
> This release is broken as my cat accidentally clicked the abort button during the process
```
4. Merge the changes back into the ``master`` branch to trigger a new release