mirror of
https://github.com/recloudstream/gradle.git
synced 2024-08-14 23:56:59 +00:00
update plugin to be usable maybe
This commit is contained in:
parent
7cdcd5d29d
commit
dc196c66cb
15 changed files with 160 additions and 100 deletions
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
|
@ -14,10 +14,10 @@ jobs:
|
||||||
with:
|
with:
|
||||||
java-version: 11
|
java-version: 11
|
||||||
|
|
||||||
- name: Build and publish
|
# - name: Build and publish
|
||||||
run: |
|
# run: |
|
||||||
chmod +x gradlew
|
# chmod +x gradlew
|
||||||
./gradlew :publish -Pversion=${GITHUB_REF##*/}-SNAPSHOT
|
# ./gradlew :publish -Pversion=${GITHUB_REF##*/}-SNAPSHOT
|
||||||
./gradlew :publish -Pversion=$(git rev-parse --short "$GITHUB_SHA")
|
# ./gradlew :publish -Pversion=$(git rev-parse --short "$GITHUB_SHA")
|
||||||
env:
|
# env:
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
# GITHUB_TOKEN: ${{ github.token }}
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"java.configuration.updateBuildConfiguration": "interactive"
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ plugins {
|
||||||
id("maven-publish")
|
id("maven-publish")
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "com.lagradost"
|
group = "com.lagradost.cloudstream3"
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_11
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
|
@ -33,9 +33,9 @@ dependencies {
|
||||||
|
|
||||||
gradlePlugin {
|
gradlePlugin {
|
||||||
plugins {
|
plugins {
|
||||||
create("com.lagradost.gradle") {
|
create("com.lagradost.cloudstream3.gradle") {
|
||||||
id = "com.lagradost.gradle"
|
id = "com.lagradost.cloudstream3.gradle"
|
||||||
implementationClass = "com.lagradost.gradle.CloudstreamPlugin"
|
implementationClass = "com.lagradost.cloudstream3.gradle.CloudstreamPlugin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.lagradost.gradle
|
package com.lagradost.cloudstream3.gradle
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.plugins.ExtensionContainer
|
import org.gradle.api.plugins.ExtensionContainer
|
||||||
|
@ -8,20 +8,20 @@ import javax.inject.Inject
|
||||||
abstract class CloudstreamExtension @Inject constructor(project: Project) {
|
abstract class CloudstreamExtension @Inject constructor(project: Project) {
|
||||||
val userCache = project.gradle.gradleUserHomeDir.resolve("caches").resolve("cloudstream")
|
val userCache = project.gradle.gradleUserHomeDir.resolve("caches").resolve("cloudstream")
|
||||||
|
|
||||||
var apkinfo: ApkInfo = ApkInfo(this)
|
var apkinfo: ApkInfo? = null
|
||||||
internal set
|
internal set
|
||||||
|
|
||||||
fun overrideUrl(url: String) {
|
fun overrideUrl(url: String) {
|
||||||
apkinfo.url = url
|
apkinfo!!.url = url
|
||||||
}
|
}
|
||||||
|
|
||||||
internal var pluginClassName: String? = null
|
internal var pluginClassName: String? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
class ApkInfo(extension: CloudstreamExtension) {
|
class ApkInfo(extension: CloudstreamExtension, release: String) {
|
||||||
val cache = extension.userCache.resolve("cloudstream")
|
val cache = extension.userCache.resolve("cloudstream")
|
||||||
|
|
||||||
var url = "https://github.com/recloudstream/cloudstream/releases/download/pre-release/app-debug.apk"
|
var url = "https://github.com/recloudstream/cloudstream/releases/download/${release}/app-debug.apk"
|
||||||
val apkFile = cache.resolve("cloudstream.apk")
|
val apkFile = cache.resolve("cloudstream.apk")
|
||||||
val jarFile = cache.resolve("cloudstream.jar")
|
val jarFile = cache.resolve("cloudstream.jar")
|
||||||
}
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
package com.lagradost.gradle
|
package com.lagradost.cloudstream3.gradle
|
||||||
|
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import com.lagradost.gradle.tasks.registerTasks
|
import com.lagradost.cloudstream3.gradle.tasks.registerTasks
|
||||||
import com.lagradost.gradle.configuration.registerConfigurations
|
import com.lagradost.cloudstream3.gradle.configuration.registerConfigurations
|
||||||
|
|
||||||
abstract class CloudstreamPlugin : Plugin<Project> {
|
abstract class CloudstreamPlugin : Plugin<Project> {
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
|
@ -1,4 +1,4 @@
|
||||||
package com.lagradost.gradle
|
package com.lagradost.cloudstream3.gradle
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
|
@ -1,9 +1,9 @@
|
||||||
package com.lagradost.gradle.configuration
|
package com.lagradost.cloudstream3.gradle.configuration
|
||||||
|
|
||||||
import com.lagradost.gradle.ApkInfo
|
import com.lagradost.cloudstream3.gradle.ApkInfo
|
||||||
import com.lagradost.gradle.createProgressLogger
|
import com.lagradost.cloudstream3.gradle.createProgressLogger
|
||||||
import com.lagradost.gradle.download
|
import com.lagradost.cloudstream3.gradle.download
|
||||||
import com.lagradost.gradle.getCloudstream
|
import com.lagradost.cloudstream3.gradle.getCloudstream
|
||||||
import com.googlecode.d2j.dex.Dex2jar
|
import com.googlecode.d2j.dex.Dex2jar
|
||||||
import com.googlecode.d2j.reader.BaseDexFileReader
|
import com.googlecode.d2j.reader.BaseDexFileReader
|
||||||
import com.googlecode.d2j.reader.MultiDexFileReader
|
import com.googlecode.d2j.reader.MultiDexFileReader
|
||||||
|
@ -21,7 +21,8 @@ class ApkConfigurationProvider : IConfigurationProvider {
|
||||||
|
|
||||||
override fun provide(project: Project, dependency: Dependency) {
|
override fun provide(project: Project, dependency: Dependency) {
|
||||||
val extension = project.extensions.getCloudstream()
|
val extension = project.extensions.getCloudstream()
|
||||||
val apkinfo = extension.apkinfo
|
val apkinfo = ApkInfo(extension, dependency.version ?: "prerelease")
|
||||||
|
extension.apkinfo = apkinfo
|
||||||
|
|
||||||
apkinfo.cache.mkdirs()
|
apkinfo.cache.mkdirs()
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.lagradost.gradle.configuration
|
package com.lagradost.cloudstream3.gradle.configuration
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.lagradost.gradle.configuration
|
package com.lagradost.cloudstream3.gradle.configuration
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Dependency
|
import org.gradle.api.artifacts.Dependency
|
|
@ -0,0 +1,6 @@
|
||||||
|
package com.lagradost.cloudstream3.gradle.entities
|
||||||
|
|
||||||
|
data class PluginManifest(
|
||||||
|
val pluginClassName: String,
|
||||||
|
val name: String
|
||||||
|
)
|
|
@ -0,0 +1,26 @@
|
||||||
|
package com.lagradost.cloudstream3.gradle.tasks
|
||||||
|
|
||||||
|
import com.lagradost.cloudstream3.gradle.getCloudstream
|
||||||
|
import org.gradle.api.DefaultTask
|
||||||
|
import org.gradle.api.tasks.AbstractCopyTask
|
||||||
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.TaskAction
|
||||||
|
import org.gradle.api.tasks.options.Option
|
||||||
|
import se.vidstige.jadb.*
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
|
abstract class CleanCacheTask : DefaultTask() {
|
||||||
|
@TaskAction
|
||||||
|
fun cleanCache() {
|
||||||
|
val extension = project.extensions.getCloudstream()
|
||||||
|
val apkinfo = extension.apkinfo
|
||||||
|
if (apkinfo == null) return;
|
||||||
|
if (apkinfo.apkFile.exists()) {
|
||||||
|
apkinfo.apkFile.delete()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apkinfo.jarFile.exists()) {
|
||||||
|
apkinfo.jarFile.delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
package com.lagradost.gradle.tasks
|
package com.lagradost.cloudstream3.gradle.tasks
|
||||||
|
|
||||||
import com.lagradost.gradle.getCloudstream
|
import com.lagradost.cloudstream3.gradle.getCloudstream
|
||||||
import com.android.build.gradle.BaseExtension
|
import com.android.build.gradle.BaseExtension
|
||||||
import com.android.build.gradle.internal.errors.MessageReceiverImpl
|
import com.android.build.gradle.internal.errors.MessageReceiverImpl
|
||||||
import com.android.build.gradle.options.SyncOptions.ErrorFormatMode
|
import com.android.build.gradle.options.SyncOptions.ErrorFormatMode
|
||||||
|
@ -79,7 +79,7 @@ abstract class CompileDexTask : DefaultTask() {
|
||||||
reader.accept(classNode, 0)
|
reader.accept(classNode, 0)
|
||||||
|
|
||||||
for (annotation in classNode.visibleAnnotations.orEmpty() + classNode.invisibleAnnotations.orEmpty()) {
|
for (annotation in classNode.visibleAnnotations.orEmpty() + classNode.invisibleAnnotations.orEmpty()) {
|
||||||
if (annotation.desc == "Lcom/lagradost/annotations/CloudstreamPlugin;") {
|
if (annotation.desc == "Lcom/lagradost/cloudstream3/plugins/CloudstreamPlugin;") {
|
||||||
val cloudstream = project.extensions.getCloudstream()
|
val cloudstream = project.extensions.getCloudstream()
|
||||||
|
|
||||||
require(cloudstream.pluginClassName == null) {
|
require(cloudstream.pluginClassName == null) {
|
|
@ -1,6 +1,6 @@
|
||||||
package com.lagradost.gradle.tasks
|
package com.lagradost.cloudstream3.gradle.tasks
|
||||||
|
|
||||||
import com.lagradost.gradle.getCloudstream
|
import com.lagradost.cloudstream3.gradle.getCloudstream
|
||||||
import jadx.api.JadxArgs
|
import jadx.api.JadxArgs
|
||||||
import jadx.api.JadxDecompiler
|
import jadx.api.JadxDecompiler
|
||||||
import jadx.api.impl.NoOpCodeCache
|
import jadx.api.impl.NoOpCodeCache
|
|
@ -0,0 +1,91 @@
|
||||||
|
package com.lagradost.cloudstream3.gradle.tasks
|
||||||
|
|
||||||
|
import com.lagradost.cloudstream3.gradle.getCloudstream
|
||||||
|
import com.lagradost.cloudstream3.gradle.entities.PluginManifest
|
||||||
|
import com.android.build.gradle.BaseExtension
|
||||||
|
import com.android.build.gradle.tasks.ProcessLibraryManifest
|
||||||
|
import groovy.json.JsonBuilder
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.tasks.AbstractCopyTask
|
||||||
|
import org.gradle.api.tasks.bundling.Zip
|
||||||
|
import org.gradle.api.tasks.compile.AbstractCompile
|
||||||
|
|
||||||
|
const val TASK_GROUP = "cloudstream"
|
||||||
|
|
||||||
|
fun registerTasks(project: Project) {
|
||||||
|
val extension = project.extensions.getCloudstream()
|
||||||
|
val intermediates = project.buildDir.resolve("intermediates")
|
||||||
|
|
||||||
|
project.tasks.register("genSources", GenSourcesTask::class.java) {
|
||||||
|
it.group = TASK_GROUP
|
||||||
|
}
|
||||||
|
|
||||||
|
val pluginClassFile = intermediates.resolve("pluginClass")
|
||||||
|
|
||||||
|
val compileDex = project.tasks.register("compileDex", CompileDexTask::class.java) {
|
||||||
|
it.group = TASK_GROUP
|
||||||
|
|
||||||
|
it.pluginClassFile.set(pluginClassFile)
|
||||||
|
|
||||||
|
for (name in arrayOf("compileDebugJavaWithJavac", "compileDebugKotlin")) {
|
||||||
|
val task = project.tasks.findByName(name) as AbstractCompile?
|
||||||
|
if (task != null) {
|
||||||
|
it.dependsOn(task)
|
||||||
|
it.input.from(task.destinationDirectory)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
it.outputFile.set(intermediates.resolve("classes.dex"))
|
||||||
|
}
|
||||||
|
|
||||||
|
project.afterEvaluate {
|
||||||
|
project.tasks.register("make", Zip::class.java) {
|
||||||
|
val compileDexTask = compileDex.get()
|
||||||
|
it.dependsOn(compileDexTask)
|
||||||
|
|
||||||
|
val manifestFile = intermediates.resolve("manifest.json")
|
||||||
|
it.from(manifestFile)
|
||||||
|
it.doFirst {
|
||||||
|
require(project.version != "unspecified") {
|
||||||
|
"No version is set"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (extension.pluginClassName == null) {
|
||||||
|
if (pluginClassFile.exists()) {
|
||||||
|
extension.pluginClassName = pluginClassFile.readText()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require(extension.pluginClassName != null) {
|
||||||
|
"No plugin class found, make sure your plugin class is annotated with @CloudstreamPlugin"
|
||||||
|
}
|
||||||
|
|
||||||
|
manifestFile.writeText(
|
||||||
|
JsonBuilder(
|
||||||
|
PluginManifest(
|
||||||
|
pluginClassName = extension.pluginClassName!!,
|
||||||
|
name = project.name
|
||||||
|
)
|
||||||
|
).toPrettyString()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
it.from(compileDexTask.outputFile)
|
||||||
|
|
||||||
|
val zip = it as Zip
|
||||||
|
//zip.dependsOn(compileResources.get())
|
||||||
|
zip.isPreserveFileTimestamps = false
|
||||||
|
zip.archiveBaseName.set(project.name)
|
||||||
|
zip.archiveVersion.set("")
|
||||||
|
zip.destinationDirectory.set(project.buildDir)
|
||||||
|
|
||||||
|
it.doLast { task ->
|
||||||
|
task.logger.lifecycle("Made Cloudstream package at ${task.outputs.files.singleFile}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
project.tasks.register("cleanCache", CleanCacheTask::class.java) {
|
||||||
|
it.group = TASK_GROUP
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,67 +0,0 @@
|
||||||
package com.lagradost.gradle.tasks
|
|
||||||
|
|
||||||
import com.lagradost.gradle.getCloudstream
|
|
||||||
import com.android.build.gradle.BaseExtension
|
|
||||||
import com.android.build.gradle.tasks.ProcessLibraryManifest
|
|
||||||
import groovy.json.JsonBuilder
|
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.tasks.AbstractCopyTask
|
|
||||||
import org.gradle.api.tasks.Copy
|
|
||||||
import org.gradle.api.tasks.compile.AbstractCompile
|
|
||||||
|
|
||||||
const val TASK_GROUP = "cloudstream"
|
|
||||||
|
|
||||||
fun registerTasks(project: Project) {
|
|
||||||
val extension = project.extensions.getCloudstream()
|
|
||||||
val intermediates = project.buildDir.resolve("intermediates")
|
|
||||||
|
|
||||||
project.tasks.register("genSources", GenSourcesTask::class.java) {
|
|
||||||
it.group = TASK_GROUP
|
|
||||||
}
|
|
||||||
|
|
||||||
val pluginClassFile = intermediates.resolve("pluginClass")
|
|
||||||
|
|
||||||
val compileDex = project.tasks.register("compileDex", CompileDexTask::class.java) {
|
|
||||||
it.group = TASK_GROUP
|
|
||||||
|
|
||||||
it.pluginClassFile.set(pluginClassFile)
|
|
||||||
|
|
||||||
for (name in arrayOf("compileDebugJavaWithJavac", "compileDebugKotlin")) {
|
|
||||||
val task = project.tasks.findByName(name) as AbstractCompile?
|
|
||||||
if (task != null) {
|
|
||||||
it.dependsOn(task)
|
|
||||||
it.input.from(task.destinationDirectory)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
it.outputFile.set(intermediates.resolve("classes.dex"))
|
|
||||||
}
|
|
||||||
|
|
||||||
project.afterEvaluate {
|
|
||||||
project.tasks.register("make", Copy::class.java)
|
|
||||||
{
|
|
||||||
val compileDexTask = compileDex.get()
|
|
||||||
it.dependsOn(compileDexTask)
|
|
||||||
|
|
||||||
// it.doFirst {
|
|
||||||
// require(project.version != "unspecified") {
|
|
||||||
// "No version is set"
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (extension.pluginClassName == null) {
|
|
||||||
// if (pluginClassFile.exists()) {
|
|
||||||
// extension.pluginClassName = pluginClassFile.readText()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// require(extension.pluginClassName != null) {
|
|
||||||
// "No plugin class found, make sure your plugin class is annotated with @CloudstreamPlugin"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
it.from(compileDexTask.outputFile)
|
|
||||||
it.into(project.buildDir)
|
|
||||||
it.rename { return@rename project.name }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue