Skip to content

Commit d404471

Browse files
committed
fix: filter prime releases from testing
Signed-off-by: matttrach <matt.trachier@suse.com>
1 parent f00468f commit d404471

3 files changed

Lines changed: 119 additions & 44 deletions

File tree

test/scripts/runningPods.sh

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/bin/bash
2+
set -x
3+
4+
JSONPATH="'{range .items[*]}
5+
{.metadata.name}{\"\\t\"} \
6+
{.metadata.namespace}{\"\\t\"} \
7+
{.status.phase}{\"\\n\"} \
8+
{end}'"
9+
10+
notReady() {
11+
PODS=$(kubectl get pods -A -o jsonpath="$JSONPATH")
12+
# shellcheck disable=SC2060,SC2140
13+
NOT_READY=$(echo "$PODS" | grep -v "Running" | grep -v "Succeeded" | tr -d ["\t","\n"," ","'"] || true)
14+
if [ -n "$NOT_READY" ]; then
15+
# Some pods aren't running
16+
return 0
17+
else
18+
# All pods are running
19+
return 1
20+
fi
21+
}
22+
23+
TIMEOUT=10 # 10 minutes
24+
TIMEOUT_MINUTES=$((TIMEOUT * 60))
25+
INTERVAL=30 # 30 seconds
26+
MAX=$((TIMEOUT_MINUTES / INTERVAL))
27+
INDEX=0
28+
29+
while notReady; do
30+
if [[ $INDEX -lt $MAX ]]; then
31+
echo "Waiting for pods to be ready..."
32+
INDEX=$((INDEX + 1))
33+
sleep $INTERVAL;
34+
else
35+
echo "Timeout reached. Pods are not ready..."
36+
echo "nodes..."
37+
kubectl get nodes || true
38+
echo "all..."
39+
kubectl get all -A || true
40+
echo "pods..."
41+
kubectl get pods -A || true
42+
exit 1
43+
fi
44+
done
45+
46+
echo "Pods are ready..."
47+
48+
echo "nodes..."
49+
kubectl get nodes || true
50+
echo "all..."
51+
kubectl get all -A || true
52+
echo "pods..."
53+
kubectl get pods -A || true
54+
55+
exit 0

test/tests/one/one_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ func TestOneBasic(t *testing.T) {
103103
t.Fatalf("Error creating cluster: %s", err)
104104
}
105105
util.CheckReady(t, testDir + "/kubeconfig")
106+
util.CheckRunning(t, testDir + "/kubeconfig")
106107
if t.Failed() {
107108
t.Log("Test failed...")
108109
} else {

test/tests/util.go

Lines changed: 63 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ import (
2222
)
2323

2424
func GetRancherReleases() (string, string, string, error) {
25-
releases, err := getRancherReleases()
25+
releases, err := getReleases("rancher", "rancher")
2626
if err != nil {
2727
return "", "", "", err
2828
}
29-
versions := filterPrerelease(releases)
29+
filterPrerelease(&releases)
30+
filterPrimeOnly(&releases)
31+
versions := getVersionsFromReleases(&releases)
3032
if len(versions) == 0 {
3133
return "", "", "", errors.New("no eligible versions found")
3234
}
@@ -46,35 +48,13 @@ func GetRancherReleases() (string, string, string, error) {
4648
return latest, stable, lts, nil
4749
}
4850

49-
func getRancherReleases() ([]*github.RepositoryRelease, error) {
50-
githubToken := os.Getenv("GITHUB_TOKEN")
51-
if githubToken == "" {
52-
fmt.Println("GITHUB_TOKEN environment variable not set")
53-
return nil, errors.New("GITHUB_TOKEN environment variable not set")
54-
}
55-
56-
// Create a new OAuth2 token using the GitHub token
57-
tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: githubToken})
58-
tokenClient := oauth2.NewClient(context.Background(), tokenSource)
59-
60-
// Create a new GitHub client using the authenticated HTTP client
61-
client := github.NewClient(tokenClient)
62-
63-
var releases []*github.RepositoryRelease
64-
releases, _, err := client.Repositories.ListReleases(context.Background(), "rancher", "rancher", &github.ListOptions{})
65-
if err != nil {
66-
return nil, err
67-
}
68-
69-
return releases, nil
70-
}
71-
7251
func GetRke2Releases() (string, string, string, error) {
73-
releases, err := getRke2Releases()
52+
releases, err := getReleases("rancher", "rke2")
7453
if err != nil {
7554
return "", "", "", err
7655
}
77-
versions := filterPrerelease(releases)
56+
filterPrerelease(&releases)
57+
versions := getVersionsFromReleases(&releases)
7858
if len(versions) == 0 {
7959
return "", "", "", errors.New("no eligible versions found")
8060
}
@@ -94,7 +74,7 @@ func GetRke2Releases() (string, string, string, error) {
9474
return latest, stable, lts, nil
9575
}
9676

97-
func getRke2Releases() ([]*github.RepositoryRelease, error) {
77+
func getReleases(org string, repo string) ([]*github.RepositoryRelease, error) {
9878
githubToken := os.Getenv("GITHUB_TOKEN")
9979
if githubToken == "" {
10080
fmt.Println("GITHUB_TOKEN environment variable not set")
@@ -109,30 +89,46 @@ func getRke2Releases() ([]*github.RepositoryRelease, error) {
10989
client := github.NewClient(tokenClient)
11090

11191
var releases []*github.RepositoryRelease
112-
releases, _, err := client.Repositories.ListReleases(context.Background(), "rancher", "rke2", &github.ListOptions{})
92+
releases, _, err := client.Repositories.ListReleases(context.Background(), org, repo, &github.ListOptions{})
11393
if err != nil {
11494
return nil, err
11595
}
96+
11697
return releases, nil
11798
}
11899

119-
func filterReleaseCandidate(v *[]string) {
120-
var fv []string
121-
versions := *v
122-
for i := 1; i < len(versions); i++ {
123-
if strings.Contains(versions[i], "-") != true {
124-
fv = append(fv, versions[i])
100+
func filterPrimeOnly(r *[]*github.RepositoryRelease) {
101+
var fr []*github.RepositoryRelease
102+
releases := *r
103+
for i := 0; i < len(releases); i++ {
104+
if len(releases[i].Assets) > 2 { // source zip and tar are always there
105+
// prime only releases won't have artifacts
106+
// so we only add releases with more than 2 artifacts
107+
fr = append(fr, releases[i])
125108
}
126109
}
127-
*v = fv
110+
*r = fr
111+
}
112+
113+
// this effectively removes release candidates as well as pending releases
114+
func filterPrerelease(r *[]*github.RepositoryRelease) {
115+
var fr []*github.RepositoryRelease
116+
releases := *r
117+
for i := 0; i < len(releases); i++ {
118+
if !releases[i].GetPrerelease() {
119+
fr = append(fr, releases[i])
120+
}
121+
}
122+
*r = fr
128123
}
129124

130-
func filterPrerelease(r []*github.RepositoryRelease) []string {
125+
func getVersionsFromReleases(r *[]*github.RepositoryRelease) []string {
131126
var versions []string
132-
for _, release := range r {
133-
version := release.GetTagName()
134-
if !release.GetPrerelease() {
135-
versions = append(versions, version)
127+
releases := *r
128+
for i := 0; i < len(releases); i++ {
129+
versions = append(versions, *releases[i].TagName)
130+
}
131+
return versions
136132
// [
137133
// "v1.28.14+rke2r1",
138134
// "v1.30.1+rke2r3",
@@ -145,9 +141,6 @@ func filterPrerelease(r []*github.RepositoryRelease) []string {
145141
// "v1.29.5+rke2r1",
146142
// "v1.28.17+rke2r1",
147143
// ]
148-
}
149-
}
150-
return versions
151144
}
152145

153146
func sortVersions(v *[]string) {
@@ -467,3 +460,29 @@ func CheckReady(t *testing.T, kubeconfigPath string) {
467460
}
468461
t.Logf("Ready script output: %s", out)
469462
}
463+
464+
func CheckRunning(t *testing.T, kubeconfigPath string) {
465+
repoRoot, err := filepath.Abs(g.GetRepoRoot(t))
466+
if err != nil {
467+
t.Logf("Error getting git root directory: %v", err)
468+
t.Fail()
469+
}
470+
script, err := os.ReadFile(repoRoot + "/test/scripts/runningPods.sh")
471+
if err != nil {
472+
t.Logf("Error reading script: %v", err)
473+
t.Fail()
474+
}
475+
readyScript := shell.Command{
476+
Command: "bash",
477+
Args: []string{"-c", string(script)},
478+
Env: map[string]string{
479+
"KUBECONFIG": kubeconfigPath,
480+
},
481+
}
482+
out, err := shell.RunCommandAndGetOutputE(t, readyScript)
483+
if err != nil {
484+
t.Logf("Error running script: %s", err)
485+
t.Fail()
486+
}
487+
t.Logf("Ready script output: %s", out)
488+
}

0 commit comments

Comments
 (0)