Skip to content

Commit c9eeb66

Browse files
committed
cli-plugins: add build-time system plugin directory
Signed-off-by: Conlan Cesar <conlan.cesar@datadoghq.com>
1 parent 7fc2dff commit c9eeb66

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

‎cli-plugins/manager/manager.go‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ func (e errPluginNotFound) Error() string {
3232
return "Error: No such CLI plugin: " + string(e)
3333
}
3434

35+
// additionalSystemPluginDir is an optional system plugin directory that can be
36+
// set at build time using -ldflags -X.
37+
//
38+
// For example: -X github.com/docker/cli/cli-plugins/manager.additionalSystemPluginDir=/path/to/cli-plugins
39+
var additionalSystemPluginDir string
40+
3541
// getPluginDirs returns the platform-specific locations to search for plugins
3642
// in order of preference.
3743
//
@@ -50,6 +56,9 @@ func getPluginDirs(cfg *configfile.ConfigFile) []string {
5056
}
5157
pluginDir := filepath.Join(config.Dir(), "cli-plugins")
5258
pluginDirs = append(pluginDirs, pluginDir)
59+
if additionalSystemPluginDir != "" {
60+
pluginDirs = append(pluginDirs, additionalSystemPluginDir)
61+
}
5362
pluginDirs = append(pluginDirs, defaultSystemPluginDirs...)
5463
return pluginDirs
5564
}

‎cli-plugins/manager/manager_test.go‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@ func TestGetPluginDirs(t *testing.T) {
172172
cli := test.NewFakeCli(nil)
173173

174174
pluginDir := filepath.Join(config.Dir(), "cli-plugins")
175+
originalAdditionalSystemPluginDir := additionalSystemPluginDir
176+
additionalSystemPluginDir = ""
177+
t.Cleanup(func() {
178+
additionalSystemPluginDir = originalAdditionalSystemPluginDir
179+
})
180+
175181
expected := append([]string{pluginDir}, defaultSystemPluginDirs...)
176182

177183
pluginDirs := getPluginDirs(cli.ConfigFile())
@@ -185,4 +191,10 @@ func TestGetPluginDirs(t *testing.T) {
185191
})
186192
pluginDirs = getPluginDirs(cli.ConfigFile())
187193
assert.DeepEqual(t, expected, pluginDirs)
194+
195+
additionalSystemPluginDir = "qux"
196+
expected = append(extras, pluginDir, additionalSystemPluginDir)
197+
expected = append(expected, defaultSystemPluginDirs...)
198+
pluginDirs = getPluginDirs(cli.ConfigFile())
199+
assert.DeepEqual(t, expected, pluginDirs)
188200
}

0 commit comments

Comments
 (0)