From 2788b6cc76ad9d4bc625c1fefb6e0e7146a3c9fa Mon Sep 17 00:00:00 2001 From: AmirHossein Abdolmotallebi Date: Wed, 2 Oct 2024 09:04:46 +0330 Subject: [PATCH] add nsis installer --- buildSrc/build.gradle.kts | 1 + .../src/main/kotlin/buildlogic/CiUtils.kt | 20 +- .../plugins/installer-plugin/build.gradle.kts | 20 ++ .../ir/amirab/installer/InstallerPlugin.kt | 61 +++++ .../amirab/installer/InstallerTargetFormat.kt | 28 +++ .../extensiion/InstallerPluginExtension.kt | 85 +++++++ .../installer/tasks/windows/NsisTask.kt | 91 ++++++++ .../ir/amirab/installer/utils/Contants.kt | 5 + compositeBuilds/plugins/settings.gradle.kts | 3 +- desktop/app/build.gradle.kts | 106 +++++++-- .../resources/installer/abdm-header-image.bmp | Bin 0 -> 25818 bytes .../installer/abdm-sidebar-image.bmp | Bin 0 -> 154542 bytes .../installer/nsis-script-template.nsi | 212 ++++++++++++++++++ gradle/libs.versions.toml | 2 + 14 files changed, 602 insertions(+), 32 deletions(-) create mode 100644 compositeBuilds/plugins/installer-plugin/build.gradle.kts create mode 100644 compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerPlugin.kt create mode 100644 compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerTargetFormat.kt create mode 100644 compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/extensiion/InstallerPluginExtension.kt create mode 100644 compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/tasks/windows/NsisTask.kt create mode 100644 compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/utils/Contants.kt create mode 100644 desktop/app/resources/installer/abdm-header-image.bmp create mode 100644 desktop/app/resources/installer/abdm-sidebar-image.bmp create mode 100644 desktop/app/resources/installer/nsis-script-template.nsi diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 55af32c..41f42fb 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -17,4 +17,5 @@ dependencies{ implementation(libs.semver) implementation("ir.amirab.util:platform:1") implementation("ir.amirab.plugin:git-version-plugin:1") + implementation("ir.amirab.plugin:installer-plugin:1") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/buildlogic/CiUtils.kt b/buildSrc/src/main/kotlin/buildlogic/CiUtils.kt index d4a094c..f959d46 100644 --- a/buildSrc/src/main/kotlin/buildlogic/CiUtils.kt +++ b/buildSrc/src/main/kotlin/buildlogic/CiUtils.kt @@ -1,21 +1,20 @@ package buildlogic import io.github.z4kn4fein.semver.Version +import ir.amirab.installer.InstallerTargetFormat import ir.amirab.util.platform.Platform -import org.jetbrains.compose.desktop.application.dsl.JvmApplicationDistributions import org.jetbrains.compose.desktop.application.dsl.TargetFormat import java.io.File - object CiUtils { fun getTargetFileName( packageName: String, appVersion: Version, - target: TargetFormat, + target: InstallerTargetFormat?, ): String { val fileExtension = when (target) { - // we use archived for app image distribution - TargetFormat.AppImage -> { + // we use archived for app image distribution ( app image is a folder actually so there is no installer so we zip it instead) + null -> { when (Platform.getCurrentPlatform()) { Platform.Desktop.Linux -> "tar.gz" Platform.Desktop.MacOS -> "tar.gz" @@ -28,7 +27,7 @@ object CiUtils { } val platformName = when (target) { - TargetFormat.AppImage -> Platform.getCurrentPlatform() + null -> Platform.getCurrentPlatform() else -> { val packageFileExt = target.fileExtensionWithoutDot() requireNotNull(Platform.fromExecutableFileExtension(packageFileExt)) { @@ -41,9 +40,10 @@ object CiUtils { fun getFileOfPackagedTarget( baseOutputDir: File, - target: TargetFormat, + target: InstallerTargetFormat, ): File { - val folder = baseOutputDir.resolve(target.outputDirName) + val folder = baseOutputDir +// val folder = baseOutputDir.resolve(target.outputDirName) val exeFile = kotlin.runCatching { folder.walk().first { it.name.endsWith(target.fileExt) @@ -89,7 +89,7 @@ object CiUtils { fun movePackagedAndCreateSignature( appVersion: Version, packageName: String, - target: TargetFormat, + target: InstallerTargetFormat, basePackagedAppsDir: File, outputDir: File, ) { @@ -148,4 +148,4 @@ object CiUtils { */ } -private fun TargetFormat.fileExtensionWithoutDot() = fileExt.substring(".".length) \ No newline at end of file +private fun InstallerTargetFormat.fileExtensionWithoutDot() = fileExt.substring(".".length) \ No newline at end of file diff --git a/compositeBuilds/plugins/installer-plugin/build.gradle.kts b/compositeBuilds/plugins/installer-plugin/build.gradle.kts new file mode 100644 index 0000000..c817e9e --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + `kotlin-dsl` +} +repositories { + mavenCentral() +} +version = 1 +group = "ir.amirab.plugin" +dependencies { + implementation("ir.amirab.util:platform:1") + implementation(libs.handlebarsJava) +} +gradlePlugin { + plugins { + create("installer-plugin") { + id = "ir.amirab.installer-plugin" + implementationClass = "ir.amirab.installer.InstallerPlugin" + } + } +} \ No newline at end of file diff --git a/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerPlugin.kt b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerPlugin.kt new file mode 100644 index 0000000..b3191dd --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerPlugin.kt @@ -0,0 +1,61 @@ +package ir.amirab.installer + +import ir.amirab.installer.extensiion.InstallerPluginExtension +import ir.amirab.installer.tasks.windows.NsisTask +import ir.amirab.installer.utils.Constants +import ir.amirab.util.platform.Platform +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.register + +class InstallerPlugin : Plugin { + override fun apply(target: Project) { + val extension = target.extensions.create("installerPlugin", InstallerPluginExtension::class) + target.afterEvaluate { + registerTasks(target, extension) + } + } + + private fun registerTasks( + project: Project, + extension: InstallerPluginExtension + ) { + val windowConfig = extension.windowsConfig + val createInstallerTaskName = Constants.CREATE_INSTALLER_TASK_NAME + val createInstallerNsisTaskName = "${createInstallerTaskName}Nsis" + if (windowConfig != null) { + project.tasks + .register(createInstallerNsisTaskName) + .configure { + dependsOn(extension.taskDependencies.toTypedArray()) + this.nsisTemplate.set(requireNotNull(windowConfig.nsisTemplate) { "Nsis Template not provided" }) + this.commonParams.set(windowConfig) + this.extraParams.set(windowConfig.extraParams) + this.destFolder.set(extension.outputFolder.get().asFile) + this.outputFileName.set(requireNotNull(windowConfig.outputFileName) { " outputFileName not provided " }) + this.sourceFolder.set(requireNotNull(windowConfig.inputDir) { "inputDir not provided" }) + } + } + project.tasks.register(createInstallerTaskName) { + // when we want to create installer we need to prepare its input first! + when (val platform = Platform.getCurrentPlatform()) { + Platform.Desktop.Linux -> { + // nothing yet + } + + Platform.Desktop.MacOS -> { + // nothing yet + } + + Platform.Desktop.Windows -> { + if (windowConfig != null) { + dependsOn(createInstallerNsisTaskName) + } + } + + else -> error("unsupported platform: $platform") + } + } + } +} \ No newline at end of file diff --git a/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerTargetFormat.kt b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerTargetFormat.kt new file mode 100644 index 0000000..02957b4 --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/InstallerTargetFormat.kt @@ -0,0 +1,28 @@ +package ir.amirab.installer + +import ir.amirab.util.platform.Platform + + +enum class InstallerTargetFormat( + val id: String, + val targetOS: Platform, +) { + Deb("deb", Platform.Desktop.Linux), + Rpm("rpm", Platform.Desktop.Linux), + Dmg("dmg", Platform.Desktop.MacOS), + Pkg("pkg", Platform.Desktop.MacOS), + Exe("exe", Platform.Desktop.Windows), + Msi("msi", Platform.Desktop.Windows); + + val isCompatibleWithCurrentOS: Boolean by lazy { isCompatibleWith(Platform.getCurrentPlatform()) } + + fun isCompatibleWith(os: Platform): Boolean = os == targetOS + + val outputDirName: String + get() = id + + val fileExt: String + get() { + return ".$id" + } +} \ No newline at end of file diff --git a/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/extensiion/InstallerPluginExtension.kt b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/extensiion/InstallerPluginExtension.kt new file mode 100644 index 0000000..de45f67 --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/extensiion/InstallerPluginExtension.kt @@ -0,0 +1,85 @@ +package ir.amirab.installer.extensiion + +import ir.amirab.installer.InstallerTargetFormat +import ir.amirab.installer.utils.Constants +import ir.amirab.util.platform.Platform +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.tasks.TaskProvider +import java.io.File +import java.io.Serializable +import javax.inject.Inject + +abstract class InstallerPluginExtension { + @get:Inject + internal abstract val project: Project + + abstract val outputFolder: DirectoryProperty + + internal val taskDependencies = mutableListOf() + + fun dependsOn(vararg tasks: Any) { + taskDependencies.addAll(tasks) + } + + internal var windowsConfig: WindowsConfig? = null + private set + + fun windows( + config: WindowsConfig.() -> Unit + ) { + if (Platform.getCurrentPlatform() != Platform.Desktop.Windows) return + val windowsConfig = if (this.windowsConfig == null) { + WindowsConfig().also { + this.windowsConfig = it + } + } else { + this.windowsConfig!! + } + windowsConfig.config() + } + + val createInstallerTask: TaskProvider by lazy { + project.tasks.named(Constants.CREATE_INSTALLER_TASK_NAME) + } + + fun isThisPlatformSupported() = when (Platform.getCurrentPlatform()) { + Platform.Desktop.Windows -> windowsConfig != null + else -> { + false + } + } + + fun getCreatedInstallerTargetFormats(): List { + return buildList { + when (Platform.getCurrentPlatform()) { + Platform.Desktop.Windows -> { + if (windowsConfig != null) { + add(InstallerTargetFormat.Exe) + } + } + + else -> {} + } + } + } +} + +data class WindowsConfig( + var appName: String? = null, + var appDisplayName: String? = null, + var appVersion: String? = null, + var appDisplayVersion: String? = null, + var iconFile: File? = null, + var licenceFile: File? = null, + + var outputFileName: String? = null, + + var inputDir: File? = null, + + var nsisTemplate: File? = null, + + var extraParams: Map = emptyMap() +) : Serializable + diff --git a/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/tasks/windows/NsisTask.kt b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/tasks/windows/NsisTask.kt new file mode 100644 index 0000000..a6f4a6e --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/tasks/windows/NsisTask.kt @@ -0,0 +1,91 @@ +package ir.amirab.installer.tasks.windows + +import com.github.jknack.handlebars.Context +import com.github.jknack.handlebars.Handlebars +import ir.amirab.installer.extensiion.WindowsConfig +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.provider.MapProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.mapProperty +import java.io.ByteArrayInputStream +import java.io.File + +abstract class NsisTask : DefaultTask() { + + @get:InputDirectory + abstract val sourceFolder: DirectoryProperty + + @get:OutputDirectory + abstract val destFolder: DirectoryProperty + + @get:Input + abstract val outputFileName: Property + + @get:InputFile + abstract val nsisTemplate: Property + + @get:Input + abstract val commonParams: Property + + @get:Input + val extraParams: MapProperty = project.objects.mapProperty() + + @get:Internal + abstract val nsisExecutable: Property + + init { + nsisExecutable.convention( + project.provider { File("C:\\Program Files (x86)\\NSIS\\makensis.exe") } + ) + } + + private fun createHandleBarContext(): Context { + val commonParams = commonParams.get() + val common = mapOf( + "app_name" to commonParams.appName!!, + "app_display_name" to commonParams.appDisplayName!!, + "app_version" to commonParams.appVersion!!, + "app_display_version" to commonParams.appDisplayVersion!!, + "license_file" to commonParams.licenceFile!!, + "icon_file" to commonParams.iconFile!!, + ) + val overrides = mapOf( + "input_dir" to sourceFolder.get().asFile.absolutePath, + "output_file" to "${destFolder.file(outputFileName).get().asFile.path}.exe", + ) + return Context.newContext( + extraParams + .get() + .plus(common) + .plus(overrides) + ) + } + + @TaskAction + fun run() { + val executable = nsisExecutable.get() + val scriptTemplate = nsisTemplate.get() + val handlebars = Handlebars() + val context = createHandleBarContext() + val script = handlebars.compileInline( + scriptTemplate.readText() + ).apply(context) + logger.debug("NSIS Script:") + logger.debug(script) + project.exec { + executable( + executable, + ) + args("-") + standardInput = ByteArrayInputStream(script.toByteArray()) + + } + } +} \ No newline at end of file diff --git a/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/utils/Contants.kt b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/utils/Contants.kt new file mode 100644 index 0000000..214bb63 --- /dev/null +++ b/compositeBuilds/plugins/installer-plugin/src/main/kotlin/ir/amirab/installer/utils/Contants.kt @@ -0,0 +1,5 @@ +package ir.amirab.installer.utils + +internal object Constants { + const val CREATE_INSTALLER_TASK_NAME = "createInstaller" +} \ No newline at end of file diff --git a/compositeBuilds/plugins/settings.gradle.kts b/compositeBuilds/plugins/settings.gradle.kts index 13fc438..f51e35c 100644 --- a/compositeBuilds/plugins/settings.gradle.kts +++ b/compositeBuilds/plugins/settings.gradle.kts @@ -5,4 +5,5 @@ dependencyResolutionManagement{ } } } -include("git-version-plugin") \ No newline at end of file +include("git-version-plugin") +include("installer-plugin") \ No newline at end of file diff --git a/desktop/app/build.gradle.kts b/desktop/app/build.gradle.kts index bc69a3d..c88d0c6 100644 --- a/desktop/app/build.gradle.kts +++ b/desktop/app/build.gradle.kts @@ -1,8 +1,10 @@ import buildlogic.* import buildlogic.versioning.* +import ir.amirab.installer.InstallerTargetFormat import org.jetbrains.changelog.Changelog import org.jetbrains.compose.desktop.application.dsl.TargetFormat import ir.amirab.util.platform.Platform +import org.jetbrains.compose.desktop.application.dsl.TargetFormat.* plugins { id(MyPlugins.kotlin) @@ -12,9 +14,9 @@ plugins { id(Plugins.changeLog) id(Plugins.ksp) id(Plugins.aboutLibraries) + id("ir.amirab.installer-plugin") // id(MyPlugins.proguardDesktop) } - dependencies { implementation(libs.decompose) implementation(libs.decompose.jbCompose) @@ -102,7 +104,7 @@ compose { mainClass = "$desktopPackageName.AppKt" nativeDistributions { modules("java.instrument", "jdk.unsupported") - targetFormats(TargetFormat.Msi, TargetFormat.Deb) + targetFormats(Msi, Deb) if (Platform.getCurrentPlatform() == Platform.Desktop.Linux) { // filekit library requires this module in linux. modules("jdk.security.auth") @@ -114,21 +116,21 @@ compose { val menuGroupName = getPrettifiedAppName() licenseFile.set(rootProject.file("LICENSE")) linux { - debPackageVersion = getAppVersionStringForPackaging(TargetFormat.Deb) - rpmPackageVersion = getAppVersionStringForPackaging(TargetFormat.Rpm) + debPackageVersion = getAppVersionStringForPackaging(Deb) + rpmPackageVersion = getAppVersionStringForPackaging(Rpm) appCategory = "Network" iconFile = project.file("icons/icon.png") menuGroup = menuGroupName shortcut = true } macOS { - pkgPackageVersion = getAppVersionStringForPackaging(TargetFormat.Pkg) - dmgPackageVersion = getAppVersionStringForPackaging(TargetFormat.Dmg) + pkgPackageVersion = getAppVersionStringForPackaging(Pkg) + dmgPackageVersion = getAppVersionStringForPackaging(Dmg) iconFile = project.file("icons/icon.icns") } windows { - exePackageVersion = getAppVersionStringForPackaging(TargetFormat.Exe) - msiPackageVersion = getAppVersionStringForPackaging(TargetFormat.Msi) + exePackageVersion = getAppVersionStringForPackaging(Exe) + msiPackageVersion = getAppVersionStringForPackaging(Msi) upgradeUuid = properties["INSTALLER.WINDOWS.UPGRADE_UUID"]?.toString() iconFile = project.file("icons/icon.ico") console = false @@ -142,6 +144,32 @@ compose { } } +installerPlugin { + dependsOn("createReleaseDistributable") + outputFolder.set(layout.buildDirectory.dir("custom-installer")) + windows { + appName = getAppName() + appDisplayName = getPrettifiedAppName() + appVersion = getAppVersionStringForPackaging(Exe) + appDisplayVersion = getAppVersionString() + inputDir = project.file("build/compose/binaries/main-release/app/${getAppName()}") + outputFileName = getAppName() + licenceFile = rootProject.file("LICENSE") + iconFile = project.file("icons/icon.ico") + nsisTemplate = project.file("resources/installer/nsis-script-template.nsi") + extraParams = mapOf( + "app_publisher" to "abdownloadmanager.com", + "app_version_with_build" to "${getAppVersionStringForPackaging(Exe)}.0", + "source_code_url" to "https://github.com/amir1376/ab-download-manager", + "project_website" to "www.abdownloadmanager.com", + "copyright" to "© 2024-present AB Download Manager App", + "header_image_file" to project.file("resources/installer/abdm-header-image.bmp"), + "sidebar_image_file" to project.file("resources/installer/abdm-sidebar-image.bmp") + ) + + } +} + // generate a file with these constants buildConfig { @@ -240,27 +268,51 @@ val createDistributableAppArchive by tasks.registering { val createBinariesForCi by tasks.registering { val nativeDistributions = compose.desktop.application.nativeDistributions val mainRelease = nativeDistributions.outputBaseDir.dir("main-release") - dependsOn("packageReleaseDistributionForCurrentOS") + if (installerPlugin.isThisPlatformSupported()) { + dependsOn(installerPlugin.createInstallerTask) + inputs.dir(installerPlugin.outputFolder) + } else { + dependsOn("packageReleaseDistributionForCurrentOS") + inputs.dir(mainRelease) + } dependsOn(createDistributableAppArchive) inputs.property("appVersion", getAppVersionString()) - inputs.dir(mainRelease) inputs.dir(distributableAppArchiveDir) outputs.dir(ciDir.binariesDir) doLast { val output = ciDir.binariesDir.get().asFile val packageName = appPackageNameByComposePlugin output.deleteRecursively() - val allowedTarget = nativeDistributions.targetFormats.filter { it.isCompatibleWithCurrentOS } - for (target in allowedTarget) { - CiUtils.movePackagedAndCreateSignature( - getAppVersion(), - packageName, - target, - mainRelease.get().asFile, - output, - ) + + if (installerPlugin.isThisPlatformSupported()) { + val targets = installerPlugin.getCreatedInstallerTargetFormats() + for (target in targets) { + CiUtils.movePackagedAndCreateSignature( + getAppVersion(), + packageName, + target, + installerPlugin.outputFolder.get().asFile, + output, + ) + } + logger.lifecycle("app packages for '${targets.joinToString(", ") { it.name }}' written in $output using the installer plugin") + } else { + val allowedTargets = nativeDistributions + .targetFormats.filter { it.isCompatibleWithCurrentOS } + .map { + it.toInstallerTargetFormat() + } + for (target in allowedTargets) { + CiUtils.movePackagedAndCreateSignature( + getAppVersion(), + packageName, + target, + mainRelease.get().asFile.resolve(target.outputDirName), + output, + ) + } + logger.lifecycle("app packages for '${allowedTargets.joinToString(", ") { it.name }}' written in $output using compose packager tool") } - logger.lifecycle("app packages for '${allowedTarget.joinToString(", ") { it.name }}' written in $output") val appArchiveDistributableDir = distributableAppArchiveDir.get().asFile CiUtils.copyAndHashToDestination( distributableAppArchiveDir.get().asFile.resolve( @@ -272,7 +324,7 @@ val createBinariesForCi by tasks.registering { CiUtils.getTargetFileName( packageName, getAppVersion(), - TargetFormat.AppImage, + null, // this is not an installer (it will be automatically converted to current os name ) ) logger.lifecycle("distributable app archive written in ${output}") @@ -299,3 +351,15 @@ val createReleaseFolderForCi by tasks.registering { dependsOn(createBinariesForCi, createChangeNoteForCi) } // ======= end of GitHub action stuff + +fun TargetFormat.toInstallerTargetFormat(): InstallerTargetFormat { + return when (this) { + AppImage -> error("$this is not recognized as installer") + Deb -> InstallerTargetFormat.Deb + Rpm -> InstallerTargetFormat.Rpm + Dmg -> InstallerTargetFormat.Dmg + Pkg -> InstallerTargetFormat.Pkg + Exe -> InstallerTargetFormat.Exe + Msi -> InstallerTargetFormat.Msi + } +} diff --git a/desktop/app/resources/installer/abdm-header-image.bmp b/desktop/app/resources/installer/abdm-header-image.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b589a9608d21c03c041932bf61b6206f0fcf415b GIT binary patch literal 25818 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

(Yd%<0)KddDD>!3YN^VlO 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