Skip to content

Refactor and improve version in ServerPackCreator

Instead of printing the version into VERSION.txt, ServerPackCreator should use the intended way:

in build.gradle:

launch4j {
    mainClassName = 'de.griefed.serverpackcreator.Main'
    jarTask = project.tasks.jar
    fileDescription = "An application to create a server pack from any given Forge or Fabric Minecraft modpack."
    version = project.version
    textVersion = project.version
    windowTitle = "ServerPackCreator"
    copyright = "GNU Lesser General Public License v2.1"
    downloadUrl = "https://github.com/Griefed/serverpackcreator/releases"
    supportUrl = "https://github.com/Griefed/serverpackcreator/issues"
    libraryDir = 'libraries'
    outputDir = 'libs'
    icon = "${projectDir}/backend/main/resources/de/griefed/resources/gui/icon.ico"
}
[...]
bootJar {
    // Customize MANIFEST to include relevant information.
    manifest {
        attributes  "Start-Class"    : "de.griefed.serverpackcreator.Main",
                    "Description"    : "Create server packs from Minecraft modpacks.",
                    "Built-By"       : System.getProperty("user.name"),
                    "Build-Timestamp": new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date()),
                    "Created-By"     : "Gradle ${gradle.gradleVersion}",
                    "Build-Jdk"      : "${System.getProperty('java.version')} (${System.getProperty('java.vendor')} ${System.getProperty('java.vm.version')})",
                    "Build-OS"       : "${System.getProperty('os.name')} ${System.getProperty('os.arch')} ${System.getProperty('os.version')}",
                    "Implementation-Version" : "${project.version}"
    }
}
[...]
jar {
    // No duplicates
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE

    // Include all libraries in our JAR-file.
    from {
        configurations.embed.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
    }

    // Customize MANIFEST to include relevant information.
    manifest {
        attributes(
                "Main-Class"     : "de.griefed.serverpackcreator.Main",
                "Class-Path"     : configurations.embed.findAll { it.name.endsWith('jar') }.collect { zipTree(it) },
                "Description"    : "Create server packs from Minecraft modpacks.",
                "Built-By"       : System.getProperty("user.name"),
                "Build-Timestamp": new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").format(new Date()),
                "Created-By"     : "Gradle ${gradle.gradleVersion}",
                "Build-Jdk"      : "${System.getProperty('java.version')} (${System.getProperty('java.vendor')} ${System.getProperty('java.vm.version')})",
                "Build-OS"       : "${System.getProperty('os.name')} ${System.getProperty('os.arch')} ${System.getProperty('os.version')}",
                "Implementation-Version" : "${project.version}"
        )
    }
}
[...]

in gradle.properties:

group=de.griefed
org.gradle.daemon=false
version=dev

Then build with ./gradlew -Pversion="$NEW_VERSION" about installQuasar cleanFrontend assembleFrontend copyDist build createExe --info which will result in files, excluding .exe, being build with the version appended and Manifest including it. By code, this can then be retrieved with Main.class.getPackage().getImplementationVersion()

If build is executed with ./gradlew about installQuasar cleanFrontend assembleFrontend copyDist build createExe --info then files, excluding .exe, will be appended with dev. When using Main.class.getPackage().getImplementationVersion() this will also return dev

Changes need to be made in:

  • build.gradle
    • launch4j
      • Set version = project.version
      • Set textVersion = project.version
    • bootJar
      • Add "Implementation-Version" : "${project.version}" to manifest
    • jar
      • Add "Implementation-Version" : "${project.version}" to manifest
  • gradle.properties
    • Add version=dev
  • Dockerfile
    • Add ARG VERSION=dev
    • Change build command to ./gradlew -Pversion=$VERSION about installQuasar cleanFrontend assembleFrontend copyDist build --info --no-daemon -x test && \ mv tmp/serverpackcreator/build/libs/serverpackcreator-$VERSION.jar tmp/serverpackcreator/build/libs/serverpackcreator.jar
  • .gitlab-ci.yml
    • Gradle Test:
      • Change mv build/libs/serverpackcreator.jar build/libs/ServerPackCreator-$CI_COMMIT_REF_NAME.jar to mv build/libs/serverpackcreator-dev.jar build/libs/ServerPackCreator-$CI_COMMIT_REF_NAME.jar
    • Build Release:
      • Change "./gradlew installQuasar cleanFrontend assembleFrontend copyDist build createExe to "./gradlew -Pversion=${CI_COMMIT_TAG} installQuasar cleanFrontend assembleFrontend copyDist build createExe
      • Change mv build/libs/serverpackcreator.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar to mv build/libs/serverpackcreator-${CI_COMMIT_TAG}.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.jar
      • Change mv build/libs/serverpackcreator-javadoc.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar to mv build/libs/serverpackcreator-${CI_COMMIT_TAG}-javadoc.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-javadoc.jar
      • Change mv build/libs/serverpackcreator-sources.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar to mv build/libs/serverpackcreator-${CI_COMMIT_TAG}-sources.jar build/libs/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}-sources.jar
    • Build Docker Release:
      • Add --build-arg VERSION=$CI_COMMIT_TAG
    • Build Docker PreRelease:
      • Add --build-arg VERSION=$CI_COMMIT_TAG
  • github-prerelease.yml
    • Change ./gradlew installQuasar cleanFrontend assembleFrontend copyDist build createExe --info -x test to ./gradlew -Pversion=${{steps.tag.outputs.tag}} installQuasar cleanFrontend assembleFrontend copyDist build createExe --info -x test
    • Change mv build/libs/serverpackcreator.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}.jar to mv build/libs/serverpackcreator-${{steps.tag.outputs.tag}}.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}.jar
    • Change mv build/libs/serverpackcreator-javadoc.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}-javadoc.jar to mv build/libs/serverpackcreator-${{steps.tag.outputs.tag}}-javadoc.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}-javadoc.jar
    • Change mv build/libs/serverpackcreator-sources.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}-sources.jar to mv build/libs/serverpackcreator-${{steps.tag.outputs.tag}}-sources.jar build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}-sources.jar
  • github_release.yml
    • Add echo "version=${NEW_VERSION}" > backend/main/resources/VERSION.txt
    • Change ./gradlew installQuasar cleanFrontend assembleFrontend copyDist build createExe --info -x test to ./gradlew -Pversion=${{steps.tag.outputs.tag}} installQuasar cleanFrontend assembleFrontend copyDist build createExe --info -x tes
    • Change mv build/libs/serverpackcreator-${{steps.tag.outputs.tag}}.exe build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}.exe to mv build/libs/serverpackcreator.exe build/libs/ServerPackCreator-${{steps.tag.outputs.tag}}.exe
  • ApplicationProperties:
    • Change acquisition of Version to
String version = ApplicationProperties.class.getPackage().getImplementationVersion();
if (version != null) {
    this.serverPackCreatorVersion = version;
} else {
    this.serverPackCreatorVersion = "dev";
}

jar {...} and publishing {...} can be completely removed.

Edited by Griefed