-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathrelease.gradle
104 lines (94 loc) · 3.58 KB
/
release.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
apply from: 'https://raw.githubusercontent.com/OnyxStudios/Gradle-Scripts/master/scripts/fabric/publish/changelog.gradle'
task checkGitStatus() {
group = 'publishing'
description = 'Checks that the git repository is in a state suitable for release'
doLast {
if (grgit == null) throw new RuntimeException('No git repository')
if (!grgit.status().isClean()) {
throw new RuntimeException("Git repository not ready for release (${grgit.status()})")
}
def currentBranch = grgit.branch.current().getName()
if (currentBranch != 'main' && !currentBranch.matches(/\d\.\d{2}/)) {
throw new RuntimeException("Need to be on main or a dedicated version branch to release (currently on ${currentBranch})")
}
grgit.fetch()
if (grgit.tag.list().any { it.name == project.version }) {
throw new RuntimeException("A tag already exists for ${project.version}")
}
def status = grgit.branch.status(name: currentBranch)
if (status.aheadCount != 0) {
throw new RuntimeException('Some commits have not been pushed')
}
if (status.behindCount != 0) {
throw new RuntimeException('Some commits have not been pulled')
}
}
}
githubRelease {
token "${findProperty('github_releases_token')}"
// default owner: last component of maven group
// default repo: name of the project
tagName = project.version
targetCommitish = { grgit.branch.current().name }
body = { project.getChangelogText() }
FilenameFilter filter = { dir, filename -> filename.contains(project.version) && !filename.contains('-dev.jar') }
releaseAssets = { jar.destinationDirectory.asFile.get().listFiles filter }
}
tasks.githubRelease.dependsOn(checkGitStatus)
artifactory {
if (project.hasProperty("artifactory_user")) {
contextUrl = "https://ladysnake.jfrog.io/artifactory/"
publish {
repository {
repoKey = "mods"
username = artifactory_user
password = artifactory_api_key
}
defaults {
publications("mavenJava")
publishArtifacts = true
publishPom = true
}
}
} else {
println "Cannot configure artifactory; please define ext.artifactory_user and ext.artifactory_api_key before running artifactoryPublish"
}
}
artifactoryPublish.dependsOn(checkGitStatus)
artifactoryPublish.dependsOn build
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
// add all the jars that should be included when publishing to maven
artifact(remapJar) {
classifier null
builtBy remapJar
}
artifact(proguard) {
classifier 'optimized'
builtBy proguard
}
artifact(sourcesJar) {
builtBy remapSourcesJar
}
pom {
name = project.mod_name
licenses {
license {
name = 'GNU Lesser General Public License 3.0'
url = 'https://www.gnu.org/licenses/lgpl-3.0.html'
}
}
}
}
}
// select the repositories you want to publish to
repositories {
mavenLocal()
}
}
task release(dependsOn: [tasks.publish, tasks.githubRelease, tasks.artifactoryPublish]) {
group = 'publishing'
description = 'Releases a new version to Maven and Github'
}