diff options
author | Michel Le Bihan <michel@lebihan.pl> | 2023-06-09 11:32:26 +0300 |
---|---|---|
committer | Philipp Hörist <philipp@hoerist.com> | 2023-06-09 11:32:26 +0300 |
commit | 92451f3fc754d27e6b70d8b4bbbe8c16cfc16da3 (patch) | |
tree | b4d4d6e06ed0e498693608cb9a43ca14cb120df8 | |
parent | 939133a959699da5da78413e6b4a99026cb287c5 (diff) |
ci: Add Windows MSIX package build
-rw-r--r-- | .ci/appveyor.yml | 2 | ||||
-rwxr-xr-x | win/_base.sh | 40 | ||||
-rw-r--r-- | win/misc/appxmanifest.xml | 43 | ||||
-rw-r--r-- | win/misc/priconfig.xml | 24 |
4 files changed, 109 insertions, 0 deletions
diff --git a/.ci/appveyor.yml b/.ci/appveyor.yml index 34bf84914..4deb05cdc 100644 --- a/.ci/appveyor.yml +++ b/.ci/appveyor.yml @@ -23,6 +23,7 @@ build_script: - ps: | $filename = "Gajim-$($env:GAJIM_VERSION)-$($env:ARCH)" $filename_portable = "Gajim-Portable-$($env:GAJIM_VERSION)-$($env:ARCH)" + $filename_msixbundle = "Gajim-$($env:GAJIM_VERSION)" if ($env:GAJIM_VERSION -eq "Nightly") { $time_string=(get-date -UFormat "%Y-%m-%d").ToString() @@ -43,6 +44,7 @@ build_script: Push-AppveyorArtifact "$($buildroot)/Gajim.exe" -FileName "$($filename).exe" Push-AppveyorArtifact "$($buildroot)/Gajim-Portable.exe" -FileName "$($filename_portable).exe" + Push-AppveyorArtifact "$($buildroot)/Gajim.msixbundle" -FileName "$($filename_msixbundle).msixbundle" if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) } # on_finish: diff --git a/win/_base.sh b/win/_base.sh index 5302c4ef3..c5a3ce685 100755 --- a/win/_base.sh +++ b/win/_base.sh @@ -49,6 +49,7 @@ function install_pre_deps { wget \ intltool \ mingw-w64-x86_64-nsis \ + "${MINGW_PACKAGE_PREFIX}"-librsvg \ "${MINGW_PACKAGE_PREFIX}"-toolchain \ "${MINGW_PACKAGE_PREFIX}"-python } @@ -314,7 +315,46 @@ function cleanup_install { } +function makeappx { + "$(find /c/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/*/x64/ -name makeappx.exe -print | sort | tail -n 1)" "$@" +} + +function makepri { + "$(find /c/Program\ Files\ \(x86\)/Windows\ Kits/10/bin/*/x64/ -name makepri.exe -print | sort | tail -n 1)" "$@" +} + function build_installer { MSYSTEM='MINGW64' /usr/bin/bash -lc "cd ${BUILD_ROOT} && makensis -NOCD -DVERSION=\"$QL_VERSION_DESC\" -DARCH=\"${MSYSTEM_CARCH}\" -DPREFIX=\"${MSYSTEM_PREFIX:1}\" ${MISC}/gajim.nsi" MSYSTEM='MINGW64' /usr/bin/bash -lc "cd ${BUILD_ROOT} && makensis -NOCD -DVERSION=\"$QL_VERSION_DESC\" -DARCH=\"${MSYSTEM_CARCH}\" -DPREFIX=\"${MSYSTEM_PREFIX:1}\" ${MISC}/gajim-portable.nsi" + ( + cd ${BUILD_ROOT} + rm -rf assets bundle filemapping.txt assets.resfiles appxmanifest.xml resources.pri + echo "[Files]" > filemapping.txt + find ${MSYSTEM_PREFIX:1} -type f | while read line; do + echo "\"$line\" \"${line/${MSYSTEM_PREFIX:1}\///}\"" >> filemapping.txt + done + mkdir -p assets bundle + # https://learn.microsoft.com/en-us/windows/apps/design/style/iconography/app-icon-construction + for size in {44,50,150}; do + for scale in {100,125,150,200,400}; do + scaled_size=$(( (${size}*${scale}+100/2)/100 )) + rsvg-convert -w ${scaled_size} -h ${scaled_size} -o assets/gajim${size}x${size}.scale-${scale}.png ${DIR}/../gajim/data/icons/hicolor/scalable/apps/org.gajim.Gajim.svg + echo "\"assets/gajim${size}x${size}.scale-${scale}.png\" \"assets/gajim${size}x${size}.scale-${scale}.png\"" >> filemapping.txt + done + done + for size in {16,24,32,48,256}; do + rsvg-convert -w ${size} -h ${size} -o assets/gajim44x44.targetsize-${size}.png ${DIR}/../gajim/data/icons/hicolor/scalable/apps/org.gajim.Gajim.svg + cp assets/gajim44x44.targetsize-${size}.png assets/gajim44x44.targetsize-${size}_altform-unplated.png + cp assets/gajim44x44.targetsize-${size}.png assets/gajim44x44.targetsize-${size}_altform-lightunplated.png + echo "\"assets/gajim44x44.targetsize-${size}.png\" \"assets/gajim44x44.targetsize-${size}.png\"" >> filemapping.txt + echo "\"assets/gajim44x44.targetsize-${size}_altform-unplated.png\" \"assets/gajim44x44.targetsize-${size}_altform-unplated.png\"" >> filemapping.txt + echo "\"assets/gajim44x44.targetsize-${size}_altform-lightunplated.png\" \"assets/gajim44x44.targetsize-${size}_altform-lightunplated.png\"" >> filemapping.txt + done + sed "s/QL_VERSION/${QL_VERSION}.0/" ${MISC}/appxmanifest.xml > AppxManifest.xml + makepri new -pr . -cf ${MISC}/priconfig.xml -mn AppxManifest.xml -of resources.pri -o + echo "\"resources.pri\" \"resources.pri\"" >> filemapping.txt + echo "\"AppxManifest.xml\" \"AppxManifest.xml\"" >> filemapping.txt + makeappx pack -f filemapping.txt -p bundle/Gajim_x64.msix -o + makeappx bundle -d bundle/ -p Gajim.msixbundle -o + ) } diff --git a/win/misc/appxmanifest.xml b/win/misc/appxmanifest.xml new file mode 100644 index 000000000..f31ce279a --- /dev/null +++ b/win/misc/appxmanifest.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<Package + xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" + xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" + xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" + xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"> + <Identity + Name="2126Gajim.Gajim" + Version="QL_VERSION" + Publisher="CN=7BA5D718-F03F-4E0C-BC3A-3CBC8E87B36A" + ProcessorArchitecture="x64" /> + <Properties> + <DisplayName>Gajim</DisplayName> + <PublisherDisplayName>Gajim</PublisherDisplayName> + <Description>A fully-featured XMPP client</Description> + <Logo>gajim50x50.png</Logo> + </Properties> + <Resources> + <Resource Language="en-us" /> + </Resources> + <Dependencies> + <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22621.0" /> + </Dependencies> + <Capabilities> + <rescap:Capability Name="runFullTrust"/> + </Capabilities> + <Applications> + <Application Id="Gajim" Executable="bin\Gajim.exe" EntryPoint="Windows.FullTrustApplication"> + <uap:VisualElements + BackgroundColor="transparent" + DisplayName="Gajim" + Square44x44Logo="gajim44x44.png" + Square150x150Logo="gajim150x150.png" + Description="Gajim"> + </uap:VisualElements> + <Extensions> + <desktop:Extension Category="windows.startupTask" Executable="bin\Gajim.exe" EntryPoint="Windows.FullTrustApplication"> + <desktop:StartupTask TaskId="Gajim" Enabled="true" DisplayName="Gajim"/> + </desktop:Extension> + </Extensions> + </Application> + </Applications> +</Package> diff --git a/win/misc/priconfig.xml b/win/misc/priconfig.xml new file mode 100644 index 000000000..c658ec8df --- /dev/null +++ b/win/misc/priconfig.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<resources targetOsVersion="10.0.0" majorVersion="1"> + <index root="\" startIndexAt="\assets"> + <default> + <qualifier name="Language" value="en-US"/> + <qualifier name="Contrast" value="standard"/> + <qualifier name="Scale" value="100"/> + <qualifier name="HomeRegion" value="001"/> + <qualifier name="TargetSize" value="256"/> + <qualifier name="LayoutDirection" value="LTR"/> + <qualifier name="Theme" value="dark"/> + <qualifier name="AlternateForm" value=""/> + <qualifier name="DXFeatureLevel" value="DX9"/> + <qualifier name="Configuration" value=""/> + <qualifier name="DeviceFamily" value="Universal"/> + <qualifier name="Custom" value=""/> + </default> + <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/> + </index> + <!--<index startIndexAt="Start Index Here" root="Root Here">--> + <!-- <indexer-config type="resfiles" qualifierDelimiter="."/>--> + <!-- <indexer-config type="priinfo" emitStrings="true" emitPaths="true" emitEmbeddedData="true"/>--> + <!--</index>--> +</resources>
\ No newline at end of file |