diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4c4e7962b..fb968d139 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,6 +41,13 @@ jobs: - name: Install dependencies run: npm install + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.GPG_PASSPHRASE }} + fingerprint: ${{ env.GPG_FINGERPRINT }} + - name: Release env: GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }} diff --git a/.releaserc b/.releaserc index 0e4fa8b8a..6193511b8 100644 --- a/.releaserc +++ b/.releaserc @@ -33,7 +33,7 @@ { "assets": [ { - "path": "build/libs/*.jar" + "path": "build/libs/revanced-patches*" }, { "path": "patches.json" diff --git a/api/revanced-patches.api b/api/revanced-patches.api index 0cb9c02f8..50a135fbe 100644 --- a/api/revanced-patches.api +++ b/api/revanced-patches.api @@ -1,3 +1,7 @@ +public final class app/revanced/generator/MainKt { + public static synthetic fun main ([Ljava/lang/String;)V +} + public final class app/revanced/patches/all/activity/exportall/ExportAllActivitiesPatch : app/revanced/patcher/patch/ResourcePatch { public static final field INSTANCE Lapp/revanced/patches/all/activity/exportall/ExportAllActivitiesPatch; public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V diff --git a/build.gradle.kts b/build.gradle.kts index 5e9743b54..b1486a4b3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,10 @@ import org.gradle.kotlin.dsl.support.listFilesOrdered plugins { - kotlin("jvm") version "1.9.22" + alias(libs.plugins.kotlin) alias(libs.plugins.binary.compatibility.validator) `maven-publish` + signing } group = "app.revanced" @@ -12,7 +13,14 @@ repositories { mavenCentral() mavenLocal() google() - maven { url = uri("https://jitpack.io") } + maven { + // A repository must be speficied for some reason. "registry" is a dummy. + url = uri("https://maven.pkg.github.com/revanced/registry") + credentials { + username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR") + password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") + } + } } dependencies { @@ -28,25 +36,26 @@ kotlin { jvmToolchain(11) } -tasks.withType(Jar::class) { - exclude("app/revanced/meta") - - manifest { - attributes["Name"] = "ReVanced Patches" - attributes["Description"] = "Patches for ReVanced." - attributes["Version"] = version - attributes["Timestamp"] = System.currentTimeMillis().toString() - attributes["Source"] = "git@github.com:revanced/revanced-patches.git" - attributes["Author"] = "ReVanced" - attributes["Contact"] = "contact@revanced.app" - attributes["Origin"] = "https://revanced.app" - attributes["License"] = "GNU General Public License v3.0" - } -} - tasks { - register("generateBundle") { - description = "Generate DEX files and add them in the JAR file" + withType(Jar::class) { + exclude("app/revanced/meta") + + manifest { + attributes["Name"] = "ReVanced Patches" + attributes["Description"] = "Patches for ReVanced." + attributes["Version"] = version + attributes["Timestamp"] = System.currentTimeMillis().toString() + attributes["Source"] = "git@github.com:revanced/revanced-patches.git" + attributes["Author"] = "ReVanced" + attributes["Contact"] = "contact@revanced.app" + attributes["Origin"] = "https://revanced.app" + attributes["License"] = "GNU General Public License v3.0" + } + } + + register("buildDexJar") { + description = "Build and add a DEX to the JAR file" + group = "build" dependsOn(build) @@ -54,35 +63,35 @@ tasks { val d8 = File(System.getenv("ANDROID_HOME")).resolve("build-tools") .listFilesOrdered().last().resolve("d8").absolutePath - val artifacts = configurations.archives.get().allArtifacts.files.files.first().absolutePath + val patchesJar = configurations.archives.get().allArtifacts.files.files.first().absolutePath val workingDirectory = layout.buildDirectory.dir("libs").get().asFile exec { workingDir = workingDirectory - commandLine = listOf(d8, artifacts) + commandLine = listOf(d8, patchesJar) } exec { workingDir = workingDirectory - commandLine = listOf("zip", "-u", artifacts, "classes.dex") + commandLine = listOf("zip", "-u", patchesJar, "classes.dex") } } } - register("generateMeta") { - description = "Generate metadata for this bundle" + register("generatePatchesFiles") { + description = "Generate patches files" dependsOn(build) classpath = sourceSets["main"].runtimeClasspath - mainClass.set("app.revanced.meta.IPatchesFileGenerator") + mainClass.set("app.revanced.generator.MainKt") } - // Required to run tasks because Gradle semantic-release plugin runs the publish task. + // Needed by gradle-semantic-release-plugin. // Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435 - named("publish") { - dependsOn("generateBundle") - dependsOn("generateMeta") + publish { + dependsOn("buildDexJar") + dependsOn("generatePatchesFiles") } } @@ -118,3 +127,9 @@ publishing { } } } + +signing { + useGpgCmd() + + sign(publishing.publications["revanced-patches-publication"]) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2b26096fd..7596f26af 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,10 @@ [versions] -revanced-patcher = "19.2.0" +revanced-patcher = "19.3.1" smali = "3.0.4" guava = "33.0.0-jre" gson = "2.10.1" binary-compatibility-validator = "0.14.0" +kotlin = "1.9.22" [libraries] revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" } @@ -13,3 +14,4 @@ gson = { module = "com.google.code.gson:gson", version.ref = "gson" } [plugins] binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" } +kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } diff --git a/src/main/kotlin/app/revanced/meta/JsonPatchesFileGenerator.kt b/src/main/kotlin/app/revanced/generator/JsonPatchesFileGenerator.kt similarity index 87% rename from src/main/kotlin/app/revanced/meta/JsonPatchesFileGenerator.kt rename to src/main/kotlin/app/revanced/generator/JsonPatchesFileGenerator.kt index 6755706c6..28871d6d1 100644 --- a/src/main/kotlin/app/revanced/meta/JsonPatchesFileGenerator.kt +++ b/src/main/kotlin/app/revanced/generator/JsonPatchesFileGenerator.kt @@ -1,11 +1,11 @@ -package app.revanced.meta +package app.revanced.generator import app.revanced.patcher.PatchSet import app.revanced.patcher.patch.Patch import com.google.gson.GsonBuilder import java.io.File -internal class JsonPatchesFileGenerator : IPatchesFileGenerator { +internal class JsonPatchesFileGenerator : PatchesFileGenerator { override fun generate(patches: PatchSet) = patches.map { JsonPatch( it.name!!, @@ -20,9 +20,9 @@ internal class JsonPatchesFileGenerator : IPatchesFileGenerator { option.values, option.title, option.description, - option.required + option.required, ) - } + }, ) }.let { File("patches.json").writeText(GsonBuilder().serializeNulls().create().toJson(it)) @@ -35,7 +35,7 @@ internal class JsonPatchesFileGenerator : IPatchesFileGenerator { val compatiblePackages: Set? = null, val use: Boolean = true, val requiresIntegrations: Boolean = false, - val options: List