MuseScore/build/ci/windows/package.bat

246 lines
7.3 KiB
Batchfile

@echo off
ECHO "MuseScore package"
SET ARTIFACTS_DIR=build.artifacts
SET BUILD_MODE=""
SET TARGET_PROCESSOR_BITS=64
SET TARGET_PROCESSOR_ARCH=x86_64
SET BUILD_DIR=build.release
SET INSTALL_DIR=build.install
SET SIGN_CERTIFICATE_ENCRYPT_SECRET=""
SET SIGN_CERTIFICATE_PASSWORD=""
SET BUILD_WIN_PORTABLE=OFF
SET UPGRADE_UUID="11111111-1111-1111-1111-111111111111"
:GETOPTS
IF /I "%1" == "-m" SET BUILD_MODE=%2& SHIFT
IF /I "%1" == "-b" SET TARGET_PROCESSOR_BITS=%2& SHIFT
IF /I "%1" == "--signsecret" SET SIGN_CERTIFICATE_ENCRYPT_SECRET=%2& SHIFT
IF /I "%1" == "--signpass" SET SIGN_CERTIFICATE_PASSWORD=%2& SHIFT
IF /I "%1" == "--portable" SET BUILD_WIN_PORTABLE=%2& SHIFT
IF /I "%1" == "--guid" SET UPGRADE_UUID=%2& SHIFT
SHIFT
IF NOT "%1" == "" GOTO GETOPTS
: Try get from env
IF %BUILD_MODE% == "" ( SET /p BUILD_MODE=<%ARTIFACTS_DIR%\env\build_mode.env)
: Check args
IF %BUILD_MODE% == "" ( ECHO "error: not set BUILD_MODE" & GOTO END_ERROR)
IF NOT %TARGET_PROCESSOR_BITS% == 64 (
IF NOT %TARGET_PROCESSOR_BITS% == 32 (
ECHO "error: not set TARGET_PROCESSOR_BITS, must be 32 or 64, current TARGET_PROCESSOR_BITS: %TARGET_PROCESSOR_BITS%"
GOTO END_ERROR
)
)
IF %TARGET_PROCESSOR_BITS% == 32 (
SET TARGET_PROCESSOR_ARCH=x86
SET BUILD_DIR=msvc.build_x86
SET INSTALL_DIR=msvc.install_x86
)
:: Setup package type
IF %BUILD_WIN_PORTABLE% == ON ( SET PACKAGE_TYPE="portable") ELSE (
IF %BUILD_MODE% == devel_build ( SET PACKAGE_TYPE="7z") ELSE (
IF %BUILD_MODE% == nightly_build ( SET PACKAGE_TYPE="7z") ELSE (
IF %BUILD_MODE% == testing_build ( SET PACKAGE_TYPE="msi") ELSE (
IF %BUILD_MODE% == stable_build ( SET PACKAGE_TYPE="msi") ELSE (
ECHO "Unknown BUILD_MODE: %BUILD_MODE%"
GOTO END_ERROR
)))))
SET DO_SIGN=OFF
IF %PACKAGE_TYPE% == "msi" (
SET DO_SIGN=ON
IF %SIGN_CERTIFICATE_ENCRYPT_SECRET% == "" (
SET DO_SIGN=OFF
ECHO "warning: not set SIGN_CERTIFICATE_ENCRYPT_SECRET"
)
IF %SIGN_CERTIFICATE_PASSWORD% == "" (
SET DO_SIGN=OFF
ECHO "warning: not set SIGN_CERTIFICATE_PASSWORD"
)
)
SET /p BUILD_VERSION=<%ARTIFACTS_DIR%\env\build_version.env
SET /p BUILD_NUMBER=<%ARTIFACTS_DIR%\env\build_number.env
SET /p BUILD_BRANCH=<%ARTIFACTS_DIR%\env\build_branch.env
SET /p BUILD_REVISION=<%ARTIFACTS_DIR%\env\build_revision.env
ECHO "BUILD_MODE: %BUILD_MODE%"
ECHO "BUILD_NUMBER: %BUILD_NUMBER%"
ECHO "BUILD_BRANCH: %BUILD_BRANCH%"
ECHO "BUILD_REVISION: %BUILD_REVISION%"
ECHO "BUILD_VERSION: %BUILD_VERSION%"
ECHO "TARGET_PROCESSOR_BITS: %TARGET_PROCESSOR_BITS%"
ECHO "TARGET_PROCESSOR_ARCH: %TARGET_PROCESSOR_ARCH%"
ECHO "BUILD_DIR: %BUILD_DIR%"
ECHO "INSTALL_DIR: %INSTALL_DIR%"
ECHO "PACKAGE_TYPE: %PACKAGE_TYPE%"
:: For MSI
SET SIGN="build\ci\windows\sign.bat"
SET UUIDGEN="C:\Program Files (x86)\Windows Kits\10\bin\10.0.20348.0\x64\uuidgen.exe"
SET WIX_DIR=%WIX%
IF %PACKAGE_TYPE% == "portable" ( GOTO PACK_PORTABLE) ELSE (
IF %PACKAGE_TYPE% == "7z" ( GOTO PACK_7z ) ELSE (
IF %PACKAGE_TYPE% == "msi" ( GOTO PACK_MSI ) ELSE (
IF %PACKAGE_TYPE% == "dir" ( GOTO PACK_DIR ) ELSE (
ECHO "Unknown package type: %PACKAGE_TYPE%"
GOTO END_ERROR
))))
:: ============================
:: PACK_7z
:: ============================
:PACK_7z
ECHO "Start 7z packing..."
IF %BUILD_MODE% == nightly_build (
SET ARTIFACT_NAME=MuseScoreNightly-%BUILD_NUMBER%-%BUILD_BRANCH%-%BUILD_REVISION%-%TARGET_PROCESSOR_ARCH%
) ELSE (
SET ARTIFACT_NAME=MuseScore-%BUILD_VERSION%-%TARGET_PROCESSOR_ARCH%
)
RENAME %INSTALL_DIR% %ARTIFACT_NAME%
7z a %ARTIFACTS_DIR%\%ARTIFACT_NAME%.7z %ARTIFACT_NAME%
bash ./build/ci/tools/make_artifact_name_env.sh %ARTIFACT_NAME%.7z
ECHO "Finished 7z packing"
GOTO END_SUCCESS
:: ============================
:: PACK_DIR
:: ============================
:PACK_DIR
ECHO "Start dir packing..."
MKDIR %ARTIFACTS_DIR%\MuseScore
XCOPY %INSTALL_DIR% %ARTIFACTS_DIR%\MuseScore /E /S /Y
ECHO "Finished dir packing"
GOTO END_SUCCESS
:: ============================
:: PACK_MSI
:: ============================
:PACK_MSI
ECHO "Start msi packing..."
:: sign dlls and exe files
IF %DO_SIGN% == ON (
CALL %SIGN% --secret %SIGN_CERTIFICATE_ENCRYPT_SECRET% --pass %SIGN_CERTIFICATE_PASSWORD% --dir %INSTALL_DIR% || exit \b 1
) ELSE (
ECHO "Sign disabled"
)
:: generate unique GUID
%UUIDGEN% > uuid.txt
SET /p PACKAGE_UUID=<uuid.txt
ECHO on
ECHO "PACKAGE_UUID: %PACKAGE_UUID%"
ECHO off
sed -i 's/00000000-0000-0000-0000-000000000000/%PACKAGE_UUID%/' build/Packaging.cmake
sed -i 's/11111111-1111-1111-1111-111111111111/%UPGRADE_UUID%/' build/Packaging.cmake
SET PACKAGE_FILE_ASSOCIATION=OFF
IF %BUILD_MODE% == stable_build (
SET PACKAGE_FILE_ASSOCIATION=ON
)
cd "%BUILD_DIR%"
cmake -DMUE_ENABLE_FILE_ASSOCIATION=%PACKAGE_FILE_ASSOCIATION% ..
SET PATH=%WIX_DIR%;%PATH%
cmake --build . --target package || GOTO END_ERROR
cd ..
ECHO "Create logs dir"
MKDIR %ARTIFACTS_DIR%\logs
MKDIR %ARTIFACTS_DIR%\logs\WIX
SET WIX_LOG_DIR=win64
IF %TARGET_PROCESSOR_BITS% == 32 ( SET WIX_LOG_DIR=win32 )
SET WIX_LOGS_PATH="%BUILD_DIR%\_CPack_Packages\%WIX_LOG_DIR%\WIX"
ECHO "Copy from %WIX_LOGS_PATH% to %ARTIFACTS_DIR%\logs\WIX"
ECHO .msi > excludedmsi.txt
XCOPY /Y /EXCLUDE:excludedmsi.txt %WIX_LOGS_PATH% %ARTIFACTS_DIR%\logs\WIX
:: find the MSI file without the hardcoded version
for /r %%i in (%BUILD_DIR%\*.msi) do (
SET "FILEPATH=%%i"d
)
IF %BUILD_MODE% == nightly_build (
SET ARTIFACT_NAME=MuseScoreNightly-%BUILD_NUMBER%-%BUILD_BRANCH%-%BUILD_REVISION%-%TARGET_PROCESSOR_ARCH%.msi
) ELSE (
SET ARTIFACT_NAME=MuseScore-%BUILD_VERSION%-%TARGET_PROCESSOR_ARCH%.msi
)
ECHO "Copy from %FILEPATH% to %ARTIFACT_NAME%"
COPY %FILEPATH% %ARTIFACTS_DIR%\%ARTIFACT_NAME% /Y || GOTO END_ERROR
SET ARTIFACT_PATH=%ARTIFACTS_DIR%\%ARTIFACT_NAME%
IF %DO_SIGN% == ON (
CALL %SIGN% --secret %SIGN_CERTIFICATE_ENCRYPT_SECRET% --pass %SIGN_CERTIFICATE_PASSWORD% --name %ARTIFACT_NAME% --file %ARTIFACT_PATH% || exit \b 1
)
bash ./build/ci/tools/make_artifact_name_env.sh %ARTIFACT_NAME%
GOTO END_SUCCESS
:: ============================
:: PACK_PORTABLE
:: ============================
:PACK_PORTABLE
ECHO "Start portable packing..."
:: sign dlls and exe files
IF %DO_SIGN% == ON (
CALL %SIGN% --secret %SIGN_CERTIFICATE_ENCRYPT_SECRET% --pass %SIGN_CERTIFICATE_PASSWORD% --dir %INSTALL_DIR% || exit \b 1
) ELSE (
ECHO "Sign disabled"
)
:: Create launcher
ECHO "Start comLauncherGenerator..."
CALL C:\portableappslauncher\Launcher\PortableApps.comLauncherGenerator.exe %CD%\%INSTALL_DIR%
ECHO "Finished comLauncherGenerator"
:: Create Installer
ECHO "Start comInstaller..."
CALL C:\portableappsinstaller\Installer\PortableApps.comInstaller.exe %CD%\%INSTALL_DIR%
ECHO "Finished comInstaller"
:: find the paf.exe file
for /r %%i in (.\*.paf.exe) do (
SET "FILEPATH=%%i"
)
SET ARTIFACT_NAME=MuseScore-%BUILD_VERSION%-%TARGET_PROCESSOR_ARCH%.paf.exe
ECHO "Copy from %FILEPATH% to %ARTIFACT_NAME%"
COPY %FILEPATH% %ARTIFACTS_DIR%\%ARTIFACT_NAME% /Y
SET ARTIFACT_PATH=%ARTIFACTS_DIR%\%ARTIFACT_NAME%
IF %DO_SIGN% == ON (
CALL %SIGN% --secret %SIGN_CERTIFICATE_ENCRYPT_SECRET% --pass %SIGN_CERTIFICATE_PASSWORD% --name %ARTIFACT_NAME% --file %ARTIFACT_PATH% || exit \b 1
)
bash ./build/ci/tools/make_artifact_name_env.sh %ARTIFACT_NAME%
ECHO "Finished portable packing"
GOTO END_SUCCESS
:: ============================
:: END
:: ============================
:END_SUCCESS
exit /b 0
:END_ERROR
exit /b 1