The packaging sub-project is in charge of building the OS-dependent Audiveris installer
for the OS the project is being run upon.
The GitHub workflow named draft-release.yml drives the building of installers for various OSes,
collects all the installers, adds a PDF version of Audiveris handbook,
and creates a draft release with all these assets.
. ├── .github │ └── workflows │ └── draft-release.yml // Workflow to draft a release │ ├── app │ └── build.gradle // Building Audiveris application │ ├── docs │ └── pdf │ ├── pdf-build.sh // Building the PDF version of handbook │ └── pdf-nav-style.css // Styling for the PDF table of contents │ └── packaging ├── assets // Images used by README.md ├── README.md // This file ├── build.gradle // Building an OS-dependent installer └── dev └── omr.properties // Mapping the .omr extension to Audiveris application
Each created installer includes a (shrunk) Java Runtime Environment (JRE), the Audiveris application and all the dependent libraries. It contains no pre-installed language file for the Tesseract library.
This approach is based on two Java tools:
jlinkwhich assembles a set of JRE modules and their dependencies into a custom runtime image,jpackagewhich packages a Java application into a platform-specific self-contained executable.
The implementation is driven in the packaging/build.gradle file by the Gradle task named jpackage
provided by a dedicated jpackage-gradle-plugin
with its specific window, mac and linux blocks, as follows:
customJre: task to package only the needed JRE modules (resulting in a reduction of about 75% of the installer file size)collectJars: task to collect theaudiveris.jarjust built, with all the jars it depends onjpackagewith os-specific actions:- for
Windows: The installer type isMSIby default.
We could ask for a Windows console, if so needed. This option is OFF by default. - for
Linux: The installer type isDEBby default.
The installer name conveys the Ubuntu version, that is either20.04or22.04as of this writing. - for
macOS: The installer type isDMGby default.
ThemacConvertIconstask usesimagemagickandiconutilutilities to generate a set of Audiveris icons with differents sizes.
- for
- Finally, rename the resulting installer file according to:
- the Audiveris version,
- the OS name,
- the OS version if needed,
- the machine architecture,
- the installer type.
The Github workflow file draft-release.yml launches the job build-installer
(which runs the jpackage Gradle task described above) in parallel on several machines.
As of this writing, these machines are:
| Name | Version | Architecture |
|---|---|---|
| ubuntu-latest | 24.04 | x86_64 |
| ubuntu-22.04 | 22.04 | x86_64 |
| windows-latest | 10 | x86_64 |
| macos-latest | 14 | arm64 |
| macos-13 | 13 | x86_64 |
It also launches in parallel the job build-handbook-pdf to generate the PDF version of the handbook.
Then, the job global-upload collects all the produced artifacts to create a draft release.
The draft is now present in the Releases section of the Audiveris repository, but since it is a draft, it is visible only by the repository authors.
We have to enter the editing mode to manually adjust this draft:
- Set or choose a tag
- Rename the release
- Write comments about the main features of the release
- Perhaps set it as a pre-release
- Or set it as the latest release
- Finally press the
Update releasebutton
At this point in time, the release is now fully visible and even referenced as the latest release.
Something like that:


