Skip to content

Commit 39c2ebc

Browse files
prelim teamcity config changes (#14764)
1 parent 30ee849 commit 39c2ebc

2 files changed

Lines changed: 61 additions & 5 deletions

File tree

mmv1/third_party/terraform/.teamcity/components/builds/build_configuration_per_package.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ fun BuildConfigurationsForPackages(packages: Map<String, Map<String, String>>, p
2929
val displayName: String = info.getValue("displayName").toString()
3030

3131
val pkg = PackageDetails(packageName, displayName, providerName, parentProjectName, releaseDiffTest)
32-
val buildConfig = pkg.buildConfiguration(path, vcsRoot, sharedResources, environmentVariables, testPrefix = testPrefix)
32+
val buildConfig = pkg.buildConfiguration(path, vcsRoot, sharedResources, environmentVariables, testPrefix = testPrefix, releaseDiffTest = releaseDiffTest)
3333
list.add(buildConfig)
3434
}
3535

@@ -39,15 +39,15 @@ fun BuildConfigurationsForPackages(packages: Map<String, Map<String, String>>, p
3939
// BuildConfigurationForSinglePackage accepts details of a single package in a provider and returns a build configuration for it
4040
// Intended to be used in short-lived projects where we're testing specific packages, e.g. feature branch testing
4141
fun BuildConfigurationForSinglePackage(packageName: String, packagePath: String, packageDisplayName: String, providerName: String, parentProjectName: String, vcsRoot: GitVcsRoot, sharedResources: List<String>, environmentVariables: AccTestConfiguration, testPrefix: String = "TestAcc", releaseDiffTest: String = "false"): BuildType{
42-
val pkg = PackageDetails(packageName, packageDisplayName, providerName, parentProjectName, releaseDiffTest)
43-
return pkg.buildConfiguration(packagePath, vcsRoot, sharedResources, environmentVariables, testPrefix = testPrefix)
42+
val pkg = PackageDetails(packageName, packageDisplayName, providerName, parentProjectName, releaseDiffTest = releaseDiffTest)
43+
return pkg.buildConfiguration(packagePath, vcsRoot, sharedResources, environmentVariables, testPrefix = testPrefix, releaseDiffTest = releaseDiffTest)
4444
}
4545

4646
class PackageDetails(private val packageName: String, private val displayName: String, private val providerName: String, private val parentProjectName: String, private val releaseDiffTest: String) {
4747

4848
// buildConfiguration returns a BuildType for a service package
4949
// For BuildType docs, see https://teamcity.jetbrains.com/app/dsl-documentation/root/build-type/index.html
50-
fun buildConfiguration(path: String, vcsRoot: GitVcsRoot, sharedResources: List<String>, environmentVariables: AccTestConfiguration, buildTimeout: Int = DefaultBuildTimeoutDuration, testPrefix: String): BuildType {
50+
fun buildConfiguration(path: String, vcsRoot: GitVcsRoot, sharedResources: List<String>, environmentVariables: AccTestConfiguration, buildTimeout: Int = DefaultBuildTimeoutDuration, testPrefix: String, releaseDiffTest: String): BuildType {
5151
val testPrefix = "TestAcc"
5252
val testTimeout = "12"
5353

@@ -72,7 +72,11 @@ class PackageDetails(private val packageName: String, private val displayName: S
7272
tagBuildToIndicateTriggerMethod()
7373
configureGoEnv()
7474
downloadTerraformBinary()
75-
runAcceptanceTests()
75+
if (releaseDiffTest.toBoolean()) {
76+
runDiffTests()
77+
} else {
78+
runAcceptanceTests()
79+
}
7680
saveArtifactsToGCS()
7781
archiveArtifactsIfOverLimit() // Must be after push to GCS step, as this step impacts debug log files
7882
}

mmv1/third_party/terraform/.teamcity/components/builds/build_steps.kt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,55 @@ fun BuildSteps.archiveArtifactsIfOverLimit() {
226226
// https://youtrack.jetbrains.com/issue/KT-2425/Provide-a-way-for-escaping-the-dollar-sign-symbol-in-multiline-strings-and-string-templates
227227
})
228228
}
229+
230+
fun BuildSteps.runDiffTests() {
231+
if (UseTeamCityGoTest) {
232+
step(ScriptBuildStep {
233+
name = "Run Diff Tests"
234+
scriptContent = "go test -v \"%PACKAGE_PATH%\" -timeout=\"%TIMEOUT%h\" -test.parallel=\"%PARALLELISM%\" -run=\"%TEST_PREFIX%\" -json"
235+
})
236+
} else {
237+
step(ScriptBuildStep {
238+
name = "Compile Test Binary"
239+
workingDir = "%PACKAGE_PATH%"
240+
scriptContent = """
241+
#!/bin/bash
242+
export TEST_FILE_COUNT=$(ls ./*_test.go | wc -l)
243+
if test ${'$'}TEST_FILE_COUNT -gt "0"; then
244+
echo "Compiling test binary"
245+
go test -c -o test-binary
246+
else
247+
echo "Skipping compilation of test binary; no Go test files found"
248+
fi
249+
""".trimIndent()
250+
})
251+
252+
step(ScriptBuildStep {
253+
name = "Run via scripts/teamcitytestscripts/teamcity-diff-test"
254+
workingDir = "%PACKAGE_PATH%"
255+
scriptContent = """
256+
#!/bin/bash
257+
if ! test -f "./test-binary"; then
258+
echo "Skipping test execution; file ./test-binary does not exist."
259+
exit 0
260+
fi
261+
262+
echo "Compiling teamcity-diff-test..."
263+
pushd ../../../scripts/teamcitytestscripts > /dev/null
264+
go build -o ../../teamcity-diff-test .
265+
popd > /dev/null
266+
267+
268+
export TEST_COUNT=${'$'}(./test-binary -test.list="%TEST_PREFIX%" | wc -l)
269+
echo "Found ${'$'}{TEST_COUNT} tests that match the given test prefix %TEST_PREFIX%"
270+
if test ${'$'}TEST_COUNT -le "0"; then
271+
echo "Skipping test execution; no tests to run"
272+
exit 0
273+
fi
274+
275+
echo "Starting tests"
276+
./test-binary -test.list="%TEST_PREFIX%" | ../../../teamcity-diff-test -test ./test-binary -parallelism "%PARALLELISM%" -timeout "%TIMEOUT%h"
277+
""".trimIndent()
278+
})
279+
}
280+
}

0 commit comments

Comments
 (0)