From aa53d0c400d3bcffe8297aa57acbeaedf9bd2631 Mon Sep 17 00:00:00 2001 From: Romein van Buren Date: Wed, 28 Jun 2023 12:44:56 +0200 Subject: [PATCH] Generate installer for Windows using NSIS --- .gitignore | 1 + README.md | 1 + build/README.md | 30 +++++++---- build/ci_bundle.sh | 13 +++-- build/windows/ci_generate.ps1 | 10 ++-- build/windows/installer/banner_h.bmp | Bin 0 -> 25818 bytes build/windows/installer/banner_v.bmp | Bin 0 -> 154542 bytes build/windows/installer/project.nsi | 74 +++++++++++++++------------ docs/colophon.md | 1 + docs/development/build-directory.md | 7 +++ website/sass/styles.scss | 6 +++ 11 files changed, 90 insertions(+), 53 deletions(-) create mode 100644 build/windows/installer/banner_h.bmp create mode 100644 build/windows/installer/banner_v.bmp create mode 100644 docs/development/build-directory.md diff --git a/.gitignore b/.gitignore index b0cea6f..8605dea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +Thumbs.db /build/version.txt /build/bin/ diff --git a/README.md b/README.md index f9c10e8..480332e 100644 --- a/README.md +++ b/README.md @@ -57,5 +57,6 @@ Feel free to contact me if you have questions! [Send an e-mail.](mailto:romein@v ## Credits * [Wails](https://wails.io/) facilitates the build process for multiple OSes. +* The installer for Windows is generated by [NSIS](https://nsis.sourceforge.io/Main_Page). * Icons are from [Feather Icons](https://feathericons.com/) by [Cole Bemis](https://github.com/colebemis). * Vector drawings come from [unDraw](https://undraw.co/). diff --git a/build/README.md b/build/README.md index 955bc2c..1c0194d 100644 --- a/build/README.md +++ b/build/README.md @@ -1,12 +1,6 @@ # Build Directory -The build directory is used to house all the build files and assets for your application. - -The structure is: - -* bin - Output directory -* darwin - macOS specific files -* windows - Windows specific files +The build directory is used to house all the build files and assets for the application. ## Mac @@ -19,9 +13,27 @@ The directory contains the following files: ## Windows -The `windows` directory contains the manifest and rc files used when building with `wails build`. These may be customised for your application. To return these files to the default state, simply delete them and build with `wails build`. +The `windows` directory contains the manifest and rc files used when building with `wails build`. These may be customised for the application. To return these files to the default state, simply delete them and build with `wails build`. -- `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file will be created using the `appicon.png` file in the build directory. +- `icon.ico` - The icon used for the application. This is used when building using `wails build`. If it is missing, a new `icon.ico` file will be created using the `appicon.png` file in the build directory. - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`. - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer, as well as the application itself (right click the exe -> properties -> details) - `wails.exe.manifest` - The main application manifest file. + +### NSIS graphics + +When updating the bitmaps for the NSIS installer, make sure you export a 24-bits image without colour space information. Follow [this guide](https://stackoverflow.com/a/26471885): + +> These steps worked for me using GIMP 2.8.10: +> +> * Create an image using RGB mode (Image > Mode > RGB) using the appropriate size for whatever you are creating (`164x314` for `MUI_WELCOMEFINISHPAGE_BITMAP`, `150x57` for `MUI_HEADERIMAGE_BITMAP`) +> * File > Export as ... +> * Name your file with a .bmp extension +> * Click "Export" +> * In the window titled "Export Image as BMP" expand "Compatibility Options" and check the box that says **"Do not write color space information"** +> * Also, in the window titled "Export Image as BMP" expand "Advanced Options" and check the radio button under **"24 bits"** next to "R8 G8 B8" +> * Click "Export" + +## CI scripts + +Each platform folder inside this directory contains a `ci_generate.*` file, which is used by GitHub Actions to build the application. When you want to compile Rolens on your machine, please refer to the installation instructions. diff --git a/build/ci_bundle.sh b/build/ci_bundle.sh index 3acbaff..f6bddc9 100755 --- a/build/ci_bundle.sh +++ b/build/ci_bundle.sh @@ -1,5 +1,4 @@ #!/bin/sh - # # This script bundles the binaries generated by GitHub Actions. # @@ -32,10 +31,10 @@ version=$(<./build/version.txt) mkdir bundle -# macOS binaries -mv artifacts/*/rolens-macos-11-amd64.tar.gz bundle/rolens-$version-macos-amd64.tar.gz -mv artifacts/*/rolens-macos-11-arm64.tar.gz bundle/rolens-$version-macos-arm64.tar.gz +# macOS apps +mv "artifacts/*/rolens-macos-11-amd64.tar.gz" "bundle/rolens-$version-macos-amd64.tar.gz" +mv "artifacts/*/rolens-macos-11-arm64.tar.gz" "bundle/rolens-$version-macos-arm64.tar.gz" -# Windows binaries -mv artifacts/*/rolens-windows-2019-amd64.zip bundle/rolens-$version-windows-amd64.zip -mv artifacts/*/rolens-windows-2019-arm64.zip bundle/rolens-$version-windows-arm64.zip +# Windows installers +mv "artifacts/*/rolens-windows-2019-amd64-installer.zip" "bundle/rolens-$version-windows-10+-amd64-installer.zip" +mv "artifacts/*/rolens-windows-2019-arm64-installer.zip" "bundle/rolens-$version-windows-10+-arm64-installer.zip" diff --git a/build/windows/ci_generate.ps1 b/build/windows/ci_generate.ps1 index 9ec7b14..cdcb189 100755 --- a/build/windows/ci_generate.ps1 +++ b/build/windows/ci_generate.ps1 @@ -1,9 +1,11 @@ param([string]$platform) mkdir releases -wails build -platform windows/amd64 -Compress-Archive -Path build\bin\* -DestinationPath releases\rolens-$platform-amd64.zip +wails build -platform windows/amd64 -nsis +Remove-Item build\bin\Rolens.exe +Compress-Archive -Path build\bin\* -DestinationPath releases\rolens-$platform-amd64-installer.zip Remove-Item -Recurse -Confirm:$false .\build\bin -wails build -platform windows/arm64 -Compress-Archive -Path build\bin\* -DestinationPath releases\rolens-$platform-arm64.zip +wails build -platform windows/arm64 -nsis +Remove-Item build\bin\Rolens.exe +Compress-Archive -Path build\bin\* -DestinationPath releases\rolens-$platform-arm64-installer.zip diff --git a/build/windows/installer/banner_h.bmp b/build/windows/installer/banner_h.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d1e7357e2fd86103da00e7ea14bb6ee4aefae184 GIT binary patch literal 25818 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 Fe*w>8DoFqU literal 0 HcmV?d00001 diff --git a/build/windows/installer/banner_v.bmp b/build/windows/installer/banner_v.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ae22b1a66b57ff436b8399f80b5d8456085cc1b3 GIT binary patch literal 154542 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 literal 0 HcmV?d00001 diff --git a/build/windows/installer/project.nsi b/build/windows/installer/project.nsi index 3b1588e..43e17ea 100644 --- a/build/windows/installer/project.nsi +++ b/build/windows/installer/project.nsi @@ -1,12 +1,11 @@ Unicode true -#### ## Please note: Template replacements don't work in this file. They are provided with default defines like ## mentioned underneath. -## If the keyword is not defined, "wails_tools.nsh" will populate them with the values from ProjectInfo. -## If they are defined here, "wails_tools.nsh" will not touch them. This allows to use this project.nsi manually +## If the keyword is not defined, "wails_tools.nsh" will populate them with the values from ProjectInfo. +## If they are defined here, "wails_tools.nsh" will not touch them. This allows to use this project.nsi manually ## from outside of Wails for debugging and development of the installer. -## + ## For development first make a wails nsis build to populate the "wails_tools.nsh": ## > wails build --target windows/amd64 --nsis ## Then you can call makensis on this file with specifying the path to your binary: @@ -16,28 +15,24 @@ Unicode true ## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe ## For a installer with both architectures: ## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe -#### -## The following information is taken from the ProjectInfo file, but they can be overwritten here. -#### -## !define INFO_PROJECTNAME "MyProject" # Default "{{.Name}}" -## !define INFO_COMPANYNAME "MyCompany" # Default "{{.Info.CompanyName}}" -## !define INFO_PRODUCTNAME "MyProduct" # Default "{{.Info.ProductName}}" -## !define INFO_PRODUCTVERSION "1.0.0" # Default "{{.Info.ProductVersion}}" -## !define INFO_COPYRIGHT "Copyright" # Default "{{.Info.Copyright}}" -### -## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" -## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" -#### -## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html -#### -## Include the wails tools -#### + +## The following information is taken from the ProjectInfo file, but can be overwritten here. +## !define INFO_PROJECTNAME "MyProject" # Default "{{.Name}}" +## !define INFO_COMPANYNAME "MyCompany" # Default "{{.Info.CompanyName}}" +## !define INFO_PRODUCTNAME "MyProduct" # Default "{{.Info.ProductName}}" +## !define INFO_PRODUCTVERSION "1.0.0" # Default "{{.Info.ProductVersion}}" +## !define INFO_COPYRIGHT "Copyright" # Default "{{.Info.Copyright}}" +## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe" +## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}" +## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html + !include "wails_tools.nsh" # The version information for this two must consist of 4 parts VIProductVersion "${INFO_PRODUCTVERSION}.0" VIFileVersion "${INFO_PRODUCTVERSION}.0" +# Product information VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}" VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer" VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}" @@ -45,23 +40,36 @@ VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}" VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}" VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" -!include "MUI.nsh" - +!include "MUI2.nsh" !define MUI_ICON "..\icon.ico" !define MUI_UNICON "..\icon.ico" -# !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\leftimage.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314 + +# Bitmap on the left side of the welcome page. Must be 164x314 pixels in size. +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP ".\banner_h.bmp" +!define MUI_WELCOMEFINISHPAGE_BITMAP ".\banner_v.bmp" +!define MUI_WELCOMEPAGE_TITLE "Welcome to the Rolens installer!" + +# Finish page information +!define MUI_FINISHPAGE_RUN "$INSTDIR\${INFO_PROJECTNAME}.exe" +!define MUI_FINISHPAGE_RUN_TEXT "Start Rolens when finished" +!define MUI_FINISHPAGE_TITLE "Thanks for installing!" +!define MUI_FINISHPAGE_LINK "Visit Rolens on the Web!" +!define MUI_FINISHPAGE_LINK_LOCATION "https://garraflavatra.github.io/rolens/" +!define MUI_FINISHPAGE_LINK_COLOR 880000 + !define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps !define MUI_ABORTWARNING # This will warn the user if they exit from the installer. -!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page. -# !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer -!insertmacro MUI_PAGE_DIRECTORY # In which folder install page. -!insertmacro MUI_PAGE_INSTFILES # Installing page. -!insertmacro MUI_PAGE_FINISH # Finished installation page. +!insertmacro MUI_PAGE_WELCOME +# !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH -!insertmacro MUI_UNPAGE_INSTFILES # Uinstalling page +!insertmacro MUI_UNPAGE_INSTFILES -!insertmacro MUI_LANGUAGE "English" # Set the Language of the installer +!insertmacro MUI_LANGUAGE "English" ## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1 #!uninstfinalize 'signtool --file "%1"' @@ -69,7 +77,7 @@ VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}" Name "${INFO_PRODUCTNAME}" OutFile "..\..\bin\${INFO_PROJECTNAME}-${ARCH}-installer.exe" # Name of the installer's file. -InstallDir "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). +InstallDir "$PROGRAMFILES64\${INFO_PRODUCTNAME}" # Default installing folder ($PROGRAMFILES is Program Files folder). ShowInstDetails show # This will always show the installation details. Function .onInit @@ -80,7 +88,7 @@ Section !insertmacro wails.webview2runtime SetOutPath $INSTDIR - + !insertmacro wails.files CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}" @@ -89,7 +97,7 @@ Section !insertmacro wails.writeUninstaller SectionEnd -Section "uninstall" +Section "uninstall" RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath RMDir /r $INSTDIR diff --git a/docs/colophon.md b/docs/colophon.md index a58903c..5b35108 100644 --- a/docs/colophon.md +++ b/docs/colophon.md @@ -8,5 +8,6 @@ Rolens is © [Romein van Buren](mailto:romein@vburen.nl) 2023. The source code a ## Credits * [Wails](https://wails.io/) facilitates the build process for multiple OSes. +* The installer for Windows is generated by [NSIS](https://nsis.sourceforge.io/Main_Page). * Icons are from [Feather Icons](https://feathericons.com/) by [Cole Bemis](https://github.com/colebemis). * Vector drawings come from [unDraw](https://undraw.co/). diff --git a/docs/development/build-directory.md b/docs/development/build-directory.md new file mode 100644 index 0000000..87a5f19 --- /dev/null +++ b/docs/development/build-directory.md @@ -0,0 +1,7 @@ +--- +title: Build directory +parent: Development +order: 50 +--- + +{% filecontent "../build/README.md", 2 %} diff --git a/website/sass/styles.scss b/website/sass/styles.scss index c3f909d..ad48532 100644 --- a/website/sass/styles.scss +++ b/website/sass/styles.scss @@ -233,6 +233,12 @@ article { margin-bottom: 1rem; } + blockquote { + margin: 0 0 1rem 0; + padding: 0 0 0 1rem; + border-left: 4px solid #ddd; + } + ol, ul { padding: 0 0 0 1rem;