Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f375941
#433: initial commit
laim2003 Jun 30, 2026
60f3fe3
#423: added license.rtf, conclusion.rtf
laim2003 Jun 30, 2026
c99e325
#423: updated conclusion.rtf, fixed postinstall script.
laim2003 Jun 30, 2026
0407383
#423: added PKG build logic to nightly-build.yml
laim2003 Jun 30, 2026
a210745
#423: added log message that prints the log path to the PKG installer…
laim2003 Jul 3, 2026
51a5cc9
#423: updated gitignore
laim2003 Jul 3, 2026
0341a83
Merge branch 'main' into feature/#433-macos-installer
laim2003 Jul 3, 2026
b702b31
#423: updated changelog
laim2003 Jul 3, 2026
6bc3d75
#423: Fixed version not being added correctly to PKG file.
laim2003 Jul 4, 2026
b6eda09
Merge branch 'main' into feature/#433-macos-installer
laim2003 Jul 4, 2026
46dfdfa
#423: quick fix
laim2003 Jul 6, 2026
6f61de8
#423: added missing PDF to release
laim2003 Jul 22, 2026
9411f2b
Merge branch 'main' into feature/#433-macos-installer
laim2003 Jul 22, 2026
df8a7d8
#433: Modified postinstall script to correctly 1. extract ideasy to t…
laim2003 Jul 23, 2026
ce38d00
#433: Modified postinstall script to correctly remove temporery folde…
laim2003 Jul 23, 2026
00fe1d6
#433: added IDEasy branding
laim2003 Jul 23, 2026
7d2c820
Merge branch 'main' into feature/#433-macos-installer
laim2003 Jul 24, 2026
4edf07a
#433: added clean task for macos pkg folder
laim2003 Jul 24, 2026
b277304
#433: small fixes
laim2003 Jul 24, 2026
41fadaa
#433: updated nightly build configuration to use correct versions
laim2003 Jul 24, 2026
74d918d
#433: added an error dialog to the postinstall script to fail the ins…
laim2003 Jul 24, 2026
01b1a01
Update macos-installer/src/Distribution.xml
laim2003 Jul 27, 2026
5e4a3ad
#433: build script fix (GH Actions)
laim2003 Jul 27, 2026
d615466
#433: build script fix (GH Actions)
laim2003 Jul 27, 2026
4a65320
Merge remote-tracking branch 'origin/feature/#433-macos-installer' in…
laim2003 Jul 27, 2026
4ca3d7b
#433: corrected versioning for snapshots.
laim2003 Jul 27, 2026
6e89850
#433: small naming changes
laim2003 Jul 27, 2026
bc897c2
#433: small workflow changes
laim2003 Jul 27, 2026
6bbd2aa
#433: updated setup documentation
laim2003 Jul 27, 2026
ca2a9b0
#433: updated setup documentation
laim2003 Jul 27, 2026
c725c51
#433: small install script refinements
laim2003 Jul 27, 2026
6e23343
#433: added comment
laim2003 Jul 27, 2026
661e429
#433: updated maven clean plugin version
laim2003 Jul 27, 2026
45f3e38
Merge branch 'main' into feature/#433-macos-installer
hohwille Jul 30, 2026
c2b337e
Merge branch 'main' into feature/#433-macos-installer
hohwille Jul 30, 2026
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
32 changes: 32 additions & 0 deletions .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,38 @@ jobs:
name: msi
path: windows-installer/signed/ideasy.msi

- name: Build MacOS PKG
if: runner.os == 'macOS'
shell: bash
run: |
maven_config="$(cat .mvn/maven.config)"
current_version="${maven_config/#*-Drevision=}"
current_version="${current_version/ */}"
cd documentation

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not copy&paste this.
PR #2223 just introduced a clean solution to avoid this.
Please use RELEASE_VERSION variable.

