Add support for generating Windows install program instead of zip file. Part of #6304
Signed-off-by: Pedro Pombeiro <pombeirp@users.noreply.github.com>
This commit is contained in:
parent
bf123f308a
commit
a31d10f6dc
|
@ -130,7 +130,7 @@ CMakeCache.txt
|
||||||
**/CMakeFiles/
|
**/CMakeFiles/
|
||||||
/StatusImPackage/*
|
/StatusImPackage/*
|
||||||
*.AppImage
|
*.AppImage
|
||||||
Status-Windows-x86_64.zip
|
Status-Windows-x86_64.exe
|
||||||
/desktop/bin/*
|
/desktop/bin/*
|
||||||
/desktop/lib/*
|
/desktop/lib/*
|
||||||
/desktop/modules/*
|
/desktop/modules/*
|
||||||
|
@ -148,4 +148,3 @@ logger_settings.ini
|
||||||
conan*.txt
|
conan*.txt
|
||||||
conanbuildinfo.*
|
conanbuildinfo.*
|
||||||
conan.cmake
|
conan.cmake
|
||||||
/.conan_*/
|
|
||||||
|
|
|
@ -77,22 +77,22 @@ pipeline {
|
||||||
if (btype != 'release') {
|
if (btype != 'release') {
|
||||||
dmgUrl = cmn.uploadArtifact(cmn.pkgFind('dmg'))
|
dmgUrl = cmn.uploadArtifact(cmn.pkgFind('dmg'))
|
||||||
appUrl = cmn.uploadArtifact(cmn.pkgFind('AppImage'))
|
appUrl = cmn.uploadArtifact(cmn.pkgFind('AppImage'))
|
||||||
zipUrl = cmn.uploadArtifact(cmn.pkgFind('zip'))
|
exeUrl = cmn.uploadArtifact(cmn.pkgFind('exe'))
|
||||||
} else {
|
} else {
|
||||||
dmgUrl = null
|
dmgUrl = null
|
||||||
appUrl = null
|
appUrl = null
|
||||||
zipUrl = null
|
exeUrl = null
|
||||||
}
|
}
|
||||||
/* special case for iOS Diawi links */
|
/* special case for iOS Diawi links */
|
||||||
ipaUrl = ios.getBuildVariables().get('DIAWI_URL')
|
ipaUrl = ios.getBuildVariables().get('DIAWI_URL')
|
||||||
/* add URLs to the build description */
|
/* add URLs to the build description */
|
||||||
cmn.setBuildDesc(
|
cmn.setBuildDesc(
|
||||||
Apk: apkUrl, e2e: e2eUrl, iOS: ipaUrl, App: appUrl, Mac: dmgUrl, Win: zipUrl,
|
Apk: apkUrl, e2e: e2eUrl, iOS: ipaUrl, App: appUrl, Mac: dmgUrl, Win: exeUrl,
|
||||||
)
|
)
|
||||||
/* Create latest.json with newest nightly URLs */
|
/* Create latest.json with newest nightly URLs */
|
||||||
if (btype == 'nightly') {
|
if (btype == 'nightly') {
|
||||||
cmn.updateLatestNightlies(
|
cmn.updateLatestNightlies(
|
||||||
APK: apkUrl, IOS: ipaUrl, APP: appUrl, MAC: dmgUrl, WIN: zipUrl
|
APK: apkUrl, IOS: ipaUrl, APP: appUrl, MAC: dmgUrl, WIN: exeUrl
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
|
@ -101,7 +101,7 @@ pipeline {
|
||||||
steps { script {
|
steps { script {
|
||||||
if (env.CHANGE_ID != null) {
|
if (env.CHANGE_ID != null) {
|
||||||
cmn.githubNotify(
|
cmn.githubNotify(
|
||||||
apk: apkUrl, e2e: e2eUrl, ipa: ipaUrl, app: appUrl, dmg: dmgUrl, win: zipUrl,
|
apk: apkUrl, e2e: e2eUrl, ipa: ipaUrl, app: appUrl, dmg: dmgUrl, win: exeUrl,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
|
|
|
@ -3,7 +3,7 @@ pipeline {
|
||||||
/* privileged mode is necessary for fuse */
|
/* privileged mode is necessary for fuse */
|
||||||
docker {
|
docker {
|
||||||
label 'linux-new'
|
label 'linux-new'
|
||||||
image 'statusteam/windows-desktop-ubuntu:1.0.0'
|
image 'statusteam/windows-desktop-ubuntu:nsis-1.0.0'
|
||||||
args (
|
args (
|
||||||
"--privileged "+
|
"--privileged "+
|
||||||
"-v /dev/fuse:/dev/fuse "+
|
"-v /dev/fuse:/dev/fuse "+
|
||||||
|
|
|
@ -65,8 +65,8 @@ def bundleWindows(type = 'nightly') {
|
||||||
|
|
||||||
sh './scripts/build-desktop.sh bundle'
|
sh './scripts/build-desktop.sh bundle'
|
||||||
dir(packageFolder) {
|
dir(packageFolder) {
|
||||||
pkg = common.pkgFilename(type, 'zip')
|
pkg = common.pkgFilename(type, 'exe')
|
||||||
sh "mv ../Status-Windows-x86_64.zip ${pkg}"
|
sh "mv ../Status-x86_64-setup.exe ${pkg}"
|
||||||
}
|
}
|
||||||
return "${packageFolder}/${pkg}".drop(2)
|
return "${packageFolder}/${pkg}".drop(2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
!include LogicLib.nsh
|
||||||
|
!include WordFunc.nsh
|
||||||
|
|
||||||
|
Function SnoreWinVer
|
||||||
|
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
|
||||||
|
${VersionCompare} "6.2" $R0 $R0
|
||||||
|
${If} $R0 == 1
|
||||||
|
Push "NotWin8"
|
||||||
|
${Else}
|
||||||
|
Push "AtLeastWin8"
|
||||||
|
${EndIf}
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
!macro SnoreShortcut path exe appID
|
||||||
|
Call SnoreWinVer
|
||||||
|
Pop $0
|
||||||
|
${If} $0 == "AtLeastWin8"
|
||||||
|
nsExec::ExecToLog '"${SnoreToastExe}" -install "${path}" "${exe}" "${appID}"'
|
||||||
|
${Else}
|
||||||
|
DetailPrint "Creating shortcut to ${exe}"
|
||||||
|
CreateShortCut "${path}" "${exe}"
|
||||||
|
${EndIf}
|
||||||
|
!macroend
|
|
@ -0,0 +1,299 @@
|
||||||
|
/*** UAC Plug-in ***
|
||||||
|
|
||||||
|
Interactive User (MediumIL) Admin user (HighIL)
|
||||||
|
***[Setup.exe]************* ***[Setup.exe]**************
|
||||||
|
* * * *
|
||||||
|
* +++[.OnInit]+++++++++++ * * +++[.OnInit]++++++++++++ *
|
||||||
|
* + UAC_RunElevated >---+-+----> * + + *
|
||||||
|
* + NSIS.Quit + * * + + *
|
||||||
|
* +++++++++++++++++++++++ * * ++++++++++++++++++++++++ *
|
||||||
|
* * * *
|
||||||
|
* * * *
|
||||||
|
* +++[Section]+++++++++++ * * +++[Section]++++++++++++ *
|
||||||
|
* + + * /--+-+-<UAC_AsUser_ExecShell+ *
|
||||||
|
* +++++++++++++++++++++++ * | * ++++++++++++++++++++++++ *
|
||||||
|
* * | * *
|
||||||
|
* Win32.ShellExecute <---+--/ * *
|
||||||
|
* * * *
|
||||||
|
*************************** ****************************
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
!ifndef UAC_HDR__INC
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!ifndef UAC_VERBOSE
|
||||||
|
!define UAC_VERBOSE 3
|
||||||
|
!endif
|
||||||
|
!verbose ${UAC_VERBOSE}
|
||||||
|
|
||||||
|
!define UAC_HDR__INC 0x00020400 ;MMmmbbrr
|
||||||
|
|
||||||
|
!include LogicLib.nsh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_RunElevated
|
||||||
|
**
|
||||||
|
** Starts the elevation operation.
|
||||||
|
**
|
||||||
|
** Return values:
|
||||||
|
**
|
||||||
|
** $0: Win32 error code (0 on success, 1223 if user aborted elevation dialog, anything else should be treated as a fatal error)
|
||||||
|
** $1: If $0==0:
|
||||||
|
** 0 UAC is not supported by the OS
|
||||||
|
** 1 Started a elevated child process, the current process should act like a wrapper (Call Quit without any further processing)
|
||||||
|
** 2 The process is already running @ HighIL (Member of admin group)
|
||||||
|
** 3 You should call RunElevated again (This can happen if a user without admin priv. is used in the runas dialog)
|
||||||
|
** $2: If $0==0 && $1==1: ExitCode of the elevated fork process (The NSIS errlvl is also set)
|
||||||
|
** $3: If $0==0: 1 if the user is a member of the admin group or 0 otherwise
|
||||||
|
**/
|
||||||
|
!macro UAC_RunElevated
|
||||||
|
UAC::_ 0
|
||||||
|
!macroend
|
||||||
|
!macro UAC_PageElevation_RunElevated
|
||||||
|
UAC::_ 0
|
||||||
|
!macroend
|
||||||
|
/*!macro UAC_OnInitElevation_RunElevated
|
||||||
|
UAC::_ 0
|
||||||
|
!macroend
|
||||||
|
!macro UAC_OnInitElevation_OnGuiInit
|
||||||
|
!macroend*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_GetIntegrityLevel <NSISVar:Output | "s">
|
||||||
|
**
|
||||||
|
** Get integrity level of current process
|
||||||
|
**
|
||||||
|
**/
|
||||||
|
!macro UAC_GetIntegrityLevel outvar
|
||||||
|
UAC::_ 6
|
||||||
|
!if "${outvar}" != "s"
|
||||||
|
Pop ${outvar}
|
||||||
|
!endif
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_IsAdmin
|
||||||
|
**
|
||||||
|
** Is the current process running with administrator privileges? Result in $0
|
||||||
|
**
|
||||||
|
** ${If} ${UAC_IsAdmin} ...
|
||||||
|
**
|
||||||
|
**/
|
||||||
|
!macro UAC_IsAdmin
|
||||||
|
UAC::_ 2
|
||||||
|
!macroend
|
||||||
|
!define UAC_IsAdmin `"" UAC_IsAdmin ""`
|
||||||
|
!macro _UAC_IsAdmin _a _b _t _f
|
||||||
|
!insertmacro _UAC_MakeLL_Cmp _!= 0 2s
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_IsInnerInstance
|
||||||
|
**
|
||||||
|
** Does the current process have a NSIS/UAC parent process that is part of the elevation operation?
|
||||||
|
**
|
||||||
|
** ${If} ${UAC_IsInnerInstance} ...
|
||||||
|
**
|
||||||
|
**/
|
||||||
|
!macro UAC_IsInnerInstance
|
||||||
|
UAC::_ 3
|
||||||
|
!macroend
|
||||||
|
!define UAC_IsInnerInstance `"" UAC_IsInnerInstance ""`
|
||||||
|
!macro _UAC_IsInnerInstance _a _b _t _f
|
||||||
|
!insertmacro _UAC_MakeLL_Cmp _!= 0 3s
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_PageElevation_OnInit, UAC_PageElevation_OnGuiInit,
|
||||||
|
**
|
||||||
|
** Helper macros for elevation on a custom elevation page, see the DualMode example for more information.
|
||||||
|
**
|
||||||
|
**/
|
||||||
|
!macro UAC_Notify_OnGuiInit
|
||||||
|
UAC::_ 4
|
||||||
|
!macroend
|
||||||
|
!macro UAC_PageElevation_OnGuiInit
|
||||||
|
!insertmacro UAC_Notify_OnGuiInit
|
||||||
|
!macroend
|
||||||
|
!macro UAC_PageElevation_OnInit
|
||||||
|
UAC::_ 5
|
||||||
|
${IfThen} ${Errors} ${|} Quit ${|}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* UAC_AsUser_Call <Function|Label> <NSISAddressName> <UAC_* flags>
|
||||||
|
**
|
||||||
|
** Calls a function or label in the user process instance.
|
||||||
|
** All the UAC_AsUser_* macros use this helper macro.
|
||||||
|
**
|
||||||
|
**/
|
||||||
|
!define UAC_SYNCREGISTERS 0x1
|
||||||
|
;define UAC_SYNCSTACK 0x2
|
||||||
|
!define UAC_SYNCOUTDIR 0x4
|
||||||
|
!define UAC_SYNCINSTDIR 0x8
|
||||||
|
;define UAC_CLEARERRFLAG 0x10
|
||||||
|
!macro UAC_AsUser_Call type name flags
|
||||||
|
push $0
|
||||||
|
Get${type}Address $0 ${name}
|
||||||
|
!verbose push
|
||||||
|
!verbose ${UAC_VERBOSE}
|
||||||
|
!insertmacro _UAC_ParseDefineFlagsToInt _UAC_AsUser_Call__flags ${flags}
|
||||||
|
!verbose pop
|
||||||
|
StrCpy $0 "1$0:${_UAC_AsUser_Call__flags}"
|
||||||
|
!undef _UAC_AsUser_Call__flags
|
||||||
|
Exch $0
|
||||||
|
UAC::_
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** UAC_AsUser_GetSection <Flags|InstTypes|Size|Text> <SectionIndex> <NSISVar:Output>
|
||||||
|
*/
|
||||||
|
!macro UAC_AsUser_GetSection secprop secidx outvar
|
||||||
|
!insertmacro _UAC_AsUser_GenOp ${outvar} SectionGet${secprop} ${secidx} ""
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** UAC_AsUser_GetGlobalVar <NSISVar:SourceAndOutput>
|
||||||
|
** UAC_AsUser_GetGlobal <NSISVar:Output> <NSISVar:Source>
|
||||||
|
*/
|
||||||
|
!macro UAC_AsUser_GetGlobalVar var
|
||||||
|
!insertmacro _UAC_AsUser_GenOp ${var} StrCpy "" ${var}
|
||||||
|
!macroend
|
||||||
|
!macro UAC_AsUser_GetGlobal outvar srcvar
|
||||||
|
!insertmacro _UAC_AsUser_GenOp ${outvar} StrCpy "" ${srcvar}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** UAC_AsUser_ExecShell <Verb> <ApplicationOrFile> <Parameters> <Working Directory> <SW_*>
|
||||||
|
**
|
||||||
|
** Call ExecShell in the user process instance.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
!macro UAC_AsUser_ExecShell verb command params workdir show
|
||||||
|
!insertmacro _UAC_IncL
|
||||||
|
goto _UAC_L_E_${__UAC_L}
|
||||||
|
_UAC_L_F_${__UAC_L}:
|
||||||
|
ExecShell "${verb}" "${command}" '${params}' ${show}
|
||||||
|
return
|
||||||
|
_UAC_L_E_${__UAC_L}:
|
||||||
|
!if "${workdir}" != ""
|
||||||
|
push $outdir
|
||||||
|
SetOutPath "${workdir}"
|
||||||
|
!endif
|
||||||
|
!insertmacro UAC_AsUser_Call Label _UAC_L_F_${__UAC_L} ${UAC_SYNCREGISTERS}|${UAC_SYNCOUTDIR}|${UAC_SYNCINSTDIR} #|${UAC_CLEARERRFLAG}
|
||||||
|
!if "${workdir}" != ""
|
||||||
|
pop $outdir
|
||||||
|
SetOutPath $outdir
|
||||||
|
!endif
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!macro _UAC_MakeLL_Cmp cmpop cmp pluginparams
|
||||||
|
!insertmacro _LOGICLIB_TEMP
|
||||||
|
UAC::_ ${pluginparams}
|
||||||
|
pop $_LOGICLIB_TEMP
|
||||||
|
!insertmacro ${cmpop} $_LOGICLIB_TEMP ${cmp} `${_t}` `${_f}`
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_definemath def val1 op val2
|
||||||
|
!define /math _UAC_definemath "${val1}" ${op} ${val2}
|
||||||
|
!ifdef ${def}
|
||||||
|
!undef ${def}
|
||||||
|
!endif
|
||||||
|
!define ${def} "${_UAC_definemath}"
|
||||||
|
!undef _UAC_definemath
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_ParseDefineFlags_orin parse outflags
|
||||||
|
!searchparse /noerrors ${${parse}} "" _UAC_ParseDefineFlags_orin_f1 "|" _UAC_ParseDefineFlags_orin_f2
|
||||||
|
!define _UAC_ParseDefineFlags_orin_this ${_UAC_ParseDefineFlags_orin_f1}
|
||||||
|
!undef ${parse}
|
||||||
|
!define ${parse} ${_UAC_ParseDefineFlags_orin_f2}
|
||||||
|
!define _UAC_ParseDefineFlags_orin_saveout ${${outflags}}
|
||||||
|
!undef ${outflags}
|
||||||
|
!define /math ${outflags} "${_UAC_ParseDefineFlags_orin_saveout}" | "${_UAC_ParseDefineFlags_orin_this}"
|
||||||
|
!undef _UAC_ParseDefineFlags_orin_saveout
|
||||||
|
!undef _UAC_ParseDefineFlags_orin_this
|
||||||
|
!ifdef _UAC_ParseDefineFlags_orin_f1
|
||||||
|
!undef _UAC_ParseDefineFlags_orin_f1
|
||||||
|
!endif
|
||||||
|
!ifdef _UAC_ParseDefineFlags_orin_f2
|
||||||
|
!undef _UAC_ParseDefineFlags_orin_f2
|
||||||
|
!endif
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_ParseDefineFlags_Begin _outdef _in
|
||||||
|
!define _UAC_PDF${_outdef}_parse "${_in}"
|
||||||
|
!define _UAC_PDF${_outdef}_flags ""
|
||||||
|
!define _UAC_PDF${_outdef}_r 0
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x1
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x2
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x4
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x8
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_orin _UAC_PDF${_outdef}_parse _UAC_PDF${_outdef}_flags ;0x10
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_ParseDefineFlags_End _outdef
|
||||||
|
!define ${_outdef} ${_UAC_PDF${_outdef}_r}
|
||||||
|
!undef _UAC_PDF${_outdef}_r
|
||||||
|
!undef _UAC_PDF${_outdef}_flags
|
||||||
|
!undef _UAC_PDF${_outdef}_parse
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_ParseDefineFlags_IncludeFlag _outdef flag
|
||||||
|
!if ${_UAC_PDF${_outdef}_flags} & ${flag}
|
||||||
|
!insertmacro _UAC_definemath _UAC_PDF${_outdef}_r ${_UAC_PDF${_outdef}_r} | ${flag}
|
||||||
|
!endif
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_ParseDefineFlagsToInt _outdef _in
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_Begin _UAC_ParseDefineFlagsToInt_tmp "${_in}"
|
||||||
|
!define ${_outdef} ${_UAC_PDF_UAC_ParseDefineFlagsToInt_tmp_flags}
|
||||||
|
!insertmacro _UAC_ParseDefineFlags_End _UAC_ParseDefineFlagsToInt_tmp
|
||||||
|
!undef _UAC_ParseDefineFlagsToInt_tmp
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_IncL
|
||||||
|
!insertmacro _UAC_definemath __UAC_L "${__UAC_L}" + 1
|
||||||
|
!macroend
|
||||||
|
!macro _UAC_AsUser_GenOp outvar op opparam1 opparam2
|
||||||
|
!define _UAC_AUGOGR_ID _UAC_AUGOGR_OP${outvar}${op}${opparam1}${opparam2}
|
||||||
|
!ifndef ${_UAC_AUGOGR_ID} ;Has this exact action been done before?
|
||||||
|
!if ${outvar} == $0
|
||||||
|
!define ${_UAC_AUGOGR_ID} $1
|
||||||
|
!else
|
||||||
|
!define ${_UAC_AUGOGR_ID} $0
|
||||||
|
!endif
|
||||||
|
!if "${opparam1}" == ""
|
||||||
|
!define _UAC_AUGOGR_OPP1 ${${_UAC_AUGOGR_ID}}
|
||||||
|
!define _UAC_AUGOGR_OPP2 ${opparam2}
|
||||||
|
!else
|
||||||
|
!define _UAC_AUGOGR_OPP1 ${opparam1}
|
||||||
|
!define _UAC_AUGOGR_OPP2 ${${_UAC_AUGOGR_ID}}
|
||||||
|
!endif
|
||||||
|
goto ${_UAC_AUGOGR_ID}_C
|
||||||
|
${_UAC_AUGOGR_ID}_F:
|
||||||
|
${op} ${_UAC_AUGOGR_OPP1} ${_UAC_AUGOGR_OPP2}
|
||||||
|
return
|
||||||
|
${_UAC_AUGOGR_ID}_C:
|
||||||
|
!undef _UAC_AUGOGR_OPP1
|
||||||
|
!undef _UAC_AUGOGR_OPP2
|
||||||
|
!endif
|
||||||
|
push ${${_UAC_AUGOGR_ID}}
|
||||||
|
!insertmacro UAC_AsUser_Call Label ${_UAC_AUGOGR_ID}_F ${UAC_SYNCREGISTERS}
|
||||||
|
StrCpy ${outvar} ${${_UAC_AUGOGR_ID}}
|
||||||
|
pop ${${_UAC_AUGOGR_ID}}
|
||||||
|
!undef _UAC_AUGOGR_ID
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!endif /* UAC_HDR__INC */
|
|
@ -0,0 +1,28 @@
|
||||||
|
!define nsProcess::FindProcess `!insertmacro nsProcess::FindProcess`
|
||||||
|
|
||||||
|
!macro nsProcess::FindProcess _FILE _ERR
|
||||||
|
nsProcess::_FindProcess /NOUNLOAD `${_FILE}`
|
||||||
|
Pop ${_ERR}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!define nsProcess::KillProcess `!insertmacro nsProcess::KillProcess`
|
||||||
|
|
||||||
|
!macro nsProcess::KillProcess _FILE _ERR
|
||||||
|
nsProcess::_KillProcess /NOUNLOAD `${_FILE}`
|
||||||
|
Pop ${_ERR}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!define nsProcess::CloseProcess `!insertmacro nsProcess::CloseProcess`
|
||||||
|
|
||||||
|
!macro nsProcess::CloseProcess _FILE _ERR
|
||||||
|
nsProcess::_CloseProcess /NOUNLOAD `${_FILE}`
|
||||||
|
Pop ${_ERR}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
!define nsProcess::Unload `!insertmacro nsProcess::Unload`
|
||||||
|
|
||||||
|
!macro nsProcess::Unload
|
||||||
|
nsProcess::_Unload
|
||||||
|
!macroend
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,12 @@
|
||||||
# windeployqt should be used here, but since we get the `Not implemented` error from it, we're trying to manually copy artifacts to output directory
|
# windeployqt should be used here, but since we get the `Not implemented` error from it, we're trying to manually copy artifacts to output directory
|
||||||
set(TARGET_DIR "${@APP_NAME@_BINARY_DIR}")
|
set(TARGET_DIR "${@APP_NAME@_BINARY_DIR}")
|
||||||
|
|
||||||
|
##########################################################################################################
|
||||||
|
#
|
||||||
|
# NOTE: Remember to reflect any changes on the setup generation procedure in /deployment/windows/nsis/setup.nsi
|
||||||
|
#
|
||||||
|
##########################################################################################################
|
||||||
|
|
||||||
set(qtmodules Core Quick QuickTemplates2 QuickControls2 WebSockets Widgets Gui Network Svg Qml Concurrent)
|
set(qtmodules Core Quick QuickTemplates2 QuickControls2 WebSockets Widgets Gui Network Svg Qml Concurrent)
|
||||||
if(USE_QTWEBKIT)
|
if(USE_QTWEBKIT)
|
||||||
set(qtmodules ${qtmodules} Multimedia WebKit WebKitWidgets WebChannel)
|
set(qtmodules ${qtmodules} Multimedia WebKit WebKitWidgets WebChannel)
|
||||||
|
|
|
@ -18,7 +18,7 @@ RUN apt-get update && apt-get -q -y --no-install-recommends install curl softwar
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
DEBIAN_FRONTEND=noninteractive \
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
apt-get -q -y --no-install-recommends install \
|
apt-get -q -y --no-install-recommends install \
|
||||||
wget git zip unzip golang-go nodejs yarn file jq \
|
wget git nsis unzip golang-go nodejs yarn file jq \
|
||||||
python python3-pip python3-setuptools python3-wheel \
|
python python3-pip python3-setuptools python3-wheel \
|
||||||
apt-transport-https locales openjdk-8-jdk-headless \
|
apt-transport-https locales openjdk-8-jdk-headless \
|
||||||
extra-cmake-modules build-essential fuse \
|
extra-cmake-modules build-essential fuse \
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
GIT_COMMIT = $(shell git rev-parse --short HEAD)
|
GIT_COMMIT = $(shell git rev-parse --short HEAD)
|
||||||
|
|
||||||
IMAGE_TAG = 1.0.0
|
IMAGE_TAG = 1.0.0
|
||||||
IMAGE_NAME = statusteam/windows-desktop-ubuntu:$(IMAGE_TAG)
|
IMAGE_NAME = statusteam/windows-desktop-ubuntu:nsis-$(IMAGE_TAG)
|
||||||
|
|
||||||
build:
|
build:
|
||||||
docker build \
|
docker build \
|
||||||
|
|
|
@ -47,7 +47,11 @@ const int MAIN_WINDOW_WIDTH = 1024;
|
||||||
const int MAIN_WINDOW_HEIGHT = 768;
|
const int MAIN_WINDOW_HEIGHT = 768;
|
||||||
const QString CRASH_REPORT_EXECUTABLE = QStringLiteral("reportApp");
|
const QString CRASH_REPORT_EXECUTABLE = QStringLiteral("reportApp");
|
||||||
const QString CRASH_REPORT_EXECUTABLE_RELATIVE_PATH =
|
const QString CRASH_REPORT_EXECUTABLE_RELATIVE_PATH =
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
QStringLiteral("");
|
||||||
|
#else
|
||||||
QStringLiteral("/../reportApp");
|
QStringLiteral("/../reportApp");
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *ENABLE_LOG_FILE_ENV_VAR_NAME = "STATUS_LOG_FILE_ENABLED";
|
const char *ENABLE_LOG_FILE_ENV_VAR_NAME = "STATUS_LOG_FILE_ENABLED";
|
||||||
const char *LOG_FILE_PATH_ENV_VAR_NAME = "STATUS_LOG_PATH";
|
const char *LOG_FILE_PATH_ENV_VAR_NAME = "STATUS_LOG_PATH";
|
||||||
|
|
|
@ -213,7 +213,14 @@ function compile() {
|
||||||
|
|
||||||
function bundleWindows() {
|
function bundleWindows() {
|
||||||
local buildType="$1"
|
local buildType="$1"
|
||||||
# TODO: Produce a setup program instead of a ZIP
|
|
||||||
|
local version_file="${STATUSREACTPATH}/desktop_files/VERSION"
|
||||||
|
VERSION=$(cat $version_file)
|
||||||
|
if [ -z "$VERSION" ]; then
|
||||||
|
echo "${RED}Could not read version from ${version_file}!${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
pushd $WORKFOLDER
|
pushd $WORKFOLDER
|
||||||
rm -rf Windows
|
rm -rf Windows
|
||||||
mkdir Windows
|
mkdir Windows
|
||||||
|
@ -224,30 +231,33 @@ function bundleWindows() {
|
||||||
fi
|
fi
|
||||||
unzip "$STATUSIM_WINDOWS_BASEIMAGE_ZIP" -d Windows/
|
unzip "$STATUSIM_WINDOWS_BASEIMAGE_ZIP" -d Windows/
|
||||||
|
|
||||||
rm -f Status-Windows-x86_64.zip
|
pushd $STATUSREACTPATH/desktop/bin
|
||||||
pushd Windows
|
rm -rf cmake_install.cmake Makefile CMakeFiles Status_autogen
|
||||||
cp $STATUSREACTPATH/.env .
|
popd
|
||||||
mkdir -p assets/resources notifier
|
popd
|
||||||
cp $STATUSREACTPATH/node_modules/node-notifier/vendor/snoreToast/SnoreToast.exe .
|
|
||||||
cp $STATUSREACTPATH/node_modules/node-notifier/vendor/notifu/*.exe notifier/
|
|
||||||
cp -r $STATUSREACTPATH/resources/fonts \
|
|
||||||
$STATUSREACTPATH/resources/icons \
|
|
||||||
$STATUSREACTPATH/resources/images \
|
|
||||||
assets/resources/
|
|
||||||
local _bin=$STATUSREACTPATH/desktop/bin
|
|
||||||
rm -rf $_bin/cmake_install.cmake $_bin/Makefile $_bin/CMakeFiles $_bin/Status_autogen && \
|
|
||||||
cp -r $_bin/* .
|
|
||||||
|
|
||||||
local zipOptions="-mr9"
|
local compressionAlgo="lzma"
|
||||||
|
local compressionType="/SOLID"
|
||||||
if [ -z $buildType ]; then
|
if [ -z $buildType ]; then
|
||||||
zipOptions="-mr1"
|
compressionAlgo="bzip2"
|
||||||
|
compressionType=""
|
||||||
elif [ "$buildType" = "pr" ]; then
|
elif [ "$buildType" = "pr" ]; then
|
||||||
zipOptions="-mr2"
|
compressionAlgo="zlib"
|
||||||
fi
|
fi
|
||||||
zip $zipOptions ../../Status-Windows-x86_64.zip .
|
|
||||||
popd
|
local top_srcdir=$(joinExistingPath "$STATUSREACTPATH" '.')
|
||||||
rm -rf Windows
|
VERSION_MAJOR="$(cut -d'.' -f1 <<<"$VERSION")"
|
||||||
popd
|
VERSION_MINOR="$(cut -d'.' -f2 <<<"$VERSION")"
|
||||||
|
VERSION_BUILD="$(cut -d'.' -f3 <<<"$VERSION")"
|
||||||
|
makensis -Dtop_srcdir=${top_srcdir} \
|
||||||
|
-DCOMPRESSION_ALGO=${compressionAlgo} \
|
||||||
|
-DCOMPRESSION_TYPE=${compressionType} \
|
||||||
|
-DVERSION_MAJOR=$VERSION_MAJOR \
|
||||||
|
-DVERSION_MINOR=$VERSION_MINOR \
|
||||||
|
-DVERSION_BUILD=$VERSION_BUILD \
|
||||||
|
-DPUBLISHER=Status.im \
|
||||||
|
-DWEBSITE_URL="https://status.im/" \
|
||||||
|
./deployment/windows/nsis/setup.nsi
|
||||||
}
|
}
|
||||||
|
|
||||||
function bundleLinux() {
|
function bundleLinux() {
|
||||||
|
|
|
@ -10,6 +10,11 @@ function downloadUrl() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function install_nsis() {
|
||||||
|
# NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.
|
||||||
|
linux_install nsis
|
||||||
|
}
|
||||||
|
|
||||||
function install_node() {
|
function install_node() {
|
||||||
if nvm_installed; then
|
if nvm_installed; then
|
||||||
install_node_via_nvm
|
install_node_via_nvm
|
||||||
|
|
|
@ -28,6 +28,7 @@ install_wget
|
||||||
install_java8
|
install_java8
|
||||||
install_clojure_cli
|
install_clojure_cli
|
||||||
install_leiningen
|
install_leiningen
|
||||||
|
install_nsis
|
||||||
install_node
|
install_node
|
||||||
install_watchman
|
install_watchman
|
||||||
install_react_native_cli
|
install_react_native_cli
|
||||||
|
|
Loading…
Reference in New Issue