* Feat(#5861): Support addon dependencies version ranges
This change enables addon maintainers to define version ranges for
dependencies in an addon's metadata.yaml file.
This behavior is similar to the version range allowed in the `system`
section of the metadata file. The version range expression for
`dependencies` follows the same format as for `system`.
Example:
```yaml
dependencies:
- name: addon1
version: ">= 2.3.3, < 3.0.0"
- name: addon2
version: ">= 0.1.0, < 1.0.0"
```
When installing an addon, the behavior varies depending on whether the
dependency is already installed.
If a dependency is already installed, the installed version will be
validated against the version range, and installation will fail with an
error if there's a mismatch.
If a dependency is not installed, the version range will be used to
select the addon version to be installed. If no addon version matching
the range exists, the installation will fail with an error.
Fixes#5861
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): remove unused ctx parameter
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): Add comment for IsLocalRegistry
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexport AddonInfoMap
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexport addonInfo
Signed-off-by: Michael Russo <merusso@gmail.com>
* chore: replace map[string]addonInfo with addonInfoMap for consistency
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: add short circuit when dependency version is not specified
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: Add test for multiple validation errors
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: Run go mod tidy
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: add tests for ToVersionedRegistry
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix: simplify listInstalledAddons loop
Signed-off-by: Michael Russo <merusso@gmail.com>
* feat: listAvailableAddons returns addons from multiple sources
Changes:
* implement ListAddonInfo in Registry
* add interface to aid testing of listAvailableAddons
* add tests for listAvailableAddons
Signed-off-by: Michael Russo <merusso@gmail.com>
* refactor: simplify validateAddonDependencies
move logic from validateAddonDependencies to
calculateDependencyVersionToInstall.
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): Implicit memory aliasing in for loop.
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): non-wrapping format verb for fmt.Errorf
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): indent-error-flow: (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): unexported-return
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): exported type comment format (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): refactor AddonInfo to ItemInfo, avoid "stutter" (revive)
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): add comment to exported method Registry.ListAddonInfo
Signed-off-by: Michael Russo <merusso@gmail.com>
* fix(lint): fix stutter, rename AddonInfoLister to ItemInfoLister
Signed-off-by: Michael Russo <merusso@gmail.com>
* chore: Add suite tests for Registry.ListAddonInfo()
Signed-off-by: Michael Russo <merusso@gmail.com>
* Test: add test cases for addon.sortVersionsDescending
Signed-off-by: Michael Russo <merusso@gmail.com>
---------
Signed-off-by: Michael Russo <merusso@gmail.com>
* Feat: search useful addon version automatically
Verify whether the current addon version meets the system version requirements according to the obtained specified version. There are two system version requirements: Vela core version, K8s version.
If meet the requirements and continue to perform the next task.
If the requirements are not met, obtain the highest version that meets the requirements
Refs #4181
Signed-off-by: HanMengnan <1448189829@qq.com>
* Fix: Optimize function implementation and code order, and modify test cases
add more comments of function
optimize package import sequence
optimize user interaction logic and error information extraction logic
Signed-off-by: HanMengnan <1448189829@qq.com>
* Fix: change template string of regular expression to const type string
Signed-off-by: HanMengnan <1448189829@qq.com>
* Feat: show available versions and dependencies in `addon status`
Also prettify output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: show addon dependencies in `addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: adjust `addon status` output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: remove spaces in `addon status` output
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: truncate string if available versions too long
if a local addon has been installed, the AVAILABLE-VERSIONS column of the registry one will not truncate. this commit fixes that.
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Perf: avoid unnecessary network requests to improve performance
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: do not display remote info for local addons
Limit Description length when using `addon list`
Use simpler method to get addon info
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for cli/addon limitStringLength, generateParameterString
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: fix output being empty if the searched addon does not exist anywhere
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for generateAddonInfo
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add tests for generateAddonInfo and FindWholeAddonPackagesFromRegistry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: format code
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: correct unnecessarily focused tests
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: remove unused code blocks
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: remove unnecessary output to stdout
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: remove added registry after tests has been completed
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: new RegistryDataStore every test, to avoid panics
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: fix failing tests due to incorrect registry name
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: move logic to get addon package out of where it is supposed to get addon status
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: add test cases for secret-getting in TestGetAddonStatus
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: return error if an addon is not installed, nor does it exist in the registry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Refactor: rename GetAddonWholePackage to GetDetailedAddon as per wonderflow
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: require --verbose option to show details in `vela addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Feat: require --verbose option to show details in `vela addon status`
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* chore: run make reviewable
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Test: fix configmap being already existed
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Fix: fix output show addon does not exist when verbose is off and an addon is not installed, but it does exist in the registry
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>
* Style: fix golangci-lint issues
Signed-off-by: Charlie Chiang <charlie_c_0129@outlook.com>