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 0000000..d1e7357 Binary files /dev/null and b/build/windows/installer/banner_h.bmp differ diff --git a/build/windows/installer/banner_v.bmp b/build/windows/installer/banner_v.bmp new file mode 100644 index 0000000..ae22b1a Binary files /dev/null and b/build/windows/installer/banner_v.bmp differ 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;