JetBrain_Junie_AI_Agent.kt (64 lines of code) (raw):
import jetbrains.buildServer.configs.kotlin.BuildType
import jetbrains.buildServer.configs.kotlin.Parameter
import jetbrains.buildServer.configs.kotlin.ParameterSpecPassword
import jetbrains.buildServer.configs.kotlin.Project
import jetbrains.buildServer.configs.kotlin.buildSteps.script
import java.io.File
const val agentJunie = "Junie"
object JetBrain_Junie_AI_Agent : Project({
id("JetBrains_Junie")
name = "JetBrains Junie AI Agent"
buildType(DownloadJunie)
val tenTasksSet = mutableListOf<Task>()
val thirtyTasksSet = mutableListOf<Task>()
val fiftyTasksSet = mutableListOf<Task>()
subProject({
id("SWE_Bench_Lite_${agentJunie}_Tasks")
name = "SWE-Bench Lite Tasks"
tasks.forEachIndexed { index, task ->
val taskConfiguration = createTaskForJunieBuildType(task)
if (index % 10 == 0 && tenTasksSet.size < 10) tenTasksSet.add(taskConfiguration)
if (index % 7 == 0 && thirtyTasksSet.size < 30) thirtyTasksSet.add(taskConfiguration)
if (index % 5 == 0 && fiftyTasksSet.size < 50) fiftyTasksSet.add(taskConfiguration)
buildType(taskConfiguration)
}
})
buildType(create_SWE_Bench_Lite_XxTaskSlice(tenTasksSet,agentJunie))
buildType(create_SWE_Bench_Lite_XxTaskSlice(thirtyTasksSet, agentJunie))
buildType(create_SWE_Bench_Lite_XxTaskSlice(fiftyTasksSet, agentJunie))
})
object DownloadJunie: BuildType({
name = "Download Junie"
id("DownloadJetBrainsJunie")
steps {
script {
scriptContent = """
echo "Downloading Junie ..."
curl -L -o junie.zip "https://github.com/jetbrains-junie/junie/releases/download/236.1/junie-cloud-eap-251.236.1-linux-amd64.zip"
unzip junie.zip -d .
rm -f junie.zip
echo "Downloading Idea ..."
curl -L -o idea.tar.gz "https://download.jetbrains.com/idea/ideaIU-2025.1.2.tar.gz"
echo "Repacking Idea ..."
tar xzf idea.tar.gz
rm -f idea.tar.gz
mv idea* idea
""".trimIndent()
}
}
artifactRules = """
+:junie => agent.zip!/junie
+:idea => agent.zip!/ide
""".trimIndent()
})
fun createTaskForJunieBuildType(taskEnv: Task) = createTaskForAgentBuildType(
agentJunie,
taskEnv,
DownloadJunie,
listOf(
Parameter("env.EJ_FOLDER_WORK", "%teamcity.build.workingDir%/.junie"),
Parameter("env.EJ_IDE_LOCATION", "%teamcity.build.workingDir%/ide"),
Parameter("env.EJ_AUTH_INGRAZZIO_TOKEN", "credentialsJSON:0feb5b92-0768-4e92-884d-48fe77b85a46", ParameterSpecPassword(readOnly = false))
),
File("scripts/run_junie.sh"),
".junie/** => junie.zip"
)