A Gradle Plugin to send Releases to Github
This plugin is not endorsed by Github.
This plugin uses OkHttp to send a POST requests to the github api that creates a release and uploads specified assets.
If you are using multiple GithubRelease tasks to compose a single release, the release must be published draft=false
with the first task. Currently, the plugin cannot find an existing release if it is a draft.
Some version numbers are skipped because of issues with the gradle plugin portal.
2.5.2
2.5.1
2.5
2.4.1
generateReleaseNotes: true
. If a name is not provided one will be generated. If a body is provided it will be pre-pended to the auto generated notes. Fixes #51.2.3.7
false
and running the task with an existing release will now publish the release if it is a draft. If already published, will error with RELEASE ALREADY EXISTS
false
, task will now first create the release with draft set to true
, upload assets, and then update the release with draft set to false
, publishing it. Addressing #28. Does not work if steps are split up into separate tasks2.2.12
client
.2.2.11
dryRun
property. You can set this to true
to show run the task without actually modifying anything.2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
apiEndpoint
2.2.5
2.2.4
implementation
to compile
as per #112.2.3
2.2.2
allowUploadToExisting
2.2.1
2.2.0
overwrite = true
Using the plugins DSL:
plugins {
id "com.github.breadmoirai.github-release" version "2.4.1"
}
Using legacy plugin application:
buildscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath "com.github.breadmoirai:github-release:2.4.1"
}
}
apply plugin: "com.github.breadmoirai.github-release"
githubRelease {
token "<your token>" // This is your personal access token with Repo permissions
// You get this from your user settings > developer settings > Personal Access Tokens
owner "breadmoirai" // default is the last part of your group. Eg group: "com.github.breadmoirai" => owner: "breadmoirai"
repo "github-release" // by default this is set to your project name
tagName "v1.0.0" // by default this is set to "v${project.version}"
targetCommitish "main" // by default this is set to "main"
releaseName "v1.0.0" // Release title, by default this is the same as the tagName
generateReleaseNotes false // Generate release notes automatically, if true and body is present, body will be prepended, if name is not given, one will be generated by the tag
body "" // by default this is empty
draft true // by default this is true
prerelease false // by default this is false
releaseAssets jar.destinationDir.listFiles // this points to which files you want to upload as assets with your release, by default this is empty
allowUploadToExisting.set false // Setting this to true will allow this plugin to upload artifacts to a release if it found an existing one. If overwrite is set to true, this option is ignored.
overwrite false // by default false; if set to true, will delete an existing release with the same tag and name
dryRun false // by default false; you can use this to see what actions would be taken without making a release
apiEndpoint "https://api.github.com" // should only change for github enterprise users
client // This is the okhttp client used for http requests
}
View more information on each field at the WIKI
For additional info on these fields please see the Github API specification.
You can use a provider with a closure to defer evaluation.
body provider({
//do something intensive
return "wow"
})
This plugin also provides a way to retrieve a list of commits since your last release. This uses the commandline to call git
body provider(changelog())
// or
body provider { """\
## CHANGELOG
${changelog().call()}
""" }
The changelog can be modified as follows
body provider(changelog {
currentCommit "HEAD"
lastCommit "HEAD~10"
options(["--format=oneline", "--abbrev-commit", "--max-count=50", "graph"])
})
You can also apply string operations to the result.
body provider({ """\
# Info
...
## ChangeLog
${changelog().call().replace('\n', '\n* ')}
""" })
You can store your token in a gradle.properties located in either USER/.gradle
or in the project directory and then retrieve it with getProperty('github.token')
You can avoid removing irrelevant files from your selected directory each time you publish a release by using a filter. For Example
FilenameFilter filter = { dir, filename -> filename.contains(project.version) }
releaseAssets jar.destinationDir.asFileTree.listFiles filter
// or
releaseAssets jar.archiveFile