diff --git a/.teamcity/src/subprojects/train/TriggerProjectSamplesOnEAP.kt b/.teamcity/src/subprojects/train/TriggerProjectSamplesOnEAP.kt index 12302e23..0e5bbec8 100644 --- a/.teamcity/src/subprojects/train/TriggerProjectSamplesOnEAP.kt +++ b/.teamcity/src/subprojects/train/TriggerProjectSamplesOnEAP.kt @@ -2,14 +2,17 @@ package subprojects.train import jetbrains.buildServer.configs.kotlin.* import jetbrains.buildServer.configs.kotlin.buildFeatures.notifications +import jetbrains.buildServer.configs.kotlin.buildSteps.script import jetbrains.buildServer.configs.kotlin.failureConditions.BuildFailureOnText import jetbrains.buildServer.configs.kotlin.failureConditions.failOnText +import jetbrains.buildServer.configs.kotlin.triggers.finishBuildTrigger import subprojects.* import subprojects.build.* import subprojects.build.samples.* object EapConstants { const val PUBLISH_EAP_BUILD_TYPE_ID = "KtorPublish_AllEAP" + const val PUBLISH_BUILD_PLUGIN_TYPE_ID = "KtorGradleBuildPlugin_Publish" } object TriggerProjectSamplesOnEAP : Project({ @@ -32,14 +35,46 @@ object TriggerProjectSamplesOnEAP : Project({ params { defaultGradleParams() - param("env.KTOR_VERSION", "%dep.KtorPublish_AllEAP.build.number%") param("teamcity.build.skipDependencyBuilds", "true") + param("teamcity.runAsFirstBuild", "true") } - dependencies { - artifacts(RelativeId(EapConstants.PUBLISH_EAP_BUILD_TYPE_ID)) { - artifactRules = "" - buildRule = lastSuccessful() + steps { + script { + name = "Get latest EAP version from Maven metadata" + scriptContent = """ + #!/bin/bash + set -e + + # Fetch the latest EAP version from the Ktor BOM metadata + METADATA_URL="https://maven.pkg.jetbrains.space/public/p/ktor/eap/io/ktor/ktor-bom/maven-metadata.xml" + echo "Fetching metadata from ${'$'}METADATA_URL" + + # Create a temporary file for the metadata + TEMP_FILE=$(mktemp) + + # Download the metadata file + if ! curl -s "${'$'}METADATA_URL" -o "${'$'}TEMP_FILE"; then + echo "Failed to download metadata from ${'$'}METADATA_URL" + rm -f "${'$'}TEMP_FILE" + exit 1 + fi + + # Extract the latest version using grep and sed + # This pattern looks for a version tag + LATEST_VERSION=$(grep -o '[^<]*' "${'$'}TEMP_FILE" | sed 's/\(.*\)<\/latest>/\1/') + + # Clean up temp file + rm -f "${'$'}TEMP_FILE" + + if [ -z "${'$'}LATEST_VERSION" ]; then + echo "Failed to extract latest version from metadata" + exit 1 + fi + + echo "Latest Ktor EAP version: ${'$'}LATEST_VERSION" + echo "##teamcity[setParameter name='env.KTOR_VERSION' value='${'$'}LATEST_VERSION']" + """.trimIndent() } } @@ -72,6 +107,7 @@ object TriggerProjectSamplesOnEAP : Project({ params { param("env.KTOR_VERSION", "%dep.KtorEAPVersionResolver.env.KTOR_VERSION%") + param("teamcity.build.skipDependencyBuilds", "true") } dependencies { @@ -79,6 +115,7 @@ object TriggerProjectSamplesOnEAP : Project({ snapshot { onDependencyFailure = FailureAction.FAIL_TO_START onDependencyCancel = FailureAction.FAIL_TO_START + reuseBuilds = ReuseBuilds.SUCCESSFUL } } } @@ -124,12 +161,22 @@ object TriggerProjectSamplesOnEAP : Project({ params { param("env.KTOR_VERSION", "%dep.KtorEAPVersionResolver.env.KTOR_VERSION%") + param("env.USE_LATEST_KTOR_GRADLE_PLUGIN", "true") + } requirements { agent(Agents.OS.Linux, hardwareCapacity = Agents.MEDIUM) } + triggers { + finishBuildTrigger { + buildType = EapConstants.PUBLISH_BUILD_PLUGIN_TYPE_ID + successfulOnly = true + branchFilter = "+:*" + } + } + dependencies { dependency(RelativeId("KtorEAPVersionResolver")) { snapshot { @@ -163,6 +210,14 @@ object TriggerProjectSamplesOnEAP : Project({ equals("env.ANDROID_HOME", "%android-sdk.location%") } + triggers { + finishBuildTrigger { + buildType = EapConstants.PUBLISH_EAP_BUILD_TYPE_ID + successfulOnly = true + branchFilter = "+:*" + } + } + dependencies { dependency(RelativeId("KtorEAPVersionResolver")) { snapshot { @@ -192,6 +247,7 @@ object TriggerProjectSamplesOnEAP : Project({ defaultGradleParams() param("env.GIT_BRANCH", "%teamcity.build.branch%") param("env.KTOR_VERSION", "%dep.KtorEAPVersionResolver.env.KTOR_VERSION%") + param("teamcity.build.skipDependencyBuilds", "true") } dependencies {