From e1754428c79dd4fc93e5bc21353fb34b0f5e85cf Mon Sep 17 00:00:00 2001 From: Jaz Date: Thu, 2 Nov 2023 16:22:45 -0400 Subject: [PATCH 01/35] add option --- action.yml | 4 ++++ config/config.go | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/action.yml b/action.yml index df578690..8ff5d3b4 100644 --- a/action.yml +++ b/action.yml @@ -41,6 +41,10 @@ inputs: description: The base URI for the LaunchDarkly server. Most users should use the default value. required: false default: 'https://app.launchdarkly.com' + check-extinctions: + description: Check if removed flags still exist in codebase + required: false + default: 'true' outputs: any-modified: diff --git a/config/config.go b/config/config.go index 8f045860..75376967 100644 --- a/config/config.go +++ b/config/config.go @@ -24,6 +24,7 @@ type Config struct { MaxFlags int PlaceholderComment bool IncludeArchivedFlags bool + CheckExtinctions bool } func ValidateInputandParse(ctx context.Context) (*Config, error) { @@ -80,6 +81,12 @@ func ValidateInputandParse(ctx context.Context) (*Config, error) { config.IncludeArchivedFlags = includeArchivedFlags } + config.CheckExtinctions = true + if checkExtinctions, err := strconv.ParseBool(os.Getenv("INPUT_CHECK-EXTINCTIONS")); err == nil { + // ignore error - default is true + config.CheckExtinctions = checkExtinctions + } + config.GHClient = getGithubClient(ctx) return &config, nil } From 89bc7b6f013f70a76df143fd58f0da3b67b9129a Mon Sep 17 00:00:00 2001 From: Jaz Date: Thu, 2 Nov 2023 17:02:56 -0400 Subject: [PATCH 02/35] try to detect extinctions --- comments/comments.go | 10 ++++--- comments/comments_test.go | 8 +++--- flags/types.go | 1 + internal/extinctions/extinctions.go | 42 +++++++++++++++++++++++++++++ main.go | 12 ++++++++- search/search.go | 11 ++------ testdata/test | 4 --- 7 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 internal/extinctions/extinctions.go diff --git a/comments/comments.go b/comments/comments.go index 2cef2107..4eab10ee 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -26,6 +26,7 @@ type Comment struct { Flag ldapi.FeatureFlag ArchivedAt time.Time Added bool + Extinct bool Aliases []string ChangeType string Primary ldapi.FeatureFlagConfig @@ -37,10 +38,11 @@ func isNil(a interface{}) bool { return a == nil || reflect.ValueOf(a).IsNil() } -func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added bool, config *config.Config) (string, error) { +func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct bool, config *config.Config) (string, error) { commentTemplate := Comment{ Flag: flag, Added: added, + Extinct: extinct, Aliases: aliases, Primary: flag.Environments[config.LdEnvironment], LDInstance: config.LdInstance, @@ -51,6 +53,7 @@ func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added bool, con } // All whitespace for template is required to be there or it will not render properly nested. tmplSetup := `| {{- if eq .Flag.Archived true}}{{- if eq .Added true}} :warning:{{- end}}{{- end}}` + + `{{- if eq .Extinct true}} :white_check_mark:{{- end}}` + ` [{{.Flag.Name}}]({{.LDInstance}}{{.Primary.Site.Href}})` + `{{- if eq .Flag.Archived true}}` + ` (archived on {{.ArchivedAt | date "2006-01-02"}})` + @@ -133,7 +136,7 @@ func ProcessFlags(flagsRef lflags.FlagsRef, flags []ldapi.FeatureFlag, config *l for _, flagKey := range addedKeys { flagAliases := flagsRef.FlagsAdded[flagKey] idx, _ := find(flags, flagKey) - createComment, err := githubFlagComment(flags[idx], flagAliases, true, config) + createComment, err := githubFlagComment(flags[idx], flagAliases, true, false, config) buildComment.CommentsAdded = append(buildComment.CommentsAdded, createComment) if err != nil { log.Println(err) @@ -147,7 +150,8 @@ func ProcessFlags(flagsRef lflags.FlagsRef, flags []ldapi.FeatureFlag, config *l for _, flagKey := range removedKeys { flagAliases := flagsRef.FlagsRemoved[flagKey] idx, _ := find(flags, flagKey) - removedComment, err := githubFlagComment(flags[idx], flagAliases, false, config) + _, extinct := flagsRef.FlagsExtinct[flagKey] + removedComment, err := githubFlagComment(flags[idx], flagAliases, false, extinct, config) buildComment.CommentsRemoved = append(buildComment.CommentsRemoved, removedComment) if err != nil { log.Println(err) diff --git a/comments/comments_test.go b/comments/comments_test.go index 999ab094..177a5113 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -164,7 +164,7 @@ func TestBuildFlagComment(t *testing.T) { } func (e *testFlagEnv) NoAliases(t *testing.T) { - comment, err := githubFlagComment(e.Flag, []string{}, true, &e.Config) + comment, err := githubFlagComment(e.Flag, []string{}, true, false, &e.Config) require.NoError(t, err) expected := "| [example flag](https://example.com/test) | `example-flag` | |" @@ -172,7 +172,7 @@ func (e *testFlagEnv) NoAliases(t *testing.T) { } func (e *testFlagEnv) Alias(t *testing.T) { - comment, err := githubFlagComment(e.Flag, []string{"exampleFlag", "ExampleFlag"}, true, &e.Config) + comment, err := githubFlagComment(e.Flag, []string{"exampleFlag", "ExampleFlag"}, true, false, &e.Config) require.NoError(t, err) expected := "| [example flag](https://example.com/test) | `example-flag` | `exampleFlag`, `ExampleFlag` |" @@ -180,7 +180,7 @@ func (e *testFlagEnv) Alias(t *testing.T) { } func (e *testFlagEnv) ArchivedAdded(t *testing.T) { - comment, err := githubFlagComment(e.ArchivedFlag, []string{}, true, &e.Config) + comment, err := githubFlagComment(e.ArchivedFlag, []string{}, true, false, &e.Config) require.NoError(t, err) expected := "| :warning: [archived flag](https://example.com/test) (archived on 2023-08-03) | `archived-flag` | |" @@ -188,7 +188,7 @@ func (e *testFlagEnv) ArchivedAdded(t *testing.T) { } func (e *testFlagEnv) ArchivedRemoved(t *testing.T) { - comment, err := githubFlagComment(e.ArchivedFlag, []string{}, false, &e.Config) + comment, err := githubFlagComment(e.ArchivedFlag, []string{}, false, false, &e.Config) require.NoError(t, err) expected := "| [archived flag](https://example.com/test) (archived on 2023-08-03) | `archived-flag` | |" diff --git a/flags/types.go b/flags/types.go index 1a6bf28e..95d26615 100644 --- a/flags/types.go +++ b/flags/types.go @@ -5,6 +5,7 @@ type FlagAliasMap = map[string][]string type FlagsRef struct { FlagsAdded FlagAliasMap FlagsRemoved FlagAliasMap + FlagsExtinct map[string]struct{} } func (fr FlagsRef) Found() bool { diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go new file mode 100644 index 00000000..e9313086 --- /dev/null +++ b/internal/extinctions/extinctions.go @@ -0,0 +1,42 @@ +package extinctions + +import ( + lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + "github.com/launchdarkly/find-code-references-in-pull-request/search" + "github.com/launchdarkly/ld-find-code-refs/v2/options" + lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" +) + +func CheckExtinctions(opts options.Options, removedFlags lflags.FlagAliasMap) (map[string]struct{}, error) { + flags := make([]string, 0, len(removedFlags)) + + for flagKey := range removedFlags { + flags = append(flags, flagKey) + } + + matcher, err := search.GetMatcher(opts, flags, nil) + if err != nil { + return nil, err + } + + hunksRep, err := lsearch.SearchForRefs(opts.Dir, matcher) + if err != nil { + return nil, err + } + + foundFlags := make(map[string]struct{}, len(removedFlags)) + for _, hunk := range hunksRep { + for _, h := range hunk.Hunks { + foundFlags[h.FlagKey] = struct{}{} + } + } + + extinctFlags := make(map[string]struct{}, len(removedFlags)) + for flagKey := range removedFlags { + if _, ok := foundFlags[flagKey]; !ok { + extinctFlags[flagKey] = struct{}{} + } + } + + return extinctFlags, nil +} diff --git a/main.go b/main.go index 65dee39c..88a9529c 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ import ( ldiff "github.com/launchdarkly/find-code-references-in-pull-request/diff" e "github.com/launchdarkly/find-code-references-in-pull-request/errors" lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + "github.com/launchdarkly/find-code-references-in-pull-request/internal/extinctions" gha "github.com/launchdarkly/find-code-references-in-pull-request/internal/github_actions" ldclient "github.com/launchdarkly/find-code-references-in-pull-request/internal/ldclient" "github.com/launchdarkly/find-code-references-in-pull-request/search" @@ -48,12 +49,17 @@ func main() { opts, err := getOptions(config) failExit(err) + flagKeys := make([]string, 0, len(flags)) + for _, flag := range flags { + flagKeys = append(flagKeys, flag.Key) + } + multiFiles, err := getDiffs(ctx, config, *event.PullRequest.Number) failExit(err) diffMap := ldiff.PreprocessDiffs(opts.Dir, multiFiles) - matcher, err := search.GetMatcher(opts, flags, diffMap) + matcher, err := search.GetMatcher(opts, flagKeys, diffMap) failExit(err) builder := lflags.NewReferenceBuilder(config.MaxFlags) @@ -62,6 +68,10 @@ func main() { } flagsRef := builder.Build() + // Check extinctions + extinctFlags, err := extinctions.CheckExtinctions(opts, flagsRef.FlagsRemoved) + flagsRef.FlagsExtinct = extinctFlags + // Add comment existingComment := checkExistingComments(event, config, ctx) buildComment := ghc.ProcessFlags(flagsRef, flags, config) diff --git a/search/search.go b/search/search.go index 6e944a26..a4e6f2f7 100644 --- a/search/search.go +++ b/search/search.go @@ -3,7 +3,6 @@ package search import ( "strings" - ldapi "github.com/launchdarkly/api-client-go/v13" laliases "github.com/launchdarkly/ld-find-code-refs/v2/aliases" "github.com/launchdarkly/ld-find-code-refs/v2/options" lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" @@ -11,12 +10,7 @@ import ( "github.com/launchdarkly/find-code-references-in-pull-request/internal/aliases" ) -func GetMatcher(opts options.Options, flags []ldapi.FeatureFlag, diffContents laliases.FileContentsMap) (matcher lsearch.Matcher, err error) { - flagKeys := make([]string, 0, len(flags)) - for _, flag := range flags { - flagKeys = append(flagKeys, flag.Key) - } - +func GetMatcher(opts options.Options, flagKeys []string, diffContents laliases.FileContentsMap) (matcher lsearch.Matcher, err error) { aliasesByFlagKey, err := aliases.GenerateAliases(opts, flagKeys, diffContents) if err != nil { return lsearch.Matcher{}, err @@ -24,8 +18,7 @@ func GetMatcher(opts options.Options, flags []ldapi.FeatureFlag, diffContents la delimiters := strings.Join(lsearch.GetDelimiters(opts), "") elements := make([]lsearch.ElementMatcher, 0, 1) - elements = append(elements, lsearch.NewElementMatcher(opts.ProjKey, "", delimiters, flagKeys, aliasesByFlagKey)) - + elements = append(elements, lsearch.NewElementMatcher(opts.ProjKey, opts.Dir, delimiters, flagKeys, aliasesByFlagKey)) matcher = lsearch.Matcher{ Elements: elements, } diff --git a/testdata/test b/testdata/test index 2ea99814..02083716 100644 --- a/testdata/test +++ b/testdata/test @@ -1,11 +1,7 @@ show-widgets showWidgets -betaUi -betaUi show_widgets -beta_ui show-widgets old-pricing-banner -betaUi oldPricingBanner oldPricingBanner From 1f108d3741f921aea14f64b4fb264f7695218eb3 Mon Sep 17 00:00:00 2001 From: Jaz Date: Thu, 2 Nov 2023 17:09:11 -0400 Subject: [PATCH 03/35] use skull --- comments/comments.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comments/comments.go b/comments/comments.go index 4eab10ee..afb90758 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -53,7 +53,7 @@ func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct } // All whitespace for template is required to be there or it will not render properly nested. tmplSetup := `| {{- if eq .Flag.Archived true}}{{- if eq .Added true}} :warning:{{- end}}{{- end}}` + - `{{- if eq .Extinct true}} :white_check_mark:{{- end}}` + + `{{- if eq .Extinct true}} :skull:{{- end}}` + ` [{{.Flag.Name}}]({{.LDInstance}}{{.Primary.Site.Href}})` + `{{- if eq .Flag.Archived true}}` + ` (archived on {{.ArchivedAt | date "2006-01-02"}})` + From 5fbddf0b6ac97af9007a027d7091c0093e0ced98 Mon Sep 17 00:00:00 2001 From: Jaz Date: Thu, 2 Nov 2023 17:10:09 -0400 Subject: [PATCH 04/35] gen docs --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ac48b132..0e272fbf 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ This action does not support monorepos or searching for flags across LaunchDarkl | include-archived-flags | Scan for archived flags | `false` | true | | max-flags | Maximum number of flags to find per PR | `false` | 5 | | base-uri | The base URI for the LaunchDarkly server. Most users should use the default value. | `false` | https://app.launchdarkly.com | +| check-extinctions | Check if removed flags still exist in codebase | `false` | true | From ed558664cbfef36e117013e6d21882e02020676e Mon Sep 17 00:00:00 2001 From: Jaz Date: Thu, 2 Nov 2023 17:12:49 -0400 Subject: [PATCH 05/35] update test data --- testdata/test | 1 + 1 file changed, 1 insertion(+) diff --git a/testdata/test b/testdata/test index 02083716..b5b9845b 100644 --- a/testdata/test +++ b/testdata/test @@ -4,4 +4,5 @@ show_widgets show-widgets old-pricing-banner oldPricingBanner +show_widgets oldPricingBanner From d4656b56ef8fcaa21ab8d3abf1d20ec72c3b4e0d Mon Sep 17 00:00:00 2001 From: Jaz Date: Fri, 3 Nov 2023 10:25:17 -0400 Subject: [PATCH 06/35] rename --- internal/extinctions/extinctions.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index e9313086..2ebe7050 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -19,15 +19,15 @@ func CheckExtinctions(opts options.Options, removedFlags lflags.FlagAliasMap) (m return nil, err } - hunksRep, err := lsearch.SearchForRefs(opts.Dir, matcher) + referenceHunks, err := lsearch.SearchForRefs(opts.Dir, matcher) if err != nil { return nil, err } foundFlags := make(map[string]struct{}, len(removedFlags)) - for _, hunk := range hunksRep { - for _, h := range hunk.Hunks { - foundFlags[h.FlagKey] = struct{}{} + for _, reference := range referenceHunks { + for _, hunk := range reference.Hunks { + foundFlags[hunk.FlagKey] = struct{}{} } } From 5d3e745eb4bfb02a3fc0621b7c9f4569bc0fb8b4 Mon Sep 17 00:00:00 2001 From: Jaz Date: Fri, 3 Nov 2023 10:36:45 -0400 Subject: [PATCH 07/35] refactor --- comments/comments.go | 2 +- flags/types.go | 2 +- internal/extinctions/extinctions.go | 27 ++++++++++++++------------- main.go | 6 ++++-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index afb90758..ffeb156b 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -150,7 +150,7 @@ func ProcessFlags(flagsRef lflags.FlagsRef, flags []ldapi.FeatureFlag, config *l for _, flagKey := range removedKeys { flagAliases := flagsRef.FlagsRemoved[flagKey] idx, _ := find(flags, flagKey) - _, extinct := flagsRef.FlagsExtinct[flagKey] + _, extinct := flagsRef.ExtinctFlags[flagKey] removedComment, err := githubFlagComment(flags[idx], flagAliases, false, extinct, config) buildComment.CommentsRemoved = append(buildComment.CommentsRemoved, removedComment) if err != nil { diff --git a/flags/types.go b/flags/types.go index 95d26615..3597fe62 100644 --- a/flags/types.go +++ b/flags/types.go @@ -5,7 +5,7 @@ type FlagAliasMap = map[string][]string type FlagsRef struct { FlagsAdded FlagAliasMap FlagsRemoved FlagAliasMap - FlagsExtinct map[string]struct{} + ExtinctFlags map[string]struct{} } func (fr FlagsRef) Found() bool { diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index 2ebe7050..ae49dd1f 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -9,9 +9,11 @@ import ( func CheckExtinctions(opts options.Options, removedFlags lflags.FlagAliasMap) (map[string]struct{}, error) { flags := make([]string, 0, len(removedFlags)) + flagMap := make(map[string]struct{}, len(removedFlags)) for flagKey := range removedFlags { flags = append(flags, flagKey) + flagMap[flagKey] = struct{}{} } matcher, err := search.GetMatcher(opts, flags, nil) @@ -19,24 +21,23 @@ func CheckExtinctions(opts options.Options, removedFlags lflags.FlagAliasMap) (m return nil, err } - referenceHunks, err := lsearch.SearchForRefs(opts.Dir, matcher) + references, err := lsearch.SearchForRefs(opts.Dir, matcher) if err != nil { return nil, err } - foundFlags := make(map[string]struct{}, len(removedFlags)) - for _, reference := range referenceHunks { - for _, hunk := range reference.Hunks { - foundFlags[hunk.FlagKey] = struct{}{} +check: + for _, ref := range references { + for _, hunk := range ref.Hunks { + if _, ok := flagMap[hunk.FlagKey]; ok { + delete(flagMap, hunk.FlagKey) + } + if len(flagMap) == 0 { + break check + } } } - extinctFlags := make(map[string]struct{}, len(removedFlags)) - for flagKey := range removedFlags { - if _, ok := foundFlags[flagKey]; !ok { - extinctFlags[flagKey] = struct{}{} - } - } - - return extinctFlags, nil + // remaining flags are extinct + return flagMap, nil } diff --git a/main.go b/main.go index 88a9529c..a443e278 100644 --- a/main.go +++ b/main.go @@ -68,9 +68,11 @@ func main() { } flagsRef := builder.Build() - // Check extinctions extinctFlags, err := extinctions.CheckExtinctions(opts, flagsRef.FlagsRemoved) - flagsRef.FlagsExtinct = extinctFlags + if err != nil { + gha.LogWarning("Error checking for extinct flags") + } + flagsRef.ExtinctFlags = extinctFlags // Add comment existingComment := checkExistingComments(event, config, ctx) From bf4943a6933d29d0c351d8df6e3c9b5265b68aa0 Mon Sep 17 00:00:00 2001 From: Jaz Date: Fri, 3 Nov 2023 17:15:21 -0400 Subject: [PATCH 08/35] move to builder pattern for extinctions --- flags/builder.go | 36 ++++++++++++++++++++++------- internal/extinctions/extinctions.go | 25 +++++--------------- main.go | 6 ++--- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/flags/builder.go b/flags/builder.go index 91cf0a66..5632946e 100644 --- a/flags/builder.go +++ b/flags/builder.go @@ -9,18 +9,20 @@ import ( ) type ReferenceBuilder struct { - max int // maximum number of flags to find - flagsAdded map[string][]string - flagsRemoved map[string][]string - foundFlags map[string]struct{} + max int // maximum number of flags to find + flagsAdded map[string][]string + flagsRemoved map[string][]string + existingFlags map[string]struct{} // TODO rename this + foundFlags map[string]struct{} } func NewReferenceBuilder(max int) *ReferenceBuilder { return &ReferenceBuilder{ - flagsAdded: make(map[string][]string), - flagsRemoved: make(map[string][]string), - foundFlags: make(map[string]struct{}), - max: max, + flagsAdded: make(map[string][]string), + flagsRemoved: make(map[string][]string), + foundFlags: make(map[string]struct{}), + existingFlags: make(map[string]struct{}), + max: max, } } @@ -41,6 +43,11 @@ func (b *ReferenceBuilder) AddReference(flagKey string, op diff_util.Operation, return nil } +// TODO rename +func (b *ReferenceBuilder) ExistingFlag(flagKey string) { + b.existingFlags[flagKey] = struct{}{} +} + func (b *ReferenceBuilder) AddedFlag(flagKey string, aliases []string) { b.foundFlags[flagKey] = struct{}{} if _, ok := b.flagsAdded[flagKey]; !ok { @@ -57,9 +64,18 @@ func (b *ReferenceBuilder) RemovedFlag(flagKey string, aliases []string) { b.flagsRemoved[flagKey] = append(b.flagsRemoved[flagKey], aliases...) } +func (b *ReferenceBuilder) RemovedFlagKeys() []string { + keys := make([]string, 0, len(b.flagsRemoved)) + for k := range b.flagsRemoved { + keys = append(keys, k) + } + return keys +} + func (b *ReferenceBuilder) Build() FlagsRef { added := make(map[string][]string, len(b.flagsAdded)) removed := make(map[string][]string, len(b.flagsRemoved)) + extinctions := make(map[string]struct{}, len(b.flagsRemoved)) for flagKey := range b.foundFlags { if aliases, ok := b.flagsAdded[flagKey]; ok { @@ -73,12 +89,16 @@ func (b *ReferenceBuilder) Build() FlagsRef { aliases := uniqueStrs(aliases) sort.Strings(aliases) removed[flagKey] = aliases + if _, ok := b.existingFlags[flagKey]; !ok { + extinctions[flagKey] = struct{}{} + } } } return FlagsRef{ FlagsAdded: added, FlagsRemoved: removed, + ExtinctFlags: extinctions, } } diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index ae49dd1f..c6c1d0d5 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -7,37 +7,24 @@ import ( lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" ) -func CheckExtinctions(opts options.Options, removedFlags lflags.FlagAliasMap) (map[string]struct{}, error) { - flags := make([]string, 0, len(removedFlags)) - flagMap := make(map[string]struct{}, len(removedFlags)) - - for flagKey := range removedFlags { - flags = append(flags, flagKey) - flagMap[flagKey] = struct{}{} - } +func CheckExtinctions(opts options.Options, builder *lflags.ReferenceBuilder) error { + flags := make([]string, 0, len(builder.RemovedFlagKeys())) matcher, err := search.GetMatcher(opts, flags, nil) if err != nil { - return nil, err + return err } references, err := lsearch.SearchForRefs(opts.Dir, matcher) if err != nil { - return nil, err + return err } -check: for _, ref := range references { for _, hunk := range ref.Hunks { - if _, ok := flagMap[hunk.FlagKey]; ok { - delete(flagMap, hunk.FlagKey) - } - if len(flagMap) == 0 { - break check - } + builder.ExistingFlag(hunk.FlagKey) } } - // remaining flags are extinct - return flagMap, nil + return nil } diff --git a/main.go b/main.go index a443e278..3fe4d515 100644 --- a/main.go +++ b/main.go @@ -66,13 +66,11 @@ func main() { for _, contents := range diffMap { ldiff.ProcessDiffs(matcher, contents, builder) } - flagsRef := builder.Build() - extinctFlags, err := extinctions.CheckExtinctions(opts, flagsRef.FlagsRemoved) - if err != nil { + if err := extinctions.CheckExtinctions(opts, builder); err != nil { gha.LogWarning("Error checking for extinct flags") } - flagsRef.ExtinctFlags = extinctFlags + flagsRef := builder.Build() // Add comment existingComment := checkExistingComments(event, config, ctx) From 8bf8973c9d51a83af2f192bcabbb5c3db92e935f Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 11:46:52 -0500 Subject: [PATCH 09/35] log err --- main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/main.go b/main.go index 3fe4d515..493047a6 100644 --- a/main.go +++ b/main.go @@ -69,6 +69,7 @@ func main() { if err := extinctions.CheckExtinctions(opts, builder); err != nil { gha.LogWarning("Error checking for extinct flags") + log.Println(err) } flagsRef := builder.Build() From 7b1e130c351fac352ab867196dfcae135429001c Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 12:27:12 -0500 Subject: [PATCH 10/35] start updating comment --- comments/comments.go | 13 +++++-------- comments/comments_test.go | 18 +++++++++--------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index ffeb156b..3de00713 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -52,16 +52,13 @@ func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct commentTemplate.ArchivedAt = time.UnixMilli(*flag.ArchivedDate) } // All whitespace for template is required to be there or it will not render properly nested. - tmplSetup := `| {{- if eq .Flag.Archived true}}{{- if eq .Added true}} :warning:{{- end}}{{- end}}` + - `{{- if eq .Extinct true}} :skull:{{- end}}` + - ` [{{.Flag.Name}}]({{.LDInstance}}{{.Primary.Site.Href}})` + - `{{- if eq .Flag.Archived true}}` + - ` (archived on {{.ArchivedAt | date "2006-01-02"}})` + - `{{- end}} | ` + + tmplSetup := `| [{{.Flag.Name}}]({{.LDInstance}}{{.Primary.Site.Href}}) | ` + "`" + `{{.Flag.Key}}` + "` |" + `{{- if ne (len .Aliases) 0}}` + `{{range $i, $e := .Aliases }}` + `{{if $i}},{{end}}` + " `" + `{{$e}}` + "`" + `{{end}}` + - `{{- end}} |` + `{{- end}} | ` + + `{{- if eq .Extinct true}} :white_check_mark: all references removed{{- end}} ` + + `{{- if eq .Flag.Archived true}}{{- if eq .Added true}} :warning:{{else}} :information_source:{{- end}} archived on {{.ArchivedAt | date "2006-01-02"}}{{- end}} |` tmpl := template.Must(template.New("comment").Funcs(template.FuncMap{"trim": strings.TrimSpace, "isNil": isNil}).Funcs(sprig.FuncMap()).Parse(tmplSetup)) err := tmpl.Execute(&commentBody, commentTemplate) @@ -89,7 +86,7 @@ type FlagComments struct { } func BuildFlagComment(buildComment FlagComments, flagsRef lflags.FlagsRef, existingComment *github.IssueComment) string { - tableHeader := "| Name | Key | Aliases found |\n| --- | --- | --- |" + tableHeader := "| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |" var commentStr []string commentStr = append(commentStr, "## LaunchDarkly flag references") diff --git a/comments/comments_test.go b/comments/comments_test.go index 177a5113..80663f9a 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -167,7 +167,7 @@ func (e *testFlagEnv) NoAliases(t *testing.T) { comment, err := githubFlagComment(e.Flag, []string{}, true, false, &e.Config) require.NoError(t, err) - expected := "| [example flag](https://example.com/test) | `example-flag` | |" + expected := "| [example flag](https://example.com/test) | `example-flag` | | |" assert.Equal(t, expected, comment) } @@ -175,7 +175,7 @@ func (e *testFlagEnv) Alias(t *testing.T) { comment, err := githubFlagComment(e.Flag, []string{"exampleFlag", "ExampleFlag"}, true, false, &e.Config) require.NoError(t, err) - expected := "| [example flag](https://example.com/test) | `example-flag` | `exampleFlag`, `ExampleFlag` |" + expected := "| [example flag](https://example.com/test) | `example-flag` | `exampleFlag`, `ExampleFlag` | |" assert.Equal(t, expected, comment) } @@ -183,7 +183,7 @@ func (e *testFlagEnv) ArchivedAdded(t *testing.T) { comment, err := githubFlagComment(e.ArchivedFlag, []string{}, true, false, &e.Config) require.NoError(t, err) - expected := "| :warning: [archived flag](https://example.com/test) (archived on 2023-08-03) | `archived-flag` | |" + expected := "| [archived flag](https://example.com/test) | `archived-flag` | | :warning: archived on 2023-08-03 |" assert.Equal(t, expected, comment) } @@ -191,7 +191,7 @@ func (e *testFlagEnv) ArchivedRemoved(t *testing.T) { comment, err := githubFlagComment(e.ArchivedFlag, []string{}, false, false, &e.Config) require.NoError(t, err) - expected := "| [archived flag](https://example.com/test) (archived on 2023-08-03) | `archived-flag` | |" + expected := "| [archived flag](https://example.com/test) | `archived-flag` | | :information_source: archived on 2023-08-03 |" assert.Equal(t, expected, comment) } @@ -200,7 +200,7 @@ func (e *testCommentBuilder) AddedOnly(t *testing.T) { e.Comments.CommentsAdded = []string{"comment1", "comment2"} comment := BuildFlagComment(e.Comments, e.FlagsRef, nil) - expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found |\n| --- | --- | --- |\ncomment1\ncomment2\n\n\n \n " + expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n\n\n \n " assert.Equal(t, expected, comment) } @@ -210,7 +210,7 @@ func (e *testCommentBuilder) RemovedOnly(t *testing.T) { e.Comments.CommentsRemoved = []string{"comment1", "comment2"} comment := BuildFlagComment(e.Comments, e.FlagsRef, nil) - expected := "## LaunchDarkly flag references\n### :x: 2 flags removed\n\n| Name | Key | Aliases found |\n| --- | --- | --- |\ncomment1\ncomment2\n \n " + expected := "## LaunchDarkly flag references\n### :x: 2 flags removed\n\n| Name | Key | Aliases found |Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n \n " assert.Equal(t, expected, comment) } @@ -231,7 +231,7 @@ func (e *testProcessor) Basic(t *testing.T) { e.FlagsRef.FlagsAdded["example-flag"] = []string{} processor := ProcessFlags(e.FlagsRef, e.Flags, &e.Config) expected := FlagComments{ - CommentsAdded: []string{"| [example flag](https://example.com/test) | `example-flag` | |"}, + CommentsAdded: []string{"| [example flag](https://example.com/test) | `example-flag` | | |"}, } assert.Equal(t, expected, processor) } @@ -242,8 +242,8 @@ func (e *testProcessor) Multi(t *testing.T) { processor := ProcessFlags(e.FlagsRef, e.Flags, &e.Config) expected := FlagComments{ CommentsAdded: []string{ - "| [example flag](https://example.com/test) | `example-flag` | |", - "| [second flag](https://example.com/test) | `second-flag` | |", + "| [example flag](https://example.com/test) | `example-flag` | | |", + "| [second flag](https://example.com/test) | `second-flag` | | |", }, } assert.Equal(t, expected, processor) From 5bda4fd8a5306a4756f5ad19fd710419de90b688 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:16:02 -0500 Subject: [PATCH 11/35] rename some things --- internal/extinctions/extinctions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index c6c1d0d5..d2486a92 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -1,21 +1,21 @@ package extinctions import ( - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + "github.com/launchdarkly/find-code-references-in-pull-request/flags" "github.com/launchdarkly/find-code-references-in-pull-request/search" "github.com/launchdarkly/ld-find-code-refs/v2/options" - lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" + ld_search "github.com/launchdarkly/ld-find-code-refs/v2/search" ) -func CheckExtinctions(opts options.Options, builder *lflags.ReferenceBuilder) error { - flags := make([]string, 0, len(builder.RemovedFlagKeys())) +func CheckExtinctions(opts options.Options, builder *flags.ReferenceBuilder) error { + flagKeys := make([]string, 0, len(builder.RemovedFlagKeys())) - matcher, err := search.GetMatcher(opts, flags, nil) + matcher, err := search.GetMatcher(opts, flagKeys, nil) if err != nil { return err } - references, err := lsearch.SearchForRefs(opts.Dir, matcher) + references, err := ld_search.SearchForRefs(opts.Dir, matcher) if err != nil { return err } From 524fa4d2ee226f106fc8456d27d452328288588e Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:18:58 -0500 Subject: [PATCH 12/35] add extinct flag test --- comments/comments_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/comments/comments_test.go b/comments/comments_test.go index 80663f9a..162d5d31 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -137,6 +137,7 @@ func TestGithubFlagComment(t *testing.T) { t.Run("Flag with alias", acceptanceTestEnv.Alias) t.Run("Archived flag added", acceptanceTestEnv.ArchivedAdded) t.Run("Archived flag removed", acceptanceTestEnv.ArchivedRemoved) + t.Run("Extinct flag", acceptanceTestEnv.ExtinctFlag) } func TestProcessFlags(t *testing.T) { @@ -195,6 +196,14 @@ func (e *testFlagEnv) ArchivedRemoved(t *testing.T) { assert.Equal(t, expected, comment) } +func (e *testFlagEnv) ExtinctFlag(t *testing.T) { + comment, err := githubFlagComment(e.Flag, []string{}, false, true, &e.Config) + require.NoError(t, err) + + expected := "| [example flag](https://example.com/test) | `example-flag` | | :white_check_mark: all references removed |" + assert.Equal(t, expected, comment) +} + func (e *testCommentBuilder) AddedOnly(t *testing.T) { e.FlagsRef.FlagsAdded["example-flag"] = []string{} e.Comments.CommentsAdded = []string{"comment1", "comment2"} From 21cdd53a8f8095ed2438d19803fa28576b09ad86 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:21:07 -0500 Subject: [PATCH 13/35] add break test --- comments/comments.go | 2 +- comments/comments_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/comments/comments.go b/comments/comments.go index 3de00713..8d7fcc6c 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -58,7 +58,7 @@ func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct `{{range $i, $e := .Aliases }}` + `{{if $i}},{{end}}` + " `" + `{{$e}}` + "`" + `{{end}}` + `{{- end}} | ` + `{{- if eq .Extinct true}} :white_check_mark: all references removed{{- end}} ` + - `{{- if eq .Flag.Archived true}}{{- if eq .Added true}} :warning:{{else}} :information_source:{{- end}} archived on {{.ArchivedAt | date "2006-01-02"}}{{- end}} |` + `{{- if eq .Flag.Archived true}}{{- if eq .Extinct true}}
{{end}}{{- if eq .Added true}} :warning:{{else}} :information_source:{{- end}} archived on {{.ArchivedAt | date "2006-01-02"}}{{- end}} |` tmpl := template.Must(template.New("comment").Funcs(template.FuncMap{"trim": strings.TrimSpace, "isNil": isNil}).Funcs(sprig.FuncMap()).Parse(tmplSetup)) err := tmpl.Execute(&commentBody, commentTemplate) diff --git a/comments/comments_test.go b/comments/comments_test.go index 162d5d31..c1ad5081 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -138,6 +138,7 @@ func TestGithubFlagComment(t *testing.T) { t.Run("Archived flag added", acceptanceTestEnv.ArchivedAdded) t.Run("Archived flag removed", acceptanceTestEnv.ArchivedRemoved) t.Run("Extinct flag", acceptanceTestEnv.ExtinctFlag) + t.Run("Extinct and Archived flag", acceptanceTestEnv.ExtinctAndArchivedFlag) } func TestProcessFlags(t *testing.T) { @@ -204,6 +205,14 @@ func (e *testFlagEnv) ExtinctFlag(t *testing.T) { assert.Equal(t, expected, comment) } +func (e *testFlagEnv) ExtinctAndArchivedFlag(t *testing.T) { + comment, err := githubFlagComment(e.ArchivedFlag, []string{}, false, true, &e.Config) + require.NoError(t, err) + + expected := "| [archived flag](https://example.com/test) | `archived-flag` | | :white_check_mark: all references removed
:information_source: archived on 2023-08-03 |" + assert.Equal(t, expected, comment) +} + func (e *testCommentBuilder) AddedOnly(t *testing.T) { e.FlagsRef.FlagsAdded["example-flag"] = []string{} e.Comments.CommentsAdded = []string{"comment1", "comment2"} From cfdbf72e1edc0aec093ebd8ccf08d3ad86a1428e Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:28:00 -0500 Subject: [PATCH 14/35] import redundancies --- comments/comments.go | 3 +-- flags/builder.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index 8d7fcc6c..db8ba352 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -17,7 +17,6 @@ import ( "github.com/google/go-github/github" ldapi "github.com/launchdarkly/api-client-go/v13" - "github.com/launchdarkly/find-code-references-in-pull-request/config" lcr "github.com/launchdarkly/find-code-references-in-pull-request/config" lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" ) @@ -38,7 +37,7 @@ func isNil(a interface{}) bool { return a == nil || reflect.ValueOf(a).IsNil() } -func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct bool, config *config.Config) (string, error) { +func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct bool, config *lcr.Config) (string, error) { commentTemplate := Comment{ Flag: flag, Added: added, diff --git a/flags/builder.go b/flags/builder.go index 5632946e..9c35d302 100644 --- a/flags/builder.go +++ b/flags/builder.go @@ -5,7 +5,7 @@ import ( "sort" "strings" - diff_util "github.com/launchdarkly/find-code-references-in-pull-request/internal/utils/diff_util" + "github.com/launchdarkly/find-code-references-in-pull-request/internal/utils/diff_util" ) type ReferenceBuilder struct { From 889026d3a156dc82195fa8edde2221c5143c231f Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:36:05 -0500 Subject: [PATCH 15/35] move/rename pkg --- comments/comments.go | 8 ++-- comments/comments_test.go | 24 +++++------ diff/diff.go | 4 +- diff/diff_test.go | 50 +++++++++++------------ internal/extinctions/extinctions.go | 4 +- {flags => internal/references}/builder.go | 0 {flags => internal/references}/types.go | 0 main.go | 8 ++-- 8 files changed, 49 insertions(+), 49 deletions(-) rename {flags => internal/references}/builder.go (100%) rename {flags => internal/references}/types.go (100%) diff --git a/comments/comments.go b/comments/comments.go index db8ba352..b20d5473 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -18,7 +18,7 @@ import ( "github.com/google/go-github/github" ldapi "github.com/launchdarkly/api-client-go/v13" lcr "github.com/launchdarkly/find-code-references-in-pull-request/config" - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + refs "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" ) type Comment struct { @@ -84,7 +84,7 @@ type FlagComments struct { CommentsRemoved []string } -func BuildFlagComment(buildComment FlagComments, flagsRef lflags.FlagsRef, existingComment *github.IssueComment) string { +func BuildFlagComment(buildComment FlagComments, flagsRef refs.FlagsRef, existingComment *github.IssueComment) string { tableHeader := "| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |" var commentStr []string @@ -121,7 +121,7 @@ func BuildFlagComment(buildComment FlagComments, flagsRef lflags.FlagsRef, exist return postedComments } -func ProcessFlags(flagsRef lflags.FlagsRef, flags []ldapi.FeatureFlag, config *lcr.Config) FlagComments { +func ProcessFlags(flagsRef refs.FlagsRef, flags []ldapi.FeatureFlag, config *lcr.Config) FlagComments { buildComment := FlagComments{} addedKeys := make([]string, 0, len(flagsRef.FlagsAdded)) for key := range flagsRef.FlagsAdded { @@ -166,7 +166,7 @@ func find(slice []ldapi.FeatureFlag, val string) (int, bool) { return -1, false } -func uniqueFlagKeys(a, b lflags.FlagAliasMap) []string { +func uniqueFlagKeys(a, b refs.FlagAliasMap) []string { maxKeys := len(a) + len(b) allKeys := make([]string, 0, maxKeys) for k := range a { diff --git a/comments/comments_test.go b/comments/comments_test.go index c1ad5081..d79bb845 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -6,7 +6,7 @@ import ( ldapi "github.com/launchdarkly/api-client-go/v13" "github.com/launchdarkly/find-code-references-in-pull-request/config" - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + refs "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -61,7 +61,7 @@ func createFlag(key string) ldapi.FeatureFlag { type testCommentBuilder struct { Comments FlagComments - FlagsRef lflags.FlagsRef + FlagsRef refs.FlagsRef } func newCommentBuilderAccEnv() *testCommentBuilder { @@ -69,9 +69,9 @@ func newCommentBuilderAccEnv() *testCommentBuilder { CommentsAdded: []string{}, CommentsRemoved: []string{}, } - flagsAdded := make(lflags.FlagAliasMap) - flagsRemoved := make(lflags.FlagAliasMap) - flagsRef := lflags.FlagsRef{ + flagsAdded := make(refs.FlagAliasMap) + flagsRemoved := make(refs.FlagAliasMap) + flagsRef := refs.FlagsRef{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } @@ -84,16 +84,16 @@ func newCommentBuilderAccEnv() *testCommentBuilder { type testProcessor struct { Flags []ldapi.FeatureFlag - FlagsRef lflags.FlagsRef + FlagsRef refs.FlagsRef Config config.Config } func newProcessFlagAccEnv() *testProcessor { flag := createFlag("example-flag") flags := []ldapi.FeatureFlag{flag} - flagsAdded := make(lflags.FlagAliasMap) - flagsRemoved := make(lflags.FlagAliasMap) - flagsRef := lflags.FlagsRef{ + flagsAdded := make(refs.FlagAliasMap) + flagsRemoved := make(refs.FlagAliasMap) + flagsRef := refs.FlagsRef{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } @@ -113,9 +113,9 @@ func newProcessMultipleFlagsFlagAccEnv() *testProcessor { flag := createFlag("example-flag") flag2 := createFlag("second-flag") flags := []ldapi.FeatureFlag{flag, flag2} - flagsAdded := make(lflags.FlagAliasMap) - flagsRemoved := make(lflags.FlagAliasMap) - flagsRef := lflags.FlagsRef{ + flagsAdded := make(refs.FlagAliasMap) + flagsRemoved := make(refs.FlagAliasMap) + flagsRef := refs.FlagsRef{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } diff --git a/diff/diff.go b/diff/diff.go index 6b596ffd..bf9a0beb 100644 --- a/diff/diff.go +++ b/diff/diff.go @@ -5,8 +5,8 @@ import ( "os" "strings" - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" i "github.com/launchdarkly/find-code-references-in-pull-request/ignore" + refs "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" diff_util "github.com/launchdarkly/find-code-references-in-pull-request/internal/utils/diff_util" "github.com/launchdarkly/ld-find-code-refs/v2/aliases" lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" @@ -67,7 +67,7 @@ func checkDiffFile(parsedDiff *diff.FileDiff, workspace string) (filePath string return filePath, false } -func ProcessDiffs(matcher lsearch.Matcher, contents []byte, builder *lflags.ReferenceBuilder) { +func ProcessDiffs(matcher lsearch.Matcher, contents []byte, builder *refs.ReferenceBuilder) { diffLines := strings.Split(string(contents), "\n") for _, line := range diffLines { op := diff_util.LineOperation(line) diff --git a/diff/diff_test.go b/diff/diff_test.go index aa89d4b2..5522db41 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -5,7 +5,7 @@ import ( ldapi "github.com/launchdarkly/api-client-go/v13" "github.com/launchdarkly/find-code-references-in-pull-request/config" - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" + refs "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" lsearch "github.com/launchdarkly/ld-find-code-refs/v2/search" "github.com/sourcegraph/go-diff/diff" "github.com/stretchr/testify/assert" @@ -38,7 +38,7 @@ func createFlag(key string) ldapi.FeatureFlag { type testProcessor struct { Flags ldapi.FeatureFlags Config config.Config - Builder *lflags.ReferenceBuilder + Builder *refs.ReferenceBuilder } func (t testProcessor) flagKeys() []string { @@ -55,7 +55,7 @@ func newProcessFlagAccEnv() *testProcessor { flags := ldapi.FeatureFlags{} flags.Items = append(flags.Items, flag) flags.Items = append(flags.Items, flag2) - builder := lflags.NewReferenceBuilder(5) + builder := refs.NewReferenceBuilder(5) config := config.Config{ LdEnvironment: "production", LdInstance: "https://example.com/", @@ -117,15 +117,15 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { cases := []struct { name string sampleBody string - expected lflags.FlagsRef + expected refs.FlagsRef aliases map[string][]string delimiters string }{ { name: "add flag", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{"example-flag": []string{}}, - FlagsRemoved: lflags.FlagAliasMap{}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, + FlagsRemoved: refs.FlagAliasMap{}, }, aliases: map[string][]string{}, sampleBody: ` @@ -139,9 +139,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "remove flag", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{}, - FlagsRemoved: lflags.FlagAliasMap{"example-flag": []string{}}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{}, + FlagsRemoved: refs.FlagAliasMap{"example-flag": []string{}}, }, aliases: map[string][]string{}, sampleBody: ` @@ -155,9 +155,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "add and remove flag", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{"sample-flag": []string{}}, - FlagsRemoved: lflags.FlagAliasMap{"example-flag": []string{}}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{"sample-flag": []string{}}, + FlagsRemoved: refs.FlagAliasMap{"example-flag": []string{}}, }, aliases: map[string][]string{}, sampleBody: ` @@ -172,9 +172,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "modified flag", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{"example-flag": []string{}}, - FlagsRemoved: lflags.FlagAliasMap{}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, + FlagsRemoved: refs.FlagAliasMap{}, }, aliases: map[string][]string{}, sampleBody: ` @@ -190,9 +190,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "alias flag", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{"example-flag": []string{"exampleFlag"}}, - FlagsRemoved: lflags.FlagAliasMap{}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{"example-flag": []string{"exampleFlag"}}, + FlagsRemoved: refs.FlagAliasMap{}, }, aliases: map[string][]string{"example-flag": {"exampleFlag"}}, sampleBody: ` @@ -205,9 +205,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "require delimiters - no matches", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{}, - FlagsRemoved: lflags.FlagAliasMap{}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{}, + FlagsRemoved: refs.FlagAliasMap{}, }, delimiters: "'\"", aliases: map[string][]string{}, @@ -220,9 +220,9 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "require delimiters - match", - expected: lflags.FlagsRef{ - FlagsAdded: lflags.FlagAliasMap{"example-flag": []string{}}, - FlagsRemoved: lflags.FlagAliasMap{}, + expected: refs.FlagsRef{ + FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, + FlagsRemoved: refs.FlagAliasMap{}, }, delimiters: "'\"", aliases: map[string][]string{}, diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index d2486a92..cdc317c4 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -1,13 +1,13 @@ package extinctions import ( - "github.com/launchdarkly/find-code-references-in-pull-request/flags" + refs "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" "github.com/launchdarkly/find-code-references-in-pull-request/search" "github.com/launchdarkly/ld-find-code-refs/v2/options" ld_search "github.com/launchdarkly/ld-find-code-refs/v2/search" ) -func CheckExtinctions(opts options.Options, builder *flags.ReferenceBuilder) error { +func CheckExtinctions(opts options.Options, builder *refs.ReferenceBuilder) error { flagKeys := make([]string, 0, len(builder.RemovedFlagKeys())) matcher, err := search.GetMatcher(opts, flagKeys, nil) diff --git a/flags/builder.go b/internal/references/builder.go similarity index 100% rename from flags/builder.go rename to internal/references/builder.go diff --git a/flags/types.go b/internal/references/types.go similarity index 100% rename from flags/types.go rename to internal/references/types.go diff --git a/main.go b/main.go index 493047a6..7921b3ca 100644 --- a/main.go +++ b/main.go @@ -16,10 +16,10 @@ import ( lcr "github.com/launchdarkly/find-code-references-in-pull-request/config" ldiff "github.com/launchdarkly/find-code-references-in-pull-request/diff" e "github.com/launchdarkly/find-code-references-in-pull-request/errors" - lflags "github.com/launchdarkly/find-code-references-in-pull-request/flags" "github.com/launchdarkly/find-code-references-in-pull-request/internal/extinctions" gha "github.com/launchdarkly/find-code-references-in-pull-request/internal/github_actions" ldclient "github.com/launchdarkly/find-code-references-in-pull-request/internal/ldclient" + references "github.com/launchdarkly/find-code-references-in-pull-request/internal/references" "github.com/launchdarkly/find-code-references-in-pull-request/search" "github.com/launchdarkly/ld-find-code-refs/v2/options" "github.com/sourcegraph/go-diff/diff" @@ -62,7 +62,7 @@ func main() { matcher, err := search.GetMatcher(opts, flagKeys, diffMap) failExit(err) - builder := lflags.NewReferenceBuilder(config.MaxFlags) + builder := references.NewReferenceBuilder(config.MaxFlags) for _, contents := range diffMap { ldiff.ProcessDiffs(matcher, contents, builder) } @@ -106,7 +106,7 @@ func checkExistingComments(event *github.PullRequestEvent, config *lcr.Config, c return nil } -func postGithubComment(ctx context.Context, flagsRef lflags.FlagsRef, config *lcr.Config, existingComment *github.IssueComment, prNumber int, comment github.IssueComment) error { +func postGithubComment(ctx context.Context, flagsRef references.FlagsRef, config *lcr.Config, existingComment *github.IssueComment, prNumber int, comment github.IssueComment) error { var existingCommentId int64 if existingComment != nil { existingCommentId = existingComment.GetID() @@ -172,7 +172,7 @@ func getOptions(config *lcr.Config) (options.Options, error) { return options.GetOptions() } -func setOutputs(flagsRef lflags.FlagsRef) { +func setOutputs(flagsRef references.FlagsRef) { flagsModified := make([]string, 0, len(flagsRef.FlagsAdded)) for k := range flagsRef.FlagsAdded { flagsModified = append(flagsModified, k) From 3c5aad3c36adca99f7090b85371119b9213138ac Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:39:07 -0500 Subject: [PATCH 16/35] rename --- comments/comments.go | 4 ++-- comments/comments_test.go | 10 +++++----- diff/diff.go | 2 +- diff/diff_test.go | 20 ++++++++++---------- internal/extinctions/extinctions.go | 2 +- internal/references/builder.go | 27 +++++++++++++++------------ internal/references/types.go | 6 +++--- main.go | 6 +++--- 8 files changed, 40 insertions(+), 37 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index b20d5473..70b3ef08 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -84,7 +84,7 @@ type FlagComments struct { CommentsRemoved []string } -func BuildFlagComment(buildComment FlagComments, flagsRef refs.FlagsRef, existingComment *github.IssueComment) string { +func BuildFlagComment(buildComment FlagComments, flagsRef refs.ReferenceSummary, existingComment *github.IssueComment) string { tableHeader := "| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |" var commentStr []string @@ -121,7 +121,7 @@ func BuildFlagComment(buildComment FlagComments, flagsRef refs.FlagsRef, existin return postedComments } -func ProcessFlags(flagsRef refs.FlagsRef, flags []ldapi.FeatureFlag, config *lcr.Config) FlagComments { +func ProcessFlags(flagsRef refs.ReferenceSummary, flags []ldapi.FeatureFlag, config *lcr.Config) FlagComments { buildComment := FlagComments{} addedKeys := make([]string, 0, len(flagsRef.FlagsAdded)) for key := range flagsRef.FlagsAdded { diff --git a/comments/comments_test.go b/comments/comments_test.go index d79bb845..f3bff51f 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -61,7 +61,7 @@ func createFlag(key string) ldapi.FeatureFlag { type testCommentBuilder struct { Comments FlagComments - FlagsRef refs.FlagsRef + FlagsRef refs.ReferenceSummary } func newCommentBuilderAccEnv() *testCommentBuilder { @@ -71,7 +71,7 @@ func newCommentBuilderAccEnv() *testCommentBuilder { } flagsAdded := make(refs.FlagAliasMap) flagsRemoved := make(refs.FlagAliasMap) - flagsRef := refs.FlagsRef{ + flagsRef := refs.ReferenceSummary{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } @@ -84,7 +84,7 @@ func newCommentBuilderAccEnv() *testCommentBuilder { type testProcessor struct { Flags []ldapi.FeatureFlag - FlagsRef refs.FlagsRef + FlagsRef refs.ReferenceSummary Config config.Config } @@ -93,7 +93,7 @@ func newProcessFlagAccEnv() *testProcessor { flags := []ldapi.FeatureFlag{flag} flagsAdded := make(refs.FlagAliasMap) flagsRemoved := make(refs.FlagAliasMap) - flagsRef := refs.FlagsRef{ + flagsRef := refs.ReferenceSummary{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } @@ -115,7 +115,7 @@ func newProcessMultipleFlagsFlagAccEnv() *testProcessor { flags := []ldapi.FeatureFlag{flag, flag2} flagsAdded := make(refs.FlagAliasMap) flagsRemoved := make(refs.FlagAliasMap) - flagsRef := refs.FlagsRef{ + flagsRef := refs.ReferenceSummary{ FlagsAdded: flagsAdded, FlagsRemoved: flagsRemoved, } diff --git a/diff/diff.go b/diff/diff.go index bf9a0beb..11848569 100644 --- a/diff/diff.go +++ b/diff/diff.go @@ -67,7 +67,7 @@ func checkDiffFile(parsedDiff *diff.FileDiff, workspace string) (filePath string return filePath, false } -func ProcessDiffs(matcher lsearch.Matcher, contents []byte, builder *refs.ReferenceBuilder) { +func ProcessDiffs(matcher lsearch.Matcher, contents []byte, builder *refs.ReferenceSummaryBuilder) { diffLines := strings.Split(string(contents), "\n") for _, line := range diffLines { op := diff_util.LineOperation(line) diff --git a/diff/diff_test.go b/diff/diff_test.go index 5522db41..fec9f7b3 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -38,7 +38,7 @@ func createFlag(key string) ldapi.FeatureFlag { type testProcessor struct { Flags ldapi.FeatureFlags Config config.Config - Builder *refs.ReferenceBuilder + Builder *refs.ReferenceSummaryBuilder } func (t testProcessor) flagKeys() []string { @@ -55,7 +55,7 @@ func newProcessFlagAccEnv() *testProcessor { flags := ldapi.FeatureFlags{} flags.Items = append(flags.Items, flag) flags.Items = append(flags.Items, flag2) - builder := refs.NewReferenceBuilder(5) + builder := refs.NewReferenceSummaryBuilder(5) config := config.Config{ LdEnvironment: "production", LdInstance: "https://example.com/", @@ -117,13 +117,13 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { cases := []struct { name string sampleBody string - expected refs.FlagsRef + expected refs.ReferenceSummary aliases map[string][]string delimiters string }{ { name: "add flag", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, FlagsRemoved: refs.FlagAliasMap{}, }, @@ -139,7 +139,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "remove flag", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{}, FlagsRemoved: refs.FlagAliasMap{"example-flag": []string{}}, }, @@ -155,7 +155,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "add and remove flag", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{"sample-flag": []string{}}, FlagsRemoved: refs.FlagAliasMap{"example-flag": []string{}}, }, @@ -172,7 +172,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "modified flag", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, FlagsRemoved: refs.FlagAliasMap{}, }, @@ -190,7 +190,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "alias flag", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{"example-flag": []string{"exampleFlag"}}, FlagsRemoved: refs.FlagAliasMap{}, }, @@ -205,7 +205,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "require delimiters - no matches", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{}, FlagsRemoved: refs.FlagAliasMap{}, }, @@ -220,7 +220,7 @@ func TestProcessDiffs_BuildReferences(t *testing.T) { }, { name: "require delimiters - match", - expected: refs.FlagsRef{ + expected: refs.ReferenceSummary{ FlagsAdded: refs.FlagAliasMap{"example-flag": []string{}}, FlagsRemoved: refs.FlagAliasMap{}, }, diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index cdc317c4..01ec2379 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -7,7 +7,7 @@ import ( ld_search "github.com/launchdarkly/ld-find-code-refs/v2/search" ) -func CheckExtinctions(opts options.Options, builder *refs.ReferenceBuilder) error { +func CheckExtinctions(opts options.Options, builder *refs.ReferenceSummaryBuilder) error { flagKeys := make([]string, 0, len(builder.RemovedFlagKeys())) matcher, err := search.GetMatcher(opts, flagKeys, nil) diff --git a/internal/references/builder.go b/internal/references/builder.go index 9c35d302..bb7c2950 100644 --- a/internal/references/builder.go +++ b/internal/references/builder.go @@ -8,7 +8,7 @@ import ( "github.com/launchdarkly/find-code-references-in-pull-request/internal/utils/diff_util" ) -type ReferenceBuilder struct { +type ReferenceSummaryBuilder struct { max int // maximum number of flags to find flagsAdded map[string][]string flagsRemoved map[string][]string @@ -16,8 +16,8 @@ type ReferenceBuilder struct { foundFlags map[string]struct{} } -func NewReferenceBuilder(max int) *ReferenceBuilder { - return &ReferenceBuilder{ +func NewReferenceSummaryBuilder(max int) *ReferenceSummaryBuilder { + return &ReferenceSummaryBuilder{ flagsAdded: make(map[string][]string), flagsRemoved: make(map[string][]string), foundFlags: make(map[string]struct{}), @@ -26,11 +26,11 @@ func NewReferenceBuilder(max int) *ReferenceBuilder { } } -func (b *ReferenceBuilder) MaxReferences() bool { +func (b *ReferenceSummaryBuilder) MaxReferences() bool { return len(b.foundFlags) >= b.max } -func (b *ReferenceBuilder) AddReference(flagKey string, op diff_util.Operation, aliases []string) error { +func (b *ReferenceSummaryBuilder) AddReference(flagKey string, op diff_util.Operation, aliases []string) error { switch op { case diff_util.OperationAdd: b.AddedFlag(flagKey, aliases) @@ -43,12 +43,13 @@ func (b *ReferenceBuilder) AddReference(flagKey string, op diff_util.Operation, return nil } -// TODO rename -func (b *ReferenceBuilder) ExistingFlag(flagKey string) { +// Flag found in HEAD ref +func (b *ReferenceSummaryBuilder) ExistingFlag(flagKey string) { b.existingFlags[flagKey] = struct{}{} } -func (b *ReferenceBuilder) AddedFlag(flagKey string, aliases []string) { +// Flag and aliases found in added diff +func (b *ReferenceSummaryBuilder) AddedFlag(flagKey string, aliases []string) { b.foundFlags[flagKey] = struct{}{} if _, ok := b.flagsAdded[flagKey]; !ok { b.flagsAdded[flagKey] = make([]string, 0, len(aliases)) @@ -56,7 +57,8 @@ func (b *ReferenceBuilder) AddedFlag(flagKey string, aliases []string) { b.flagsAdded[flagKey] = append(b.flagsAdded[flagKey], aliases...) } -func (b *ReferenceBuilder) RemovedFlag(flagKey string, aliases []string) { +// Flag and aliases found in removed diff +func (b *ReferenceSummaryBuilder) RemovedFlag(flagKey string, aliases []string) { b.foundFlags[flagKey] = struct{}{} if _, ok := b.flagsRemoved[flagKey]; !ok { b.flagsRemoved[flagKey] = make([]string, 0, len(aliases)) @@ -64,7 +66,8 @@ func (b *ReferenceBuilder) RemovedFlag(flagKey string, aliases []string) { b.flagsRemoved[flagKey] = append(b.flagsRemoved[flagKey], aliases...) } -func (b *ReferenceBuilder) RemovedFlagKeys() []string { +// Returns a list of removed flag keys +func (b *ReferenceSummaryBuilder) RemovedFlagKeys() []string { keys := make([]string, 0, len(b.flagsRemoved)) for k := range b.flagsRemoved { keys = append(keys, k) @@ -72,7 +75,7 @@ func (b *ReferenceBuilder) RemovedFlagKeys() []string { return keys } -func (b *ReferenceBuilder) Build() FlagsRef { +func (b *ReferenceSummaryBuilder) Build() ReferenceSummary { added := make(map[string][]string, len(b.flagsAdded)) removed := make(map[string][]string, len(b.flagsRemoved)) extinctions := make(map[string]struct{}, len(b.flagsRemoved)) @@ -95,7 +98,7 @@ func (b *ReferenceBuilder) Build() FlagsRef { } } - return FlagsRef{ + return ReferenceSummary{ FlagsAdded: added, FlagsRemoved: removed, ExtinctFlags: extinctions, diff --git a/internal/references/types.go b/internal/references/types.go index 3597fe62..f574fae5 100644 --- a/internal/references/types.go +++ b/internal/references/types.go @@ -2,16 +2,16 @@ package flags type FlagAliasMap = map[string][]string -type FlagsRef struct { +type ReferenceSummary struct { FlagsAdded FlagAliasMap FlagsRemoved FlagAliasMap ExtinctFlags map[string]struct{} } -func (fr FlagsRef) Found() bool { +func (fr ReferenceSummary) Found() bool { return fr.Count() > 0 } -func (fr FlagsRef) Count() int { +func (fr ReferenceSummary) Count() int { return len(fr.FlagsAdded) + len(fr.FlagsRemoved) } diff --git a/main.go b/main.go index 7921b3ca..8188d75d 100644 --- a/main.go +++ b/main.go @@ -62,7 +62,7 @@ func main() { matcher, err := search.GetMatcher(opts, flagKeys, diffMap) failExit(err) - builder := references.NewReferenceBuilder(config.MaxFlags) + builder := references.NewReferenceSummaryBuilder(config.MaxFlags) for _, contents := range diffMap { ldiff.ProcessDiffs(matcher, contents, builder) } @@ -106,7 +106,7 @@ func checkExistingComments(event *github.PullRequestEvent, config *lcr.Config, c return nil } -func postGithubComment(ctx context.Context, flagsRef references.FlagsRef, config *lcr.Config, existingComment *github.IssueComment, prNumber int, comment github.IssueComment) error { +func postGithubComment(ctx context.Context, flagsRef references.ReferenceSummary, config *lcr.Config, existingComment *github.IssueComment, prNumber int, comment github.IssueComment) error { var existingCommentId int64 if existingComment != nil { existingCommentId = existingComment.GetID() @@ -172,7 +172,7 @@ func getOptions(config *lcr.Config) (options.Options, error) { return options.GetOptions() } -func setOutputs(flagsRef references.FlagsRef) { +func setOutputs(flagsRef references.ReferenceSummary) { flagsModified := make([]string, 0, len(flagsRef.FlagsAdded)) for k := range flagsRef.FlagsAdded { flagsModified = append(flagsModified, k) From de09d48bd6fe8b187c7ef62a309bb788e3426481 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:42:15 -0500 Subject: [PATCH 17/35] update tests --- comments/comments_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/comments/comments_test.go b/comments/comments_test.go index f3bff51f..8cce6e0a 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -218,7 +218,7 @@ func (e *testCommentBuilder) AddedOnly(t *testing.T) { e.Comments.CommentsAdded = []string{"comment1", "comment2"} comment := BuildFlagComment(e.Comments, e.FlagsRef, nil) - expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n\n\n \n " + expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n\n\n \n " assert.Equal(t, expected, comment) } @@ -228,7 +228,7 @@ func (e *testCommentBuilder) RemovedOnly(t *testing.T) { e.Comments.CommentsRemoved = []string{"comment1", "comment2"} comment := BuildFlagComment(e.Comments, e.FlagsRef, nil) - expected := "## LaunchDarkly flag references\n### :x: 2 flags removed\n\n| Name | Key | Aliases found |Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n \n " + expected := "## LaunchDarkly flag references\n### :x: 2 flags removed\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n \n " assert.Equal(t, expected, comment) } @@ -239,7 +239,7 @@ func (e *testCommentBuilder) AddedAndRemoved(t *testing.T) { e.Comments.CommentsRemoved = []string{"comment1", "comment2"} comment := BuildFlagComment(e.Comments, e.FlagsRef, nil) - expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found |\n| --- | --- | --- |\ncomment1\ncomment2\n\n\n### :x: 1 flag removed\n\n| Name | Key | Aliases found |\n| --- | --- | --- |\ncomment1\ncomment2\n \n " + expected := "## LaunchDarkly flag references\n### :mag: 1 flag added or modified\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n\n\n### :x: 1 flag removed\n\n| Name | Key | Aliases found | Info |\n| --- | --- | --- | --- |\ncomment1\ncomment2\n \n " assert.Equal(t, expected, comment) From a55d880375fbc255ed63298ec13ae1597679f750 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:45:44 -0500 Subject: [PATCH 18/35] if --- internal/references/builder.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/references/builder.go b/internal/references/builder.go index bb7c2950..884e9c5b 100644 --- a/internal/references/builder.go +++ b/internal/references/builder.go @@ -45,7 +45,9 @@ func (b *ReferenceSummaryBuilder) AddReference(flagKey string, op diff_util.Oper // Flag found in HEAD ref func (b *ReferenceSummaryBuilder) ExistingFlag(flagKey string) { - b.existingFlags[flagKey] = struct{}{} + if _, ok := b.existingFlags[flagKey]; !ok { + b.existingFlags[flagKey] = struct{}{} + } } // Flag and aliases found in added diff From 6cec40c81b21832acfc627db9ae7f58507c0306e Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:47:21 -0500 Subject: [PATCH 19/35] add helper func --- internal/references/builder.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/references/builder.go b/internal/references/builder.go index 884e9c5b..4d7e4746 100644 --- a/internal/references/builder.go +++ b/internal/references/builder.go @@ -50,9 +50,15 @@ func (b *ReferenceSummaryBuilder) ExistingFlag(flagKey string) { } } +func (b *ReferenceSummaryBuilder) foundFlag(flagKey string) { + if _, ok := b.foundFlags[flagKey]; !ok { + b.foundFlags[flagKey] = struct{}{} + } +} + // Flag and aliases found in added diff func (b *ReferenceSummaryBuilder) AddedFlag(flagKey string, aliases []string) { - b.foundFlags[flagKey] = struct{}{} + b.foundFlag(flagKey) if _, ok := b.flagsAdded[flagKey]; !ok { b.flagsAdded[flagKey] = make([]string, 0, len(aliases)) } @@ -61,7 +67,7 @@ func (b *ReferenceSummaryBuilder) AddedFlag(flagKey string, aliases []string) { // Flag and aliases found in removed diff func (b *ReferenceSummaryBuilder) RemovedFlag(flagKey string, aliases []string) { - b.foundFlags[flagKey] = struct{}{} + b.foundFlag(flagKey) if _, ok := b.flagsRemoved[flagKey]; !ok { b.flagsRemoved[flagKey] = make([]string, 0, len(aliases)) } From 8d599862dea356c2baf73d105c8b3a5685c0ce5f Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:54:24 -0500 Subject: [PATCH 20/35] some renaming and cleanup --- internal/extinctions/extinctions.go | 2 +- internal/references/builder.go | 37 +++++++++++++++-------------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/internal/extinctions/extinctions.go b/internal/extinctions/extinctions.go index 01ec2379..75e35b52 100644 --- a/internal/extinctions/extinctions.go +++ b/internal/extinctions/extinctions.go @@ -22,7 +22,7 @@ func CheckExtinctions(opts options.Options, builder *refs.ReferenceSummaryBuilde for _, ref := range references { for _, hunk := range ref.Hunks { - builder.ExistingFlag(hunk.FlagKey) + builder.AddHeadFlag(hunk.FlagKey) } } diff --git a/internal/references/builder.go b/internal/references/builder.go index 4d7e4746..a37e2a44 100644 --- a/internal/references/builder.go +++ b/internal/references/builder.go @@ -9,20 +9,20 @@ import ( ) type ReferenceSummaryBuilder struct { - max int // maximum number of flags to find - flagsAdded map[string][]string - flagsRemoved map[string][]string - existingFlags map[string]struct{} // TODO rename this - foundFlags map[string]struct{} + max int // maximum number of flags to find + flagsAdded map[string][]string + flagsRemoved map[string][]string + flagsFoundAtHead map[string]struct{} + foundFlags map[string]struct{} } func NewReferenceSummaryBuilder(max int) *ReferenceSummaryBuilder { return &ReferenceSummaryBuilder{ - flagsAdded: make(map[string][]string), - flagsRemoved: make(map[string][]string), - foundFlags: make(map[string]struct{}), - existingFlags: make(map[string]struct{}), - max: max, + flagsAdded: make(map[string][]string), + flagsRemoved: make(map[string][]string), + foundFlags: make(map[string]struct{}), + flagsFoundAtHead: make(map[string]struct{}), + max: max, } } @@ -30,12 +30,13 @@ func (b *ReferenceSummaryBuilder) MaxReferences() bool { return len(b.foundFlags) >= b.max } +// Add a found flag in diff by operation func (b *ReferenceSummaryBuilder) AddReference(flagKey string, op diff_util.Operation, aliases []string) error { switch op { case diff_util.OperationAdd: - b.AddedFlag(flagKey, aliases) + b.addedFlag(flagKey, aliases) case diff_util.OperationDelete: - b.RemovedFlag(flagKey, aliases) + b.removedFlag(flagKey, aliases) default: return fmt.Errorf("invalid operation=%s", op.String()) } @@ -44,9 +45,9 @@ func (b *ReferenceSummaryBuilder) AddReference(flagKey string, op diff_util.Oper } // Flag found in HEAD ref -func (b *ReferenceSummaryBuilder) ExistingFlag(flagKey string) { - if _, ok := b.existingFlags[flagKey]; !ok { - b.existingFlags[flagKey] = struct{}{} +func (b *ReferenceSummaryBuilder) AddHeadFlag(flagKey string) { + if _, ok := b.flagsFoundAtHead[flagKey]; !ok { + b.flagsFoundAtHead[flagKey] = struct{}{} } } @@ -57,7 +58,7 @@ func (b *ReferenceSummaryBuilder) foundFlag(flagKey string) { } // Flag and aliases found in added diff -func (b *ReferenceSummaryBuilder) AddedFlag(flagKey string, aliases []string) { +func (b *ReferenceSummaryBuilder) addedFlag(flagKey string, aliases []string) { b.foundFlag(flagKey) if _, ok := b.flagsAdded[flagKey]; !ok { b.flagsAdded[flagKey] = make([]string, 0, len(aliases)) @@ -66,7 +67,7 @@ func (b *ReferenceSummaryBuilder) AddedFlag(flagKey string, aliases []string) { } // Flag and aliases found in removed diff -func (b *ReferenceSummaryBuilder) RemovedFlag(flagKey string, aliases []string) { +func (b *ReferenceSummaryBuilder) removedFlag(flagKey string, aliases []string) { b.foundFlag(flagKey) if _, ok := b.flagsRemoved[flagKey]; !ok { b.flagsRemoved[flagKey] = make([]string, 0, len(aliases)) @@ -100,7 +101,7 @@ func (b *ReferenceSummaryBuilder) Build() ReferenceSummary { aliases := uniqueStrs(aliases) sort.Strings(aliases) removed[flagKey] = aliases - if _, ok := b.existingFlags[flagKey]; !ok { + if _, ok := b.flagsFoundAtHead[flagKey]; !ok { extinctions[flagKey] = struct{}{} } } From e31eb93fccaacf9df8bbdbb860ceaabafb772862 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:57:43 -0500 Subject: [PATCH 21/35] just a test --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6cb902ab..ae370a32 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,7 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} base-uri: https://app.launchdarkly.com max-flags: 200 + check-extinctions: false - name: Find flags summary run: | echo "flags addded or modified ${{ steps.find-flags.outputs.modified-flags-count }}" From c2db611b142c9b0d194c2318d14e50d4d15b4a82 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 13:59:55 -0500 Subject: [PATCH 22/35] conditional --- main.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 8188d75d..c19bf823 100644 --- a/main.go +++ b/main.go @@ -67,9 +67,11 @@ func main() { ldiff.ProcessDiffs(matcher, contents, builder) } - if err := extinctions.CheckExtinctions(opts, builder); err != nil { - gha.LogWarning("Error checking for extinct flags") - log.Println(err) + if config.CheckExtinctions { + if err := extinctions.CheckExtinctions(opts, builder); err != nil { + gha.LogWarning("Error checking for extinct flags") + log.Println(err) + } } flagsRef := builder.Build() From 465b18e8c28af892e0344651a13ab6eee71b4b9e Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:00:11 -0500 Subject: [PATCH 23/35] Revert "just a test" This reverts commit e31eb93fccaacf9df8bbdbb860ceaabafb772862. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ae370a32..6cb902ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,6 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} base-uri: https://app.launchdarkly.com max-flags: 200 - check-extinctions: false - name: Find flags summary run: | echo "flags addded or modified ${{ steps.find-flags.outputs.modified-flags-count }}" From a9570af1ab70570ebccb837eee25a101f7369ddf Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:04:18 -0500 Subject: [PATCH 24/35] another conditional --- comments/comments.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comments/comments.go b/comments/comments.go index 70b3ef08..cf2ff445 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -41,7 +41,7 @@ func githubFlagComment(flag ldapi.FeatureFlag, aliases []string, added, extinct commentTemplate := Comment{ Flag: flag, Added: added, - Extinct: extinct, + Extinct: config.CheckExtinctions && extinct, Aliases: aliases, Primary: flag.Environments[config.LdEnvironment], LDInstance: config.LdInstance, From 9502c7f71f032dfe162a0481b5356896124b3c6a Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:13:40 -0500 Subject: [PATCH 25/35] Revert "Revert "just a test"" This reverts commit 465b18e8c28af892e0344651a13ab6eee71b4b9e. --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6cb902ab..ae370a32 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,6 +21,7 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} base-uri: https://app.launchdarkly.com max-flags: 200 + check-extinctions: false - name: Find flags summary run: | echo "flags addded or modified ${{ steps.find-flags.outputs.modified-flags-count }}" From 701b4f6a5473a59c27e9aee2074703103e89289b Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:24:12 -0500 Subject: [PATCH 26/35] Revert "Revert "Revert "just a test""" This reverts commit 9502c7f71f032dfe162a0481b5356896124b3c6a. --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ae370a32..6cb902ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,6 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} base-uri: https://app.launchdarkly.com max-flags: 200 - check-extinctions: false - name: Find flags summary run: | echo "flags addded or modified ${{ steps.find-flags.outputs.modified-flags-count }}" From 546976101c1d223126fda9cdc42ffe9bfca0fc2c Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:36:49 -0500 Subject: [PATCH 27/35] update test --- comments/comments_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/comments/comments_test.go b/comments/comments_test.go index 8cce6e0a..08fd830d 100644 --- a/comments/comments_test.go +++ b/comments/comments_test.go @@ -22,8 +22,9 @@ type testFlagEnv struct { func newTestAccEnv() *testFlagEnv { flag := createFlag("example-flag") config := config.Config{ - LdEnvironment: "production", - LdInstance: "https://example.com/", + LdEnvironment: "production", + LdInstance: "https://example.com/", + CheckExtinctions: true, } archivedFlag := createFlag("archived-flag") From 8e1bc0f8d5cfb4dd80277ced50b3aa9c25b0bb7f Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 14:49:46 -0500 Subject: [PATCH 28/35] more handling for include extinctions --- comments/comments.go | 6 +++++- diff/diff_test.go | 2 +- internal/references/builder.go | 33 ++++++++++++++++++++------------- main.go | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index cf2ff445..c44d51cd 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -146,7 +146,11 @@ func ProcessFlags(flagsRef refs.ReferenceSummary, flags []ldapi.FeatureFlag, con for _, flagKey := range removedKeys { flagAliases := flagsRef.FlagsRemoved[flagKey] idx, _ := find(flags, flagKey) - _, extinct := flagsRef.ExtinctFlags[flagKey] + extinct := false + if flagsRef.ExtinctFlags != nil { + _, e := flagsRef.ExtinctFlags[flagKey] + extinct = e + } removedComment, err := githubFlagComment(flags[idx], flagAliases, false, extinct, config) buildComment.CommentsRemoved = append(buildComment.CommentsRemoved, removedComment) if err != nil { diff --git a/diff/diff_test.go b/diff/diff_test.go index fec9f7b3..6f8f141d 100644 --- a/diff/diff_test.go +++ b/diff/diff_test.go @@ -55,7 +55,7 @@ func newProcessFlagAccEnv() *testProcessor { flags := ldapi.FeatureFlags{} flags.Items = append(flags.Items, flag) flags.Items = append(flags.Items, flag2) - builder := refs.NewReferenceSummaryBuilder(5) + builder := refs.NewReferenceSummaryBuilder(5, false) config := config.Config{ LdEnvironment: "production", LdInstance: "https://example.com/", diff --git a/internal/references/builder.go b/internal/references/builder.go index a37e2a44..a44f5873 100644 --- a/internal/references/builder.go +++ b/internal/references/builder.go @@ -9,20 +9,22 @@ import ( ) type ReferenceSummaryBuilder struct { - max int // maximum number of flags to find - flagsAdded map[string][]string - flagsRemoved map[string][]string - flagsFoundAtHead map[string]struct{} - foundFlags map[string]struct{} + max int // maximum number of flags to find + includeExtinctions bool // include extinctions in summary + flagsAdded map[string][]string + flagsRemoved map[string][]string + flagsFoundAtHead map[string]struct{} + foundFlags map[string]struct{} } -func NewReferenceSummaryBuilder(max int) *ReferenceSummaryBuilder { +func NewReferenceSummaryBuilder(max int, includeExtinctions bool) *ReferenceSummaryBuilder { return &ReferenceSummaryBuilder{ - flagsAdded: make(map[string][]string), - flagsRemoved: make(map[string][]string), - foundFlags: make(map[string]struct{}), - flagsFoundAtHead: make(map[string]struct{}), - max: max, + flagsAdded: make(map[string][]string), + flagsRemoved: make(map[string][]string), + foundFlags: make(map[string]struct{}), + flagsFoundAtHead: make(map[string]struct{}), + max: max, + includeExtinctions: includeExtinctions, } } @@ -107,11 +109,16 @@ func (b *ReferenceSummaryBuilder) Build() ReferenceSummary { } } - return ReferenceSummary{ + summary := ReferenceSummary{ FlagsAdded: added, FlagsRemoved: removed, - ExtinctFlags: extinctions, } + + if b.includeExtinctions { + summary.ExtinctFlags = extinctions + } + + return summary } // get slice with unique, non-empty strings diff --git a/main.go b/main.go index c19bf823..dc9f811a 100644 --- a/main.go +++ b/main.go @@ -62,7 +62,7 @@ func main() { matcher, err := search.GetMatcher(opts, flagKeys, diffMap) failExit(err) - builder := references.NewReferenceSummaryBuilder(config.MaxFlags) + builder := references.NewReferenceSummaryBuilder(config.MaxFlags, config.CheckExtinctions) for _, contents := range diffMap { ldiff.ProcessDiffs(matcher, contents, builder) } From abc98c07d5199f7171d560d1b92a86fd05ba4b1d Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:05:34 -0500 Subject: [PATCH 29/35] cleanup --- comments/comments.go | 21 ++++++--------------- internal/references/types.go | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/comments/comments.go b/comments/comments.go index c44d51cd..51d3bdfd 100644 --- a/comments/comments.go +++ b/comments/comments.go @@ -123,27 +123,18 @@ func BuildFlagComment(buildComment FlagComments, flagsRef refs.ReferenceSummary, func ProcessFlags(flagsRef refs.ReferenceSummary, flags []ldapi.FeatureFlag, config *lcr.Config) FlagComments { buildComment := FlagComments{} - addedKeys := make([]string, 0, len(flagsRef.FlagsAdded)) - for key := range flagsRef.FlagsAdded { - addedKeys = append(addedKeys, key) - } - // sort keys so hashing can work for checking if comment already exists - sort.Strings(addedKeys) - for _, flagKey := range addedKeys { + + for _, flagKey := range flagsRef.AddedKeys() { flagAliases := flagsRef.FlagsAdded[flagKey] idx, _ := find(flags, flagKey) createComment, err := githubFlagComment(flags[idx], flagAliases, true, false, config) - buildComment.CommentsAdded = append(buildComment.CommentsAdded, createComment) if err != nil { log.Println(err) } + buildComment.CommentsAdded = append(buildComment.CommentsAdded, createComment) } - removedKeys := make([]string, 0, len(flagsRef.FlagsRemoved)) - for key := range flagsRef.FlagsRemoved { - removedKeys = append(removedKeys, key) - } - sort.Strings(removedKeys) - for _, flagKey := range removedKeys { + + for _, flagKey := range flagsRef.RemovedKeys() { flagAliases := flagsRef.FlagsRemoved[flagKey] idx, _ := find(flags, flagKey) extinct := false @@ -152,10 +143,10 @@ func ProcessFlags(flagsRef refs.ReferenceSummary, flags []ldapi.FeatureFlag, con extinct = e } removedComment, err := githubFlagComment(flags[idx], flagAliases, false, extinct, config) - buildComment.CommentsRemoved = append(buildComment.CommentsRemoved, removedComment) if err != nil { log.Println(err) } + buildComment.CommentsRemoved = append(buildComment.CommentsRemoved, removedComment) } return buildComment diff --git a/internal/references/types.go b/internal/references/types.go index f574fae5..917cd86b 100644 --- a/internal/references/types.go +++ b/internal/references/types.go @@ -1,5 +1,7 @@ package flags +import "sort" + type FlagAliasMap = map[string][]string type ReferenceSummary struct { @@ -15,3 +17,23 @@ func (fr ReferenceSummary) Found() bool { func (fr ReferenceSummary) Count() int { return len(fr.FlagsAdded) + len(fr.FlagsRemoved) } + +// returns a sorted list of all added flag keys +func (fr ReferenceSummary) AddedKeys() []string { + return fr.sortedKeys(fr.FlagsAdded) +} + +// returns a sorted list of all removed flag keys +func (fr ReferenceSummary) RemovedKeys() []string { + return fr.sortedKeys(fr.FlagsRemoved) +} + +func (fr ReferenceSummary) sortedKeys(keys map[string][]string) []string { + sortedKeys := make([]string, 0, len(keys)) + for k := range keys { + sortedKeys = append(sortedKeys, k) + } + // sort keys so hashing can work for checking if comment already exists + sort.Strings(sortedKeys) + return sortedKeys +} From 60c8d7ad39779f816b7e393d558cc33a4eca8565 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:06:42 -0500 Subject: [PATCH 30/35] add test data --- testdata/test | 1 + 1 file changed, 1 insertion(+) diff --git a/testdata/test b/testdata/test index b5b9845b..30fd7a89 100644 --- a/testdata/test +++ b/testdata/test @@ -6,3 +6,4 @@ old-pricing-banner oldPricingBanner show_widgets oldPricingBanner +mobile-app-promo-ios From 93ec5bf57f3d1d061ee5aa4790b599b064f4bc5d Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:29:11 -0500 Subject: [PATCH 31/35] set output and fix wrong one --- README.md | 3 +++ action.yml | 6 ++++++ internal/references/types.go | 16 ++++++++++++++-- main.go | 19 +++++++++---------- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 0e272fbf..0ba4a85b 100644 --- a/README.md +++ b/README.md @@ -118,4 +118,7 @@ This action does not support monorepos or searching for flags across LaunchDarkl | any-changed | Returns true if any flags have been changed in PR | | changed-flags | Space-separated list of flags changed in PR | | changed-flags-count | Number of flags changed in PR | +| any-extinct | Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | +| extinct-flags | Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | +| extinct-flags-count | Number of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | diff --git a/action.yml b/action.yml index 8ff5d3b4..afe4cd79 100644 --- a/action.yml +++ b/action.yml @@ -65,3 +65,9 @@ outputs: description: Space-separated list of flags changed in PR changed-flags-count: description: Number of flags changed in PR + any-extinct: + description: Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. + extinct-flags: + description: Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. + extinct-flags-count: + description: Number of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. diff --git a/internal/references/types.go b/internal/references/types.go index 917cd86b..dd15ddcf 100644 --- a/internal/references/types.go +++ b/internal/references/types.go @@ -28,12 +28,24 @@ func (fr ReferenceSummary) RemovedKeys() []string { return fr.sortedKeys(fr.FlagsRemoved) } +// returns a sorted list of all extinct flag keys +func (fr ReferenceSummary) ExtinctKeys() []string { + if fr.ExtinctFlags == nil { + return nil + } + keys := make([]string, 0, len(fr.ExtinctFlags)) + for k := range fr.ExtinctFlags { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} + func (fr ReferenceSummary) sortedKeys(keys map[string][]string) []string { sortedKeys := make([]string, 0, len(keys)) - for k := range keys { + for k := range fr.ExtinctFlags { sortedKeys = append(sortedKeys, k) } - // sort keys so hashing can work for checking if comment already exists sort.Strings(sortedKeys) return sortedKeys } diff --git a/main.go b/main.go index dc9f811a..6ff6de25 100644 --- a/main.go +++ b/main.go @@ -88,7 +88,7 @@ func main() { } // Set outputs - setOutputs(flagsRef) + setOutputs(config, flagsRef) failExit(err) } @@ -174,22 +174,21 @@ func getOptions(config *lcr.Config) (options.Options, error) { return options.GetOptions() } -func setOutputs(flagsRef references.ReferenceSummary) { - flagsModified := make([]string, 0, len(flagsRef.FlagsAdded)) - for k := range flagsRef.FlagsAdded { - flagsModified = append(flagsModified, k) - } +func setOutputs(config *lcr.Config, flagsRef references.ReferenceSummary) { + flagsModified := flagsRef.AddedKeys() setOutputsForChangedFlags("modified", flagsModified) - flagsRemoved := make([]string, 0, len(flagsRef.FlagsRemoved)) - for k := range flagsRef.FlagsRemoved { - flagsRemoved = append(flagsRemoved, k) + flagsRemoved := flagsRef.RemovedKeys() + setOutputsForChangedFlags("removed", flagsRemoved) + + if config.CheckExtinctions { + setOutputsForChangedFlags("extinct", flagsRef.ExtinctKeys()) } - setOutputsForChangedFlags("removed", flagsModified) allChangedFlags := make([]string, 0, len(flagsModified)+len(flagsRemoved)) allChangedFlags = append(allChangedFlags, flagsModified...) allChangedFlags = append(allChangedFlags, flagsRemoved...) + sort.Strings(allChangedFlags) setOutputsForChangedFlags("changed", allChangedFlags) } From 144e001ef60d371283294083d0e175a4ba475d5c Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:36:14 -0500 Subject: [PATCH 32/35] rename --- internal/references/types.go | 8 ++------ main.go | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/internal/references/types.go b/internal/references/types.go index dd15ddcf..d64a0d4e 100644 --- a/internal/references/types.go +++ b/internal/references/types.go @@ -10,12 +10,8 @@ type ReferenceSummary struct { ExtinctFlags map[string]struct{} } -func (fr ReferenceSummary) Found() bool { - return fr.Count() > 0 -} - -func (fr ReferenceSummary) Count() int { - return len(fr.FlagsAdded) + len(fr.FlagsRemoved) +func (fr ReferenceSummary) AnyFound() bool { + return len(fr.FlagsAdded)+len(fr.FlagsRemoved) > 0 } // returns a sorted list of all added flag keys diff --git a/main.go b/main.go index 6ff6de25..d6f81411 100644 --- a/main.go +++ b/main.go @@ -114,7 +114,7 @@ func postGithubComment(ctx context.Context, flagsRef references.ReferenceSummary existingCommentId = existingComment.GetID() } - if flagsRef.Found() { + if flagsRef.AnyFound() { if existingCommentId > 0 { _, _, err := config.GHClient.Issues.EditComment(ctx, config.Owner, config.Repo, existingCommentId, &comment) return err From 97139258b72cccd3f53ae6f9518e4e75c08fda36 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:41:33 -0500 Subject: [PATCH 33/35] fix typo --- internal/references/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/references/types.go b/internal/references/types.go index d64a0d4e..8686b5d1 100644 --- a/internal/references/types.go +++ b/internal/references/types.go @@ -39,7 +39,7 @@ func (fr ReferenceSummary) ExtinctKeys() []string { func (fr ReferenceSummary) sortedKeys(keys map[string][]string) []string { sortedKeys := make([]string, 0, len(keys)) - for k := range fr.ExtinctFlags { + for k := range keys { sortedKeys = append(sortedKeys, k) } sort.Strings(sortedKeys) From 81536855981aa1349f785c18b100b9ca020fb832 Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:45:18 -0500 Subject: [PATCH 34/35] init cfg with defaults --- config/config.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/config/config.go b/config/config.go index 75376967..510e19ba 100644 --- a/config/config.go +++ b/config/config.go @@ -36,8 +36,13 @@ func ValidateInputandParse(ctx context.Context) (*Config, error) { fmt.Printf("::add-mask::%s\n", repoToken) } - // set config - var config Config + // init config with defaults + config := Config{ + MaxFlags: 5, + IncludeArchivedFlags: true, + CheckExtinctions: true, + } + config.LdProject = os.Getenv("INPUT_PROJECT-KEY") if config.LdProject == "" { return nil, errors.New("`project-key` is required") @@ -75,13 +80,11 @@ func ValidateInputandParse(ctx context.Context) (*Config, error) { config.PlaceholderComment = placholderComment } - config.IncludeArchivedFlags = true if includeArchivedFlags, err := strconv.ParseBool(os.Getenv("INPUT_INCLUDE-ARCHIVED-FLAGS")); err == nil { // ignore error - default is true config.IncludeArchivedFlags = includeArchivedFlags } - config.CheckExtinctions = true if checkExtinctions, err := strconv.ParseBool(os.Getenv("INPUT_CHECK-EXTINCTIONS")); err == nil { // ignore error - default is true config.CheckExtinctions = checkExtinctions From e390225aa37ff96f43a350a712127e48c343c35c Mon Sep 17 00:00:00 2001 From: Jaz Date: Mon, 13 Nov 2023 15:46:47 -0500 Subject: [PATCH 35/35] docs --- README.md | 6 +++--- action.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0ba4a85b..f42ba205 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ This action does not support monorepos or searching for flags across LaunchDarkl | any-changed | Returns true if any flags have been changed in PR | | changed-flags | Space-separated list of flags changed in PR | | changed-flags-count | Number of flags changed in PR | -| any-extinct | Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | -| extinct-flags | Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | -| extinct-flags-count | Number of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. | +| any-extinct | Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true. | +| extinct-flags | Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true. | +| extinct-flags-count | Number of flags removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true. | diff --git a/action.yml b/action.yml index afe4cd79..9bd4bda2 100644 --- a/action.yml +++ b/action.yml @@ -66,8 +66,8 @@ outputs: changed-flags-count: description: Number of flags changed in PR any-extinct: - description: Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. + description: Returns true if any flags have been removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true. extinct-flags: - description: Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. + description: Space-separated list of flags removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true. extinct-flags-count: - description: Number of flags removed in PR and no longer exist in codebase. Only returned if check-extinctions is true. + description: Number of flags removed in PR and no longer exist in codebase. Only returned if `check-extinctions` is true.