From 1ae6c4767a989bda1fdbdbc409b2bc0eae98edda Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 15:59:00 +0000 Subject: [PATCH 1/7] feat: add windows installer --- .github/workflows/release.yaml | 2 + Makefile | 7 ++ scripts/build_windows_installer.sh | 123 +++++++++++++++++++ scripts/installer/banner.bmp | Bin 0 -> 154514 bytes scripts/installer/coder.ico | Bin 0 -> 432254 bytes scripts/installer/installer.nsi | 130 ++++++++++++++++++++ scripts/installer/path.nsh | 183 +++++++++++++++++++++++++++++ scripts/package.sh | 2 +- 8 files changed, 446 insertions(+), 1 deletion(-) create mode 100755 scripts/build_windows_installer.sh create mode 100644 scripts/installer/banner.bmp create mode 100644 scripts/installer/coder.ico create mode 100644 scripts/installer/installer.nsi create mode 100644 scripts/installer/path.nsh diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index dae0b3d3b392e..ba74b48f41e43 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -107,6 +107,7 @@ jobs: make -j \ build/coder_"$version"_linux_{amd64,armv7,arm64}.{tar.gz,apk,deb,rpm} \ build/coder_"$version"_{darwin,windows}_{amd64,arm64}.zip \ + build/coder_"$version"_windows_amd64_installer.exe \ build/coder_helm_"$version".tgz env: CODER_SIGN_DARWIN: "1" @@ -155,6 +156,7 @@ jobs: run: | ./scripts/publish_release.sh \ ${{ (github.event.inputs.dry_run || github.event.inputs.snapshot) && '--dry-run' }} \ + ./build/*_installer.exe \ ./build/*.zip \ ./build/*.tar.gz \ ./build/*.tgz \ diff --git a/Makefile b/Makefile index 6accef31c5432..64995b7a2168a 100644 --- a/Makefile +++ b/Makefile @@ -252,6 +252,13 @@ $(CODER_ALL_PACKAGES): $(CODER_PACKAGE_DEPS) --output "$@" \ "build/coder_$(VERSION)_$${os}_$${arch}" +# This task builds a Windows amd64 installer. Depends on makensis. +build/coder_$(VERSION)_windows_amd64_installer.exe: build/coder_$(VERSION)_windows_amd64.exe + ./scripts/build_windows_installer.sh \ + --version "$(VERSION)" \ + --output "$@" \ + "$<" + # Redirect from version-less Docker image targets to the versioned ones. # # Called like this: diff --git a/scripts/build_windows_installer.sh b/scripts/build_windows_installer.sh new file mode 100755 index 0000000000000..4822ea2c594fe --- /dev/null +++ b/scripts/build_windows_installer.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash + +# This script packages a Windows installer for Coder containing the given +# binary. +# +# Usage: ./build_windows_installer.sh --output "path/to/installer.exe" [--version 1.2.3] [--agpl] path/to/binary.exe +# +# Only amd64 binaries are supported. +# +# If no version is specified, defaults to the version from ./version.sh. +# +# If the --agpl parameter is specified, only the AGPL license is included in the +# installer. + +set -euo pipefail +# shellcheck source=scripts/lib.sh +source "$(dirname "${BASH_SOURCE[0]}")/lib.sh" + +agpl="${CODER_BUILD_AGPL:-0}" +output_path="" +version="" + +args="$(getopt -o "" -l agpl,output:,version: -- "$@")" +eval set -- "$args" +while true; do + case "$1" in + --agpl) + agpl=1 + shift + ;; + --output) + mkdir -p "$(dirname "$2")" + output_path="$(realpath "$2")" + shift 2 + ;; + --version) + version="$2" + shift 2 + ;; + --) + shift + break + ;; + *) + error "Unrecognized option: $1" + ;; + esac +done + +if [[ "$output_path" == "" ]]; then + error "--output is a required parameter" +fi + +if [[ "$#" != 1 ]]; then + error "Exactly one argument must be provided to this script, $# were supplied" +fi +if [[ ! -f "$1" ]]; then + error "File '$1' does not exist or is not a regular file" +fi +input_file="$(realpath "$1")" + +# Remove the "v" prefix and ensure the version is in the format X.X.X.X for +# makensis. +version="${version#v}" +if [[ "$version" == "" ]]; then + version="$(execrelative ./version.sh)" +fi +version="$(echo "$version" | sed 's/-.*//')" +version+=".$(date -u +%Y%m%d%H%M)" + +# Check dependencies +dependencies makensis + +# Make a temporary dir where all source files intended to be in the installer +# will be hardlinked/copied to. +cdroot +temp_dir="$(TMPDIR="$(dirname "$input_file")" mktemp -d)" +mkdir -p "$temp_dir/bin" +ln "$input_file" "$temp_dir/bin/coder.exe" +cp "$(realpath scripts/installer/installer.nsi)" "$temp_dir/installer.nsi" +cp "$(realpath scripts/installer/path.nsh)" "$temp_dir/path.nsh" +cp "$(realpath scripts/installer/coder.ico)" "$temp_dir/coder.ico" +cp "$(realpath scripts/installer/banner.bmp)" "$temp_dir/banner.bmp" + +# Craft a license document by combining the AGPL license and optionally the +# enterprise license. +license_path="$temp_dir/license.txt" + +if [[ "$agpl" == 0 ]]; then + cat <<- EOF > "$license_path" +This distribution of Coder includes some enterprise-licensed code which is not +licensed under the AGPL license: + +$(cat "$(realpath LICENSE.enterprise)" | sed 's/^/ /') + + + +The non-enterprise code in this distribution is licensed under the AGPL license: + +$(cat "$(realpath LICENSE)" | sed 's/^/ /') + EOF +else + cat <<- EOF > "$license_path" +This distribution of Coder is free software and is licensed under the AGPL +license: + +$(cat "$(realpath LICENSE)" | sed 's/^/ /') + EOF +fi + +# Run makensis to build the installer. +pushd "$temp_dir" +makensis \ + -V4 \ + -DCODER_VERSION="$version" \ + -DCODER_YEAR="$(date +%Y)" \ + installer.nsi +popd + +# Copy the installer to the output path. +cp "$temp_dir/installer.exe" "$output_path" + +rm -rf "$temp_dir" diff --git a/scripts/installer/banner.bmp b/scripts/installer/banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2d3ec844a85993bba8644ca3346f3d3ed68c0e18 GIT binary patch literal 154514 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 EKcVbj+yDRo literal 0 HcmV?d00001 diff --git a/scripts/installer/installer.nsi b/scripts/installer/installer.nsi new file mode 100644 index 0000000000000..5ee804ce53fe5 --- /dev/null +++ b/scripts/installer/installer.nsi @@ -0,0 +1,130 @@ +# This NSIS installer script was taken from the following webpage and heavily +# adapted to Coder's needs: +# https://www.conjur.org/blog/building-a-windows-installer-from-a-linux-ci-pipeline/ + +Unicode true + +!define APP_NAME "Coder" +!define COMP_NAME "Coder Technologies, Inc." +!define VERSION "${CODER_VERSION}" +!define COPYRIGHT "Copyright (c) ${CODER_YEAR} Coder Technologies, Inc." +!define DESCRIPTION "Remote development environments on your infrastructure provisioned with Terraform" +!define INSTALLER_NAME "installer.exe" +!define MAIN_APP_EXE "coder.exe" +!define MAIN_APP_EXE_PATH "bin\coder.exe" +!define ICON "coder.ico" +!define BANNER "banner.bmp" +!define LICENSE_TXT "license.txt" + +!define INSTALL_DIR "$PROGRAMFILES64\${APP_NAME}" +!define INSTALL_TYPE "SetShellVarContext all" # this means install for all users +!define REG_ROOT "HKLM" +!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}" +!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" + +###################################################################### + +VIProductVersion "${VERSION}" +VIAddVersionKey "ProductName" "${APP_NAME}" +VIAddVersionKey "CompanyName" "${COMP_NAME}" +VIAddVersionKey "LegalCopyright" "${COPYRIGHT}" +VIAddVersionKey "FileDescription" "${DESCRIPTION}" +VIAddVersionKey "FileVersion" "${VERSION}" + +###################################################################### + +SetCompressor /SOLID Lzma +Name "${APP_NAME}" +Caption "${APP_NAME}" +OutFile "${INSTALLER_NAME}" +BrandingText "${APP_NAME}" +InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "" +InstallDir "${INSTALL_DIR}" + +###################################################################### + +!define MUI_ICON "${ICON}" +!define MUI_UNICON "${ICON}" +!define MUI_WELCOMEFINISHPAGE_BITMAP "${BANNER}" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${BANNER}" + +###################################################################### + +!include "MUI2.nsh" + +!define MUI_ABORTWARNING +!define MUI_UNABORTWARNING + +!insertmacro MUI_PAGE_WELCOME + +!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}" + +!insertmacro MUI_PAGE_COMPONENTS + +!insertmacro MUI_PAGE_DIRECTORY + +!insertmacro MUI_PAGE_INSTFILES + +!define MUI_FINISHPAGE_TEXT "Coder has been installed on your computer.$\r$\n$\r$\nTo use Coder, sign out and back in, then open a command prompt or PowerShell and run `coder`.$\r$\n$\r$\nClick Finish to close Setup." + +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM + +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_UNPAGE_FINISH + +!insertmacro MUI_LANGUAGE "English" + +###################################################################### + +!include ".\path.nsh" + +Section "Coder CLI" SecInstall + SectionIn RO # mark this section as required + + ${INSTALL_TYPE} + + SetOverwrite ifnewer + SetOutPath "$INSTDIR" + File /r "bin" + File "${LICENSE_TXT}" + + WriteUninstaller "$INSTDIR\uninstall.exe" + + WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE_PATH}" + WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}" + WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe" + WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE_PATH}" + WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}" + WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}" +SectionEnd + +Section "Add to PATH" SecAddToPath + Push "$INSTDIR\bin" + Call AddToPath +SectionEnd + +###################################################################### + +Section Uninstall + ${INSTALL_TYPE} + + RmDir /r "$INSTDIR" + DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}" + DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}" + + Push "$INSTDIR\bin" + Call un.RemoveFromPath +SectionEnd + +###################################################################### + +LangString DESC_SecInstall ${LANG_ENGLISH} "Install the Coder command-line interface (coder.exe) for all users." +LangString DESC_SecAddToPath ${LANG_ENGLISH} "Add coder.exe to the PATH for all users. This enables `coder` to be used directly from a command prompt or PowerShell." + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecInstall} $(DESC_SecInstall) + !insertmacro MUI_DESCRIPTION_TEXT ${SecAddToPath} $(DESC_SecAddToPath) +!insertmacro MUI_FUNCTION_DESCRIPTION_END diff --git a/scripts/installer/path.nsh b/scripts/installer/path.nsh new file mode 100644 index 0000000000000..c281c822f5446 --- /dev/null +++ b/scripts/installer/path.nsh @@ -0,0 +1,183 @@ +# PATH utilities. Taken from: +# https://www.smartmontools.org/browser/trunk/smartmontools/os_win32/installer.nsi?rev=4110#L619 + + +;-------------------------------------------------------------------- +; Path functions +; +; Based on example from: +; http://nsis.sourceforge.net/Path_Manipulation +; + + +!include "WinMessages.nsh" + +; Registry Entry for environment (NT4,2000,XP) +; All users: +!define Environ 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' +; Current user only: +;!define Environ 'HKCU "Environment"' + + +; AddToPath - Appends dir to PATH +; (does not work on Win9x/ME) +; +; Usage: +; Push "dir" +; Call AddToPath + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + + ; NSIS ReadRegStr returns empty string on string overflow + ; Native calls are used here to check actual length of PATH + + ; $4 = RegOpenKey(HKEY_CURRENT_USER, "Environment", &$3) + System::Call "advapi32::RegOpenKey(i 0x80000001, t'Environment', *i.r3) i.r4" + IntCmp $4 0 0 done done + ; $4 = RegQueryValueEx($3, "PATH", (DWORD*)0, (DWORD*)0, &$1, ($2=NSIS_MAX_STRLEN, &$2)) + ; RegCloseKey($3) + System::Call "advapi32::RegQueryValueEx(i $3, t'PATH', i 0, i 0, t.r1, *i ${NSIS_MAX_STRLEN} r2) i.r4" + System::Call "advapi32::RegCloseKey(i $3)" + + IntCmp $4 234 0 +4 +4 ; $4 == ERROR_MORE_DATA + DetailPrint "AddToPath: original length $2 > ${NSIS_MAX_STRLEN}" + MessageBox MB_OK "PATH not updated, original length $2 > ${NSIS_MAX_STRLEN}" + Goto done + + IntCmp $4 0 +5 ; $4 != NO_ERROR + IntCmp $4 2 +3 ; $4 != ERROR_FILE_NOT_FOUND + DetailPrint "AddToPath: unexpected error code $4" + Goto done + StrCpy $1 "" + + ; Check if already in PATH + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" 0 done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" 0 done + + ; Prevent NSIS string overflow + StrLen $2 $0 + StrLen $3 $1 + IntOp $2 $2 + $3 + IntOp $2 $2 + 2 ; $2 = strlen(dir) + strlen(PATH) + sizeof(";") + IntCmp $2 ${NSIS_MAX_STRLEN} +4 +4 0 + DetailPrint "AddToPath: new length $2 > ${NSIS_MAX_STRLEN}" + MessageBox MB_OK "PATH not updated, new length $2 > ${NSIS_MAX_STRLEN}." + Goto done + + ; Append dir to PATH + DetailPrint "Add to PATH: $0" + StrCpy $2 $1 1 -1 + StrCmp $2 ";" 0 +2 + StrCpy $1 $1 -1 ; remove trailing ';' + StrCmp $1 "" +2 ; no leading ';' + StrCpy $0 "$1;$0" + WriteRegExpandStr ${Environ} "PATH" $0 + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + +done: + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; RemoveFromPath - Removes dir from PATH +; +; Usage: +; Push "dir" +; Call RemoveFromPath + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + ReadRegStr $1 ${Environ} "PATH" + StrCpy $5 $1 1 -1 + StrCmp $5 ";" +2 + StrCpy $1 "$1;" ; ensure trailing ';' + Push $1 + Push "$0;" + Call un.StrStr + Pop $2 ; pos of our dir + StrCmp $2 "" done + + DetailPrint "Remove from PATH: $0" + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 ; $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove + StrCpy $3 "$5$6" + StrCpy $5 $3 1 -1 + StrCmp $5 ";" 0 +2 + StrCpy $3 $3 -1 ; remove trailing ';' + WriteRegExpandStr ${Environ} "PATH" $3 + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + +done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; StrStr - find substring in a string +; +; Usage: +; Push "this is some string" +; Push "some" +; Call StrStr +; Pop $0 ; "some string" + +!macro StrStr un +Function ${un}StrStr + Exch $R1 ; $R1=substring, stack=[old$R1,string,...] + Exch ; stack=[string,old$R1,...] + Exch $R2 ; $R2=string, stack=[old$R2,old$R1,...] + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=substring, $R2=string, $R3=strlen(substring) + ; $R4=count, $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 ; $R1=old$R1, stack=[result,...] +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." diff --git a/scripts/package.sh b/scripts/package.sh index 50db188aba9bd..dcd5614ae145a 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -79,7 +79,7 @@ if [[ "$arch" == "arm" ]] || [[ "$arch" == "armv7" ]]; then fi # Make temporary dir where all source files intended to be in the package will -# be hardlinked from. +# be hardlinked to. cdroot temp_dir="$(TMPDIR="$(dirname "$input_file")" mktemp -d)" ln "$input_file" "$temp_dir/coder" From 69896417db3b12b71cbe1e8d99e8e0df02b7b721 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 16:16:27 +0000 Subject: [PATCH 2/7] fix: remember windows install dir correctly --- scripts/installer/installer.nsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/installer/installer.nsi b/scripts/installer/installer.nsi index 5ee804ce53fe5..32f48f3f8524c 100644 --- a/scripts/installer/installer.nsi +++ b/scripts/installer/installer.nsi @@ -38,7 +38,7 @@ Name "${APP_NAME}" Caption "${APP_NAME}" OutFile "${INSTALLER_NAME}" BrandingText "${APP_NAME}" -InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "" +InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "Path" InstallDir "${INSTALL_DIR}" ###################################################################### @@ -94,6 +94,7 @@ Section "Coder CLI" SecInstall WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE_PATH}" + WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "Path" "$INSTDIR" WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}" WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe" WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE_PATH}" From 466b0d302574238895e33deda886f9533c270c54 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 16:18:03 +0000 Subject: [PATCH 3/7] fix: install nsis in release CI --- .github/workflows/release.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ba74b48f41e43..a209df4343592 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -65,13 +65,14 @@ jobs: restore-keys: | js-${{ runner.os }}- + - name: Install nsis and zstd + run: sudo apt-get install -y nsis zstd + - name: Install nfpm run: | set -euo pipefail wget -O /tmp/nfpm.deb https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb sudo dpkg -i /tmp/nfpm.deb - - name: Install zstd - run: sudo apt-get install -y zstd - name: Install rcodesign run: | From aa9af6a94cea2d666007f08b62db95fc40b2e9fe Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 16:22:14 +0000 Subject: [PATCH 4/7] chore: update nsis AddToPath implementation --- scripts/installer/path.nsh | 39 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/scripts/installer/path.nsh b/scripts/installer/path.nsh index c281c822f5446..50f6adbdd4bdb 100644 --- a/scripts/installer/path.nsh +++ b/scripts/installer/path.nsh @@ -1,5 +1,5 @@ # PATH utilities. Taken from: -# https://www.smartmontools.org/browser/trunk/smartmontools/os_win32/installer.nsi?rev=4110#L619 +# https://www.smartmontools.org/browser/trunk/smartmontools/os_win32/installer.nsi?rev=5310#L689 ;-------------------------------------------------------------------- @@ -44,16 +44,19 @@ Function AddToPath System::Call "advapi32::RegQueryValueEx(i $3, t'PATH', i 0, i 0, t.r1, *i ${NSIS_MAX_STRLEN} r2) i.r4" System::Call "advapi32::RegCloseKey(i $3)" - IntCmp $4 234 0 +4 +4 ; $4 == ERROR_MORE_DATA + ${If} $4 = 234 ; ERROR_MORE_DATA DetailPrint "AddToPath: original length $2 > ${NSIS_MAX_STRLEN}" - MessageBox MB_OK "PATH not updated, original length $2 > ${NSIS_MAX_STRLEN}" + MessageBox MB_OK "PATH not updated, original length $2 > ${NSIS_MAX_STRLEN}" /SD IDOK Goto done + ${EndIf} - IntCmp $4 0 +5 ; $4 != NO_ERROR - IntCmp $4 2 +3 ; $4 != ERROR_FILE_NOT_FOUND + ${If} $4 <> 0 ; NO_ERROR + ${If} $4 <> 2 ; ERROR_FILE_NOT_FOUND DetailPrint "AddToPath: unexpected error code $4" Goto done + ${EndIf} StrCpy $1 "" + ${EndIf} ; Check if already in PATH Push "$1;" @@ -72,18 +75,21 @@ Function AddToPath StrLen $3 $1 IntOp $2 $2 + $3 IntOp $2 $2 + 2 ; $2 = strlen(dir) + strlen(PATH) + sizeof(";") - IntCmp $2 ${NSIS_MAX_STRLEN} +4 +4 0 + ${If} $2 > ${NSIS_MAX_STRLEN} DetailPrint "AddToPath: new length $2 > ${NSIS_MAX_STRLEN}" - MessageBox MB_OK "PATH not updated, new length $2 > ${NSIS_MAX_STRLEN}." + MessageBox MB_OK "PATH not updated, new length $2 > ${NSIS_MAX_STRLEN}." /SD IDOK Goto done + ${EndIf} ; Append dir to PATH DetailPrint "Add to PATH: $0" StrCpy $2 $1 1 -1 - StrCmp $2 ";" 0 +2 + ${If} $2 == ";" StrCpy $1 $1 -1 ; remove trailing ';' - StrCmp $1 "" +2 ; no leading ';' + ${EndIf} + ${If} $1 != "" ; no leading ';' StrCpy $0 "$1;$0" + ${EndIf} WriteRegExpandStr ${Environ} "PATH" $0 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 @@ -113,8 +119,9 @@ Function un.RemoveFromPath ReadRegStr $1 ${Environ} "PATH" StrCpy $5 $1 1 -1 - StrCmp $5 ";" +2 + ${If} $5 != ";" StrCpy $1 "$1;" ; ensure trailing ';' + ${EndIf} Push $1 Push "$0;" Call un.StrStr @@ -128,8 +135,9 @@ Function un.RemoveFromPath StrCpy $6 $2 "" $3 ; $6 is now the part after the path to remove StrCpy $3 "$5$6" StrCpy $5 $3 1 -1 - StrCmp $5 ";" 0 +2 + ${If} $5 == ";" StrCpy $3 $3 -1 ; remove trailing ';' + ${EndIf} WriteRegExpandStr ${Environ} "PATH" $3 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 @@ -164,13 +172,12 @@ Function ${un}StrStr StrCpy $R4 0 ; $R1=substring, $R2=string, $R3=strlen(substring) ; $R4=count, $R5=tmp - loop: + ${Do} StrCpy $R5 $R2 $R3 $R4 - StrCmp $R5 $R1 done - StrCmp $R5 "" done + ${IfThen} $R5 == $R1 ${|} ${ExitDo} ${|} + ${IfThen} $R5 == "" ${|} ${ExitDo} ${|} IntOp $R4 $R4 + 1 - Goto loop -done: + ${Loop} StrCpy $R1 $R2 "" $R4 Pop $R5 Pop $R4 From a50376b1ec21eaccb4f37ef0db6f1bcc56947387 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 16:32:54 +0000 Subject: [PATCH 5/7] chore: tidy --- scripts/build_windows_installer.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scripts/build_windows_installer.sh b/scripts/build_windows_installer.sh index 4822ea2c594fe..20aa3a74272f9 100755 --- a/scripts/build_windows_installer.sh +++ b/scripts/build_windows_installer.sh @@ -65,7 +65,7 @@ version="${version#v}" if [[ "$version" == "" ]]; then version="$(execrelative ./version.sh)" fi -version="$(echo "$version" | sed 's/-.*//')" +version="${version//-*/}" version+=".$(date -u +%Y%m%d%H%M)" # Check dependencies @@ -87,24 +87,24 @@ cp "$(realpath scripts/installer/banner.bmp)" "$temp_dir/banner.bmp" license_path="$temp_dir/license.txt" if [[ "$agpl" == 0 ]]; then - cat <<- EOF > "$license_path" -This distribution of Coder includes some enterprise-licensed code which is not -licensed under the AGPL license: + cat <<-EOF >"$license_path" + This distribution of Coder includes some enterprise-licensed code which is not + licensed under the AGPL license: -$(cat "$(realpath LICENSE.enterprise)" | sed 's/^/ /') + $(sed 's/^/ /' "$(realpath LICENSE.enterprise)") -The non-enterprise code in this distribution is licensed under the AGPL license: + The non-enterprise code in this distribution is licensed under the AGPL license: -$(cat "$(realpath LICENSE)" | sed 's/^/ /') + $(sed 's/^/ /' "$(realpath LICENSE)") EOF else - cat <<- EOF > "$license_path" -This distribution of Coder is free software and is licensed under the AGPL -license: + cat <<-EOF >"$license_path" + This distribution of Coder is free software and is licensed under the AGPL + license: -$(cat "$(realpath LICENSE)" | sed 's/^/ /') + $(sed 's/^/ /' "$(realpath LICENSE)") EOF fi From e1718c9423e46a5dfa6c4d95daf3611fe7c5626b Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 24 Oct 2022 16:35:53 +0000 Subject: [PATCH 6/7] chore: PR comments --- README.md | 5 ++++- scripts/build_windows_installer.sh | 8 ++++---- scripts/{installer => win-installer}/banner.bmp | Bin scripts/{installer => win-installer}/coder.ico | Bin scripts/{installer => win-installer}/installer.nsi | 0 scripts/{installer => win-installer}/path.nsh | 0 6 files changed, 8 insertions(+), 5 deletions(-) rename scripts/{installer => win-installer}/banner.bmp (100%) rename scripts/{installer => win-installer}/coder.ico (100%) rename scripts/{installer => win-installer}/installer.nsi (100%) rename scripts/{installer => win-installer}/path.nsh (100%) diff --git a/README.md b/README.md index ccc01b3fc908c..336d2dec00b4b 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,10 @@ Coder creates remote development machines so your team can develop from anywhere > **Note**: > Coder is in a beta state. [Report issues here](https://github.com/coder/coder/issues/new). -The easiest way to install Coder is to use our [install script](https://github.com/coder/coder/blob/main/install.sh) for Linux and macOS. +The easiest way to install Coder is to use our +[install script](https://github.com/coder/coder/blob/main/install.sh) for Linux +and macOS. For Windows, use the latest `..._installer.exe` file from GitHub +Releases. To install, run: diff --git a/scripts/build_windows_installer.sh b/scripts/build_windows_installer.sh index 20aa3a74272f9..2d067b9b11c2b 100755 --- a/scripts/build_windows_installer.sh +++ b/scripts/build_windows_installer.sh @@ -77,10 +77,10 @@ cdroot temp_dir="$(TMPDIR="$(dirname "$input_file")" mktemp -d)" mkdir -p "$temp_dir/bin" ln "$input_file" "$temp_dir/bin/coder.exe" -cp "$(realpath scripts/installer/installer.nsi)" "$temp_dir/installer.nsi" -cp "$(realpath scripts/installer/path.nsh)" "$temp_dir/path.nsh" -cp "$(realpath scripts/installer/coder.ico)" "$temp_dir/coder.ico" -cp "$(realpath scripts/installer/banner.bmp)" "$temp_dir/banner.bmp" +cp "$(realpath scripts/win-installer/installer.nsi)" "$temp_dir/installer.nsi" +cp "$(realpath scripts/win-installer/path.nsh)" "$temp_dir/path.nsh" +cp "$(realpath scripts/win-installer/coder.ico)" "$temp_dir/coder.ico" +cp "$(realpath scripts/win-installer/banner.bmp)" "$temp_dir/banner.bmp" # Craft a license document by combining the AGPL license and optionally the # enterprise license. diff --git a/scripts/installer/banner.bmp b/scripts/win-installer/banner.bmp similarity index 100% rename from scripts/installer/banner.bmp rename to scripts/win-installer/banner.bmp diff --git a/scripts/installer/coder.ico b/scripts/win-installer/coder.ico similarity index 100% rename from scripts/installer/coder.ico rename to scripts/win-installer/coder.ico diff --git a/scripts/installer/installer.nsi b/scripts/win-installer/installer.nsi similarity index 100% rename from scripts/installer/installer.nsi rename to scripts/win-installer/installer.nsi diff --git a/scripts/installer/path.nsh b/scripts/win-installer/path.nsh similarity index 100% rename from scripts/installer/path.nsh rename to scripts/win-installer/path.nsh From 46d855ec0034c67d35d1bfbf8ed550e5bfc5c82a Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Tue, 25 Oct 2022 14:07:25 +0000 Subject: [PATCH 7/7] chore: PR comments --- scripts/build_windows_installer.sh | 10 ++++++---- scripts/win-installer/installer.nsi | 8 +++++--- scripts/win-installer/path.nsh | 8 ++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/scripts/build_windows_installer.sh b/scripts/build_windows_installer.sh index 2d067b9b11c2b..f7ddbd4b3653e 100755 --- a/scripts/build_windows_installer.sh +++ b/scripts/build_windows_installer.sh @@ -59,14 +59,15 @@ if [[ ! -f "$1" ]]; then fi input_file="$(realpath "$1")" -# Remove the "v" prefix and ensure the version is in the format X.X.X.X for -# makensis. version="${version#v}" if [[ "$version" == "" ]]; then version="$(execrelative ./version.sh)" fi -version="${version//-*/}" -version+=".$(date -u +%Y%m%d%H%M)" + +# Remove the "v" prefix and ensure the version is in the format X.X.X.X for +# makensis. +nsis_version="${version//-*/}" +nsis_version+=".$(date -u +%Y%m%d%H%M)" # Check dependencies dependencies makensis @@ -113,6 +114,7 @@ pushd "$temp_dir" makensis \ -V4 \ -DCODER_VERSION="$version" \ + -DCODER_NSIS_VERSION="$nsis_version" \ -DCODER_YEAR="$(date +%Y)" \ installer.nsi popd diff --git a/scripts/win-installer/installer.nsi b/scripts/win-installer/installer.nsi index 32f48f3f8524c..ae9c5593f2b8b 100644 --- a/scripts/win-installer/installer.nsi +++ b/scripts/win-installer/installer.nsi @@ -6,7 +6,7 @@ Unicode true !define APP_NAME "Coder" !define COMP_NAME "Coder Technologies, Inc." -!define VERSION "${CODER_VERSION}" +!define VERSION "${CODER_NSIS_VERSION}" !define COPYRIGHT "Copyright (c) ${CODER_YEAR} Coder Technologies, Inc." !define DESCRIPTION "Remote development environments on your infrastructure provisioned with Terraform" !define INSTALLER_NAME "installer.exe" @@ -37,7 +37,7 @@ SetCompressor /SOLID Lzma Name "${APP_NAME}" Caption "${APP_NAME}" OutFile "${INSTALLER_NAME}" -BrandingText "${APP_NAME}" +BrandingText "${APP_NAME} v${CODER_VERSION}" InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" "Path" InstallDir "${INSTALL_DIR}" @@ -55,6 +55,8 @@ InstallDir "${INSTALL_DIR}" !define MUI_ABORTWARNING !define MUI_UNABORTWARNING +!define MUI_WELCOMEPAGE_TEXT "Setup will guide you through the installation of Coder v${CODER_VERSION}.$\r$\n$\r$\nClick Next to continue." + !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}" @@ -65,7 +67,7 @@ InstallDir "${INSTALL_DIR}" !insertmacro MUI_PAGE_INSTFILES -!define MUI_FINISHPAGE_TEXT "Coder has been installed on your computer.$\r$\n$\r$\nTo use Coder, sign out and back in, then open a command prompt or PowerShell and run `coder`.$\r$\n$\r$\nClick Finish to close Setup." +!define MUI_FINISHPAGE_TEXT "Coder v${CODER_VERSION} has been installed on your computer.$\r$\n$\r$\nIf you added Coder to your PATH, you can use Coder by opening a command prompt or PowerShell and running `coder`. You may have to sign out and sign back in for `coder` to be available.$\r$\n$\r$\nClick Finish to close Setup." !insertmacro MUI_PAGE_FINISH diff --git a/scripts/win-installer/path.nsh b/scripts/win-installer/path.nsh index 50f6adbdd4bdb..d818e1ec5a12e 100644 --- a/scripts/win-installer/path.nsh +++ b/scripts/win-installer/path.nsh @@ -1,6 +1,14 @@ # PATH utilities. Taken from: # https://www.smartmontools.org/browser/trunk/smartmontools/os_win32/installer.nsi?rev=5310#L689 +; os_win32/installer.nsi - smartmontools install NSIS script +; +; Home page of code is: https://www.smartmontools.org +; +; Copyright (C) 2006-22 Christian Franke +; +; SPDX-License-Identifier: GPL-2.0-or-later + ;-------------------------------------------------------------------- ; Path functions