func registerWebAssemblyVersion()

in ci-tools/main.go [186:241]


func registerWebAssemblyVersion(version string) error {
	wasmVersionsFilePath := lookupWasmVersionsJSONPath()
	wasmVersionsFile, err := os.OpenFile(wasmVersionsFilePath, os.O_RDWR|os.O_CREATE, 0666)
	if err != nil {
		return err
	}

	wasmVersionsFileBytes, err := io.ReadAll(wasmVersionsFile)
	if err != nil {
		return err
	}

	_ = wasmVersionsFile.Close()

	var wasmVersions map[string]any
	if len(wasmVersionsFileBytes) == 0 {
		wasmVersions = map[string]any{}
	} else {
		err = json.Unmarshal(wasmVersionsFileBytes, &wasmVersions)
		if err != nil {
			return err
		}
	}

	if len(wasmVersions) == 0 {
		wasmVersions["versions"] = []any{}
	}

	for _, v := range wasmVersions["versions"].([]any) {
		if v.(map[string]any)["version"].(string) == version {
			return nil
		}
	}

	wasmName := fmt.Sprintf("wasm/ottlplayground-%s.wasm", version)
	wasmVersions["versions"] = append(wasmVersions["versions"].([]any), map[string]any{
		"artifact": wasmName,
		"version":  version,
	})

	slices.SortFunc(wasmVersions["versions"].([]any), func(a, b any) int {
		return semver.Compare(b.(map[string]any)["version"].(string), a.(map[string]any)["version"].(string))
	})

	modifiedWasmVersions, err := json.MarshalIndent(&wasmVersions, "", "  ")
	if err != nil {
		return err
	}

	err = os.WriteFile(wasmVersionsFilePath, modifiedWasmVersions, 0600)
	if err != nil {
		return err
	}

	return nil
}