|
| 1 | +## Summary |
| 2 | +How do I create packages? See https://chocolatey.org/docs/create-packages |
| 3 | + |
| 4 | +If you are submitting packages to the community feed (https://chocolatey.org) |
| 5 | +always try to ensure you have read, understood and adhere to the create |
| 6 | +packages wiki link above. |
| 7 | + |
| 8 | +## Automatic Packaging Updates? |
| 9 | +Consider making this package an automatic package, for the best |
| 10 | +maintainability over time. Read up at https://chocolatey.org/docs/automatic-packages |
| 11 | + |
| 12 | +## Shim Generation |
| 13 | +Any executables you include in the package or download (but don't call |
| 14 | +install against using the built-in functions) will be automatically shimmed. |
| 15 | + |
| 16 | +This means those executables will automatically be included on the path. |
| 17 | +Shim generation runs whether the package is self-contained or uses automation |
| 18 | +scripts. |
| 19 | + |
| 20 | +By default, these are considered console applications. |
| 21 | + |
| 22 | +If the application is a GUI, you should create an empty file next to the exe |
| 23 | +named 'name.exe.gui' e.g. 'bob.exe' would need a file named 'bob.exe.gui'. |
| 24 | +See https://chocolatey.org/docs/create-packages#how-do-i-set-up-shims-for-applications-that-have-a-gui |
| 25 | + |
| 26 | +If you want to ignore the executable, create an empty file next to the exe |
| 27 | +named 'name.exe.ignore' e.g. 'bob.exe' would need a file named |
| 28 | +'bob.exe.ignore'. |
| 29 | +See https://chocolatey.org/docs/create-packages#how-do-i-exclude-executables-from-getting-shims |
| 30 | + |
| 31 | +## Self-Contained? |
| 32 | +If you have a self-contained package, you can remove the automation scripts |
| 33 | +entirely and just include the executables, they will automatically get shimmed, |
| 34 | +which puts them on the path. Ensure you have the legal right to distribute |
| 35 | +the application though. See https://chocolatey.org/docs/legal. |
| 36 | + |
| 37 | +You should read up on the Shim Generation section to familiarize yourself |
| 38 | +on what to do with GUI applications and/or ignoring shims. |
| 39 | + |
| 40 | +## Automation Scripts |
| 41 | +You have a powerful use of Chocolatey, as you are using PowerShell. So you |
| 42 | +can do just about anything you need. Choco has some very handy built-in |
| 43 | +functions that you can use, these are sometimes called the helpers. |
| 44 | + |
| 45 | +### Built-In Functions |
| 46 | +https://chocolatey.org/docs/helpers-reference |
| 47 | + |
| 48 | +A note about a couple: |
| 49 | +* 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 |
| 50 | +* Install-BinFile - used for non-exe files - executables are automatically shimmed... - see https://chocolatey.org/docs/helpers-install-bin-file |
| 51 | +* Uninstall-BinFile - used for non-exe files - executables are automatically shimmed - see https://chocolatey.org/docs/helpers-uninstall-bin-file |
| 52 | + |
| 53 | +### Getting package specific information |
| 54 | +Use the package parameters pattern - see https://chocolatey.org/docs/how-to-parse-package-parameters-argument |
| 55 | + |
| 56 | +### Need to mount an ISO? |
| 57 | +https://chocolatey.org/docs/how-to-mount-an-iso-in-chocolatey-package |
| 58 | + |
| 59 | +### Environment Variables |
| 60 | +Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow): |
| 61 | + |
| 62 | + * TEMP/TMP - Overridden to the CacheLocation, but may be the same as the original TEMP folder |
| 63 | + * ChocolateyInstall - Top level folder where Chocolatey is installed |
| 64 | + * ChocolateyPackageName - The name of the package, equivalent to the `<id />` field in the nuspec (0.9.9+) |
| 65 | + * ChocolateyPackageTitle - The title of the package, equivalent to the `<title />` field in the nuspec (0.10.1+) |
| 66 | + * ChocolateyPackageVersion - The version of the package, equivalent to the `<version />` field in the nuspec (0.9.9+) |
| 67 | + * 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`. |
| 68 | + |
| 69 | +#### Advanced Environment Variables |
| 70 | +The following are more advanced settings: |
| 71 | + |
| 72 | + * 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+) |
| 73 | + * 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. |
| 74 | + * ChocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. (0.9.9+) - Automatically handled in built in Choco functions. |
| 75 | + * OS_PLATFORM - Like Windows, OSX, Linux. (0.9.9+) |
| 76 | + * OS_VERSION - The version of OS, like 6.1 something something for Windows. (0.9.9+) |
| 77 | + * OS_NAME - The reported name of the OS. (0.9.9+) |
| 78 | + * USER_NAME = The user name (0.10.6+) |
| 79 | + * USER_DOMAIN = The user domain name (could also be local computer name) (0.10.6+) |
| 80 | + * IS_PROCESSELEVATED = Is the process elevated? (0.9.9+) |
| 81 | + * IS_SYSTEM = Is the user the system account? (0.10.6+) |
| 82 | + * IS_REMOTEDESKTOP = Is the user in a terminal services session? (0.10.6+) |
| 83 | + * 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+) |
| 84 | + |
| 85 | +#### Set By Options and Configuration |
| 86 | +Some environment variables are set based on options that are passed, configuration and/or features that are turned on: |
| 87 | + |
| 88 | + * 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+) |
| 89 | + * 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+) |
| 90 | + * ChocolateyForce - Was `--force` passed? (0.9.10+) |
| 91 | + * ChocolateyForceX86 - Was `-x86` passed? (CHECK) |
| 92 | + * ChocolateyRequestTimeout - How long before a web request will time out. Set by config `webRequestTimeoutSeconds` (CHECK) |
| 93 | + * ChocolateyResponseTimeout - How long to wait for a download to complete? Set by config `commandExecutionTimeoutSeconds` (CHECK) |
| 94 | + * ChocolateyPowerShellHost - Are we using the built-in PowerShell host? Set by `--use-system-powershell` or the feature `powershellHost` (0.9.10+) |
| 95 | + |
| 96 | +#### Business Edition Variables |
| 97 | + |
| 98 | + * ChocolateyInstallArgumentsSensitive - Encrypted arguments passed from command line `--install-arguments-sensitive` that are not logged anywhere. (0.10.1+ and licensed editions 1.6.0+) |
| 99 | + * ChocolateyPackageParametersSensitive - Package parameters passed from command line `--package-parameters-senstivite` that are not logged anywhere. (0.10.1+ and licensed editions 1.6.0+) |
| 100 | + * ChocolateyLicensedVersion - What version is the licensed edition on? |
| 101 | + * ChocolateyLicenseType - What edition / type of the licensed edition is installed? |
| 102 | + * USER_CONTEXT - The original user context - different when self-service is used (Licensed v1.10.0+) |
| 103 | + |
| 104 | +#### Experimental Environment Variables |
| 105 | +The following are experimental or use not recommended: |
| 106 | + |
| 107 | + * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under (0.9.9+) |
| 108 | + * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different (0.9.9+) - based on git describe |
| 109 | + * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. (0.9.9+) |
| 110 | + * IS_REMOTE = Is the user in a remote session? (0.10.6+) |
| 111 | + |
| 112 | +#### Not Useful Or Anti-Pattern If Used |
| 113 | + |
| 114 | + * ChocolateyInstallOverride = Not for use in package automation scripts. Based on `--override-arguments` being passed. (0.9.9+) |
| 115 | + * ChocolateyInstallArguments = The installer arguments meant for the native installer. You should use chocolateyPackageParameters instead. Based on `--install-arguments` being passed. (0.9.9+) |
| 116 | + * ChocolateyIgnoreChecksums - Was `--ignore-checksums` passed or the feature `checksumFiles` turned off? (0.9.9.9+) |
| 117 | + * ChocolateyAllowEmptyChecksums - Was `--allow-empty-checksums` passed or the feature `allowEmptyChecksums` turned on? (0.10.0+) |
| 118 | + * ChocolateyAllowEmptyChecksumsSecure - Was `--allow-empty-checksums-secure` passed or the feature `allowEmptyChecksumsSecure` turned on? (0.10.0+) |
| 119 | + * ChocolateyCheckLastExitCode - Should Chocolatey check LASTEXITCODE? Is the feature `scriptsCheckLastExitCode` turned on? (0.10.3+) |
| 120 | + * ChocolateyChecksum32 - Was `--download-checksum` passed? (0.10.0+) |
| 121 | + * ChocolateyChecksumType32 - Was `--download-checksum-type` passed? (0.10.0+) |
| 122 | + * ChocolateyChecksum64 - Was `--download-checksum-x64` passed? (0.10.0)+ |
| 123 | + * ChocolateyChecksumType64 - Was `--download-checksum-type-x64` passed? (0.10.0)+ |
| 124 | + * ChocolateyPackageExitCode - The exit code of the script that just ran - usually set by `Set-PowerShellExitCode` (CHECK) |
| 125 | + * ChocolateyLastPathUpdate - Set by Chocolatey as part of install, but not used for anything in particular in packaging. |
| 126 | + * ChocolateyProxyLocation - The explicit proxy location as set in the configuration `proxy` (0.9.9.9+) |
| 127 | + * 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+) |
| 128 | + * ChocolateyProxyBypassList - Explicitly set locations to ignore in configuration `proxyBypassList` (0.10.4+) |
| 129 | + * ChocolateyProxyBypassOnLocal - Should the proxy bypass on local connections? Set based on configuration `proxyBypassOnLocal` (0.10.4+) |
| 130 | + * http_proxy - Set by original `http_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. (0.10.4+) |
| 131 | + * https_proxy - Set by original `https_proxy` passthrough, or same as `ChocolateyProxyLocation` if explicitly set. (0.10.4+) |
| 132 | + * no_proxy- Set by original `no_proxy` passthrough, or same as `ChocolateyProxyBypassList` if explicitly set. (0.10.4+) |
| 133 | + |
0 commit comments