bisq/desktop/package/windows/package.bat
2020-11-25 13:46:24 +01:00

131 lines
4.7 KiB
Batchfile

:: Requirements:
:: - Inno Setup unicode installed (http://www.jrsoftware.org/isdl.php)
:: - OracleJDK 10 installed
:: Note: OpenJDK 10 does not have the javapackager util, so must use OracleJDK
:: - Sign Tool installed (https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool)
:: Note: Sign Tool is part of Windows 10 SDK (https://go.microsoft.com/fwlink/?LinkID=698771)
:: - Code signing certificate installed
:: Prior to running this script:
:: - Update version below
:: - Ensure JAVA_HOME below is pointing to OracleJDK 10 directory
@echo off
set version=1.5.0-SNAPSHOT
if not exist "%JAVA_HOME%\bin\javapackager.exe" (
if not exist "%ProgramFiles%\Java\jdk-10.0.2" (
echo Javapackager not found. Update JAVA_HOME variable to point to OracleJDK.
exit /B 1
)
set JAVA_HOME=%ProgramFiles%\Java\jdk-10.0.2
)
set package_dir=%~dp0..
for /F "tokens=1,2,3 delims=.-" %%a in ("%version%") do (
set file_version=%%a.%%b.%%c
)
cd %~dp0..\..\..
if exist "%package_dir%\desktop-%version%-all.jar" (
set jar_dir=%package_dir%
set jar_file=%package_dir%\desktop-%version%-all.jar
set jar_filename=desktop-%version%-all.jar
goto PackageJar
)
echo Building application
call gradlew.bat :desktop:clean :desktop:build -x test shadowJar
if exist "%~dp0..\..\..\desktop\build\libs\desktop-%version%-all.jar" (
set jar_dir=%~dp0..\..\..\desktop\build\libs
set jar_file=%~dp0..\..\..\desktop\build\libs\desktop-%version%-all.jar
set jar_filename=desktop-%version%-all.jar
) else (
echo No jar file available in %~dp0..\..\..\desktop\build\libs
exit /B 2
)
if not exist "%TEMP%\7za920\7za.exe" (
echo Downloading 7zip ^(command line version^) to %TEMP% in order to extract the jar
powershell -Command "Invoke-WebRequest https://www.7-zip.org/a/7za920.zip -OutFile $env:temp\7za920.zip"
powershell -Command "Expand-Archive $env:temp\7za920.zip -DestinationPath $env:temp\7za920 -Force"
)
set tmp_dir=%~dp0..\..\..\desktop\build\libs\tmp
echo Extracting jar file to %tmp_dir%
if exist "%tmp_dir%" (
rmdir /S /Q "%tmp_dir%"
)
md "%tmp_dir%"
"%TEMP%\7za920\7za.exe" x "%jar_file%" -o"%tmp_dir%" -r -y
echo Deleting problematic module config from extracted jar
:: Strip out Java 9 module configuration used in the fontawesomefx library as it causes javapackager to stop
:: because of this existing module information, since it is not used as a module.
:: Sometimes module-info.class does not exist - TODO check why and if still needed
if exist "%tmp_dir%\module-info.class" (
del /Q "%tmp_dir%\module-info.class"
)
echo Zipping jar again without module config
set jar_file=%package_dir%\%jar_filename%
if exist "%jar_file%" (
del /Q "%jar_file%"
)
"%TEMP%\7za920\7za.exe" a -tzip "%jar_file%" "%tmp_dir%\*" -r
rmdir /S /Q "%tmp_dir%"
if exist "%TEMP%\7za920.zip" (
echo Removing downloaded files
del /Q "%TEMP%\7za920.zip"
)
echo SHA256 before stripping jar file:
for /F "delims=" %%h in ('certutil -hashfile "%jar_file%" SHA256 ^| findstr -i -v "SHA256" ^| findstr -i -v "certutil"') do (set hash=%%h)
echo %hash%
echo Making deterministic jar by stripping out parameters and comments that contain dates
:: Jar file created from https://github.com/ManfredKarrer/tools
:: TODO Is this step still necessary? Since we are using preserveFileTimestamps and reproducibleFileOrder in build.gradle
java -jar "%CD%\desktop\package\tools-1.0.jar" "%jar_file%"
echo SHA256 after stripping jar file:
for /F "delims=" %%h in ('certutil -hashfile "%jar_file%" SHA256 ^| findstr -i -v "SHA256" ^| findstr -i -v "certutil"') do (set hash=%%h)
echo %hash%
echo %hash% > "%package_dir%\%jar_filename%.txt"
:PackageJar
if exist "%package_dir%\windows\Bisq-%version%.exe" (
del /Q "%package_dir%\windows\Bisq-%version%.exe"
)
cd desktop
echo Generating packaged executable
call "%JAVA_HOME%\bin\javapackager.exe" -deploy ^
-native exe ^
-name Bisq ^
-title Bisq ^
-vendor Bisq ^
-outdir "%package_dir%\windows" ^
-appclass bisq.desktop.app.BisqAppMain ^
-srcdir "%package_dir%" ^
-srcfiles %jar_filename% ^
-outfile Bisq ^
-v
if not exist "%package_dir%\windows\Bisq-%version%.exe" (
echo No exe file found at %package_dir%\windows\Bisq-%version%.exe
exit /B 3
)
echo Signing executable with default Code Signing Certificate
call "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /v /fd SHA256 /a "%package_dir%\windows\Bisq-%version%.exe"
echo SHA256 of %package_dir%\windows\Bisq-%version%.exe:
for /F "delims=" %%h in ('certutil -hashfile "%package_dir%\windows\Bisq-%version%.exe" SHA256 ^| findstr -i -v "SHA256" ^| findstr -i -v "certutil"') do (set hash=%%h)
echo %hash%
echo %hash% > "%package_dir%\windows\Bisq-%version%.exe.txt"
echo Done!
pause