Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,9 @@ def mainReleaseName = "Mineralogy-${project.version}.jar"
def sourcesReleaseName = "Mineralogy-${project.version}-sources.jar"
def javadocReleaseName = "Mineralogy-${project.version}-javadoc.jar"
def expectedReleaseNames = [mainReleaseName, sourcesReleaseName, javadocReleaseName]
def expectedMavenGroup = 'zone.moddev.mc.mineralogy'
def expectedMavenArtifact = 'Mineralogy'
def expectedMavenCoordinate = "${expectedMavenGroup}:${expectedMavenArtifact}:${project.version}"
def preparedReleaseDir = project.findProperty('preparedReleaseDir')
def mavenUploadUrl = System.getenv('MAVEN_UPLOAD_URL') ?: 'https://invalid.invalid/missing-maven-upload-url'
def mavenUploadUsername = System.getenv('MAVEN_UPLOAD_USERNAME') ?: ''
Expand All @@ -272,7 +275,7 @@ publishing {
publications {
mavenJava(MavenPublication) {
groupId = project.group
artifactId = 'Mineralogy'
artifactId = expectedMavenArtifact
version = project.version
if (preparedReleaseDir != null) {
artifact new File(preparedReleaseDir.toString(), mainReleaseName)
Expand Down Expand Up @@ -311,11 +314,30 @@ publishing {
}
}

tasks.register('verifyMavenCoordinates') {
group = 'verification'
description = 'Verifies the generated POM uses Mineralogy\'s mod-specific Maven namespace.'
dependsOn tasks.named('generatePomFileForMavenJavaPublication')
doLast {
File pomFile = file("${buildDir}/publications/mavenJava/pom-default.xml")
if (!pomFile.isFile()) {
throw new GradleException("Generated Maven POM does not exist: ${pomFile}")
}
def pom = new XmlSlurper(false, false).parse(pomFile)
def actual = [pom.groupId.text(), pom.artifactId.text(), pom.version.text()]
def expected = [expectedMavenGroup, expectedMavenArtifact, project.version.toString()]
if (project.group.toString() != expectedMavenGroup || actual != expected) {
throw new GradleException("Expected Maven coordinate ${expected.join(':')}, found ${actual.join(':')}")
}
}
}

tasks.register('verifyReleaseConfiguration') {
group = 'verification'
description = 'Verifies the exact Mineralogy 1.15 release identity.'
doLast {
if (project.mod_version != '6.0.1.115021'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.15.2'
|| project.forge_version != '31.2.57'
|| project.mcp_mappings_channel != 'snapshot'
Expand Down Expand Up @@ -399,6 +421,19 @@ tasks.register('verifyReleaseArtifacts') {
].each { required ->
if (!names.contains(required)) throw new GradleException("Release jar is missing ${required}")
}
def manifestEntry = zip.getEntry('META-INF/MANIFEST.MF')
if (manifestEntry == null) throw new GradleException('Release jar is missing META-INF/MANIFEST.MF')
def manifestStream = zip.getInputStream(manifestEntry)
try {
def manifest = new java.util.jar.Manifest(manifestStream)
def actualMavenCoordinate = manifest.mainAttributes.getValue('Maven-Artifact')
if (actualMavenCoordinate != expectedMavenCoordinate) {
throw new GradleException("Expected manifest Maven-Artifact ${expectedMavenCoordinate}, found ${actualMavenCoordinate}")
}
}
finally {
manifestStream.close()
}
if (names.any { it.startsWith('com/mcmoddev/mineralogy/') ||
it.startsWith('zone/moddev/mc/mineralogy/worldgen/') ||
it.startsWith('zone/moddev/mc/mineralogy/probe/') ||
Expand Down Expand Up @@ -514,6 +549,7 @@ tasks.register('validateMavenReleaseCredentials') {

tasks.withType(PublishToMavenRepository).configureEach {
dependsOn tasks.named('validateMavenReleaseCredentials')
dependsOn tasks.named('verifyMavenCoordinates')
dependsOn(preparedReleaseDir == null
? tasks.named('verifyReleaseArtifacts')
: tasks.named('verifyPreparedReleaseArtifacts'))
Expand Down Expand Up @@ -713,4 +749,5 @@ tasks.matching { it.name == 'eclipse' }.configureEach {

tasks.named('check') {
dependsOn tasks.named('verifyReleaseDependencies')
dependsOn tasks.named('verifyMavenCoordinates')
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ org.gradle.parallel=false
net.minecraftforge.gradle.merge-source-sets=false

mod_version=6.0.1.115021
mod_group=zone.moddev.mc
mod_group=zone.moddev.mc.mineralogy

# Release metadata consumed by the generic dispatcher.
minecraft_version=1.15.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public void releaseMetadataIdentifiesTheGenericForgeTarget() throws Exception {
assertEquals("8.0.502+7", properties.getProperty("java_toolchain_version"));
assertEquals("17", properties.getProperty("gradle_java_version"));
assertEquals("240974", properties.getProperty("curseforge_project_id"));
assertEquals("zone.moddev.mc.mineralogy", properties.getProperty("mod_group"));
}

@Test
Expand Down Expand Up @@ -75,6 +76,9 @@ public void buildPublishesOnlyThePreparedRemoteBundle() throws Exception {
assertTrue(build.contains("def preparedReleaseDir = project.findProperty('preparedReleaseDir')"));
assertTrue(build.contains("tasks.register('verifyPreparedReleaseArtifacts')"));
assertTrue(build.contains("tasks.withType(PublishToMavenRepository).configureEach"));
assertTrue(build.contains("tasks.register('verifyMavenCoordinates')"));
assertTrue(build.contains("generatePomFileForMavenJavaPublication"));
assertTrue(build.contains("dependsOn tasks.named('verifyMavenCoordinates')"));
assertTrue(build.contains("Maven release publication must use a remote repository"));
assertTrue(build.contains("name = 'release'"));
assertFalse(build.contains("file:///${project.projectDir}/mcmodsrepo"));
Expand Down
Loading