Skip to content

Provisioning support #1190

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

Merged
merged 2 commits into from
Dec 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
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
Loading