mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 17:22:09 +10:00
Merge branch 'master' into feature/mirror2
This commit is contained in:
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
name: Test Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
path: diy-layout-creator
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'temurin'
|
||||
cache: maven
|
||||
|
||||
- name: Build with Maven
|
||||
run: |
|
||||
cd diy-layout-creator/diylc
|
||||
mvn -B test --file pom.xml
|
||||
Vendored
+51
@@ -0,0 +1,51 @@
|
||||
name: Java CI Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '11' # Adjust version as needed
|
||||
distribution: 'temurin'
|
||||
cache: maven
|
||||
|
||||
- name: Run Tests
|
||||
run: mvn test
|
||||
|
||||
# Generate and report coverage without failing
|
||||
- name: Generate Coverage Report
|
||||
run: mvn jacoco:report
|
||||
|
||||
- name: Report Coverage
|
||||
run: |
|
||||
COVERAGE=$(mvn jacoco:report | grep -oP 'Total coverage: \K[0-9.]+' || echo "unknown")
|
||||
echo "Current test coverage: $COVERAGE%"
|
||||
|
||||
- name: Upload Coverage Report
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage-report
|
||||
path: target/site/jacoco/
|
||||
|
||||
# Optional: Comment test results on PR
|
||||
- name: Add Test Results Comment
|
||||
uses: marocchino/sticky-pull-request-comment@v2
|
||||
if: github.event_name == 'pull_request'
|
||||
with:
|
||||
message: |
|
||||
### Test Results Summary
|
||||
✅ Tests completed
|
||||
📊 Coverage: ${{ env.COVERAGE }}%
|
||||
|
||||
Coverage report available in workflow artifacts
|
||||
@@ -13,6 +13,9 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.bancika.gerberwriter.DataLayer;
|
||||
|
||||
import org.diylc.core.ComponentState;
|
||||
import org.diylc.core.IBoard;
|
||||
import org.diylc.core.IDIYComponent;
|
||||
@@ -21,7 +24,6 @@ import org.diylc.core.Project;
|
||||
import org.diylc.core.measures.Size;
|
||||
import org.diylc.core.measures.SizeUnit;
|
||||
import org.diylc.lang.LangUtil;
|
||||
import com.bancika.gerberwriter.DataLayer;
|
||||
|
||||
public class GerberExporter {
|
||||
|
||||
|
||||
@@ -261,6 +261,10 @@
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Significantly improved rendering performance</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Significantly improved rendering performance</description>
|
||||
</org.diylc.appframework.update.Change>
|
||||
<org.diylc.appframework.update.Change>
|
||||
<changeType>IMPROVEMENT</changeType>
|
||||
<description>Upgraded source code structure to modern standards and introduced Maven</description>
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.awt.Graphics2D;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import org.diylc.appframework.miscutils.ConfigurationManager;
|
||||
|
||||
import org.diylc.awt.StringUtils;
|
||||
import org.diylc.common.HorizontalAlignment;
|
||||
import org.diylc.common.IPlugInPort;
|
||||
|
||||
@@ -28,6 +28,7 @@ import java.awt.Graphics2D;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import org.diylc.common.ObjectCache;
|
||||
import org.diylc.components.transform.SimpleComponentTransformer;
|
||||
import org.diylc.core.ComponentState;
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
# Setting up macOS Build Environment for DIYLC
|
||||
|
||||
This document describes how to set up a macOS machine for building and signing DIYLC application bundles.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **macOS System**
|
||||
- macOS 11 (Big Sur) or later
|
||||
- Xcode Command Line Tools installed
|
||||
```bash
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
2. **Java Development Kit**
|
||||
- Install JDK 17 (recommended to use SDKMAN!)
|
||||
```bash
|
||||
# Install SDKMAN!
|
||||
curl -s "https://get.sdkman.io" | bash
|
||||
source "$HOME/.sdkman/bin/sdkman-init.sh"
|
||||
|
||||
# Install JDK 17
|
||||
sdk install java 17.0.14-tem
|
||||
```
|
||||
|
||||
3. **Maven**
|
||||
- Install Maven 3.9 or later
|
||||
```bash
|
||||
sdk install maven
|
||||
```
|
||||
|
||||
## Apple Developer Account Setup
|
||||
|
||||
1. **Apple Developer Account**
|
||||
- Enroll in the [Apple Developer Program](https://developer.apple.com/programs/)
|
||||
- You need a paid membership ($99/year) for distribution signing
|
||||
|
||||
2. **Developer Certificate**
|
||||
- Open Keychain Access
|
||||
- Go to Certificate Assistant → Request a Certificate from a Certificate Authority
|
||||
- Fill in your email and name
|
||||
- Save to disk
|
||||
- Go to [Apple Developer Certificates](https://developer.apple.com/account/resources/certificates/list)
|
||||
- Create a new Developer ID Application certificate
|
||||
- Download and double-click to install in Keychain
|
||||
|
||||
3. **Notarization Setup**
|
||||
- Create an app-specific password:
|
||||
1. Go to [Apple ID Account](https://appleid.apple.com/)
|
||||
2. Security → App-Specific Passwords → Generate Password
|
||||
3. Save this password securely
|
||||
|
||||
- Create a keychain profile for notarization:
|
||||
```bash
|
||||
xcrun notarytool store-credentials "AC_PASSWORD" \
|
||||
--apple-id "your.email@example.com" \
|
||||
--team-id "YOUR_TEAM_ID" \
|
||||
--password "app-specific-password"
|
||||
```
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
1. **Set Developer Identity**
|
||||
- Find your Developer ID in Keychain Access
|
||||
```bash
|
||||
security find-identity -v -p codesigning
|
||||
```
|
||||
- Set the environment variable (add to your ~/.zshrc):
|
||||
```bash
|
||||
export APPLE_DEVELOPER_IDENTITY="Developer ID Application: Your Name (TEAM_ID)"
|
||||
```
|
||||
|
||||
2. **Verify Setup**
|
||||
```bash
|
||||
# Verify codesign is available
|
||||
codesign --version
|
||||
|
||||
# Verify notarytool is available
|
||||
xcrun notarytool --version
|
||||
|
||||
# Verify your identity is set
|
||||
echo $APPLE_DEVELOPER_IDENTITY
|
||||
```
|
||||
|
||||
## Building DIYLC
|
||||
|
||||
1. **Clone the Repository**
|
||||
```bash
|
||||
git clone https://github.com/bancika/diy-layout-creator.git
|
||||
cd diy-layout-creator/diylc
|
||||
```
|
||||
|
||||
2. **Build for Intel Macs**
|
||||
```bash
|
||||
mvn clean package -P mac-x86
|
||||
```
|
||||
|
||||
3. **Build for Apple Silicon Macs**
|
||||
```bash
|
||||
mvn clean package -P mac-arm
|
||||
```
|
||||
|
||||
4. **Build Both Architectures**
|
||||
```bash
|
||||
mvn clean package -P mac-x86,mac-arm
|
||||
```
|
||||
|
||||
## Output Files
|
||||
|
||||
After successful builds, you'll find these files in the `diylc-swing/target` directory:
|
||||
|
||||
**Signed and Notarized Builds:**
|
||||
- `diylc-<version>-osx-x86.zip` - Signed and notarized Intel build
|
||||
- `diylc-<version>-osx-arm.zip` - Signed and notarized ARM build
|
||||
|
||||
**Unsigned Builds:**
|
||||
- `diylc-<version>-osx-x86-unsigned.zip` - Unsigned Intel build
|
||||
- `diylc-<version>-osx-arm-unsigned.zip` - Unsigned ARM build
|
||||
|
||||
The unsigned builds are created before the signing and notarization process and can be useful for testing or in environments where code signing is not required.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
1. **Signing Issues**
|
||||
- Verify your certificate is valid:
|
||||
```bash
|
||||
security find-identity -v -p codesigning
|
||||
```
|
||||
- Check certificate expiration in Keychain Access
|
||||
|
||||
2. **Notarization Issues**
|
||||
- Check notarization status:
|
||||
```bash
|
||||
xcrun notarytool log <submission-id> --keychain-profile "AC_PASSWORD"
|
||||
```
|
||||
- Verify entitlements are correct in `deploy/mac/entitlements.plist`
|
||||
|
||||
3. **Build Issues**
|
||||
- Clear Maven cache:
|
||||
```bash
|
||||
rm -rf ~/.m2/repository/org/diylc
|
||||
```
|
||||
- Verify JDK version:
|
||||
```bash
|
||||
java -version
|
||||
```
|
||||
|
||||
## Common Issues
|
||||
|
||||
1. **"The specified item could not be found in the keychain"**
|
||||
- Solution: Verify your Developer ID certificate is in the keychain
|
||||
- Check the exact name matches `APPLE_DEVELOPER_IDENTITY`
|
||||
|
||||
2. **"No account for team found"**
|
||||
- Solution: Verify your Apple Developer membership is active
|
||||
- Check team ID in notarytool credentials
|
||||
|
||||
3. **"The binary is not signed"**
|
||||
- Solution: Check that the signing process isn't being skipped
|
||||
- Verify all dependencies are properly signed
|
||||
|
||||
## Support
|
||||
|
||||
For additional help:
|
||||
- Check the [Apple Code Signing Documentation](https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution)
|
||||
- File an issue on the DIYLC GitHub repository
|
||||
- Contact the development team
|
||||
@@ -0,0 +1,17 @@
|
||||
Thank you for downloading DIY Layout Creator!
|
||||
|
||||
This app bundle is fully functional but not officially notarized by Apple.
|
||||
To run it on your Mac, you'll need to approve it in the 'Privacy & Security' settings.
|
||||
|
||||
Without this approval, macOS will mark it as potentially damaged and prevent it from opening.
|
||||
|
||||
A notarized version is available, but due to Apple Developer Program costs and additional requirements,
|
||||
it is exclusively offered to DIYLC Patreon supporters. For a small monthly membership fee,
|
||||
you'll receive several benefits:
|
||||
|
||||
- Access to the notarized version
|
||||
- Early access to upcoming features
|
||||
- Voting rights to influence the development roadmap
|
||||
- Direct developer support
|
||||
|
||||
Join our community at http://www.diy-fever.com/patreon
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>com.apple.security.cs.allow-jit</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.disable-library-validation</key>
|
||||
<true/>
|
||||
<key>com.apple.security.cs.debugger</key>
|
||||
<true/>
|
||||
<key>com.apple.security.get-task-allow</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.user-selected.read-write</key>
|
||||
<true/>
|
||||
<key>com.apple.security.files.downloads.read-write</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
+417
-17
@@ -180,6 +180,17 @@
|
||||
<configuration>
|
||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||
<finalName>diylc</finalName>
|
||||
<transformers>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||
<mainClass>org.diylc.DIYLCStarter</mainClass>
|
||||
</transformer>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
|
||||
</transformers>
|
||||
<artifactSet>
|
||||
<includes>
|
||||
<include>*:*</include>
|
||||
</includes>
|
||||
</artifactSet>
|
||||
<filters>
|
||||
<filter>
|
||||
<artifact>*:*</artifact>
|
||||
@@ -190,11 +201,104 @@
|
||||
</excludes>
|
||||
</filter>
|
||||
</filters>
|
||||
<transformers>
|
||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||
<mainClass>org.diylc.DIYLCStarter</mainClass>
|
||||
</transformer>
|
||||
</transformers>
|
||||
<minimizeJar>false</minimizeJar>
|
||||
<createSourcesJar>false</createSourcesJar>
|
||||
<shadeSourcesContent>true</shadeSourcesContent>
|
||||
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.6.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
|
||||
<!-- Add dependency plugin to copy system dependencies -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>3.6.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-system-dependencies</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<includeScope>system</includeScope>
|
||||
<outputDirectory>${project.build.directory}/system-libs</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<!-- Add antrun plugin to include system dependencies in the final jar -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>merge-system-jars</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<unzip dest="${project.build.directory}/combined-classes">
|
||||
<fileset dir="${project.build.directory}/system-libs" includes="*.jar"/>
|
||||
</unzip>
|
||||
<jar destfile="${project.build.directory}/diylc.jar" update="true">
|
||||
<fileset dir="${project.build.directory}/combined-classes"/>
|
||||
</jar>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>sign-jar-launcher</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<target>
|
||||
<!-- Extract JavaAppLauncher -->
|
||||
<unzip src="${project.build.directory}/diylc.jar" dest="${project.build.directory}/jar-contents">
|
||||
<patternset>
|
||||
<include name="com/oracle/appbundler/JavaAppLauncher"/>
|
||||
</patternset>
|
||||
</unzip>
|
||||
|
||||
<!-- Make it executable -->
|
||||
<chmod file="${project.build.directory}/jar-contents/com/oracle/appbundler/JavaAppLauncher" perm="755"/>
|
||||
|
||||
<!-- Sign the launcher -->
|
||||
<exec executable="codesign" failonerror="true">
|
||||
<arg value="--force"/>
|
||||
<arg value="--sign"/>
|
||||
<arg value="${env.APPLE_DEVELOPER_IDENTITY}"/>
|
||||
<arg value="--timestamp"/>
|
||||
<arg value="--options"/>
|
||||
<arg value="runtime"/>
|
||||
<arg value="--entitlements"/>
|
||||
<arg value="${project.basedir}/deploy/mac/entitlements.plist"/>
|
||||
<arg value="--all-architectures"/>
|
||||
<arg value="--strict"/>
|
||||
<arg value="--verbose"/>
|
||||
<arg value="${project.build.directory}/jar-contents/com/oracle/appbundler/JavaAppLauncher"/>
|
||||
</exec>
|
||||
|
||||
<!-- Update the jar with signed launcher -->
|
||||
<jar destfile="${project.build.directory}/diylc.jar" update="true">
|
||||
<fileset dir="${project.build.directory}/jar-contents"/>
|
||||
</jar>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
@@ -238,7 +342,6 @@
|
||||
<id>linux-appimage</id>
|
||||
<properties>
|
||||
<appdir.dir>${project.build.directory}/AppDir</appdir.dir>
|
||||
<appdir.jre>${appdir.dir}/usr/bin/jre</appdir.jre>
|
||||
<jdk.version>17.0.14+7</jdk.version>
|
||||
<jdk.version.file>17.0.14_7</jdk.version.file>
|
||||
<jdk.archive.linux>OpenJDK17U-jre_x64_linux_hotspot_${jdk.version.file}.tar.gz</jdk.archive.linux>
|
||||
@@ -305,20 +408,21 @@
|
||||
compression="gzip" />
|
||||
|
||||
<!-- Move extracted folder into AppImage location -->
|
||||
<mkdir dir="${appdir.jre}" />
|
||||
<move todir="${appdir.jre}">
|
||||
<mkdir dir="${appdir.dir}/usr/bin/jre" />
|
||||
<move todir="${appdir.dir}/usr/bin/jre">
|
||||
<fileset dir="${jre.dest.linux}/jdk-${jdk.version}-jre" />
|
||||
</move>
|
||||
|
||||
<!-- Clean up temporary directory -->
|
||||
<delete dir="${jre.dest.linux}" />
|
||||
|
||||
<echo message="JRE 17 bundled into ${appdir.jre}" />
|
||||
<echo message="JRE 17 bundled into ${appdir.dir}/usr/bin/jre" />
|
||||
|
||||
<!-- Convert line endings to Unix format -->
|
||||
<fixcrlf file="${appdir.dir}/com.diy_fever.DIYLayoutCreator.desktop" eol="unix" />
|
||||
<fixcrlf file="${appdir.dir}/AppRun" eol="unix" />
|
||||
<fixcrlf file="${appdir.dir}/usr/bin/diylc.sh" eol="unix" />
|
||||
<!-- Update the launch script to use the correct JRE path -->
|
||||
<replace file="${appdir.dir}/usr/bin/diylc.sh">
|
||||
<replacetoken>JAVA_HOME="$APPDIR/usr/lib/jre"</replacetoken>
|
||||
<replacevalue>JAVA_HOME="$APPDIR/usr/bin/jre"</replacevalue>
|
||||
</replace>
|
||||
|
||||
<echo message="AppDir structure created successfully at: ${appdir.dir}" />
|
||||
</target>
|
||||
@@ -555,7 +659,7 @@
|
||||
<jdk.version.file>17.0.14_7</jdk.version.file>
|
||||
<jdk.archive.osx>OpenJDK17U-jre_x64_mac_hotspot_${jdk.version.file}.tar.gz</jdk.archive.osx>
|
||||
<jdk.url.osx>https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk.version}/${jdk.archive.osx}</jdk.url.osx>
|
||||
<jre.dest.osx>${project.build.directory}/jre_x86</jre.dest.osx>
|
||||
<jre.dest.osx>${project.build.directory}/jre_x86.bundle</jre.dest.osx>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
@@ -657,10 +761,158 @@
|
||||
<option value="-Xdock:icon=Contents/Resources/diylc.icns"/>
|
||||
</bundleapp>
|
||||
|
||||
<!-- Create zip package -->
|
||||
<!-- First remove existing signatures -->
|
||||
<echo message="Removing any existing signatures..."/>
|
||||
<exec executable="codesign" failonerror="false">
|
||||
<arg value="--remove-signature"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Creating unsigned zip for distribution..."/>
|
||||
<!-- Create unsigned zip for distribution -->
|
||||
<zip destfile="${project.build.directory}/diylc-${project.version}-osx-x86-unsigned.zip">
|
||||
<zipfileset filemode="755" dir="${project.build.directory}/DIYLC.app" prefix="DIYLC.app" />
|
||||
<zipfileset dir="${project.basedir}/deploy/mac" includes="README.txt" />
|
||||
</zip>
|
||||
<echo message="Unsigned zip created at: ${project.build.directory}/diylc-${project.version}-osx-x86-unsigned.zip"/>
|
||||
|
||||
<!-- Sign the entire app bundle in one shot -->
|
||||
<echo message="Signing complete app bundle..."/>
|
||||
<exec executable="codesign" failonerror="true">
|
||||
<arg value="--force"/>
|
||||
<arg value="--sign"/>
|
||||
<arg value="${env.APPLE_DEVELOPER_IDENTITY}"/>
|
||||
<arg value="--timestamp"/>
|
||||
<arg value="--options"/>
|
||||
<arg value="runtime"/>
|
||||
<arg value="--entitlements"/>
|
||||
<arg value="${project.basedir}/deploy/mac/entitlements.plist"/>
|
||||
<arg value="--deep"/>
|
||||
<arg value="--all-architectures"/>
|
||||
<arg value="--strict"/>
|
||||
<arg value="--verbose"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<!-- Verify the signature -->
|
||||
<echo message="Verifying code signature..."/>
|
||||
<exec executable="codesign" failonerror="true">
|
||||
<arg value="--verify"/>
|
||||
<arg value="--deep"/>
|
||||
<arg value="--verbose=4"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
<echo message="Code signing completed successfully"/>
|
||||
|
||||
<echo message="Preparing zip archive for notarization..."/>
|
||||
<!-- Create a ZIP archive for notarization -->
|
||||
<zip destfile="${project.build.directory}/DIYLC-notarize.zip"
|
||||
basedir="${project.build.directory}"
|
||||
includes="DIYLC.app/**"/>
|
||||
<echo message="Notarization archive created"/>
|
||||
|
||||
<!-- Submit for notarization -->
|
||||
<echo message="Submitting app for notarization to Apple (this may take several minutes)..."/>
|
||||
<exec executable="xcrun" outputproperty="submission.output" failonerror="true">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="submit"/>
|
||||
<arg value="${project.build.directory}/DIYLC-notarize.zip"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<!-- Extract UUID using string manipulation -->
|
||||
<echo message="Notarization submission output: ${submission.output}"/>
|
||||
|
||||
<!-- Save output to a file for processing -->
|
||||
<echo file="${project.build.directory}/notarization_output.txt" message="${submission.output}"/>
|
||||
|
||||
<!-- Use loadfile with filterchain to extract UUID -->
|
||||
<loadfile property="notarization.uuid.raw" srcFile="${project.build.directory}/notarization_output.txt">
|
||||
<filterchain>
|
||||
<striplinebreaks/>
|
||||
<tokenfilter>
|
||||
<replaceregex pattern=".*id: ([a-f0-9-]{36}).*" replace="\1"/>
|
||||
</tokenfilter>
|
||||
</filterchain>
|
||||
</loadfile>
|
||||
|
||||
<!-- Create clean UUID property without any whitespace -->
|
||||
<loadresource property="notarization.uuid">
|
||||
<propertyresource name="notarization.uuid.raw"/>
|
||||
<filterchain>
|
||||
<striplinebreaks/>
|
||||
<tokenfilter>
|
||||
<replaceregex pattern="\s+" replace=""/>
|
||||
</tokenfilter>
|
||||
</filterchain>
|
||||
</loadresource>
|
||||
|
||||
<echo message="Raw UUID: '${notarization.uuid.raw}'"/>
|
||||
<echo message="Clean UUID: '${notarization.uuid}'"/>
|
||||
|
||||
<!-- Wait for notarization with timeout -->
|
||||
<echo message="Waiting for notarization to complete (this may take several minutes)..."/>
|
||||
<exec executable="xcrun" resultproperty="wait.result" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="wait"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<!-- Check notarization status -->
|
||||
<echo message="Checking final notarization status..."/>
|
||||
<exec executable="xcrun" outputproperty="status.output" resultproperty="status.result" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="info"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Notarization status output:${line.separator}${status.output}"/>
|
||||
|
||||
<!-- Get log regardless of status -->
|
||||
<exec executable="xcrun" outputproperty="log.output" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="log"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Detailed notarization log:${line.separator}${log.output}"/>
|
||||
|
||||
<!-- Check if status contains "Invalid" -->
|
||||
<condition property="notarization.failed">
|
||||
<contains string="${status.output}" substring="Invalid"/>
|
||||
</condition>
|
||||
|
||||
<!-- Fail if notarization was invalid -->
|
||||
<fail if="notarization.failed" message="Notarization failed. Please check the detailed log above for more information."/>
|
||||
|
||||
<!-- Only continue if notarization succeeded -->
|
||||
<echo message="Notarization completed successfully. Proceeding with stapling..."/>
|
||||
|
||||
<!-- Sleep for a few seconds to ensure notarization is fully processed -->
|
||||
<sleep seconds="10"/>
|
||||
|
||||
<echo message="Stapling notarization ticket to app bundle..."/>
|
||||
<!-- Staple the notarization ticket -->
|
||||
<exec executable="xcrun" failonerror="true">
|
||||
<arg value="stapler"/>
|
||||
<arg value="staple"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Creating final signed and notarized zip package..."/>
|
||||
<!-- Create final signed and notarized zip package -->
|
||||
<zip destfile="${project.build.directory}/diylc-${project.version}-osx-x86.zip">
|
||||
<zipfileset filemode="755" dir="${project.build.directory}/DIYLC.app" prefix="DIYLC.app" />
|
||||
</zip>
|
||||
<echo message="Final package created at: ${project.build.directory}/diylc-${project.version}-osx-x86.zip"/>
|
||||
<echo message="Mac build process completed successfully!"/>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
@@ -677,7 +929,7 @@
|
||||
<jdk.version.file>17.0.14_7</jdk.version.file>
|
||||
<jdk.archive.osx>OpenJDK17U-jre_aarch64_mac_hotspot_${jdk.version.file}.tar.gz</jdk.archive.osx>
|
||||
<jdk.url.osx>https://github.com/adoptium/temurin17-binaries/releases/download/jdk-${jdk.version}/${jdk.archive.osx}</jdk.url.osx>
|
||||
<jre.dest.osx>${project.build.directory}/jre_arm</jre.dest.osx>
|
||||
<jre.dest.osx>${project.build.directory}/jre_arm.bundle</jre.dest.osx>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
@@ -780,10 +1032,158 @@
|
||||
<option value="-Xdock:icon=Contents/Resources/diylc.icns"/>
|
||||
</bundleapp>
|
||||
|
||||
<!-- Create zip package -->
|
||||
<!-- First remove existing signatures -->
|
||||
<echo message="Removing any existing signatures..."/>
|
||||
<exec executable="codesign" failonerror="false">
|
||||
<arg value="--remove-signature"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Creating unsigned zip for distribution..."/>
|
||||
<!-- Create unsigned zip for distribution -->
|
||||
<zip destfile="${project.build.directory}/diylc-${project.version}-osx-arm-unsigned.zip">
|
||||
<zipfileset filemode="755" dir="${project.build.directory}/DIYLC.app" prefix="DIYLC.app" />
|
||||
<zipfileset dir="${project.basedir}/deploy/mac" includes="README.txt" />
|
||||
</zip>
|
||||
<echo message="Unsigned zip created at: ${project.build.directory}/diylc-${project.version}-osx-arm-unsigned.zip"/>
|
||||
|
||||
<!-- Sign the entire app bundle in one shot -->
|
||||
<echo message="Signing complete app bundle..."/>
|
||||
<exec executable="codesign" failonerror="true">
|
||||
<arg value="--force"/>
|
||||
<arg value="--sign"/>
|
||||
<arg value="${env.APPLE_DEVELOPER_IDENTITY}"/>
|
||||
<arg value="--timestamp"/>
|
||||
<arg value="--options"/>
|
||||
<arg value="runtime"/>
|
||||
<arg value="--entitlements"/>
|
||||
<arg value="${project.basedir}/deploy/mac/entitlements.plist"/>
|
||||
<arg value="--deep"/>
|
||||
<arg value="--all-architectures"/>
|
||||
<arg value="--strict"/>
|
||||
<arg value="--verbose"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<!-- Verify the signature -->
|
||||
<echo message="Verifying code signature..."/>
|
||||
<exec executable="codesign" failonerror="true">
|
||||
<arg value="--verify"/>
|
||||
<arg value="--deep"/>
|
||||
<arg value="--verbose=4"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
<echo message="Code signing completed successfully"/>
|
||||
|
||||
<echo message="Preparing zip archive for notarization..."/>
|
||||
<!-- Create a ZIP archive for notarization -->
|
||||
<zip destfile="${project.build.directory}/DIYLC-notarize.zip"
|
||||
basedir="${project.build.directory}"
|
||||
includes="DIYLC.app/**"/>
|
||||
<echo message="Notarization archive created"/>
|
||||
|
||||
<!-- Submit for notarization -->
|
||||
<echo message="Submitting app for notarization to Apple (this may take several minutes)..."/>
|
||||
<exec executable="xcrun" outputproperty="submission.output" failonerror="true">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="submit"/>
|
||||
<arg value="${project.build.directory}/DIYLC-notarize.zip"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<!-- Extract UUID using string manipulation -->
|
||||
<echo message="Notarization submission output: ${submission.output}"/>
|
||||
|
||||
<!-- Save output to a file for processing -->
|
||||
<echo file="${project.build.directory}/notarization_output.txt" message="${submission.output}"/>
|
||||
|
||||
<!-- Use loadfile with filterchain to extract UUID -->
|
||||
<loadfile property="notarization.uuid.raw" srcFile="${project.build.directory}/notarization_output.txt">
|
||||
<filterchain>
|
||||
<striplinebreaks/>
|
||||
<tokenfilter>
|
||||
<replaceregex pattern=".*id: ([a-f0-9-]{36}).*" replace="\1"/>
|
||||
</tokenfilter>
|
||||
</filterchain>
|
||||
</loadfile>
|
||||
|
||||
<!-- Create clean UUID property without any whitespace -->
|
||||
<loadresource property="notarization.uuid">
|
||||
<propertyresource name="notarization.uuid.raw"/>
|
||||
<filterchain>
|
||||
<striplinebreaks/>
|
||||
<tokenfilter>
|
||||
<replaceregex pattern="\s+" replace=""/>
|
||||
</tokenfilter>
|
||||
</filterchain>
|
||||
</loadresource>
|
||||
|
||||
<echo message="Raw UUID: '${notarization.uuid.raw}'"/>
|
||||
<echo message="Clean UUID: '${notarization.uuid}'"/>
|
||||
|
||||
<!-- Wait for notarization with timeout -->
|
||||
<echo message="Waiting for notarization to complete (this may take several minutes)..."/>
|
||||
<exec executable="xcrun" resultproperty="wait.result" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="wait"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<!-- Check notarization status -->
|
||||
<echo message="Checking final notarization status..."/>
|
||||
<exec executable="xcrun" outputproperty="status.output" resultproperty="status.result" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="info"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Notarization status output:${line.separator}${status.output}"/>
|
||||
|
||||
<!-- Get log regardless of status -->
|
||||
<exec executable="xcrun" outputproperty="log.output" failonerror="false">
|
||||
<arg value="notarytool"/>
|
||||
<arg value="log"/>
|
||||
<arg value="${notarization.uuid}"/>
|
||||
<arg value="--keychain-profile"/>
|
||||
<arg value="AC_PASSWORD"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Detailed notarization log:${line.separator}${log.output}"/>
|
||||
|
||||
<!-- Check if status contains "Invalid" -->
|
||||
<condition property="notarization.failed">
|
||||
<contains string="${status.output}" substring="Invalid"/>
|
||||
</condition>
|
||||
|
||||
<!-- Fail if notarization was invalid -->
|
||||
<fail if="notarization.failed" message="Notarization failed. Please check the detailed log above for more information."/>
|
||||
|
||||
<!-- Only continue if notarization succeeded -->
|
||||
<echo message="Notarization completed successfully. Proceeding with stapling..."/>
|
||||
|
||||
<!-- Sleep for a few seconds to ensure notarization is fully processed -->
|
||||
<sleep seconds="10"/>
|
||||
|
||||
<echo message="Stapling notarization ticket to app bundle..."/>
|
||||
<!-- Staple the notarization ticket -->
|
||||
<exec executable="xcrun" failonerror="true">
|
||||
<arg value="stapler"/>
|
||||
<arg value="staple"/>
|
||||
<arg value="${project.build.directory}/DIYLC.app"/>
|
||||
</exec>
|
||||
|
||||
<echo message="Creating final signed and notarized zip package..."/>
|
||||
<!-- Create final signed and notarized zip package -->
|
||||
<zip destfile="${project.build.directory}/diylc-${project.version}-osx-arm.zip">
|
||||
<zipfileset filemode="755" dir="${project.build.directory}/DIYLC.app" prefix="DIYLC.app" />
|
||||
</zip>
|
||||
<echo message="Final package created at: ${project.build.directory}/diylc-${project.version}-osx-arm.zip"/>
|
||||
<echo message="Mac build process completed successfully!"/>
|
||||
</target>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+1
-1
@@ -19,7 +19,7 @@
|
||||
</modules>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<log4j.version>1.2.15</log4j.version>
|
||||
|
||||
Reference in New Issue
Block a user