From 99f51e43d21e2a901d16c9459a418b9903aa84c1 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Setoguchi Date: Wed, 11 Jun 2025 18:59:49 +0900 Subject: [PATCH 1/4] Add label flag for skyline model generation --- cmd/root.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/root.go b/cmd/root.go index 38d2b97..806f685 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -21,6 +21,7 @@ import ( var ( yearRange string user string + label string full bool debug bool web bool @@ -69,6 +70,7 @@ func initFlags() { flags := rootCmd.Flags() flags.StringVarP(&yearRange, "year", "y", fmt.Sprintf("%d", time.Now().Year()), "Year or year range (e.g., 2024 or 2014-2024)") flags.StringVarP(&user, "user", "u", "", "GitHub username (optional, defaults to authenticated user)") + flags.StringVarP(&label, "label", "l", "", "Label for the generated model (optional, defaults to username)") flags.BoolVarP(&full, "full", "f", false, "Generate contribution graph from join year to current year") flags.BoolVarP(&debug, "debug", "d", false, "Enable debug logging") flags.BoolVarP(&web, "web", "w", false, "Open GitHub profile (authenticated or specified user).") @@ -105,7 +107,7 @@ func handleSkylineCommand(_ *cobra.Command, _ []string) error { return fmt.Errorf("invalid year range: %v", err) } - return skyline.GenerateSkyline(startYear, endYear, user, full, output, artOnly) + return skyline.GenerateSkyline(startYear, endYear, user, label, full, output, artOnly) } // Browser interface matches browser.Browser functionality. From a86e23a2061f0bd9acc0cdaa4375027fe0783021 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Setoguchi Date: Wed, 11 Jun 2025 19:00:01 +0900 Subject: [PATCH 2/4] Add label parameter to GenerateSkyline function for customizable output labeling --- cmd/skyline/skyline.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cmd/skyline/skyline.go b/cmd/skyline/skyline.go index de62e5e..4cbdec1 100644 --- a/cmd/skyline/skyline.go +++ b/cmd/skyline/skyline.go @@ -24,7 +24,7 @@ type GitHubClientInterface interface { } // GenerateSkyline creates a 3D model with ASCII art preview of GitHub contributions for the specified year range, or "full lifetime" of the user -func GenerateSkyline(startYear, endYear int, targetUser string, full bool, output string, artOnly bool) error { +func GenerateSkyline(startYear, endYear int, targetUser string, label string, full bool, output string, artOnly bool) error { log := logger.GetLogger() client, err := github.InitializeGitHubClient() @@ -42,6 +42,9 @@ func GenerateSkyline(startYear, endYear int, targetUser string, full bool, outpu } targetUser = username } + if label == "" { + label = targetUser + } if full { joinYear, err := client.GetUserJoinYear(targetUser) @@ -61,7 +64,7 @@ func GenerateSkyline(startYear, endYear int, targetUser string, full bool, outpu allContributions = append(allContributions, contributions) // Generate ASCII art for each year - asciiArt, err := ascii.GenerateASCII(contributions, targetUser, year, (year == startYear) && !artOnly, !artOnly) + asciiArt, err := ascii.GenerateASCII(contributions, label, year, (year == startYear) && !artOnly, !artOnly) if err != nil { if warnErr := log.Warning("Failed to generate ASCII preview: %v", err); warnErr != nil { return warnErr @@ -96,9 +99,9 @@ func GenerateSkyline(startYear, endYear int, targetUser string, full bool, outpu // Generate the STL file if len(allContributions) == 1 { - return stl.GenerateSTL(allContributions[0], outputPath, targetUser, startYear) + return stl.GenerateSTL(allContributions[0], outputPath, label, startYear) } - return stl.GenerateSTLRange(allContributions, outputPath, targetUser, startYear, endYear) + return stl.GenerateSTLRange(allContributions, outputPath, label, startYear, endYear) } return nil From fb176ed86a48f5b7ae577afc7a8f6da5e55453ec Mon Sep 17 00:00:00 2001 From: Mitsuhiro Setoguchi Date: Wed, 11 Jun 2025 19:00:14 +0900 Subject: [PATCH 3/4] Fix TestGenerateSkyline to include label parameter in function call --- cmd/skyline/skyline_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/skyline/skyline_test.go b/cmd/skyline/skyline_test.go index 05970a5..aec1a19 100644 --- a/cmd/skyline/skyline_test.go +++ b/cmd/skyline/skyline_test.go @@ -20,6 +20,7 @@ func TestGenerateSkyline(t *testing.T) { startYear int endYear int targetUser string + label string full bool mockClient *mocks.MockGitHubClient wantErr bool @@ -29,6 +30,7 @@ func TestGenerateSkyline(t *testing.T) { startYear: 2024, endYear: 2024, targetUser: "testuser", + label: "", full: false, mockClient: &mocks.MockGitHubClient{ Username: "testuser", @@ -42,6 +44,7 @@ func TestGenerateSkyline(t *testing.T) { startYear: 2020, endYear: 2024, targetUser: "testuser", + label: "", full: false, mockClient: &mocks.MockGitHubClient{ Username: "testuser", @@ -55,6 +58,7 @@ func TestGenerateSkyline(t *testing.T) { startYear: 2008, endYear: 2024, targetUser: "testuser", + label: "", full: true, mockClient: &mocks.MockGitHubClient{ Username: "testuser", @@ -72,7 +76,7 @@ func TestGenerateSkyline(t *testing.T) { return github.NewClient(tt.mockClient), nil } - err := GenerateSkyline(tt.startYear, tt.endYear, tt.targetUser, tt.full, "", false) + err := GenerateSkyline(tt.startYear, tt.endYear, tt.targetUser, tt.label, tt.full, "", false) if (err != nil) != tt.wantErr { t.Errorf("GenerateSkyline() error = %v, wantErr %v", err, tt.wantErr) } From 00f29cb0bb805c6ef88dbfed013abbef124804d7 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Setoguchi Date: Wed, 11 Jun 2025 20:36:02 +0900 Subject: [PATCH 4/4] Update GenerateSkyline function documentation to clarify label parameter usage --- cmd/skyline/skyline.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/skyline/skyline.go b/cmd/skyline/skyline.go index 4cbdec1..5ccc80b 100644 --- a/cmd/skyline/skyline.go +++ b/cmd/skyline/skyline.go @@ -23,7 +23,8 @@ type GitHubClientInterface interface { FetchContributions(username string, year int) (*types.ContributionsResponse, error) } -// GenerateSkyline creates a 3D model with ASCII art preview of GitHub contributions for the specified year range, or "full lifetime" of the user +// GenerateSkyline creates a 3D model with ASCII art preview of GitHub contributions for the specified year range, or "full lifetime" of the user. +// The 'label' parameter customizes the display name in the output; if left empty, it defaults to the targetUser. func GenerateSkyline(startYear, endYear int, targetUser string, label string, full bool, output string, artOnly bool) error { log := logger.GetLogger()