Skip to content

Commit d72cb5c

Browse files
authored
teamcity/sweepers: replace flags to envvars to use teamcity-go-test command (#15783)
1 parent 80324e4 commit d72cb5c

File tree

2 files changed

+57
-45
lines changed

2 files changed

+57
-45
lines changed

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

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,46 @@ fun BuildSteps.downloadTerraformBinary() {
7777

7878
// RunSweepers runs sweepers, and relies on set build configuration parameters
7979
fun BuildSteps.runSweepers(sweeperStepName: String) {
80-
step(ScriptBuildStep{
80+
step(ScriptBuildStep {
81+
name = "Compile Sweeper Test Binary"
82+
workingDir = "%PACKAGE_PATH%"
83+
scriptContent = """
84+
#!/bin/bash
85+
export TEST_FILE_COUNT=$(ls ./*_test.go | wc -l)
86+
if test ${'$'}TEST_FILE_COUNT -gt "0"; then
87+
echo "Compiling sweeper test binary"
88+
go test -c -o test-binary
89+
else
90+
echo "Skipping compilation of test binary; no Go test files found"
91+
fi
92+
""".trimIndent()
93+
})
94+
95+
step(ScriptBuildStep {
8196
name = sweeperStepName
82-
scriptContent = "go test -v \"%PACKAGE_PATH%\" -run=\"%TEST_PREFIX%\" -sweep=\"%SWEEPER_REGIONS%\" -sweep-allow-failures -sweep-run=\"%SWEEP_RUN%\" -timeout 30m -json"
97+
workingDir = "%PACKAGE_PATH%"
98+
scriptContent = """
99+
#!/bin/bash
100+
if ! test -f "./test-binary"; then
101+
echo "Skipping sweeper execution; file ./test-binary does not exist."
102+
exit 0
103+
fi
104+
105+
# Set sweeper environment variables
106+
export SWEEPER_REGIONS="%SWEEPER_REGIONS%"
107+
export SWEEP_ALLOW_FAILURES="true"
108+
export SWEEP_RUN="%SWEEP_RUN%"
109+
110+
export TEST_COUNT=${'$'}(./test-binary -test.list="%TEST_PREFIX%" | wc -l)
111+
echo "Found ${'$'}{TEST_COUNT} sweeper tests that match the given test prefix %TEST_PREFIX%"
112+
if test ${'$'}TEST_COUNT -le "0"; then
113+
echo "Skipping sweeper execution; no tests to run"
114+
exit 0
115+
fi
116+
117+
echo "Starting sweeper tests"
118+
./test-binary -test.list="%TEST_PREFIX%" | teamcity-go-test -test ./test-binary -parallelism "%PARALLELISM%" -timeout "%TIMEOUT%h"
119+
""".trimIndent()
83120
})
84121
}
85122

mmv1/third_party/terraform/sweeper/hashi_sweeper_fork.go

Lines changed: 18 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package sweeper
22

33
import (
4-
"flag"
54
"fmt"
65
"log"
6+
"os"
77
"strings"
88
"testing"
99

@@ -33,46 +33,21 @@ type SweeperListFunc func(ResourceAction) error
3333
type ResourceAction func(*transport_tpg.Config, *tpgresource.ResourceDataMock, map[string]interface{}) error
3434

3535
var (
36-
flagSweep *string
37-
flagSweepAllowFailures *bool
38-
flagSweepRun *string
39-
sweeperInventory map[string]*Sweeper
36+
sweeperInventory map[string]*Sweeper
4037
)
4138

4239
func init() {
4340
sweeperInventory = make(map[string]*Sweeper)
4441
}
4542

46-
// registerFlags checks for and gets existing flag definitions before trying to redefine them.
47-
func registerFlags() {
48-
// Check for existing flags in global CommandLine
49-
if f := flag.Lookup("sweep"); f != nil {
50-
// Use the Value.Get() interface to get the values
51-
if getter, ok := f.Value.(flag.Getter); ok {
52-
vs := getter.Get().(string)
53-
flagSweep = &vs
54-
}
55-
if f := flag.Lookup("sweep-allow-failures"); f != nil {
56-
if getter, ok := f.Value.(flag.Getter); ok {
57-
vb := getter.Get().(bool)
58-
flagSweepAllowFailures = &vb
59-
}
60-
}
61-
if f := flag.Lookup("sweep-run"); f != nil {
62-
if getter, ok := f.Value.(flag.Getter); ok {
63-
vs := getter.Get().(string)
64-
flagSweepRun = &vs
65-
}
66-
}
67-
} else {
68-
// Define our flags if they don't exist
69-
fsDefault := ""
70-
fsafDefault := true
71-
fsrDefault := ""
72-
flagSweep = &fsDefault
73-
flagSweepAllowFailures = &fsafDefault
74-
flagSweepRun = &fsrDefault
75-
}
43+
// getSweeperConfig reads sweeper configuration from environment variables.
44+
func getSweeperConfig() (string, bool, string) {
45+
envSweepRegions := os.Getenv("SWEEPER_REGIONS")
46+
47+
envSweepAllowFailures := os.Getenv("SWEEP_ALLOW_FAILURES") == "true"
48+
49+
envSweepRun := os.Getenv("SWEEP_RUN")
50+
return envSweepRegions, envSweepAllowFailures, envSweepRun
7651
}
7752

7853
// AddTestSweepers function adds a sweeper configuration to the inventory
@@ -104,16 +79,16 @@ func GetSweeper(name string) (*Sweeper, bool) {
10479

10580
// ExecuteSweepers runs registered sweepers for specified regions
10681
func ExecuteSweepers(t *testing.T) {
107-
registerFlags()
108-
flag.Parse()
109-
if *flagSweep != "" {
110-
// parse flagSweep contents for regions to run
111-
regions := strings.Split(*flagSweep, ",")
82+
sweepRegions, allowFailures, sweepRun := getSweeperConfig()
83+
84+
if sweepRegions != "" {
85+
// parse sweepRegions contents for regions to run
86+
regions := strings.Split(sweepRegions, ",")
11287

113-
// get filtered list of sweepers to run based on sweep-run flag
114-
sweepers := filterSweepers(*flagSweepRun, sweeperInventory)
88+
// get filtered list of sweepers to run based on sweep-run
89+
sweepers := filterSweepers(sweepRun, sweeperInventory)
11590

116-
if err := runSweepers(t, regions, sweepers, *flagSweepAllowFailures); err != nil {
91+
if err := runSweepers(t, regions, sweepers, allowFailures); err != nil {
11792
t.Errorf("error running sweepers: %v", err)
11893
}
11994
} else {

0 commit comments

Comments
 (0)