3
0

Changelog generation

This commit is contained in:
Prototik 2015-06-01 17:29:21 +07:00
parent 9973a9f8e8
commit 939bb4b7da
4 changed files with 142 additions and 37 deletions

4
.gitignore vendored
View File

@ -3,6 +3,10 @@
# eclipse # eclipse
/eclipse /eclipse
# idea
.idea
*.iml
# gradle # gradle
build build
.gradle .gradle

View File

@ -1,4 +1,5 @@
import groovy.json.JsonSlurper import groovy.json.JsonSlurper
import kcauldron.CreateChangelog
buildscript { buildscript {
repositories { repositories {
@ -47,26 +48,48 @@ minecraft {
group = 'pw.prok' group = 'pw.prok'
def retrieveBuildNumber() { ext.buildInfoCached = null;
if (!project.hasProperty('officialBuild')) return 'UNOFFICIAL.' + retrieveGitHash(false)
new JsonSlurper().parse(new URL("https://prok.pw/version/${group}/${name}"))['nextBuildNumber'] def buildInfo(String key) {
if (!buildInfoCached) {
if (project.hasProperty('officialBuild')) {
buildInfoCached = new JsonSlurper().parse(new URL("https://prok.pw/version/${group}/${name}"))
} else {
buildInfoCached = [
nextBuildNumber: 'UNOFFICIAL.' + gitInfo('hash'),
version : 'NONE'
]
}
}
return key ? buildInfoCached[key] : buildInfoCached;
} }
def retrieveGitHash(full = true) { ext.gitInfoCached = null;
if (file('.git').exists())
return ['git', 'log', "--format=%${full?'H':'h'}", '-n', '1'].execute().text.trim()
return 'NOTGIT'
}
def retrieveGitBranch() { def gitInfo(String key) {
if (file('.git').exists()) if (!gitInfoCached) {
return ['git', 'symbolic-ref', '--short', 'HEAD'].execute().text.trim(); if (file('.git').exists()) {
return 'NOTGIT' gitInfoCached = [
hash : ['git', 'log', "--format=%h", '-n', '1'].execute().text.trim(),
fullHash: ['git', 'log', "--format=%H", '-n', '1'].execute().text.trim(),
branch : ['git', 'symbolic-ref', '--short', 'HEAD'].execute().text.trim(),
message : ['git', 'log', "--format=%B", '-n', '1'].execute().text.trim()
]
} else {
gitInfoCached = [
hash : 'NOT_A_GIT',
fullHash: 'NOT_A_GIT',
branch : 'NOT_A_GIT',
message : 'NOT_A_GIT'
]
}
}
return key ? gitInfoCached[key] : gitInfoCached;
} }
ext.mcVersion = "1.7.10" ext.mcVersion = "1.7.10"
ext.forgeVersion = "1420" ext.forgeVersion = "1420"
ext.revision = retrieveBuildNumber() ext.revision = buildInfo('nextBuildNumber')
version = "${mcVersion}-${forgeVersion}.${revision}" version = "${mcVersion}-${forgeVersion}.${revision}"
println "Updated KCauldron version: ${version}" println "Updated KCauldron version: ${version}"
@ -77,24 +100,35 @@ launch4j {
tasks.packageUniversal { tasks.packageUniversal {
classifier = 'server' classifier = 'server'
manifest.attributes([ manifest.attributes([
'KCauldron-Git-Branch': retrieveGitBranch(), 'KCauldron-Git-Branch' : gitInfo('branch'),
'KCauldron-Git-Hash': retrieveGitHash(), 'KCauldron-Git-Hash' : gitInfo('fullHash'),
'KCauldron-Version': project.version, 'KCauldron-Version' : project.version,
'Implementation-Vendor': 'Prototik', 'Implementation-Vendor' : 'Prototik',
'Implementationk-Title': 'KCauldron', 'Implementation-Title' : 'KCauldron',
'Implementation-Version': 'KCauldron-'+project.version, 'Implementation-Version': project.version,
'Forge-Version': '10.13.3.1420', 'Forge-Version' : '10.13.3.1420',
'Specification-Vendor': 'Bukkit Team', 'Specification-Vendor' : 'Bukkit Team',
'Specification-Title': 'Bukkit', 'Specification-Title' : 'Bukkit',
'Specification-Version': '1.7.10-R0.1-SNAPSHOT' 'Specification-Version' : '1.7.10-R0.1-SNAPSHOT'
]) ])
} }
tasks.createChangelog.onlyIf { false } tasks.createChangelog.onlyIf { false }
task packageChangelog(type: CreateChangelog) {
onlyIf { project.hasProperty('officialBuild') }
classifier = 'changelog'
extension = 'txt'
oldChangelogUrl = "https://prok.pw/repo/${project.group.replace('.','/')}/${project.name}/${buildInfo('version')}/${project.name}-${buildInfo('version')}-changelog.txt"
hash = gitInfo('hash')
message = gitInfo('message')
version = project.version
}
task signJars(type: Sign, dependsOn: [packageUniversal, packageInstaller]) { task signJars(type: Sign, dependsOn: [packageUniversal, packageInstaller]) {
sign packageInstaller sign packageInstaller
sign packageUniversal sign packageUniversal
sign packageChangelog
} }
task preparePublication(dependsOn: signJars) {} task preparePublication(dependsOn: signJars) {}
@ -103,9 +137,11 @@ def getSignatureFiles = {
def allFiles = project.tasks.signJars.signatureFiles.collect { it } def allFiles = project.tasks.signJars.signatureFiles.collect { it }
def signedServer = allFiles.find { it.name.contains('-server') } def signedServer = allFiles.find { it.name.contains('-server') }
def signedInstaller = allFiles.find { it.name.contains('-installer') } def signedInstaller = allFiles.find { it.name.contains('-installer') }
def signedChangelog = allFiles.find { it.name.contains('-changelog') }
return [ return [
[archive: signedServer, classifier: 'server', extension: 'jar.asc'], [archive: signedServer, classifier: 'server', extension: 'jar.asc'],
[archive: signedInstaller, classifier: 'installer', extension: 'jar.asc'] [archive: signedInstaller, classifier: 'installer', extension: 'jar.asc'],
[archive: signedChangelog, classifier: 'changelog', extension: 'txt.asc']
] ]
} }
@ -114,7 +150,7 @@ publishing {
maven { maven {
name 'ProK' name 'ProK'
url 'https://prok.pw/repo/' url 'https://prok.pw/repo/'
credentials { credentials {
username project.hasProperty('prokRepoUsername') ? prokRepoUsername : null username project.hasProperty('prokRepoUsername') ? prokRepoUsername : null
password project.hasProperty('prokRepoPassword') ? prokRepoPassword : null password project.hasProperty('prokRepoPassword') ? prokRepoPassword : null
} }
@ -122,24 +158,23 @@ publishing {
} }
publications { publications {
gpg(MavenPublication) { maven(MavenPublication) {
getSignatureFiles().each { signature -> getSignatureFiles().each { signature ->
artifact(signature.archive) { artifact(signature.archive) {
classifier = signature.classifier classifier = signature.classifier
extension = signature.extension extension = signature.extension
} }
} }
}
jar(MavenPublication) {
artifact packageUniversal artifact packageUniversal
artifact packageInstaller artifact packageInstaller
artifact packageChangelog
} }
} }
} }
tasks.generateProjectCauldron << { tasks.generateProjectCauldron << {
def file = new File('eclipse/cauldron/build.gradle') def file = new File('eclipse/cauldron/build.gradle')
file.append(''' file.append('''
repositories { repositories {
maven { maven {
url 'https://prok.pw/repo' url 'https://prok.pw/repo'
@ -153,20 +188,20 @@ dependencies {
} }
configurations { configurations {
compile.extendsFrom exported compile.extendsFrom exported
} }
repositories { repositories {
maven { maven {
url 'https://prok.pw/repo' url 'https://prok.pw/repo'
} }
} }
dependencies { dependencies {
exported 'pw.prok:KImagine:+@jar' exported 'pw.prok:KImagine:+@jar'
exported 'org.apache.httpcomponents:httpclient:4.4.1' exported 'org.apache.httpcomponents:httpclient:4.4.1'
} }
packageUniversal { packageUniversal {
from { configurations.exported.collect { it.isDirectory() ? it : zipTree(it) } } from { configurations.exported.collect { it.isDirectory() ? it : zipTree(it) } }
} }

7
buildSrc/build.gradle Normal file
View File

@ -0,0 +1,7 @@
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}

View File

@ -0,0 +1,59 @@
package kcauldron
import org.gradle.api.GradleException
import org.gradle.api.GradleScriptException
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.file.copy.CopyAction
import org.gradle.api.internal.file.copy.CopyActionProcessingStream
import org.gradle.api.internal.tasks.SimpleWorkResult
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.SkipWhenEmpty
import org.gradle.api.tasks.WorkResult
import org.gradle.api.tasks.bundling.AbstractArchiveTask
public class CreateChangelog extends AbstractArchiveTask {
@Input
def String oldChangelogUrl
@Input
def String hash
@Input
def String message
@Input
def String version
@Input
def String format = "# <version>: <hash>\n<message>\n\n"
@Override
FileCollection getSource() {
return project.files(project.buildDir)
}
@Override
protected CopyAction createCopyAction() {
return new CopyAction() {
@Override
WorkResult execute(CopyActionProcessingStream stream) {
def oldChangelog;
try {
oldChangelog = new URL(oldChangelogUrl).text.trim();
} catch (Exception e) {
if (!project.hasProperty('ignoreOldChangelog'))
throw new GradleException('Error occurred during fetching latest log', e)
oldChangelog = ''
e.printStackTrace();
}
try {
def newMessage = '';
message.eachLine { newMessage += ' ' + it + '\n' }
def append = format.replace('<version>', version).replace('<hash>', hash).replace('<message>', message)
def changelog = append + oldChangelog;
archivePath.write(changelog.trim(), 'utf-8')
return new SimpleWorkResult(true);
} catch(Exception e) {
e.printStackTrace();
return new SimpleWorkResult(false);
}
}
}
}
}