Files
jreleaser.github.io/docs/modules/configuration/pages/packagers/chocolatey.adoc
2021-04-22 19:38:29 +02:00

509 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
= Chocolatey
Publishes packages to link:https://chocolatey.org[].
NOTE: At the moment, only artifacts with `.zip` extension may be packaged with Chocolatey.
WARNING: Local publication of packages is currently not supported. Please set `remoteBuild` to `true` and trigger a
build on CI. Local publication will be added at a later release.
WARNING: Snapshots are *not* supported.
include::partial$legend.adoc[]
[tabs]
====
YAML::
+
[source,yaml]
[subs="+macros"]
----
# icon:dot-circle[]
packagers:
# icon:dot-circle[]
chocolatey:
# Enables or disables Chocolatey.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active: ALWAYS
# Directory with file templates used to prepare the Chocolatey distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory: path/to/chocolatey/templates
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties:
# Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
foo: bar
# The username that can publish Chocolatey packages.
# If left unspecified, the release owner will be used.
# icon:exclamation-triangle[]
username: duke
# Whether to build the package on a remote server or locally.
# Defaults to `false`.
# icon:dot-circle[]
remoteBuild: false
# Git author used to commit to the bucket repository.
# icon:dot-circle[]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# icon:dot-circle[]
name: jreleaserbot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# icon:dot-circle[]
email: pass:[jreleaser@kordamp.org]
# Git repository to push the manifest to.
# Defaults are shown.
# icon:dot-circle[]
bucket:
# The owner of the bucket repository.
# Defaults to the same owner as the release repository.
# icon:dot-circle[]
owner: duke
# The name of the bucket repository.
# Defaults to `chocolatey-bucket`.
# icon:dot-circle[]
name: chocolatey-bucket
# Username used for authoring commits. Must have write access to the bucket repository.
# Defaults to the same username as the release repository.
# icon:dot-circle[]
username: duke
# Password or OAuth token with write access to the bucket repository.
# If left unspecified, the `JRELEASER_CHOCOLATEY_${GIT}_TOKEN`
# environment variable must be defined.
# icon:dot-circle[] icon:eye-slash[]
token: __DO_NOT_SET_HERE__
----
TOML::
+
[source,toml]
[subs="+macros"]
----
# icon:dot-circle[]
[packagers.chocolatey]
# Enables or disables Chocolatey.
# Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
# Defaults to `NEVER`.
# icon:dot-circle[]
active = "ALWAYS"
# Directory with file templates used to prepare the Chocolatey distribution.
# Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
# If specified, path must exist.
# icon:dot-circle[]
templateDirectory = "path/to/chocolatey/templates"
# Additional properties used when evaluating templates.
# icon:dot-circle[]
extraProperties.foo = "bar"
# Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
# The username that can publish Chocolatey packages.
# If left unspecified, the release owner will be used.
# icon:exclamation-triangle[]
username = "duke"
# Whether to build the package on a remote server or locally.
# Defaults to `false`.
# icon:dot-circle[]
remoteBuild = false
# Git author used to commit to the bucket repository.
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# icon:dot-circle[]
commitAuthor.name = "jreleaserbot"
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# icon:dot-circle[]
commitAuthor.email = "pass:[jreleaser@kordamp.org]"
# Git repository to push the manifest to.
# Defaults are shown.
# The owner of the bucket repository.
# Defaults to the same owner as the release repository.
# icon:dot-circle[]
bucket.owner = "duke"
# The name of the bucket repository.
# Defaults to `chocolatey-bucket`.
# icon:dot-circle[]
bucket.name = "chocolatey-bucket"
# Username used for authoring commits. Must have write access to the bucket repository.
# Defaults to the same username as the release repository.
# icon:dot-circle[]
bucket.username = "duke"
# Password or OAuth token with write access to the bucket repository.
# If left unspecified, the `JRELEASER_CHOCOLATEY_${GIT}_TOKEN`
# environment variable must be defined.
# icon:dot-circle[] icon:eye-slash[]
bucket.token = "__DO_NOT_SET_HERE__"
----
JSON::
+
[source,json]
[subs="+macros"]
----
{
// icon:dot-circle[]
"packagers": {
// icon:dot-circle[]
"chocolatey": {
// Enables or disables Chocolatey.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
"active": "ALWAYS",
// Directory with file templates used to prepare the Chocolatey distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
// If specified, path must exist.
// icon:dot-circle[]
"templateDirectory": "path/to/chocolatey/templates",
// Additional properties used when evaluating templates.
// icon:dot-circle[]
"extraProperties": {
// Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
"foo": "bar"
},
// The username that can publish Chocolatey packages.
// If left unspecified, the release owner will be used.
// icon:exclamation-triangle[]
"username": "duke",
// Whether to build the package on a remote server or locally.
// Defaults to `false`.
// icon:dot-circle[]
"remoteBuild": false,
// Git author used to commit to the bucket repository.
// icon:dot-circle[]
"commitAuthor": {
// Name used when authoring commits.
// Defaults to `jreleaserbot`.
// icon:dot-circle[]
"name": "jreleaserbot",
// E-mail used when authoring commits.
// Defaults to `pass:[jreleaser@kordamp.org]`.
// icon:dot-circle[]
"email": "pass:[jreleaser@kordamp.org]"
},
// Git repository to push the manifest to.
// Defaults are shown.
// icon:dot-circle[]
"bucket": {
// The owner of the bucket repository.
// Defaults to the same owner as the release repository.
// icon:dot-circle[]
"owner": "duke",
// The name of the bucket repository.
// Defaults to `chocolatey-bucket`.
// icon:dot-circle[]
"name": "chocolatey-bucket",
// Username used for authoring commits. Must have write access to the bucket repository.
// Defaults to the same username as the release repository.
// icon:dot-circle[]
"username": "duke",
// Password or OAuth token with write access to the bucket repository.
// If left unspecified, the `JRELEASER_CHOCOLATEY_${GIT}_TOKEN`
// environment variable must be defined.
// icon:dot-circle[] icon:eye-slash[]
"token": "__DO_NOT_SET_HERE__"
}
}
}
}
----
Maven::
+
[source,xml]
[subs="+macros,verbatim"]
----
<jreleaser>
<!--
icon:dot-circle[]
-->
<packagers>
<!--
icon:dot-circle[]
-->
<chocolatey>
<!--
Enables or disables Chocolatey.
Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
Defaults to `NEVER`.
icon:dot-circle[]
-->
<active>ALWAYS</active>
<!--
Directory with file templates used to prepare the Chocolatey distribution.
Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
If specified, path must exist.
icon:dot-circle[]
-->
<templateDirectory>>path/to/chocolatey/templates</templateDirectory>
<!--
Additional properties used when evaluating templates.
icon:dot-circle[]
-->
<extraProperties>
<!--
Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
-->
<foo>bar</foo>
</extraProperties>
<!--
The username that can publish Chocolatey packages.
If left unspecified, the release owner will be used.
icon:exclamation-triangle[]
-->
<username>duke</username>
<!--
Whether to build the package on a remote server or locally.
Defaults to `false`.
icon:dot-circle[]
-->
<remoteBuild>false</remoteBuild>
<!--
Git author used to commit to the repository.
icon:dot-circle[]
-->
<commitAuthor>
<!--
Name used when authoring commits.
Defaults to `jreleaserbot`.
icon:dot-circle[]
-->
<name>jreleaserbot</name>
<!--
E-mail used when authoring commits.
Defaults to `pass:[jreleaser@kordamp.org]`.
icon:dot-circle[]
-->
<email>pass:[jreleaser@kordamp.org]</email>
</commitAuthor>
<!--
Git repository to push the manifest to.
Defaults are shown.
icon:dot-circle[]
-->
<bucket>
<!--
The owner of the bucket repository.
Defaults to the same owner as the release repository.
icon:dot-circle[]
-->
<owner>duke</owner>
<!--
The name of the bucket repository.
Defaults to `chocolatey-bucket`.
icon:dot-circle[]
-->
<name>chocolatey-bucket</name>
<!--
Username used for authoring commits. Must have write access to the bucket repository.
Defaults to the same username as the release repository.
icon:dot-circle[]
-->
<username>duke</username>
<!--
Password or OAuth token with write access to the bucket repository.
If left unspecified, the `JRELEASER_CHOCOLATEY_${GIT}_TOKEN`
environment variable must be defined.
icon:dot-circle[] icon:eye-slash[]
-->
<token>__DO_NOT_SET_HERE__</token>
</bucket>
</chocolatey>
</packagers>
</jreleaser>
----
Gradle::
+
[source,groovy]
[subs="+macros"]
----
jreleaser {
// icon:dot-circle[]
packagers {
// icon:dot-circle[]
chocolatey {
// Enables or disables Chocolatey.
// Valid values are [`NEVER`, `ALWAYS`, `RELEASE`, `SNAPSHOT`].
// Defaults to `NEVER`.
// icon:dot-circle[]
active = 'ALWAYS'
// Directory with file templates used to prepare the Chocolatey distribution.
// Defaults to `src/jreleaser/distributions/${distribution.name}/chocolatey`.
// If specified, path must exist.
// icon:dot-circle[]
templateDirectory = 'path/to/chocolatey/templates'
// Additional properties used when evaluating templates.
// Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
// icon:dot-circle[]
extraProperties.put('foo', 'bar')
// The username that can publish Chocolatey packages.
// If left unspecified, the release owner will be used.
// icon:exclamation-triangle[]
username = 'duke'
// Whether to build the package on a remote server or locally.
// Defaults to `false`.
// icon:dot-circle[]
remoteBuild = false
// Git author used to commit to the bucket repository.
// icon:dot-circle[]
commitAuthor {
// Name used when authoring commits.
// If left undefined, will use the releaser's commit name.
// icon:dot-circle[]
name = 'jreleaserbot'
// E-mail used when authoring commits.
// If left undefined, will use the releaser's commit email.
// icon:dot-circle[]
email = 'pass:[jreleaser@kordamp.org]'
}
// Git repository to push the manifest to.
// Defaults are shown.
// icon:dot-circle[]
bucket {
// The owner of the bucket repository.
// Defaults to the same owner as the release repository.
// icon:dot-circle[]
owner = 'duke'
// The name of the bucket repository.
// Defaults to `chocolatey-bucket`.
// icon:dot-circle[]
name = 'chocolatey-bucket'
// Username used for authoring commits. Must have write access to the bucket repository.
// Defaults to the same username as the release repository.
// icon:dot-circle[]
username = 'duke'
// Password or OAuth token with write access to the bucket repository.
// If left unspecified, the `JRELEASER_CHOCOLATEY_${GIT}_TOKEN`
// environment variable must be defined.
// icon:dot-circle[] icon:eye-slash[]
token = '__DO_NOT_SET_HERE__'
}
}
}
}
----
====
Template files may be initialized using the `template` command.
NOTE: The bucket token environment variable must match with the chosen xref:release/index.adoc[] service, that is, it must
be one of [`JRELEASER_CHOCOLATEY_GITHUB_TOKEN`, `JRELEASER_CHOCOLATEY_GITLAB_TOKEN`, `JRELEASER_CHOCOLATEY_GITEA_TOKEN`].
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
the following files in `out/jreleaser/app/prepare`, which will be published to `duke/chocolatey-bucket/app`
[source,xml]
[subs="verbatim"]
.app.nuspec
----
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesnt 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>
<!-- required -->
<id>app</id>
<version>1.2.3</version>
<authors>Duke</authors>
<description>Sample app</description>
<!-- optional -->
<title>app</title>
<projectUrl>https://acme.com/app</projectUrl>
<license type="expression">Apache-2.0</license>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<tags></tags>
<summary>Sample app</summary>
<releaseNotes>https://github.com/duke/app/releases/tag/v1.2.3</releaseNotes>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>
----
[source]
.tools/chocolateyinstall.ps1
----
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'
Install-ChocolateyZipPackage `
-PackageName 'app' `
-Url 'https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip' `
-Checksum '812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466' `
-ChecksumType 'sha256' `
-UnzipLocation $package
Install-BinFile -Name 'app' -Path $app_bat
----
[source]
.tools/chocolateyuninstall.ps1
----
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'
Uninstall-BinFile -Name 'app' -Path $app_bat
----