From 44f605654941deb5f61394615e00570d3032f948 Mon Sep 17 00:00:00 2001 From: Khaos Date: Tue, 24 Nov 2020 15:21:24 +0100 Subject: [PATCH] Created chocolatey package --- .gitignore | 1 + README.md | 6 ++ package/ReadMe.md | 133 ++++++++++++++++++++++++++ package/choco-update-notifier.nuspec | 80 ++++++++++++++++ package/tools/LICENSE.txt | 21 ++++ package/tools/VERIFICATION.txt | 6 ++ package/tools/chocolateyinstall.ps1 | 15 +++ package/tools/chocolateyuninstall.ps1 | 33 +++++++ 8 files changed, 295 insertions(+) create mode 100644 package/ReadMe.md create mode 100644 package/choco-update-notifier.nuspec create mode 100644 package/tools/LICENSE.txt create mode 100644 package/tools/VERIFICATION.txt create mode 100644 package/tools/chocolateyinstall.ps1 create mode 100644 package/tools/chocolateyuninstall.ps1 diff --git a/.gitignore b/.gitignore index dfcfd56..2e09bc6 100644 --- a/.gitignore +++ b/.gitignore @@ -348,3 +348,4 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ +*.msi diff --git a/README.md b/README.md index 4cbffd4..36bc686 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,12 @@ This project installs a scheduled task, that checks for outdated [Chocolatey](ht ![Logo](https://github.com/KhaosCoders/choco-update-notifier/blob/v1.0.0/src/ChocoUpdateNotifier/res/Icon.png?raw=true) # Installation +## Chocolatey +It is recommented to use Chocolatey to install this tool: +`choco install choco-udpate-notifier` +[Here](https://chocolatey.org/packages/choco-update-notifier) is the official chocolatey package. + +## Manual Simply download the latest [Relase](https://github.com/KhaosCoders/choco-update-notifier/releases) and run the installer (.NET Framework 4.6.2 or greater should be installed on your system) diff --git a/package/ReadMe.md b/package/ReadMe.md new file mode 100644 index 0000000..cac8722 --- /dev/null +++ b/package/ReadMe.md @@ -0,0 +1,133 @@ +## Summary +How do I create packages? See https://chocolatey.org/docs/create-packages + +If you are submitting packages to the community feed (https://chocolatey.org) +always try to ensure you have read, understood and adhere to the create +packages wiki link above. + +## Automatic Packaging Updates? +Consider making this package an automatic package, for the best +maintainability over time. Read up at https://chocolatey.org/docs/automatic-packages + +## Shim Generation +Any executables you include in the package or download (but don't call +install against using the built-in functions) will be automatically shimmed. + +This means those executables will automatically be included on the path. +Shim generation runs whether the package is self-contained or uses automation +scripts. + +By default, these are considered console applications. + +If the application is a GUI, you should create an empty file next to the exe +named 'name.exe.gui' e.g. 'bob.exe' would need a file named 'bob.exe.gui'. +See https://chocolatey.org/docs/create-packages#how-do-i-set-up-shims-for-applications-that-have-a-gui + +If you want to ignore the executable, create an empty file next to the exe +named 'name.exe.ignore' e.g. 'bob.exe' would need a file named +'bob.exe.ignore'. +See https://chocolatey.org/docs/create-packages#how-do-i-exclude-executables-from-getting-shims + +## Self-Contained? +If you have a self-contained package, you can remove the automation scripts +entirely and just include the executables, they will automatically get shimmed, +which puts them on the path. Ensure you have the legal right to distribute +the application though. See https://chocolatey.org/docs/legal. + +You should read up on the Shim Generation section to familiarize yourself +on what to do with GUI applications and/or ignoring shims. + +## Automation Scripts +You have a powerful use of Chocolatey, as you are using PowerShell. So you +can do just about anything you need. Choco has some very handy built-in +functions that you can use, these are sometimes called the helpers. + +### Built-In Functions +https://chocolatey.org/docs/helpers-reference + +A note about a couple: +* Get-BinRoot - this is a horribly named function that doesn't do what new folks think it does. It gets you the 'tools' root, which by default is set to 'c:\tools', not the chocolateyInstall bin folder - see https://chocolatey.org/docs/helpers-get-tools-location +* Install-BinFile - used for non-exe files - executables are automatically shimmed... - see https://chocolatey.org/docs/helpers-install-bin-file +* Uninstall-BinFile - used for non-exe files - executables are automatically shimmed - see https://chocolatey.org/docs/helpers-uninstall-bin-file + +### Getting package specific information +Use the package parameters pattern - see https://chocolatey.org/docs/how-to-parse-package-parameters-argument + +### Need to mount an ISO? +https://chocolatey.org/docs/how-to-mount-an-iso-in-chocolatey-package + +### Environment Variables +Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow): + + * TEMP/TMP - Overridden to the CacheLocation, but may be the same as the original TEMP folder + * ChocolateyInstall - Top level folder where Chocolatey is installed + * ChocolateyPackageName - The name of the package, equivalent to the `` field in the nuspec (0.9.9+) + * ChocolateyPackageTitle - The title of the package, equivalent to the `` field in the nuspec (0.10.1+) + * ChocolateyPackageVersion - The version of the package, equivalent to the `<version />` field in the nuspec (0.9.9+) + * ChocolateyPackageFolder - The top level location of the package folder - the folder where Chocolatey has downloaded and extracted the NuGet package, typically `C:\ProgramData\chocolatey\lib\packageName`. + +#### Advanced Environment Variables +The following are more advanced settings: + + * ChocolateyPackageParameters - Parameters to use with packaging, not the same as install arguments (which are passed directly to the native installer). Based on `--package-parameters`. (0.9.8.22+) + * CHOCOLATEY_VERSION - The version of Choco you normally see. Use if you are 'lighting' things up based on choco version. (0.9.9+) - Otherwise take a dependency on the specific version you need. + * ChocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. (0.9.9+) - Automatically handled in built in Choco functions. + * OS_PLATFORM - Like Windows, OSX, Linux. (0.9.9+) + * OS_VERSION - The version of OS, like 6.1 something something for Windows. (0.9.9+) + * OS_NAME - The reported name of the OS. (0.9.9+) + * USER_NAME = The user name (0.10.6+) + * USER_DOMAIN = The user domain name (could also be local computer name) (0.10.6+) + * IS_PROCESSELEVATED = Is the process elevated? (0.9.9+) + * IS_SYSTEM = Is the user the system account? (0.10.6+) + * IS_REMOTEDESKTOP = Is the user in a terminal services session? (0.10.6+) + * ChocolateyToolsLocation - formerly 'ChocolateyBinRoot' ('ChocolateyBinRoot' will be removed with Chocolatey v2.0.0), this is where tools being installed outside of Chocolatey packaging will go. (0.9.10+) + +#### Set By Options and Configuration +Some environment variables are set based on options that are passed, configuration and/or features that are turned on: + + * ChocolateyEnvironmentDebug - Was `--debug` passed? If using the built-in PowerShell host, this is always true (but only logs debug messages to console if `--debug` was passed) (0.9.10+) + * ChocolateyEnvironmentVerbose - Was `--verbose` passed? If using the built-in PowerShell host, this is always true (but only logs verbose messages to console if `--verbose` was passed). (0.9.10+) + * ChocolateyForce - Was `--force` passed? (0.9.10+) + * ChocolateyForceX86 - Was `-x86` passed? (CHECK) + * ChocolateyRequestTimeout - How long before a web request will time out. Set by config `webRequestTimeoutSeconds` (CHECK) + * ChocolateyResponseTimeout - How long to wait for a download to complete? Set by config `commandExecutionTimeoutSeconds` (CHECK) + * ChocolateyPowerShellHost - Are we using the built-in PowerShell host? Set by `--use-system-powershell` or the feature `powershellHost` (0.9.10+) + +#### Business Edition Variables + + * ChocolateyInstallArgumentsSensitive - Encrypted arguments passed from command line `--install-arguments-sensitive` that are not logged anywhere. (0.10.1+ and licensed editions 1.6.0+) + * ChocolateyPackageParametersSensitive - Package parameters passed from command line `--package-parameters-senstivite` that are not logged anywhere. (0.10.1+ and licensed editions 1.6.0+) + * ChocolateyLicensedVersion - What version is the licensed edition on? + * ChocolateyLicenseType - What edition / type of the licensed edition is installed? + * USER_CONTEXT - The original user context - different when self-service is used (Licensed v1.10.0+) + +#### Experimental Environment Variables +The following are experimental or use not recommended: + + * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under (0.9.9+) + * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different (0.9.9+) - based on git describe + * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. (0.9.9+) + * IS_REMOTE = Is the user in a remote session? (0.10.6+) + +#### Not Useful Or Anti-Pattern If Used + + * ChocolateyInstallOverride = Not for use in package automation scripts. Based on `--override-arguments` being passed. (0.9.9+) + * ChocolateyInstallArguments = The installer arguments meant for the native installer. You should use chocolateyPackageParameters instead. Based on `--install-arguments` being passed. (0.9.9+) + * ChocolateyIgnoreChecksums - Was `--ignore-checksums` passed or the feature `checksumFiles` turned off? (0.9.9.9+) + * ChocolateyAllowEmptyChecksums - Was `--allow-empty-checksums` passed or the feature `allowEmptyChecksums` turned on? (0.10.0+) + * ChocolateyAllowEmptyChecksumsSecure - Was `--allow-empty-checksums-secure` passed or the feature `allowEmptyChecksumsSecure` turned on? (0.10.0+) + * ChocolateyCheckLastExitCode - Should Chocolatey check LASTEXITCODE? Is the feature `scriptsCheckLastExitCode` turned on? (0.10.3+) + * ChocolateyChecksum32 - Was `--download-checksum` passed? (0.10.0+) + * ChocolateyChecksumType32 - Was `--download-checksum-type` passed? (0.10.0+) + * ChocolateyChecksum64 - Was `--download-checksum-x64` passed? (0.10.0)+ + * ChocolateyChecksumType64 - Was `--download-checksum-type-x64` passed? (0.10.0)+ + * ChocolateyPackageExitCode - The exit code of the script that just ran - usually set by `Set-PowerShellExitCode` (CHECK) + * ChocolateyLastPathUpdate - Set by Chocolatey as part of install, but not used for anything in particular in packaging. + * ChocolateyProxyLocation - The explicit proxy location as set in the configuration `proxy` (0.9.9.9+) + * ChocolateyDownloadCache - Use available download cache? Set by `--skip-download-cache`, `--use-download-cache`, or feature `downloadCache` (0.9.10+ and licensed editions 1.1.0+) + * ChocolateyProxyBypassList - Explicitly set locations to ignore in configuration `proxyBypassList` (0.10.4+) + * ChocolateyProxyBypassOnLocal - Should the proxy bypass on local connections? Set based on configuration `proxyBypassOnLocal` (0.10.4+) + * http_proxy - Set by original `http_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. (0.10.4+) + * https_proxy - Set by original `https_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. (0.10.4+) + * no_proxy- Set by original `no_proxy` passthrough, or same as `ChocolateyProxyBypassList` if explicitly set. (0.10.4+) + diff --git a/package/choco-update-notifier.nuspec b/package/choco-update-notifier.nuspec new file mode 100644 index 0000000..2d6aed3 --- /dev/null +++ b/package/choco-update-notifier.nuspec @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Read this before creating packages: https://chocolatey.org/docs/create-packages --> +<!-- It is especially important to read the above link to understand additional requirements when publishing packages to the community feed aka dot org (https://chocolatey.org/packages). --> + +<!-- Test your packages in a test environment: https://github.com/chocolatey/chocolatey-test-environment --> + +<!-- +This is a nuspec. It mostly adheres to https://docs.nuget.org/create/Nuspec-Reference. Chocolatey uses a special version of NuGet.Core that allows us to do more than was initially possible. As such there are certain things to be aware of: + +* the package xmlns schema url may cause issues with nuget.exe +* Any of the following elements can ONLY be used by choco tools - projectSourceUrl, docsUrl, mailingListUrl, bugTrackerUrl, packageSourceUrl, provides, conflicts, replaces +* nuget.exe can still install packages with those elements but they are ignored. Any authoring tools or commands will error on those elements +--> + +<!-- You can embed software files directly into packages, as long as you are not bound by distribution rights. --> +<!-- * If you are an organization making private packages, you probably have no issues here --> +<!-- * If you are releasing to the community feed, you need to consider distribution rights. --> +<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. --> +<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> + <metadata> + <!-- == PACKAGE SPECIFIC SECTION == --> + <!-- This section is about this package, although id and version have ties back to the software --> + <!-- id is lowercase and if you want a good separator for words, use '-', not '.'. Dots are only acceptable as suffixes for certain types of packages, e.g. .install, .portable, .extension, .template --> + <!-- If the software is cross-platform, attempt to use the same id as the debian/rpm package(s) if possible. --> + <id>choco-update-notifier</id> + <!-- version should MATCH as closely as possible with the underlying software --> + <!-- Is the version a prerelease of a version? https://docs.nuget.org/create/versioning#creating-prerelease-packages --> + <!-- Note that unstable versions like 0.0.1 can be considered a released version, but it's possible that one can release a 0.0.1-beta before you release a 0.0.1 version. If the version number is final, that is considered a released version and not a prerelease. --> + <version>1.0.0</version> + <packageSourceUrl>https://github.com/KhaosCoders/choco-update-notifier</packageSourceUrl> + <!-- owners is a poor name for maintainers of the package. It sticks around by this name for compatibility reasons. It basically means you. --> + <owners>Khaos-Coders</owners> + <!-- ============================== --> + + <!-- == SOFTWARE SPECIFIC SECTION == --> + <!-- This section is about the software itself --> + <title>ChocoUpdateNotifier (Install) + Khaos-Coders + + https://github.com/KhaosCoders/choco-update-notifier + https://github.com/KhaosCoders/choco-update-notifier/raw/v1.0.0/src/ChocoUpdateNotifier/res/Icon.png?raw=true + 2020 ChocoUpdateNotifier Khaos-Coders + + https://raw.githubusercontent.com/KhaosCoders/choco-update-notifier/main/LICENSE + true + https://github.com/KhaosCoders/choco-update-notifier + + + + choco-update-notifier choco update notifier outdated packages + Automatically get a Windows10 notification if your Chocolatey packages are outdated + This tool notifies you after each logon into Windows10 about outdated Chocolatey packages. You can then choose to update all or just a selection of these packages. + 1.0.0: Initial Release + + + + + + + + + + + + + + + + diff --git a/package/tools/LICENSE.txt b/package/tools/LICENSE.txt new file mode 100644 index 0000000..b831cc9 --- /dev/null +++ b/package/tools/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 KhaosCoders + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/package/tools/VERIFICATION.txt b/package/tools/VERIFICATION.txt new file mode 100644 index 0000000..290261c --- /dev/null +++ b/package/tools/VERIFICATION.txt @@ -0,0 +1,6 @@ + +VERIFICATION +Verification is intended to assist the Chocolatey moderators and community +in verifying that this package's contents are trustworthy. + +If in doubt, download from https://github.com/KhaosCoders/choco-update-notifier/releases/ \ No newline at end of file diff --git a/package/tools/chocolateyinstall.ps1 b/package/tools/chocolateyinstall.ps1 new file mode 100644 index 0000000..5d40a75 --- /dev/null +++ b/package/tools/chocolateyinstall.ps1 @@ -0,0 +1,15 @@ +$ErrorActionPreference = 'Stop'; +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +$fileLocation = Join-Path $toolsDir 'ChocoUpdateNotifier.msi' + +$packageArgs = @{ + packageName = $env:ChocolateyPackageName + unzipLocation = $toolsDir + fileType = 'MSI' + file = $fileLocation + softwareName = 'choco-update-notifier*' + silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`"" + validExitCodes= @(0, 3010, 1641) +} + +Install-ChocolateyInstallPackage @packageArgs diff --git a/package/tools/chocolateyuninstall.ps1 b/package/tools/chocolateyuninstall.ps1 new file mode 100644 index 0000000..7ff5d36 --- /dev/null +++ b/package/tools/chocolateyuninstall.ps1 @@ -0,0 +1,33 @@ +$ErrorActionPreference = 'Stop'; +$packageArgs = @{ + packageName = $env:ChocolateyPackageName + softwareName = 'choco-update-notifier*' + fileType = 'MSI' + silentArgs = "/qn /norestart" + validExitCodes= @(0, 3010, 1605, 1614, 1641) +} + +$uninstalled = $false +[array]$key = Get-UninstallRegistryKey -SoftwareName $packageArgs['softwareName'] + +if ($key.Count -eq 1) { + $key | % { + $packageArgs['file'] = "$($_.UninstallString)" + + if ($packageArgs['fileType'] -eq 'MSI') { + $packageArgs['silentArgs'] = "$($_.PSChildName) $($packageArgs['silentArgs'])" + + $packageArgs['file'] = '' + } else { + } + + Uninstall-ChocolateyPackage @packageArgs + } +} elseif ($key.Count -eq 0) { + Write-Warning "$packageName has already been uninstalled by other means." +} elseif ($key.Count -gt 1) { + Write-Warning "$($key.Count) matches found!" + Write-Warning "To prevent accidental data loss, no programs will be uninstalled." + Write-Warning "Please alert package maintainer the following keys were matched:" + $key | % {Write-Warning "- $($_.DisplayName)"} +} \ No newline at end of file