mvn -B -ntp clean install
cd ..
mkdir -p macos-installer/pkg-root/bin
mkdir -p macos-installer/Resources
cp documentation/target/generated-docs/IDEasy.pdf macos-installer/pkg-root/
cp documentation/target/generated-docs/LICENSE.rtf macos-installer/Resources/LICENSE.rtf
cp cli/target/macos-installer/Distribution.xml macos-installer/Distribution.xml
cp -r cli/target/package/* macos-installer/pkg-root/
cp cli/target/ideasy macos-installer/pkg-root/bin/
rm -rf macos-installer/pkg-root/system/windows
rm -rf macos-installer/pkg-root/system/linux
chmod +x macos-installer/pkg-root/bin/ideasy
chmod +x macos-installer/scripts/postinstall
cd macos-installer
pkgbuild --root pkg-root --identifier com.devonfw.ideasy --version $current_version --install-location /projects/_ide/tmp/ideasy --scripts scripts IDEasyComponent.pkg
productbuild --distribution Distribution.xml --resources Resources --package-path . ideasy.pkg
# pkgbuild is responsible for building the installation bundle. By using productbuild, we can custimze the installation process, including things like showing a license.
Comment on lines +98 to +115

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

workflows are hard to test, read and maintain.
Maybe better extract to a shell script in our repo that you call from the workflow.
Then mac developers can also update and test this script in isolation without the workflow that is hard to test.

- name: Upload unsigned PKG
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
with:
name: pkg
path: macos-installer/ideasy.pkg

# Downloads all native image artifacts to cli/target and builds the project using assemblies for final deployment to OSSRH Nexus
deploy:
name: Build Project and Deploy
Expand Down
33 changes: 33 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,38 @@ jobs:
with:
name: msi
path: windows-installer/signed/ideasy.msi
- name: Build MacOS PKG
if: runner.os == 'macOS'
shell: bash
run: |
maven_config="$(cat .mvn/maven.config)"
current_version="${maven_config/#*-Drevision=}"
current_version="${current_version/ */}"
next_version="${current_version/-SNAPSHOT/}"
Comment on lines +122 to +125

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Use new variables.

cd documentation
mvn -B -ntp clean install
cd ..
mkdir -p macos-installer/pkg-root/bin
mkdir -p macos-installer/Resources
cp documentation/target/generated-docs/IDEasy.pdf macos-installer/pkg-root/
cp documentation/target/generated-docs/LICENSE.rtf macos-installer/Resources/LICENSE.rtf
cp cli/target/macos-installer/Distribution.xml macos-installer/Distribution.xml
cp -r cli/target/package/* macos-installer/pkg-root/
cp cli/target/ideasy macos-installer/pkg-root/bin/
rm -rf macos-installer/pkg-root/system/windows
rm -rf macos-installer/pkg-root/system/linux
chmod +x macos-installer/pkg-root/bin/ideasy
chmod +x macos-installer/scripts/postinstall
cd macos-installer
pkgbuild --root pkg-root --identifier com.devonfw.ideasy --version $next_version --install-location /projects/_ide/tmp/ideasy --scripts scripts IDEasyComponent.pkg
productbuild --distribution Distribution.xml --resources Resources --package-path . ideasy.pkg
# pkgbuild is responsible for building the installation bundle. By using productbuild, we can custimze the installation process, including things like showing a license.
Comment on lines +126 to +143

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

confirmed that we need to extract as script to avoid this copy&paste redundancies.

- name: Upload unsigned PKG
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
with:
name: pkg
path: macos-installer/ideasy.pkg

# Downloads all native image artifacts to cli/target and builds the project using assemblies for final deployment to Maven Central.
# The version number for the next build will be incremented automatically.
Expand Down Expand Up @@ -200,6 +232,7 @@ jobs:
* Windows: https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-windows-x64.tar.gz
* Mac(arm64): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-mac-arm64.tar.gz
* Mac(x64): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-mac-x64.tar.gz
* Mac(PKG): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-mac.pkg
* Linux(arm64): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-linux-arm64.tar.gz
* Linux(x64): https://repo1.maven.org/maven2/com/devonfw/tools/IDEasy/ide-cli/${RELEASE_VERSION}/ide-cli-${RELEASE_VERSION}-linux-x64.tar.gz
# Changes
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ node_modules
# generated graphify knowledge graph output (per-developer AI tooling, not shared)
graphify-out/

#macOs installer files
macos-installer/*.pkg

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
macos-installer/*.pkg
*.pkg

macos-installer/Resources/LICENSE.rtf
macos-installer/pkg-root
macos-installer/Distribution.xml

# Package Files #
*.jar
*.war
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Release with new features and bugfixes:
* https://github.com/devonfw/IDEasy/issues/2039[#2039]: IDE logo not shown in mac task bar
* https://github.com/devonfw/IDEasy/issues/2176[#2176]: Support 7z archive extraction
* https://github.com/devonfw/IDEasy/issues/2100[#2100]: Fix Python not available for Mac x64
* https://github.com/devonfw/IDEasy/issues/423[#423]: Added IDEasy installer for macOS.
* https://github.com/devonfw/IDEasy/issues/2224[#2224]: Brew upgrade ideasy not working
* https://github.com/devonfw/IDEasy/issues/1784[#1784]: GUI now supports displaying progress bars
* https://github.com/devonfw/IDEasy/issues/1917[#1917]: Allow the creation of a desktop shortcut for the GUI
Expand Down
22 changes: 22 additions & 0 deletions cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,28 @@
</resources>
</configuration>
</execution>
<execution>
<id>Copy Distribution.xml [macOS Installer]</id>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

an execution ID is not a descriptive comment but a short unique identifier without spaces and special characters. It may be there to be reference it from CLI or other POMs.
To add documentation simply use an XML comment.

<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/macos-installer</outputDirectory>
<delimiters>
<delimiter>$[*]</delimiter>
</delimiters>
Comment on lines +207 to +209

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of copy&paste you should extract this to <configuration> element outside of the <executions>.
It will then be inherited by all executions.

<resources>
<resource>
<directory>../macos-installer/src</directory>
<filtering>true</filtering>
<includes>
<include>Distribution.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Expand Down
24 changes: 18 additions & 6 deletions documentation/setup.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ If you prefer a manual installation feel free to read-one.
We try to make it as simple as possible for you.
However, there are some minimal prerequisites:

* Unless you use the MSI installer for Windows, you need to have a tool to extract `*.tar.gz` files (`tar` and `gzip`).
* Unless you use the MSI installer for Windows or the PKG installer for MacOS, you need to have a tool to extract `*.tar.gz` files (`tar` and `gzip`).
On Windows before Version 10 (1803) use https://www.7-zip.org/[7-zip].
On all other platforms this comes out of the box.
* You need to have https://git-scm.com[git].
Expand All @@ -36,9 +36,13 @@ The latest release of `IDEasy` can be downloaded from https://github.com/devonfw
Extract the contents of the downloaded archive (`ide-cli-*.tar.gz`) to a new folder and run `setup` in this folder (on windows double-click on `setup.bat`).

On MacOS please study link:mac-gatekeeper.adoc[Gatekeeper problem and workaround] in order to use IDEasy.
This is also relevant in case of using the PKG installer on MacOS.

On Linux, run `./setup` to install. Your current terminal session will not recognize the `ide` command immediately. To enable it, run `source ~/.bashrc` (or your shell config).
Alternatively, open a new terminal window to load the configuration automatically. For any other existing terminal sessions, you must run the `source` command manually in each.
On Linux, run `./setup` to install.
Your current terminal session will not recognize the `ide` command immediately.
To enable it, run `source ~/.bashrc` (or your shell config).
Alternatively, open a new terminal window to load the configuration automatically.
For any other existing terminal sessions, you must run the `source` command manually in each.

Once installed, you want to link:project.adoc[create a project].
As next step read the link:usage.adoc[usage].
Expand Down Expand Up @@ -101,27 +105,35 @@ ide upgrade --mode=stable

=== Downloading SNAPSHOT releases manually

It is also possible to download IDEasy SNAPSHOT releases manually - including for other platforms. This may be useful to verify if SNAPSHOT releases for other platforms include an expected file or not. However, please note that this is a manual process containing multiple steps:
It is also possible to download IDEasy SNAPSHOT releases manually - including for other platforms.
This may be useful to verify if SNAPSHOT releases for other platforms include an expected file or not.
However, please note that this is a manual process containing multiple steps:

First, identify the latest SNAPSHOT version by going to https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/maven-metadata.xml.
The latest version will be indicated by the `<latest>` tag.
For example, if the file would include

First, identify the latest SNAPSHOT version by going to https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/maven-metadata.xml. The latest version will be indicated by the `<latest>` tag. For example, if the file would include
```
<latest>2026.04.001-SNAPSHOT</latest>
```

the latest SNAPSHOT version would be `2026.04.001-SNAPSHOT`.

Next, we add the latest identified version into the following URL:

```
https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/${latest_version}/maven-metadata.xml
```

In our example, the URL would be https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/2026.04.001-SNAPSHOT/maven-metadata.xml.
On this page you can find the artifacts of the latest SNAPSHOT release for each platform supported by IDEasy.

Lastly, we obtain a download link of the SNAPSHOT version for our desired platform by constructing a final URL:

```
https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/${latest_version}/ide-cli-${version.value}-${version.classifier}.${version.extension}
```

In our example, if we wanted to download the mac version, the final URL would be https://central.sonatype.com/repository/maven-snapshots/com/devonfw/tools/IDEasy/ide-cli/2026.04.001-SNAPSHOT/ide-cli-2026.04.001-20260321.030716-2-mac-x64.tar.gz.

From there, we can download the artifact, extract and test it.
From there, we can download the artifact, extract and test it.
21 changes: 21 additions & 0 deletions macos-installer/Resources/CONCLUSION.rtf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{\rtf1\ansi\ansicpg1252\cocoartf2867
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Arial-BoldMT;\f1\fnil\fcharset0 AndaleMono;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw7920\paperh11520\margl172\margr172\margb172\margt172\vieww11520\viewh8400\viewkind0
\deftab720
\pard\pardeftab720\ri0\sa80\partightenfactor0

\f0\b\fs24 \cf0 Thank you for using IDEasy.\
\
You can create your first project now by typing:\

\f1\b0 ide create <project-name>\
\

\f0\b Or see all available commands by typing:\

\f1\b0 ide help\
\

\f0\b If you need more information, take a look at our {\field{\*\fldinst{HYPERLINK "https://github.com/devonfw/IDEasy/blob/main/documentation/setup.adoc"}}{\fldrslt documentation}}.}
Binary file added macos-installer/Resources/background.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
53 changes: 53 additions & 0 deletions macos-installer/scripts/postinstall
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash
set -e

console_user=$(stat -f "%Su" /dev/console)
console_uid=$(id -u "$console_user")

show_error() {
/bin/launchctl asuser "$console_uid" /usr/bin/osascript \
-e "display dialog \"$1\" with title \"IDEasy Installer\" buttons {\"OK\"} with icon stop"
}

echo "Step 1/2: Running IDEasy installation..."

INSTALL_DIR="$HOME/projects/_ide/tmp/ideasy"

echo "Installing IDEasy to $INSTALL_DIR"

LOG_DIR="$HOME/.ide/logs"
mkdir -p "$LOG_DIR"
ts=$(date +"%Y-%m-%d-%H-%M-%S")
LOG_FILE="$LOG_DIR/install-$ts.log"

echo "IDEasy installation log for this session can be found at: $LOG_FILE"

if [ ! -d "$INSTALL_DIR" ]; then
echo "ERROR: expected install directory not found: $INSTALL_DIR" >&2
show_error "IDEasy installation failed: expected directory not found:\n$INSTALL_DIR"
exit 1
fi

"$INSTALL_DIR/bin/ideasy" -ftb --no-colors install \
> "$LOG_FILE" 2>&1
install_rc=$?

# 1. Handle generic install errors by analyzing the log file for known error messages
if grep -q "ide (install) failed after" "$LOG_FILE"; then
show_error "IDEasy installation failed. See log:\n$LOG_FILE"
exit 1
fi

# 3. Fallback: Exit-Code != 0 and no error message could be detected in the log file. Show generic error message with log file path.
if [ $install_rc -ne 0 ]; then
show_error "IDEasy installation failed (exit code $install_rc). See log:\n$LOG_FILE"
exit 1
fi

echo "Step 2/2: Cleaning up temporary ideasy installation..."

rm -rf "$INSTALL_DIR"

echo "Install finished"

exit 0
23 changes: 23 additions & 0 deletions macos-installer/src/Distribution.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This file is the installer configuration file for the macOS pkg-Installer. The next_version placeholder will be replaced during build with the correct version. -->
<installer-gui-script minSpecVersion="1">
<title>IDEasy - $[project.version]</title>
<license file="LICENSE.rtf"/>
<conclusion file="CONCLUSION.rtf"/>
<background file="background.png" alignment="left" scaling="tofit"/>
Comment thread
laim2003 marked this conversation as resolved.
<background-darkAqua file="background.png" alignment="left" scaling="tofit"/>
<options customize="never" require-scripts="true"/>
<domains enable_anywhere="false"
enable_currentUserHome="true"
enable_localSystem="false"/>
<choices-outline>
<line choice="default">
<line choice="com.devonfw.ideasy"/>
</line>
</choices-outline>
<choice id="default"/>
<choice id="com.devonfw.ideasy" visible="false">
<pkg-ref id="com.devonfw.ideasy"/>
</choice>
<pkg-ref id="com.devonfw.ideasy" version="$[project.version]" onConclusion="none">IDEasyComponent.pkg</pkg-ref>
</installer-gui-script>
20 changes: 20 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,26 @@
<violationSeverity>error</violationSeverity>
</configuration>
</plugin>

<!-- Clean up macOS installer artifacts -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMHO we should improve the design how you integrated this into maven.
What if you instead create a new pom.xml inside macos-installer and add it as module in our top-level pom.xml.
Then you can do all the magic inside that POM and things get clear and consistent.
Currently it is buggy (if I call mvn clean on cli it will not revert what mvn install on cli has created) and hard to understand because aspects for macos-installer are spread across different POMs as well as copy commands in the workflow files (where we also could use maven or a script as already suggested).

<artifactId>maven-clean-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/macos-installer</directory>
<includes>
<include>Distribution.xml</include>
<include>*.pkg</include>
<include>pkg-root/</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
Loading