import org.jetbrains.compose.internal.publishing.* plugins { signing } val mavenCentral = MavenCentralProperties(project) if (mavenCentral.signArtifacts) { signing.useInMemoryPgpKeys( mavenCentral.signArtifactsKey.get(), mavenCentral.signArtifactsPassword.get() ) } val publishingDir = project.layout.buildDirectory.dir("publishing") val originalArtifactsRoot = publishingDir.map { it.dir("original") } val preparedArtifactsRoot = publishingDir.map { it.dir("prepared") } val modulesFile = publishingDir.map { it.file("modules.txt") } val findComposeModules by tasks.registering(FindModulesInSpaceTask::class) { requestedCoordinates.set(mavenCentral.coordinates) spaceInstanceUrl.set("https://public.jetbrains.space") spaceClientId.set(System.getenv("COMPOSE_REPO_USERNAME") ?: "") spaceClientSecret.set(System.getenv("COMPOSE_REPO_KEY") ?: "") spaceProjectId.set(System.getenv("COMPOSE_DEV_REPO_PROJECT_ID") ?: "") spaceRepoId.set(System.getenv("COMPOSE_DEV_REPO_REPO_ID") ?: "") modulesTxtFile.set(modulesFile) } val downloadArtifactsFromComposeDev by tasks.registering(DownloadFromSpaceMavenRepoTask::class) { dependsOn(findComposeModules) modulesToDownload.set(project.provider { readComposeModules( modulesFile, originalArtifactsRoot ) }) spaceRepoUrl.set("https://maven.pkg.jetbrains.space/public/p/compose/dev") } val fixModulesBeforePublishing by tasks.registering(FixModulesBeforePublishingTask::class) { dependsOn(downloadArtifactsFromComposeDev) inputRepoDir.set(originalArtifactsRoot) outputRepoDir.set(preparedArtifactsRoot) } val reuploadArtifactsToMavenCentral by tasks.registering(UploadToSonatypeTask::class) { dependsOn(fixModulesBeforePublishing) modulesToUpload.set(project.provider { readComposeModules(modulesFile, preparedArtifactsRoot) }) sonatypeServer.set("https://oss.sonatype.org") user.set(mavenCentral.user) password.set(mavenCentral.password) autoCommitOnSuccess.set(mavenCentral.autoCommitOnSuccess) stagingProfileName.set(mavenCentral.stage) stagingDescription.set(mavenCentral.description) } fun readComposeModules( modulesFile: Provider, repoRoot: Provider ): List = modulesFile.get().asFile.readLines() .filter { it.isNotBlank() } .map { line -> val (group, artifact, version) = line.split(":") ModuleToUpload( groupId = group, artifactId = artifact, version = version, localDir = repoRoot.get().asFile.resolve("$group/$artifact/$version") ) }