diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7b12946e5f..79a2a52beb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -652,10 +652,10 @@ jobs: COMMIT_AUTHOR: ${{ steps.commit_info.outputs.COMMIT_AUTHOR }} COMMIT_MSG: ${{ steps.commit_info.outputs.COMMIT_MSG }} FIREBASE_CONSOLE_URL: ${{ steps.firebase_upload.outputs.FIREBASE_CONSOLE_URL }} - run: | + run: | BRANCH_NAME="${{ env.BRANCH_NAME }}" BUILD_TYPE="${{ matrix.build_type }}" - + jq -n \ --arg commit_msg "$COMMIT_MSG" \ --arg build_type "$BUILD_TYPE" \ @@ -739,4 +739,4 @@ jobs: if: always() run: | rm -f app/google-services.json - echo "google-services.json cleaned up successfully" + echo "google-services.json cleaned up successfully" \ No newline at end of file diff --git a/.gitignore b/.gitignore index a35ab1b49a..2163e9dfae 100755 --- a/.gitignore +++ b/.gitignore @@ -128,11 +128,16 @@ tests/test-home /sample-plugin/build/ /keystore-generator-plugin/build/ /keystore-generator-plugin/.kotlin/ -**/build +**/build/ +!**/src/**/build/ # Release files *.zim +# Plugin build artifacts +plugin-api.jar +plugin-artifacts.zip + # Other IDEs .cursor/ .vscode/ diff --git a/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilder.kt b/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilder.kt new file mode 100644 index 0000000000..48b6b19583 --- /dev/null +++ b/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilder.kt @@ -0,0 +1,78 @@ +package com.itsaky.androidide.plugins.build + +import org.gradle.api.Plugin +import org.gradle.api.Project +import java.io.File + +class PluginBuilder : Plugin { + + override fun apply(target: Project) { + val extension = target.extensions.create( + "pluginBuilder", + PluginBuilderExtension::class.java + ) + + target.afterEvaluate { + createDebugTask(target, extension) + createReleaseTask(target, extension) + } + } + + private fun createDebugTask(project: Project, extension: PluginBuilderExtension) { + val task = project.tasks.create("assemblePluginDebug") + task.group = "build" + task.description = "Assembles the debug plugin and creates .cgp file" + task.dependsOn("assembleDebug") + + task.doLast(object : org.gradle.api.Action { + override fun execute(t: org.gradle.api.Task) { + val pluginName = extension.pluginName.getOrElse(project.name) + val apkDir = File(project.buildDir, "outputs/apk/debug") + val outputDir = File(project.buildDir, "plugin") + outputDir.mkdirs() + + project.logger.lifecycle("Looking for APK in: ${apkDir.absolutePath}") + + val apkFile = apkDir.listFiles()?.firstOrNull { it.extension == "apk" } + if (apkFile == null) { + project.logger.warn("No APK found in ${apkDir.absolutePath}") + return + } + + val outputFile = File(outputDir, "$pluginName-debug.cgp") + apkFile.copyTo(outputFile, overwrite = true) + apkFile.delete() + project.logger.lifecycle("Plugin assembled: ${outputFile.absolutePath}") + } + }) + } + + private fun createReleaseTask(project: Project, extension: PluginBuilderExtension) { + val task = project.tasks.create("assemblePlugin") + task.group = "build" + task.description = "Assembles the release plugin and creates .cgp file" + task.dependsOn("assembleRelease") + + task.doLast(object : org.gradle.api.Action { + override fun execute(t: org.gradle.api.Task) { + val pluginName = extension.pluginName.getOrElse(project.name) + val apkDir = File(project.buildDir, "outputs/apk/release") + val outputDir = File(project.buildDir, "plugin") + outputDir.mkdirs() + + project.logger.lifecycle("Looking for APK in: ${apkDir.absolutePath}") + + val apkFile = apkDir.listFiles()?.firstOrNull { it.extension == "apk" } + if (apkFile == null) { + project.logger.warn("No APK found in ${apkDir.absolutePath}") + return + } + + val outputFile = File(outputDir, "$pluginName.cgp") + apkFile.copyTo(outputFile, overwrite = true) + apkFile.delete() + project.logger.lifecycle("Plugin assembled: ${outputFile.absolutePath}") + } + }) + } +} \ No newline at end of file diff --git a/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilderExtension.kt b/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilderExtension.kt new file mode 100644 index 0000000000..5a27f6032e --- /dev/null +++ b/plugin-api/plugin-builder/src/main/kotlin/com/itsaky/androidide/plugins/build/PluginBuilderExtension.kt @@ -0,0 +1,7 @@ +package com.itsaky.androidide.plugins.build + +import org.gradle.api.provider.Property + +abstract class PluginBuilderExtension { + abstract val pluginName: Property +} \ No newline at end of file