Skip to content

Commit

Permalink
Provisioning support (#1190)
Browse files Browse the repository at this point in the history
Add provisioning support through a JSON file.

Closes #1220 #885 #517
  • Loading branch information
tresf committed Dec 21, 2023
1 parent d10fc7c commit 6869305
Show file tree
Hide file tree
Showing 56 changed files with 2,072 additions and 168 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
/.idea/compiler.xml
/fx.zip
/README.md
/provision.json
.DS_Store
windows-debug-launcher.nsi.in
15 changes: 15 additions & 0 deletions ant/apple/installer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,21 @@
<fileset dir="${dist.dir}/demo" includes="**"/>
</copy>

<!-- Provision files -->
<delete dir="${bundle.dir}/Contents/Resources/provision" failonerror="false"/>
<copy todir="${bundle.dir}/Contents/Resources/provision" failonerror="false">
<fileset dir="${provision.dir}" includes="**"/>
</copy>
<chmod perm="a+x" type="file" verbose="true">
<fileset dir="${bundle.dir}/Contents/Resources/" casesensitive="false">
<!-- Must iterate on parent directory in case "provision" is missing -->
<include name="provision/*"/>
<exclude name="provision/*.crt"/>
<exclude name="provision/*.txt"/>
<exclude name="provision/*.json"/>
</fileset>
</chmod>

<!-- Java runtime -->
<copy todir="${bundle.dir}/Contents/PlugIns/Java.runtime">
<fileset dir="${dist.dir}/Java.runtime" includes="**"/>
Expand Down
4 changes: 4 additions & 0 deletions ant/project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ jlink.java.gc.version="gc-ver-is-empty"
javafx.version=19_monocle
javafx.mirror=https://download2.gluonhq.com/openjfx

# Provisioning
provision.file=${basedir}/provision.json
provision.dir=${dist.dir}/provision

# Mask tray toggle (Apple only)
java.mask.tray=true

Expand Down
38 changes: 32 additions & 6 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@
<delete includeemptydirs="true" defaultexcludes="false" failonerror="false">
<fileset dir="${out.dir}">
<include name="**/**"/>
<exclude name="**/jlink/**"/>
<exclude name="**/javafx-*/**"/>
<exclude name="**/jlink/jdk-**/**"/>
<exclude name="**/javafx-**/**"/>
<exclude name="**/dist/provision/**"/>
</fileset>
</delete>
</target>
Expand Down Expand Up @@ -240,6 +241,31 @@
<echo level="warn">The "include-assets" task is deprecated, please use "build-demo" instead.</echo>
</target>

<target name="check-provision">
<available file="${provision.file}" property="provision.file.exists"/>
<condition property="provision.message" value="Found provision file '${provision.file}' calling 'provision --json [...]'">
<isset property="provision.file.exists"/>
</condition>
<property description="Fallback value" name="provision.message" value="Skipping provisioning, '${provision.file}' does not exist."/>
<echo level="info">${provision.message}</echo>
</target>

<target name="clean-provision" depends="check-provision" unless="skip.clean.provision">
<delete dir="${provision.dir}" includeemptydirs="true" defaultexcludes="false"/>
</target>

<target name="provision" depends="check-provision,clean-provision" if="provision.file.exists">
<java jar="${dist.dir}/${project.filename}.jar" fork="true" failonerror="true">
<arg value="provision"/>
<arg value="--json"/>
<arg value="${provision.file}"/>
<arg value="--target-os"/>
<arg value="${target.os}"/>
<arg value="--target-arch"/>
<arg value="${target.arch}"/>
</java>
</target>

<target name="download-jre" unless="jre.skip">
<condition property="target.os" value="windows">
<isset property="target.os.windows"/>
Expand All @@ -264,10 +290,10 @@
</java>
</target>

<target name="nsis" depends="get-target-arch,target-os-windows,distribute,download-jre,build-exe"/>
<target name="pkgbuild" depends="get-target-arch,target-os-mac,distribute,download-jre,build-pkg"/>
<target name="dmg" depends="get-target-arch,target-os-mac,distribute,download-jre,build-dmg"/>
<target name="makeself" depends="get-target-arch,target-os-linux,distribute,download-jre,build-run"/>
<target name="nsis" depends="get-target-arch,target-os-windows,distribute,provision,download-jre,build-exe"/>
<target name="pkgbuild" depends="get-target-arch,target-os-mac,distribute,provision,download-jre,build-pkg"/>
<target name="dmg" depends="get-target-arch,target-os-mac,distribute,provision,download-jre,build-dmg"/>
<target name="makeself" depends="get-target-arch,target-os-linux,distribute,provision,download-jre,build-run"/>


</project>
1 change: 1 addition & 0 deletions src/log4j2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<Loggers>
<!-- Packages -->
<Logger name="qz" level="trace"/>
<Logger name="qz.build.provision" level="info"/>
<!-- Default -->
<Root level="warn">
<AppenderRef ref="console"/>
Expand Down
3 changes: 1 addition & 2 deletions src/org/jdesktop/swinghelper/tray/JXTrayIcon.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

package org.jdesktop.swinghelper.tray;

import com.github.zafarkhaja.semver.Version;
import qz.common.Constants;
import qz.utils.MacUtilities;
import qz.utils.SystemUtilities;
Expand Down Expand Up @@ -162,7 +161,7 @@ public void actionPerformed(ActionEvent e) {
@Override
public Dimension getSize() {
Dimension iconSize = new Dimension(super.getSize());
switch(SystemUtilities.getOsType()) {
switch(SystemUtilities.getOs()) {
// macOS icons are slightly smaller than the size reported
case MAC:
// Handle retina display
Expand Down
10 changes: 10 additions & 0 deletions src/qz/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
import org.apache.logging.log4j.core.filter.ThresholdFilter;
import org.apache.logging.log4j.core.layout.PatternLayout;
import qz.build.provision.params.Phase;
import qz.common.Constants;
import qz.installer.Installer;
import qz.installer.certificate.CertificateManager;
import qz.installer.certificate.ExpiryTask;
import qz.installer.certificate.KeyPairWrapper;
import qz.installer.certificate.NativeCertificateInstaller;
import qz.installer.provision.ProvisionInstaller;
import qz.utils.*;
import qz.ws.PrintSocketServer;
import qz.ws.SingleInstanceChecker;
Expand Down Expand Up @@ -67,6 +69,14 @@ public static void main(String ... args) {
}
}

// Invoke any provisioning steps that are phase=startup
try {
ProvisionInstaller provisionInstaller = new ProvisionInstaller(SystemUtilities.getJarParentPath().resolve(Constants.PROVISION_DIR));
provisionInstaller.invoke(Phase.STARTUP);
} catch(Exception e) {
log.warn("An error occurred provisioning \"phase\": \"startup\" entries", e);
}

try {
log.info("Starting {} {}", Constants.ABOUT_TITLE, Constants.VERSION);
// Start the WebSocket
Expand Down
6 changes: 3 additions & 3 deletions src/qz/build/JLink.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import qz.build.jlink.Arch;
import qz.build.jlink.Platform;
import qz.build.jlink.Vendor;
import qz.build.jlink.Url;
import qz.build.provision.params.Arch;
import qz.common.Constants;
import qz.utils.*;

Expand Down Expand Up @@ -60,7 +60,7 @@ public class JLink {

public JLink(String targetPlatform, String targetArch, String javaVendor, String javaVersion, String gcEngine, String gcVersion, String targetJdk) throws IOException {
this.hostPlatform = Platform.getCurrentPlatform();
this.hostArch = Arch.getCurrentArch();
this.hostArch = SystemUtilities.getArch();

this.targetPlatform = Platform.parse(targetPlatform, this.hostPlatform);
this.targetArch = Arch.parse(targetArch, this.hostArch);
Expand Down Expand Up @@ -150,7 +150,7 @@ private String downloadJdk(Arch arch, Platform platform) throws IOException {
String url = new Url(this.javaVendor).format(arch, platform, this.gcEngine, this.javaSemver, this.javaVersion, this.gcVersion);

// Saves to out e.g. "out/jlink/jdk-AdoptOpenjdk-amd64-platform-11_0_7"
String extractedJdk = new Fetcher(String.format("jlink/jdk-%s-%s-%s-%s", javaVendor.value(), arch.value(), platform.value(), javaSemver.toString().replaceAll("\\+", "_")), url)
String extractedJdk = new Fetcher(String.format("jlink/jdk-%s-%s-%s-%s", javaVendor.value(), arch, platform.value(), javaSemver.toString().replaceAll("\\+", "_")), url)
.fetch()
.uncompress();

Expand Down
26 changes: 0 additions & 26 deletions src/qz/build/jlink/Arch.java
Original file line number Diff line number Diff line change
@@ -1,26 +0,0 @@
package qz.build.jlink;

/**
* Handling of architectures
*/
public enum Arch implements Parsable {
AMD64("amd64", "x86_64", "x64"),
AARCH64("aarch64", "arm64"),
ARM32("arm", "arm32", "arm32hf", "aarch32", "aarch32hf"),
RISCV64("riscv", "riscv64");

public final String[] matches;
Arch(String ... matches) { this.matches = matches; }

public static Arch parse(String value, Arch fallback) {
return Parsable.parse(Arch.class, value, fallback);
}

public static Arch parse(String value) {
return Parsable.parse(Arch.class, value);
}

public static Arch getCurrentArch() {
return Parsable.parse(Arch.class, System.getProperty("os.arch"));
}
}
2 changes: 1 addition & 1 deletion src/qz/build/jlink/Platform.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static Platform parse(String value) {
}

public static Platform getCurrentPlatform() {
switch(SystemUtilities.getOsType()) {
switch(SystemUtilities.getOs()) {
case MAC:
return Platform.MAC;
case WINDOWS:
Expand Down
1 change: 1 addition & 0 deletions src/qz/build/jlink/Url.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.github.zafarkhaja.semver.Version;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import qz.build.provision.params.Arch;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
Expand Down
4 changes: 2 additions & 2 deletions src/qz/build/jlink/Vendor.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package qz.build.jlink;

import com.github.zafarkhaja.semver.Version;
import qz.build.JLink;
import qz.build.provision.params.Arch;

/**
* Handling of java vendors
Expand Down Expand Up @@ -61,7 +61,7 @@ public String getUrlArch(Arch arch) {
default:
return "arm";
}
case AMD64:
case X86_64:
switch(this) {
// BellSoft uses "amd64"
case BELLSOFT:
Expand Down

0 comments on commit 6869305

Please sign in to comment.