Changelog generation
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,6 +3,10 @@
 | 
				
			|||||||
# eclipse
 | 
					# eclipse
 | 
				
			||||||
/eclipse
 | 
					/eclipse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# idea
 | 
				
			||||||
 | 
					.idea
 | 
				
			||||||
 | 
					*.iml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# gradle
 | 
					# gradle
 | 
				
			||||||
build
 | 
					build
 | 
				
			||||||
.gradle
 | 
					.gradle
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										109
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								build.gradle
									
									
									
									
									
								
							@@ -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
									
								
							
							
						
						
									
										7
									
								
								buildSrc/build.gradle
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					apply plugin: 'groovy'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dependencies {
 | 
				
			||||||
 | 
					    compile gradleApi()
 | 
				
			||||||
 | 
					    compile localGroovy()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										59
									
								
								buildSrc/src/main/groovy/kcauldron/CreateChangelog.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								buildSrc/src/main/groovy/kcauldron/CreateChangelog.groovy
									
									
									
									
									
										Normal 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);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user