1
0
mirror of https://github.com/rancher/rke.git synced 2025-09-05 00:40:10 +00:00

Fixes for generating data.json

- remove rke2/k3s keys so data only has required info for rke1
- decide kdm url based on the tag version
This commit is contained in:
Kinara Shah
2024-08-20 14:58:30 -07:00
parent 8b3b48abf5
commit 85042bd8cf
3 changed files with 107 additions and 7 deletions

View File

@@ -43,6 +43,7 @@ jobs:
ls -lR build/bin ls -lR build/bin
env: env:
CROSS: 1 CROSS: 1
TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
- name: Generate sha256 file for release - name: Generate sha256 file for release
if: github.event_name == 'push' && github.ref_type == 'tag' if: github.event_name == 'push' && github.ref_type == 'tag'
run: | run: |

View File

@@ -1,25 +1,27 @@
package main package main
import ( import (
"encoding/json"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"os" "os"
"strings"
"github.com/coreos/go-semver/semver"
"github.com/rancher/rke/metadata" "github.com/rancher/rke/metadata"
) )
const ( const (
defaultURL = "https://releases.rancher.com/kontainer-driver-metadata/dev-v2.9/data.json" defaultDevURL = "https://releases.rancher.com/kontainer-driver-metadata/dev-v2.9/data.json"
dataFile = "data/data.json" defaultReleaseURL = "https://releases.rancher.com/kontainer-driver-metadata/release-v2.9/data.json"
dataFile = "data/data.json"
) )
// Codegen fetch data.json from https://releases.rancher.com/kontainer-driver-metadata/release-v2.7/data.json and generates bindata // Codegen fetch data.json from defaultURL or defaultReleaseURL and generates bindata
func main() { func main() {
u := os.Getenv(metadata.RancherMetadataURLEnv) u := getURL()
if u == "" { fmt.Printf("Reading data from %s \n", u)
u = defaultURL
}
data, err := http.Get(u) data, err := http.Get(u)
if err != nil { if err != nil {
panic(fmt.Errorf("failed to fetch data.json from kontainer-driver-metadata repository")) panic(fmt.Errorf("failed to fetch data.json from kontainer-driver-metadata repository"))
@@ -31,8 +33,39 @@ func main() {
panic(err) panic(err)
} }
var jsonData map[string]interface{}
err = json.Unmarshal(b, &jsonData)
if err != nil {
panic(fmt.Errorf("failed to parse JSON: %v", err))
}
// rke doesn't need info about rke2 and k3s versions
delete(jsonData, "rke2")
delete(jsonData, "k3s")
b, err = json.Marshal(jsonData)
if err != nil {
panic(fmt.Errorf("failed to marshal json data: %v", err))
}
fmt.Println("Writing data") fmt.Println("Writing data")
if err := os.WriteFile(dataFile, b, 0755); err != nil { if err := os.WriteFile(dataFile, b, 0755); err != nil {
return return
} }
} }
func getURL() string {
u := os.Getenv(metadata.RancherMetadataURLEnv)
if u == "" {
u = defaultDevURL
tag := os.Getenv("TAG")
if strings.HasPrefix(tag, "v") {
tag = tag[1:]
}
if v, err := semver.NewVersion(tag); err == nil {
if v.PreRelease == "" && v.String() != "" {
u = defaultReleaseURL
}
}
}
return u
}

66
codegen/codegen_test.go Normal file
View File

@@ -0,0 +1,66 @@
package main
import (
"os"
"testing"
"github.com/rancher/rke/metadata"
)
func TestGetURL(t *testing.T) {
tests := []struct {
name string
envVar string
tag string
expectedURL string
}{
{
name: "No Metadata URL and TAG is release version",
envVar: "",
tag: "v1.0.0",
expectedURL: defaultReleaseURL,
},
{
name: "No Metadata URL and TAG is pre-release version",
envVar: "",
tag: "v1.0.0-alpha",
expectedURL: defaultDevURL,
},
{
name: "Metadata URL set",
envVar: "https://example.com",
tag: "v1.0.0",
expectedURL: "https://example.com",
},
{
name: "Invalid TAG",
envVar: "",
tag: "invalid-tag",
expectedURL: defaultDevURL,
},
{
name: "No TAG",
envVar: "",
tag: "",
expectedURL: defaultDevURL,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Set the environment variables
os.Setenv(metadata.RancherMetadataURLEnv, tt.envVar)
os.Setenv("TAG", tt.tag)
defer func() {
os.Unsetenv(metadata.RancherMetadataURLEnv)
os.Unsetenv("TAG")
}()
result := getURL()
if result != tt.expectedURL {
t.Errorf("expected %s, got %s", tt.expectedURL, result)
}
})
}
}