diff --git a/alpha/declcfg/write.go b/alpha/declcfg/write.go index 049d96b22..9856c2e1e 100644 --- a/alpha/declcfg/write.go +++ b/alpha/declcfg/write.go @@ -106,6 +106,26 @@ func (writer *MermaidWriter) WriteChannels(cfg DeclarativeConfig, out io.Writer) minEdgePackage := writer.getMinEdgePackage(&cfg) + depByPackage := sets.Set[string]{} + depByChannel := sets.Set[string]{} + depByBundle := sets.Set[string]{} + + for _, d := range cfg.Deprecations { + for _, e := range d.Entries { + switch e.Reference.Schema { + case SchemaPackage: + depByPackage.Insert(d.Package) + case SchemaChannel: + depByChannel.Insert(e.Reference.Name) + case SchemaBundle: + depByBundle.Insert(e.Reference.Name) + } + } + } + + var deprecatedPackage string + deprecatedChannels := []string{} + for _, c := range cfg.Channels { filteredChannel := writer.filterChannel(&c, versionMap, minVersion, minEdgePackage) if filteredChannel != nil { @@ -119,10 +139,23 @@ func (writer *MermaidWriter) WriteChannels(cfg DeclarativeConfig, out io.Writer) pkgBuilder.WriteString(fmt.Sprintf(" %%%% channel %q\n", filteredChannel.Name)) pkgBuilder.WriteString(fmt.Sprintf(" subgraph %s[%q]\n", channelID, filteredChannel.Name)) + if depByPackage.Has(filteredChannel.Package) { + deprecatedPackage = filteredChannel.Package + } + + if depByChannel.Has(filteredChannel.Name) { + deprecatedChannels = append(deprecatedChannels, channelID) + } + for _, ce := range filteredChannel.Entries { if versionMap[ce.Name].GE(minVersion) { + bundleDeprecation := "" + if depByBundle.Has(ce.Name) { + bundleDeprecation = ":::deprecated" + } + entryId := fmt.Sprintf("%s-%s", channelID, ce.Name) - pkgBuilder.WriteString(fmt.Sprintf(" %s[%q]\n", entryId, ce.Name)) + pkgBuilder.WriteString(fmt.Sprintf(" %s[%q]%s\n", entryId, ce.Name, bundleDeprecation)) if len(ce.Replaces) > 0 { replacesId := fmt.Sprintf("%s-%s", channelID, ce.Replaces) @@ -154,6 +187,7 @@ func (writer *MermaidWriter) WriteChannels(cfg DeclarativeConfig, out io.Writer) } out.Write([]byte("graph LR\n")) + out.Write([]byte(fmt.Sprintf(" classDef deprecated fill:#E8960F\n"))) pkgNames := []string{} for pname := range pkgs { pkgNames = append(pkgNames, pname) @@ -168,6 +202,16 @@ func (writer *MermaidWriter) WriteChannels(cfg DeclarativeConfig, out io.Writer) out.Write([]byte(" end\n")) } + if deprecatedPackage != "" { + out.Write([]byte(fmt.Sprintf("style %s fill:#989695\n", deprecatedPackage))) + } + + if len(deprecatedChannels) > 0 { + for _, deprecatedChannel := range deprecatedChannels { + out.Write([]byte(fmt.Sprintf("style %s fill:#DCD0FF\n", deprecatedChannel))) + } + } + return nil } diff --git a/alpha/declcfg/write_test.go b/alpha/declcfg/write_test.go index 03cca3e2f..9e98e4c54 100644 --- a/alpha/declcfg/write_test.go +++ b/alpha/declcfg/write_test.go @@ -526,11 +526,12 @@ func TestWriteMermaidChannels(t *testing.T) { startEdge: "", packageFilter: "", expected: `graph LR + classDef deprecated fill:#E8960F %% package "anakin" subgraph "anakin" %% channel "dark" subgraph anakin-dark["dark"] - anakin-dark-anakin.v0.0.1["anakin.v0.0.1"] + anakin-dark-anakin.v0.0.1["anakin.v0.0.1"]:::deprecated anakin-dark-anakin.v0.1.0["anakin.v0.1.0"] anakin-dark-anakin.v0.0.1["anakin.v0.0.1"]-- replace --> anakin-dark-anakin.v0.1.0["anakin.v0.1.0"] anakin-dark-anakin.v0.1.1["anakin.v0.1.1"] @@ -539,7 +540,7 @@ func TestWriteMermaidChannels(t *testing.T) { end %% channel "light" subgraph anakin-light["light"] - anakin-light-anakin.v0.0.1["anakin.v0.0.1"] + anakin-light-anakin.v0.0.1["anakin.v0.0.1"]:::deprecated anakin-light-anakin.v0.1.0["anakin.v0.1.0"] anakin-light-anakin.v0.0.1["anakin.v0.0.1"]-- replace --> anakin-light-anakin.v0.1.0["anakin.v0.1.0"] end @@ -553,6 +554,8 @@ func TestWriteMermaidChannels(t *testing.T) { boba-fett-mando-boba-fett.v1.0.0["boba-fett.v1.0.0"]-- replace --> boba-fett-mando-boba-fett.v2.0.0["boba-fett.v2.0.0"] end end +style anakin fill:#989695 +style anakin-light fill:#DCD0FF `, }, { @@ -561,6 +564,7 @@ func TestWriteMermaidChannels(t *testing.T) { startEdge: "anakin.v0.1.0", packageFilter: "", expected: `graph LR + classDef deprecated fill:#E8960F %% package "anakin" subgraph "anakin" %% channel "dark" @@ -574,6 +578,8 @@ func TestWriteMermaidChannels(t *testing.T) { anakin-light-anakin.v0.1.0["anakin.v0.1.0"] end end +style anakin fill:#989695 +style anakin-light fill:#DCD0FF `, }, { @@ -582,6 +588,7 @@ func TestWriteMermaidChannels(t *testing.T) { startEdge: "", packageFilter: "boba-fett", expected: `graph LR + classDef deprecated fill:#E8960F %% package "boba-fett" subgraph "boba-fett" %% channel "mando"