[PR #452] [MERGED] Unify markdown output with tablewriter's built-in renderer #538

Closed
opened 2026-02-26 22:31:25 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/452
Author: @rudrankriyam
Created: 2/8/2026
Status: Merged
Merged: 2/8/2026
Merged by: @rudrankriyam

Base: mainHead: feat/unified-markdown-renderer


📝 Commits (1)

  • 7118c47 feat: unify markdown output with tablewriter's built-in renderer

📊 Changes

80 files changed (+3324 additions, -4087 deletions)

View changed files

📝 internal/asc/actors_output.go (+9 -19)
📝 internal/asc/analytics_output.go (+82 -128)
📝 internal/asc/assets_output.go (+101 -162)
📝 internal/asc/build_bundles_output.go (+52 -67)
📝 internal/asc/categories_output.go (+14 -15)
📝 internal/asc/devices_output.go (+18 -29)
📝 internal/asc/eula_output.go (+18 -19)
📝 internal/asc/eula_output_test.go (+1 -1)
📝 internal/asc/finance_output.go (+19 -30)
📝 internal/asc/iap_output.go (+147 -180)
📝 internal/asc/iap_output_test.go (+5 -5)
📝 internal/asc/nominations_output.go (+19 -24)
📝 internal/asc/offer_codes_custom_output.go (+33 -38)
📝 internal/asc/offer_codes_output.go (+18 -34)
📝 internal/asc/output_accessibility.go (+28 -41)
📝 internal/asc/output_age_rating.go (+9 -10)
📝 internal/asc/output_alternative_distribution.go (+63 -76)
📝 internal/asc/output_alternative_distribution_test.go (+5 -5)
📝 internal/asc/output_android_ios_mapping.go (+18 -20)
📝 internal/asc/output_app_clips.go (+153 -175)

...and 60 more files

📄 Description

Summary

  • Replace all 60+ hand-written printXxxMarkdown functions with tablewriter's built-in Markdown renderer
  • Each table/markdown pair now shares a xxxRows() function that builds headers + rows once
  • printXxxTable calls RenderTable(h, r), printXxxMarkdown calls RenderMarkdown(h, r)
  • Pipe escaping is handled automatically by the renderer — escapeMarkdown helper removed
  • Net -763 lines across 80 files

Before (hand-written per type)

func printAppsMarkdown(resp *AppsResponse) error {
    fmt.Fprintln(os.Stdout, "| ID | Name | Bundle ID | SKU |")
    fmt.Fprintln(os.Stdout, "| --- | --- | --- | --- |")
    for _, item := range resp.Data {
        fmt.Fprintf(os.Stdout, "| %s | %s | %s | %s |\n",
            item.ID, escapeMarkdown(item.Attributes.Name), ...)
    }
    return nil
}

After (shared rows, renderer handles formatting)

func appsRows(resp *AppsResponse) ([]string, [][]string) {
    headers := []string{"ID", "Name", "Bundle ID", "SKU"}
    rows := make([][]string, 0, len(resp.Data))
    for _, item := range resp.Data {
        rows = append(rows, []string{item.ID, compactWhitespace(item.Attributes.Name), ...})
    }
    return headers, rows
}

func printAppsTable(resp *AppsResponse) error {
    h, r := appsRows(resp)
    RenderTable(h, r)
    return nil
}

func printAppsMarkdown(resp *AppsResponse) error {
    h, r := appsRows(resp)
    RenderMarkdown(h, r)
    return nil
}

Test plan

  • make format passes
  • make lint passes
  • make test passes (all 7600+ tests)
  • Manual: asc apps list --output markdown renders proper markdown
  • Manual: asc apps list --output table still renders bordered tables

Partially addresses #444


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/rudrankriyam/App-Store-Connect-CLI/pull/452 **Author:** [@rudrankriyam](https://github.com/rudrankriyam) **Created:** 2/8/2026 **Status:** ✅ Merged **Merged:** 2/8/2026 **Merged by:** [@rudrankriyam](https://github.com/rudrankriyam) **Base:** `main` ← **Head:** `feat/unified-markdown-renderer` --- ### 📝 Commits (1) - [`7118c47`](https://github.com/rudrankriyam/App-Store-Connect-CLI/commit/7118c4731cd7e2e11042293129a566ca7a14fb5d) feat: unify markdown output with tablewriter's built-in renderer ### 📊 Changes **80 files changed** (+3324 additions, -4087 deletions) <details> <summary>View changed files</summary> 📝 `internal/asc/actors_output.go` (+9 -19) 📝 `internal/asc/analytics_output.go` (+82 -128) 📝 `internal/asc/assets_output.go` (+101 -162) 📝 `internal/asc/build_bundles_output.go` (+52 -67) 📝 `internal/asc/categories_output.go` (+14 -15) 📝 `internal/asc/devices_output.go` (+18 -29) 📝 `internal/asc/eula_output.go` (+18 -19) 📝 `internal/asc/eula_output_test.go` (+1 -1) 📝 `internal/asc/finance_output.go` (+19 -30) 📝 `internal/asc/iap_output.go` (+147 -180) 📝 `internal/asc/iap_output_test.go` (+5 -5) 📝 `internal/asc/nominations_output.go` (+19 -24) 📝 `internal/asc/offer_codes_custom_output.go` (+33 -38) 📝 `internal/asc/offer_codes_output.go` (+18 -34) 📝 `internal/asc/output_accessibility.go` (+28 -41) 📝 `internal/asc/output_age_rating.go` (+9 -10) 📝 `internal/asc/output_alternative_distribution.go` (+63 -76) 📝 `internal/asc/output_alternative_distribution_test.go` (+5 -5) 📝 `internal/asc/output_android_ios_mapping.go` (+18 -20) 📝 `internal/asc/output_app_clips.go` (+153 -175) _...and 60 more files_ </details> ### 📄 Description ## Summary - Replace all 60+ hand-written `printXxxMarkdown` functions with `tablewriter`'s built-in Markdown renderer - Each table/markdown pair now shares a `xxxRows()` function that builds headers + rows once - `printXxxTable` calls `RenderTable(h, r)`, `printXxxMarkdown` calls `RenderMarkdown(h, r)` - Pipe escaping is handled automatically by the renderer — `escapeMarkdown` helper removed - **Net -763 lines** across 80 files ## Before (hand-written per type) ```go func printAppsMarkdown(resp *AppsResponse) error { fmt.Fprintln(os.Stdout, "| ID | Name | Bundle ID | SKU |") fmt.Fprintln(os.Stdout, "| --- | --- | --- | --- |") for _, item := range resp.Data { fmt.Fprintf(os.Stdout, "| %s | %s | %s | %s |\n", item.ID, escapeMarkdown(item.Attributes.Name), ...) } return nil } ``` ## After (shared rows, renderer handles formatting) ```go func appsRows(resp *AppsResponse) ([]string, [][]string) { headers := []string{"ID", "Name", "Bundle ID", "SKU"} rows := make([][]string, 0, len(resp.Data)) for _, item := range resp.Data { rows = append(rows, []string{item.ID, compactWhitespace(item.Attributes.Name), ...}) } return headers, rows } func printAppsTable(resp *AppsResponse) error { h, r := appsRows(resp) RenderTable(h, r) return nil } func printAppsMarkdown(resp *AppsResponse) error { h, r := appsRows(resp) RenderMarkdown(h, r) return nil } ``` ## Test plan - [x] `make format` passes - [x] `make lint` passes - [x] `make test` passes (all 7600+ tests) - [x] Manual: `asc apps list --output markdown` renders proper markdown - [x] Manual: `asc apps list --output table` still renders bordered tables Partially addresses #444 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-26 22:31:25 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#538
No description provided.