Peter Mounce | a27949e | 2016-09-26 15:58:53 +0000 | [diff] [blame] | 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 | |
| 60 | ### Environment Variables |
| 61 | Chocolatey makes a number of environment variables available (You can access any of these with $env:TheVariableNameBelow): |
| 62 | |
| 63 | * TEMP = Overridden to the CacheLocation, but may be the same as the original TEMP folder |
| 64 | * ChocolateyInstall = Top level folder where Chocolatey is installed |
| 65 | * chocolateyPackageName = The name of the package, equivalent to the id in the nuspec (0.9.9+) |
| 66 | * chocolateyPackageVersion = The version of the package, equivalent to the version in the nuspec (0.9.9+) |
| 67 | * chocolateyPackageFolder = The top level location of the package folder |
| 68 | |
| 69 | #### Advanced Environment Variables |
| 70 | The following are more advanced settings: |
| 71 | |
| 72 | * chocolateyPackageParameters = (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+) |
| 74 | - Otherwise take a dependency on the specific version you need. |
| 75 | * chocolateyForceX86 = If available and set to 'true', then user has requested 32bit version. (0.9.9+) |
| 76 | - Automatically handled in built in Choco functions. |
| 77 | * OS_PLATFORM = Like Windows, OSX, Linux. (0.9.9+) |
| 78 | * OS_VERSION = The version of OS, like 6.1 something something for Windows. (0.9.9+) |
| 79 | * OS_NAME = The reported name of the OS. (0.9.9+) |
| 80 | * IS_PROCESSELEVATED = Is the process elevated? (0.9.9+) |
| 81 | |
| 82 | #### Experimental Environment Variables |
| 83 | The following are experimental or use not recommended: |
| 84 | |
| 85 | * OS_IS64BIT = This may not return correctly - it may depend on the process the app is running under (0.9.9+) |
| 86 | * CHOCOLATEY_VERSION_PRODUCT = the version of Choco that may match CHOCOLATEY_VERSION but may be different (0.9.9+) |
| 87 | - it's based on git describe |
| 88 | * IS_ADMIN = Is the user an administrator? But doesn't tell you if the process is elevated. (0.9.9+) |
| 89 | * chocolateyInstallOverride = Not for use in package automation scripts. (0.9.9+) |
| 90 | * chocolateyInstallArguments = the installer arguments meant for the native installer. You should use chocolateyPackageParameters intead. (0.9.9+) |
| 91 | |