Skip to content

Commit

Permalink
Try fixing snapshot publishing
Browse files Browse the repository at this point in the history
Signed-off-by: Lazar Mitrović <[email protected]>
  • Loading branch information
lazar-mitrovic committed Aug 17, 2022
1 parent 1f3e9fd commit 3eacda3
Show file tree
Hide file tree
Showing 10 changed files with 78 additions and 89 deletions.
5 changes: 0 additions & 5 deletions build-logic/aggregator/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,3 @@ repositories {
mavenCentral()
gradlePluginPortal()
}

dependencies {
implementation(libs.jgit)
implementation(libs.jsch)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import org.gradle.api.publish.plugins.PublishingPlugin
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.bundling.Zip
import org.gradle.kotlin.dsl.*
import java.nio.file.Files.createTempDirectory

/*
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
Expand Down Expand Up @@ -124,7 +125,7 @@ val updateSamples by tasks.registering
mapOf(
"updateSamplesDir" to "samples",
"updateMavenReprosDir" to "native-maven-plugin/reproducers"
).forEach { taskName, dir ->
).forEach { (taskName, dir) ->
val t = tasks.register<org.graalvm.build.samples.SamplesUpdateTask>(taskName) {
inputDirectory.set(layout.projectDirectory.dir(dir))
versions.put("native.gradle.plugin.version", nativeBuildToolsVersion)
Expand All @@ -138,37 +139,46 @@ mapOf(
}
}

val snapshotDir: File = createTempDirectory("snapshot-repo").toFile()
// val snapshotDir: File = snapshotsRepo.get().asFile.toPath().resolve("native-build-tools").toFile()
// Having nested git directories tend to break for me, so for now we'll use temp directory every time.

val cloneSnapshots = tasks.register<org.graalvm.build.tasks.GitClone>("cloneSnapshotRepository") {
repositoryUri.set("[email protected]:graalvm/native-build-tools.git")
// repositoryUri.set(file(".").absolutePath)
repositoryDirectory.set(layout.buildDirectory.dir("snapshots"))
repositoryDirectory.set(snapshotDir)
branch.set("snapshots")
}

val prepareRepository = tasks.register<org.graalvm.build.tasks.GitReset>("resetHead") {
dependsOn(cloneSnapshots)
repositoryDirectory.set(layout.buildDirectory.dir("snapshots"))
mode.set(org.eclipse.jgit.api.ResetCommand.ResetType.HARD)
repositoryDirectory.set(snapshotDir)
mode.set("hard")
ref.set("25ecdec020f57dbe980eeb052c71659ccd0d9bcc")
}

val addSnapshots = tasks.register<org.graalvm.build.tasks.GitAdd>("addSnapshots") {
val copySnapshots = tasks.register<Copy>("copySnapshots") {
dependsOn(prepareRepository)
repositoryDirectory.set(layout.buildDirectory.dir("snapshots"))
pattern.set("org/")
from(snapshotsRepo.get().asFile.toPath())
into(snapshotDir)
include("org/**")
}

val addSnapshots = tasks.register<org.graalvm.build.tasks.GitAdd>("addSnapshots") {
dependsOn(copySnapshots)
repositoryDirectory.set(snapshotDir)
pattern.set("*")
}

val commitSnapshots = tasks.register<org.graalvm.build.tasks.GitCommit>("commitSnapshots") {
dependsOn(addSnapshots)
repositoryDirectory.set(layout.buildDirectory.dir("snapshots"))
repositoryDirectory.set(snapshotDir)
message.set("Publishing new snapshot")
amend.set(false)
}

val pushSnapshots = tasks.register<org.graalvm.build.tasks.GitPush>("pushSnapshots") {
dependsOn(commitSnapshots)
repositoryDirectory.set(layout.buildDirectory.dir("snapshots"))
repositoryDirectory.set(snapshotDir)
force.set(true)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,36 +41,47 @@

package org.graalvm.build.tasks

import com.jcraft.jsch.JSch
import org.eclipse.jgit.transport.SshSessionFactory
import org.eclipse.jgit.transport.JschConfigSessionFactory
import org.eclipse.jgit.transport.OpenSshConfig

import com.jcraft.jsch.Session
import org.eclipse.jgit.util.FS

import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.Internal
import org.gradle.kotlin.dsl.setEnvironment
import org.gradle.process.ExecOperations
import org.gradle.process.ExecSpec
import javax.inject.Inject

abstract class AbstractGitTask : DefaultTask() {
@get:Internal
val sshSessionFactory: SshSessionFactory = object : JschConfigSessionFactory() {
override fun configure(host: OpenSshConfig.Host, session: Session) {
session.setConfig("StrictHostKeyChecking", "no")
session.setConfig("PreferredAuthentications", "publickey")
session.setConfig("IdentitiesOnly", "yes")

@get:InputDirectory
abstract val repositoryDirectory: DirectoryProperty

@get:Inject
abstract val execOperations: ExecOperations

protected fun runGit(vararg args: String) {
runGit(args.asList())
}

protected fun runGit(args: List<String>) {
val command = ArrayList<String>()
command.add(0, "git")
command.addAll(args)
println("Running git with `${command.joinToString(separator=" ")}`")

val result = execOperations.exec {
commandLine(command)
val newEnvironment = java.util.HashMap(environment)
newEnvironment["GIT_SSH_COMMAND"] = "ssh " +
"-o StrictHostKeyChecking=no " +
"-o PreferredAuthentications=publickey " +
"-o IdentitiesOnly=yes"
environment = newEnvironment
setWorkingDir(repositoryDirectory.asFile)
}

override fun createDefaultJSch(fs: FS?): JSch {
return super.createDefaultJSch(fs).also {
val identityFile = System.getProperty("user.home") + "/.ssh/id_rsa"
it.addIdentity(identityFile)
}
val retCode = result.exitValue
if (retCode != 0) {
throw RuntimeException("Git process exited with return code $retCode")
}
}

@get:InputDirectory
abstract val repositoryDirectory: DirectoryProperty
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@

package org.graalvm.build.tasks

import org.eclipse.jgit.api.Git
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
Expand All @@ -52,8 +51,6 @@ abstract class GitAdd : AbstractGitTask() {

@TaskAction
fun execute() {
Git.open(repositoryDirectory.asFile.get()).use {
it.add().addFilepattern(pattern.get()).call()
}
runGit("add", pattern.get())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@

package org.graalvm.build.tasks

import org.eclipse.jgit.api.Git
import org.eclipse.jgit.transport.SshTransport
import org.eclipse.jgit.util.FileUtils
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
Expand All @@ -52,7 +49,7 @@ import org.gradle.api.tasks.TaskAction

abstract class GitClone : AbstractGitTask() {
@get:OutputDirectory
override abstract val repositoryDirectory: DirectoryProperty
abstract override val repositoryDirectory: DirectoryProperty

@get:Input
abstract val repositoryUri: Property<String>
Expand All @@ -63,23 +60,16 @@ abstract class GitClone : AbstractGitTask() {
@TaskAction
fun execute() {
val repoDir = repositoryDirectory.asFile.get()
if (repoDir.exists()) {
while (repoDir.exists()) {
// TODO: There seems to be a task ordering / race condition issue here since `deleteRecursively` fails
// several times in a row.
println("Deleting $repoDir")
FileUtils.delete(repoDir, FileUtils.RECURSIVE)
repoDir.deleteRecursively()
}
repoDir.mkdirs()
val repo = repositoryUri.get()
val branch = this.branch.get()
println("Cloning $repo branch '$branch' into '${repoDir}'...")
Git.cloneRepository()
.setURI(repo)
.setBranch(branch)
.setDirectory(repoDir)
.setTransportConfigCallback { transport ->
val sshTransport: SshTransport = transport as SshTransport
sshTransport.sshSessionFactory = sshSessionFactory
}
.call()
.close()
runGit("clone", "--branch", branch, repo, ".")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@

package org.graalvm.build.tasks

import org.eclipse.jgit.api.Git
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
Expand All @@ -55,13 +54,10 @@ abstract class GitCommit : AbstractGitTask() {

@TaskAction
fun execute() {
Git.open(repositoryDirectory.asFile.get()).use {
it.commit()
.setAll(true)
.setMessage(message.get())
.setAmend(amend.get())
.setSign(false)
.call()
val cmd = arrayListOf("commit", "-a", "-m", message.get())
if (amend.get()) {
cmd.add("--amend")
}
runGit(cmd)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@

package org.graalvm.build.tasks

import org.eclipse.jgit.api.Git
import org.eclipse.jgit.transport.SshTransport
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
Expand All @@ -53,14 +51,11 @@ abstract class GitPush : AbstractGitTask() {

@TaskAction
fun execute() {
Git.open(repositoryDirectory.asFile.get()).use {
it.push()
.setTransportConfigCallback { transport ->
val sshTransport: SshTransport = transport as SshTransport
sshTransport.sshSessionFactory = sshSessionFactory
}
.setForce(force.get())
.call()
val cmd = arrayListOf("push")
if (force.get()) {
cmd.add("-f")
}
println("Pushing to remote Git repository")
runGit(cmd)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@

package org.graalvm.build.tasks

import org.eclipse.jgit.api.Git
import org.eclipse.jgit.api.ResetCommand
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
Expand All @@ -52,15 +50,16 @@ abstract class GitReset : AbstractGitTask() {
abstract val ref: Property<String>

@get:Input
abstract val mode: Property<ResetCommand.ResetType>
abstract val mode: Property<String>


@TaskAction
fun execute() {
Git.open(repositoryDirectory.asFile.get()).use {
it.reset()
.setRef(ref.get())
.setMode(mode.get())
.call()
val cmd = arrayListOf("reset")
if (mode.isPresent) {
cmd.add("--${mode.get().toLowerCase()}")
}
cmd.add(ref.get())
runGit(cmd)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,6 @@ plugins.withId("java-test-fixtures") {

// Get a handle on the software component factory
interface Services {
@javax.inject.Inject
@Inject
fun getSoftwareComponentFactory(): SoftwareComponentFactory
}
4 changes: 0 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ junitJupiter = "5.8.1"
aether = "1.1.0"
slf4j = "1.7.9"
groovy = "3.0.11"
jgit = "5.12.0.202106070339-r"
jetty = "11.0.11"

[libraries]
Expand Down Expand Up @@ -54,7 +53,4 @@ maven-wagon-provider = { module = "org.apache.maven.wagon:wagon-provider-api", v

slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }

jgit = { module = "org.eclipse.jgit:org.eclipse.jgit", version.ref = "jgit" }
jsch = { module = "org.eclipse.jgit:org.eclipse.jgit.ssh.jsch", version.ref="jgit" }

jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" }

0 comments on commit 3eacda3

Please sign in to comment.