From 8d995fb61d461dbc536a9253cc2aad44defc1097 Mon Sep 17 00:00:00 2001 From: gpatel-fr <44170243+gpatel-fr@users.noreply.github.com> Date: Thu, 4 May 2023 22:59:35 +0200 Subject: [PATCH] add workflow for building experimental releases --- .github/workflows/buildsrelease.yml | 92 +++++++++++++++++++++++++++++ Installer/OSX/artifact_mac.sh | 26 ++++++++ Installer/Windows/artifact_win.bat | 47 +++++++++++++++ Installer/bundleduplicati.sh | 58 ++++++++++++++++++ Installer/debian/artifact_deb.sh | 28 +++++++++ 5 files changed, 251 insertions(+) create mode 100644 .github/workflows/buildsrelease.yml create mode 100755 Installer/OSX/artifact_mac.sh create mode 100644 Installer/Windows/artifact_win.bat create mode 100644 Installer/bundleduplicati.sh create mode 100755 Installer/debian/artifact_deb.sh diff --git a/.github/workflows/buildsrelease.yml b/.github/workflows/buildsrelease.yml new file mode 100644 index 000000000..b769a680a --- /dev/null +++ b/.github/workflows/buildsrelease.yml @@ -0,0 +1,92 @@ +name: Build release installers + +on: + workflow_dispatch + +env: + build_directory: "Duplicati/GUI/Duplicati.GUI.TrayIcon/bin/Release" + +jobs: + macbuild: + name: mac build and installers + runs-on: macos-latest + strategy: + fail-fast: false + + steps: + - name: Install NuGet + uses: nuget/setup-nuget@v1.1.1 + + - name: Checkout Source + uses: actions/checkout@v3 + + - name: Restore NuGet Packages + run: nuget restore Duplicati.sln + + - name: Build Duplicati (macOS) + run: msbuild -p:DefineConstants=\"ENABLE_GTK\;XAMARIN_MAC\" -p:Configuration=Release Duplicati.sln + + - name: Build installers (OSX) + run: | + Installer/OSX/artifact_mac.sh + + - name: Upload build results + uses: actions/upload-artifact@v3 + with: + retention-days: 5 + name: build-results-mac + path: ~/artifacts/**/* + + windowsbuild: + name: windows installer + runs-on: windows-latest + needs: macbuild + steps: + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.3 + - name: Install NuGet + uses: nuget/setup-nuget@v1.1.1 + - uses: actions/checkout@v3 + - name: Retrieve mac build + uses: actions/download-artifact@v3 + with: + name: build-results-mac + path: ~/macartifacts + - name: set env + run: echo "ZIPBUILDFILE=$(resolve-path ~ | select-object -expandproperty path)\macartifacts\$(get-childitem ~\macartifacts\*.zip | select-object -first 1 -expandproperty name )" >> $env:GITHUB_ENV + - name: Build installers (Windows) + run: | + echo ${{ env.ZIPBUILDFILE }} + .\\Installer\\Windows\\artifact_win.bat ${{ env.ZIPBUILDFILE }} + - name: Upload build results + uses: actions/upload-artifact@v3 + with: + retention-days: 5 + name: build-results-windows + path: ~/artifacts/**/* + + debianbuild: + name: debian like installer + runs-on: ubuntu-latest + needs: macbuild + steps: + - uses: actions/checkout@v3 + - name: Retrieve mac build + uses: actions/download-artifact@v3 + with: + name: build-results-mac + path: ~/macartifacts + - name: set env + run: echo "ZIPBUILDFILE=$(ls ~/macartifacts/*.zip | tail -1)" >> $GITHUB_ENV + - name: Build installers (Deb) + run: | + echo ${{ env.ZIPBUILDFILE }} + sudo apt install debhelper + Installer/debian/artifact_deb.sh ${{ env.ZIPBUILDFILE }} + - name: Upload build results + uses: actions/upload-artifact@v3 + with: + retention-days: 5 + name: build-results-linux + path: ~/artifacts/**/* + diff --git a/Installer/OSX/artifact_mac.sh b/Installer/OSX/artifact_mac.sh new file mode 100755 index 000000000..720c9c190 --- /dev/null +++ b/Installer/OSX/artifact_mac.sh @@ -0,0 +1,26 @@ +# Installation instructions when building locally (March 2023) +# add ppa https://download.mono-project.com/repo/ubuntu stable-focal main +# install p7zip, build-essential, debhelper, dpkg-dev, mono-devel, +# libappindicator0.1-cil-dev, ca-certificates-mono, gtk-sharp2 + +RELEASE_TIMESTAMP=$(date +%Y-%m-%d) + +RELEASE_INC_VERSION=$(cat Updates/build_version.txt) +RELEASE_INC_VERSION=$((RELEASE_INC_VERSION+1)) + +RELEASE_TYPE="canary" + +RELEASE_VERSION="2.0.6.${RELEASE_INC_VERSION}" +RELEASE_NAME="${RELEASE_VERSION}_${RELEASE_TYPE}_${RELEASE_TIMESTAMP}" + +RELEASE_FILE_NAME="duplicati-${RELEASE_NAME}" + +export RUNTMP=$HOME +bash Installer/bundleduplicati.sh $RELEASE_FILE_NAME +mkdir -p $RUNTMP/artifacts +cp $RUNTMP/$RELEASE_FILE_NAME $RUNTMP/artifacts/$RELEASE_FILE_NAME.zip +cd Installer/OSX +bash make-dmg.sh $RUNTMP/$RELEASE_FILE_NAME +mv *.dmg $RUNTMP/artifacts +mv *.pkg $RUNTMP/artifacts +cd ../.. diff --git a/Installer/Windows/artifact_win.bat b/Installer/Windows/artifact_win.bat new file mode 100644 index 000000000..acf57d2ad --- /dev/null +++ b/Installer/Windows/artifact_win.bat @@ -0,0 +1,47 @@ +@rem start this batch from the root Duplicati git directory + +@rem Installation instructions when building locally (March 2023) +@rem The life expectancy of any URL on MS servers is about one or two years +@rem so links can become obsolete fast. +@rem - setup a Windows 2022 VM +@rem (should work for Win10 but a 2022 VM is valid for 6 months vs 1 for Win10) +@rem - install git from https://git-scm.com/download/win +@rem - add to the PATH the directory c:\program files\git +@rem - install .NET SDK 4.7 from https://dotnet.microsoft.com/en-us/download/visual-studio-sdks +@rem - install msbuild (visual studio community) +@rem - install nuget from https://learn.microsoft.com/en-us/nuget/install-nuget-client-tools +@rem - install wix 3 from https://wixtoolset.org +@rem - add to the PATH msbuild, wix3 and nuget + +for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set dt=%%a +set RELEASE_TIMESTAMP=%dt:~0,4%-%dt:~4,2%-%dt:~6,2% + +set RELEASE_INC_VERSION=$(cat Updates/build_version.txt) +for /f %%a in ('type updates\build_version.txt') do set RELEASE_INC_VERSION=%%a +set /a RELEASE_INC_VERSION=%RELEASE_INC_VERSION%+1 + +set RELEASE_TYPE=canary + +set RELEASE_VERSION=2.0.6.%RELEASE_INC_VERSION% +set RELEASE_NAME=%RELEASE_VERSION%_%RELEASE_TYPE%_%RELEASE_TIMESTAMP% + +set RELEASE_FILE_NAME=duplicati-%RELEASE_NAME% + +set RUNTMP=%USERPROFILE% +set ZIPBUILDFILE=%1 +if "%ZIPBUILDFILE%" == "" ( + where /q bash.exe + if ERRORLEVEL 1 ( + git-bash -x Installer\bundleduplicati.sh %RELEASE_NAME% + ) ELSE ( + bash -x Installer\bundleduplicati.sh %RELEASE_NAME% + ) + set ZIPBUILDFILE=%RUNTMP%\%RELEASE_NAME% +) +cd Installer\Windows +call build-msi %ZIPBUILDFILE% +mkdir %RUNTMP%\artifacts +move duplicati.msi %RUNTMP%\artifacts\duplicati-%RELEASE_NAME%.msi +move duplicati-32bit.msi %RUNTMP%\artifacts\duplicati-32bit-%RELEASE_NAME%.msi +cd ..\.. + diff --git a/Installer/bundleduplicati.sh b/Installer/bundleduplicati.sh new file mode 100644 index 000000000..99323f06d --- /dev/null +++ b/Installer/bundleduplicati.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# ripped from build-release.sh + +# directory where files are stored +UPDATE_SOURCE="${RUNTMP}/tmpinstduplicati" +# zip output to be used by the installers +ZIPRESULT="${RUNTMP}/$1" + +if [ -e "${UPDATE_SOURCE}" ]; then rm -rf "${UPDATE_SOURCE}"; fi +if [ -f "${ZIPRESULT}" ]; then rm -rf "${ZIPRESULT}"; fi + +mkdir -p "${UPDATE_SOURCE}" + +cp -R Duplicati/GUI/Duplicati.GUI.TrayIcon/bin/Release/* "${UPDATE_SOURCE}" +cp -R Duplicati/Server/webroot "${UPDATE_SOURCE}" + +# We copy some files for alphavss manually as they are not picked up by xbuild +mkdir "${UPDATE_SOURCE}/alphavss" +for FN in Duplicati/Library/Snapshots/bin/Release/AlphaVSS.*.dll; do + cp "${FN}" "${UPDATE_SOURCE}/alphavss/" +done + +# Fix for some support libraries not being picked up +for BACKEND in Duplicati/Library/Backend/*; do + if [ -d "${BACKEND}/bin/Release/" ]; then + cp "${BACKEND}/bin/Release/"*.dll "${UPDATE_SOURCE}" + fi +done + +# Install the assembly redirects for all Duplicati .exe files +find "${UPDATE_SOURCE}" -maxdepth 1 -type f -name Duplicati.*.exe -exec cp Installer/AssemblyRedirects.xml {}.config \; + +# Clean some unwanted build files +for FILE in "control_dir" "Duplicati-server.sqlite" "Duplicati.debug.log" "updates"; do + if [ -e "${UPDATE_SOURCE}/${FILE}" ]; then rm -rf "${UPDATE_SOURCE}/${FILE}"; fi +done + +# Clean the localization spam from Azure +for FILE in "de" "es" "fr" "it" "ja" "ko" "ru" "zh-Hans" "zh-Hant"; do + if [ -e "${UPDATE_SOURCE}/${FILE}" ]; then rm -rf "${UPDATE_SOURCE}/${FILE}"; fi +done + +# Clean debug files, if any +rm -rf "${UPDATE_SOURCE}/"*.mdb; +rm -rf "${UPDATE_SOURCE}/"*.pdb; + +# Remove all library docs files +rm -rf "${UPDATE_SOURCE}/"*.xml; + +# Remove all .DS_Store and Thumbs.db files +find . -type f -name ".DS_Store" | xargs rm -rf +find . -type f -name "Thumbs.db" | xargs rm -rf + +# bundle everything info a zip file +pushd "${UPDATE_SOURCE}" +7z a -tzip -r "${ZIPRESULT}" +popd +rm "${UPDATE_SOURCE}" -rf diff --git a/Installer/debian/artifact_deb.sh b/Installer/debian/artifact_deb.sh new file mode 100755 index 000000000..06d8a07c5 --- /dev/null +++ b/Installer/debian/artifact_deb.sh @@ -0,0 +1,28 @@ +# Installation instructions when building locally (March 2023) +# add ppa https://download.mono-project.com/repo/ubuntu stable-focal main +# install p7zip, build-essential, debhelper, dpkg-dev, mono-devel, +# libappindicator0.1-cil-dev, ca-certificates-mono, gtk-sharp2 + +RELEASE_TIMESTAMP=$(date +%Y-%m-%d) + +RELEASE_INC_VERSION=$(cat Updates/build_version.txt) +RELEASE_INC_VERSION=$((RELEASE_INC_VERSION+1)) + +RELEASE_TYPE="canary" + +RELEASE_VERSION="2.0.6.${RELEASE_INC_VERSION}" +RELEASE_NAME="${RELEASE_VERSION}_${RELEASE_TYPE}_${RELEASE_TIMESTAMP}" + +RELEASE_FILE_NAME="duplicati-${RELEASE_NAME}" + +export RUNTMP=$HOME +ZIPBUILDFILE=$1 +if [ "$ZIPBUILDFILE" == "" ]; then + bash Installer/bundleduplicati.sh $RELEASE_FILE_NAME + ZIPBUILDFILE=$RUNTMP/$RELEASE_FILE_NAME +fi +cd Installer/debian +bash -x make-binary-package.sh $ZIPBUILDFILE +mkdir -p $RUNTMP/artifacts +mv *.deb $RUNTMP/artifacts +cd ../..