Generate zplugin.go correctly with third-party plugins (#6692)

Previously, the generation of zplugin.go would not separate
third-party external plugins from CoreDNS plugins in the go
import block. This leads to the TestImportOrdering unit test
failing, as it requires that third-party imports paths to be
in a separate import block.

While this issue does not affect the main CoreDNS repo, it can cause
unit test failures in forks of CoreDNS that include external third-party
plugins.

Signed-off-by: Grant Spence <gspence@redhat.com>
This commit is contained in:
Grant Spence 2024-05-29 15:41:09 -04:00 committed by GitHub
parent 621ffde538
commit 0ed689e2d0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,10 +58,22 @@ func genImports(file, pack string, mi map[string]string) {
outs += "\n"
}
coreDnsImports := ""
thirdPartyImports := ""
outs += "// Include all plugins.\n"
for _, v := range mi {
outs += `_ "` + v + `"` + "\n"
if strings.HasPrefix(v, githubOrg) {
coreDnsImports += `_ "` + v + `"` + "\n"
} else {
thirdPartyImports += `_ "` + v + `"` + "\n"
}
}
outs += coreDnsImports
if thirdPartyImports != "" {
outs += "\n" + thirdPartyImports
}
outs += ")\n"
if err := formatAndWrite(file, outs); err != nil {
@ -107,7 +119,8 @@ func formatAndWrite(file string, data string) error {
}
const (
pluginPath = "github.com/coredns/coredns/plugin/"
githubOrg = "github.com/coredns"
pluginPath = githubOrg + "/coredns/plugin/"
pluginFile = "plugin.cfg"
pluginFSPath = "plugin/" // Where the plugins are located on the file system
header = "// generated by directives_generate.go; DO NOT EDIT\n\n"