aboutsummaryrefslogtreecommitdiff

libautoupdate

A java library for creating auto updates.

Installation

First, include the library in your build using a shadow plugin or similar. This is mostly intended for fat jars, since multi jar updates are not handled right now.

repositories {
    maven("https://repo.nea.moe/releases")
}

dependencies {
    shadowImpl("moe.nea:libautoupdate:0.1.0")
}

You may want to exclude transitive dependencies if your target platform already bundles google's gson library.

Usage

In your application, create an UpdateContext and store it somewhere:

UpdateContext updateContext=new UpdateContext(
        UpdateSource.gistSource("romangraef","9b62fe32bc41c09d2d7e2d3153f14ee8"),
        UpdateTarget.deleteAndSaveInTheSameFolder(Main.class),
        CurrentVersion.of(10000),
        "test"
        );

You will have to specify an update source, an update target (the file to replace), the version that is currently being ran, and a string id to prevent files from being overwritten.

Upon startup you probably want to call 'updateContext.cleanup()' to remove leftover data from any updates of your application.

Sources

  • Gist Source

Uses a gist with multiple (or just one) files called <upstream>.json in the format

{ "versionNumber": 10001 // The version number of the new update
, "versionName": "1.0.1 - Hello" // The version name, for display to the user.
, "sha256": "3ca21a6c1bfd26b4987f2342f00b50e8bf6a87d7449c3951b91f97c7d46a8570" // The sha256 hash of the file
, "download": "https://github.com/NotEnoughUpdates/NotEnoughUpdates/releases/download/v2.1-rc7/NotEnoughUpdates-2.1-blahaj-rc7.jar" // The download url of this version
}
  • GitHub Releases Source

Uses a GitHub release to either source a pre-release or full-release JAR. This release source does not support hashes or newer-than-latest local versions. The current version also has to be the tag name, unlike the gist source which can have any version type. The GitHub release needs to have a tag that is also present in the jar itself, and there should only be one JAR in each GitHub release. Subclasses of this source may provide custom logic for choosing the jar / version.

Targets

  • DeleteAndSaveInSameFolder

Deletes the original jar and downloads the new jar into the same directory, while keeping the name specified by the download url.

  • ReplaceJar

Deletes the original jar and downloads the new jar into the same directory, while keeping the name of the original (deleted) jar.

Checking for an update

You can check for an update by calling updateContext.checkUpdate("upstream"). You then can check if an update is present using potentialUpdate.isUpdateAvailable(). After that check you can call potentialUpdate.launchUpdate(). This will cause your update to be downloaded now, and be executed after you application exits.