build: Sign release artifacts

This commit is contained in:
oSumAtrIX 2024-02-15 04:38:06 +01:00
parent bdc54ef318
commit d789fd6b5a
No known key found for this signature in database
GPG key ID: A9B3094ACDB604B4
9 changed files with 85 additions and 58 deletions

View file

@ -41,6 +41,13 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: npm install 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 - name: Release
env: env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }} GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}

View file

@ -33,7 +33,7 @@
{ {
"assets": [ "assets": [
{ {
"path": "build/libs/*.jar" "path": "build/libs/revanced-patches*"
}, },
{ {
"path": "patches.json" "path": "patches.json"

View file

@ -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 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 static final field INSTANCE Lapp/revanced/patches/all/activity/exportall/ExportAllActivitiesPatch;
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V

View file

@ -1,9 +1,10 @@
import org.gradle.kotlin.dsl.support.listFilesOrdered import org.gradle.kotlin.dsl.support.listFilesOrdered
plugins { plugins {
kotlin("jvm") version "1.9.22" alias(libs.plugins.kotlin)
alias(libs.plugins.binary.compatibility.validator) alias(libs.plugins.binary.compatibility.validator)
`maven-publish` `maven-publish`
signing
} }
group = "app.revanced" group = "app.revanced"
@ -12,7 +13,14 @@ repositories {
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
google() 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 { dependencies {
@ -28,7 +36,8 @@ kotlin {
jvmToolchain(11) jvmToolchain(11)
} }
tasks.withType(Jar::class) { tasks {
withType(Jar::class) {
exclude("app/revanced/meta") exclude("app/revanced/meta")
manifest { manifest {
@ -44,9 +53,9 @@ tasks.withType(Jar::class) {
} }
} }
tasks { register("buildDexJar") {
register<DefaultTask>("generateBundle") { description = "Build and add a DEX to the JAR file"
description = "Generate DEX files and add them in the JAR file" group = "build"
dependsOn(build) dependsOn(build)
@ -54,35 +63,35 @@ tasks {
val d8 = File(System.getenv("ANDROID_HOME")).resolve("build-tools") val d8 = File(System.getenv("ANDROID_HOME")).resolve("build-tools")
.listFilesOrdered().last().resolve("d8").absolutePath .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 val workingDirectory = layout.buildDirectory.dir("libs").get().asFile
exec { exec {
workingDir = workingDirectory workingDir = workingDirectory
commandLine = listOf(d8, artifacts) commandLine = listOf(d8, patchesJar)
} }
exec { exec {
workingDir = workingDirectory workingDir = workingDirectory
commandLine = listOf("zip", "-u", artifacts, "classes.dex") commandLine = listOf("zip", "-u", patchesJar, "classes.dex")
} }
} }
} }
register<JavaExec>("generateMeta") { register<JavaExec>("generatePatchesFiles") {
description = "Generate metadata for this bundle" description = "Generate patches files"
dependsOn(build) dependsOn(build)
classpath = sourceSets["main"].runtimeClasspath 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 // Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435
named("publish") { publish {
dependsOn("generateBundle") dependsOn("buildDexJar")
dependsOn("generateMeta") dependsOn("generatePatchesFiles")
} }
} }
@ -118,3 +127,9 @@ publishing {
} }
} }
} }
signing {
useGpgCmd()
sign(publishing.publications["revanced-patches-publication"])
}

View file

@ -1,9 +1,10 @@
[versions] [versions]
revanced-patcher = "19.2.0" revanced-patcher = "19.3.1"
smali = "3.0.4" smali = "3.0.4"
guava = "33.0.0-jre" guava = "33.0.0-jre"
gson = "2.10.1" gson = "2.10.1"
binary-compatibility-validator = "0.14.0" binary-compatibility-validator = "0.14.0"
kotlin = "1.9.22"
[libraries] [libraries]
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" } 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] [plugins]
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" } binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }

View file

@ -1,11 +1,11 @@
package app.revanced.meta package app.revanced.generator
import app.revanced.patcher.PatchSet import app.revanced.patcher.PatchSet
import app.revanced.patcher.patch.Patch import app.revanced.patcher.patch.Patch
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import java.io.File import java.io.File
internal class JsonPatchesFileGenerator : IPatchesFileGenerator { internal class JsonPatchesFileGenerator : PatchesFileGenerator {
override fun generate(patches: PatchSet) = patches.map { override fun generate(patches: PatchSet) = patches.map {
JsonPatch( JsonPatch(
it.name!!, it.name!!,
@ -20,9 +20,9 @@ internal class JsonPatchesFileGenerator : IPatchesFileGenerator {
option.values, option.values,
option.title, option.title,
option.description, option.description,
option.required option.required,
) )
} },
) )
}.let { }.let {
File("patches.json").writeText(GsonBuilder().serializeNulls().create().toJson(it)) File("patches.json").writeText(GsonBuilder().serializeNulls().create().toJson(it))
@ -35,7 +35,7 @@ internal class JsonPatchesFileGenerator : IPatchesFileGenerator {
val compatiblePackages: Set<Patch.CompatiblePackage>? = null, val compatiblePackages: Set<Patch.CompatiblePackage>? = null,
val use: Boolean = true, val use: Boolean = true,
val requiresIntegrations: Boolean = false, val requiresIntegrations: Boolean = false,
val options: List<Option> val options: List<Option>,
) { ) {
class Option( class Option(
val key: String, val key: String,

View file

@ -0,0 +1,12 @@
package app.revanced.generator
import app.revanced.patcher.PatchBundleLoader
import java.io.File
internal fun main() = PatchBundleLoader.Jar(
File("build/libs/").listFiles { it -> it.name.endsWith(".jar") }!!.first(),
).also { loader ->
if (loader.isEmpty()) throw IllegalStateException("No patches found")
}.let { bundle ->
arrayOf(JsonPatchesFileGenerator()).forEach { generator -> generator.generate(bundle) }
}

View file

@ -0,0 +1,7 @@
package app.revanced.generator
import app.revanced.patcher.PatchSet
internal interface PatchesFileGenerator {
fun generate(patches: PatchSet)
}

View file

@ -1,20 +0,0 @@
package app.revanced.meta
import app.revanced.patcher.PatchBundleLoader
import app.revanced.patcher.PatchSet
import java.io.File
internal interface IPatchesFileGenerator {
fun generate(patches: PatchSet)
private companion object {
@JvmStatic
fun main(args: Array<String>) = PatchBundleLoader.Jar(
File("build/libs/").listFiles { it -> it.name.endsWith(".jar") }!!.first()
).also { loader ->
if (loader.isEmpty()) throw IllegalStateException("No patches found")
}.let { bundle ->
arrayOf(JsonPatchesFileGenerator()).forEach { generator -> generator.generate(bundle) }
}
}
}