InstallVersion installs a plugin artifact from a fixed release tag/version.
(ctx context.Context, plugin Plugin, releaseTag string, version string, options InstallOptions)
| 86 | |
| 87 | // InstallVersion installs a plugin artifact from a fixed release tag/version. |
| 88 | func (c Client) InstallVersion(ctx context.Context, plugin Plugin, releaseTag string, version string, options InstallOptions) (InstallResult, error) { |
| 89 | if errValidate := ValidatePlugin(plugin); errValidate != nil { |
| 90 | return InstallResult{}, errValidate |
| 91 | } |
| 92 | options = normalizeInstallOptions(options) |
| 93 | version = normalizeVersion(version) |
| 94 | if !validPluginVersion(version) { |
| 95 | return InstallResult{}, fmt.Errorf("invalid plugin version %q", version) |
| 96 | } |
| 97 | releaseTag = strings.TrimSpace(releaseTag) |
| 98 | if releaseTag == "" { |
| 99 | releaseTag = version |
| 100 | } |
| 101 | release, errRelease := c.FetchReleaseByTag(ctx, plugin, releaseTag) |
| 102 | if errRelease != nil { |
| 103 | return InstallResult{}, errRelease |
| 104 | } |
| 105 | releaseVersion, errVersion := ReleaseVersion(release) |
| 106 | if errVersion != nil { |
| 107 | return InstallResult{}, errVersion |
| 108 | } |
| 109 | if releaseVersion != version { |
| 110 | return InstallResult{}, fmt.Errorf("release tag %q resolved version %q, want %q", releaseTag, releaseVersion, version) |
| 111 | } |
| 112 | plugin.Version = version |
| 113 | return c.installRelease(ctx, plugin, release, version, options) |
| 114 | } |
| 115 | |
| 116 | func (c Client) installRelease(ctx context.Context, plugin Plugin, release Release, version string, options InstallOptions) (InstallResult, error) { |
| 117 | archiveAsset, checksumAsset, errAssets := SelectReleaseAssets(release, plugin.ID, plugin.Version, options.GOOS, options.GOARCH) |