GitHub CLI 2.0 の起動
のため、ビルダーは組織は、拡張機能を確立して挿入することにより、カスタムメイドの CLI スキルをハングアップします。 それ以来、CLI チームは、拡張機能の利用者と作成者の両方のスキルをさらに強化するために、多くの独自の機能を提供することに忙殺されてきました。 さらに、fade-gh 1.0 の起動を出荷しました。これは、拡張機能の作成者に、GitHub CLI 自体を強化する同じコードへのアクセスを許可する Lope ライブラリです。 . キル内で、CLI チームは gh/pre-extension-precompile 循環をリリースしました。これにより、Lope、Rust、またはC++ 拡張機能.
このウェブログでは、Lope を使用して CLI 拡張機能を作成する際の詳細な理解と併せて、独自の機能を紹介しています。
2.20.0 内
GitHub CLI の gh 拡張機能を参照する とともに、2 つの独自のコマンドを同梱しました。 および gh 拡張子検索 により、拡張子の発見を組み立てますより単純です (すべての拡張コマンドは gh ext の下でエイリアス化されているため、余暇
gh ext browse 
ぐ ext browse は、多かれ少なかれ GitHub CLI のユニークなブランドであり、完全にインタラクティブな Terminal Particular Person Interface (TUI) です。 これにより、ユーザーは公開された拡張機能をターミナル内で対話的に適切に探索できます。
一度 gh ext browse
が起動され、拡張機能レコードが読み込まれました。インストールのために手元にあるすべての GitHub CLI 拡張機能をブラウズして、上矢印と下矢印 (または OK およびj
)。急 / フィルター ボックスにフォーカスがあり、リストを検索時間の長さに切り詰めることができます。
強調表示することで、拡張子を見つけることができるでしょう。 選択した拡張機能は、緊急 i によって追加でインストールされる可能性があります。 または緊急でアンインストール r 。 至急w は、GitHub 上のモデルで強調表示された拡張機能のリポジトリ Web ページを Web ブラウザーに起動します
独自の拡張機能を検索するテクニックと 解決策を聞くことを大切にしますこの発見で我々が取った星系について gh ext search
gh ext browse
と連携して スクリプティングと自動化を想定した、さらに別のユニークなアンカバーを出荷しました: gh ext search。 これは基本的な CLI の uncover であり、引数なしで、主要なタイトルごとに並べ替えてセットアップする手元にある原則 30 の拡張機能を出力します
緑のチェック左の指定は、拡張機能が近隣内にインストールされていることを意味します。

結果はさらに洗練され、フラグで処理される可能性があります。 --restrict、より多くの結果を取得するため
- オーナー
、明らかな作成者による拡張子のみを返す場合 --sort、例として更新順 - ライセンス
、ツール ライセンスで拡張機能をフィルター処理する--web
、検索を開くため、最終的には Web ブラウザに行き着きます --json、結果を JSONこの uncover はスクリプト化されているはずであり、パイプされた場合、構成可能な出力を単に作成する可能性があります。 たとえば、私がハングアップしたすべての拡張機能もセットアップする必要があります:
gh ext search --owner vilmibm | 最小化 -f2 | 読み取り中 -r 拡張子。 gh ext setup $extension; を中止します。 終わり
gh ext search
の詳細については と使用例については、gh ext search の待機 を参照してください。 . fade-gh でエクステンションを書く
CLI チームは、 fade-gh と呼ばれる外部ライブラリに GitHub CLI のハング コードのいくつかを打ち込んで、拡張機能の作成者が利用できるようにします。 GitHub CLI 自体は、fade-gh によって強化されており、これまでと変わらない高い品質が保証されています。 このライブラリは、CLI 自体は Lope 法規で書かれています。根底からの延長。 quiz というスレッドをすばやく閲覧するための uncover を確立します。 GitHub ディスカッション。 この演習の中止の最終結果は存続します GitHub 肉厚な例を見て気になる方はお早めに
入門 まずは喧嘩します gh extの製造 を組み立てるために開始しました。 プロンプト内で、「クイズ」というタイトルを付けて、ロペ プロジェクトの足場から情報を検索します。
何か他のものを編集する前に、このリポジトリを GitHub に吊るすのは本当に素晴らしいことです。 私はcd gh-quizと騒ぎます
gh レポ製造 、選択中 新しいローカルリポジトリを GitHub にプッシュします、その後のプロンプトを適用します。 後でパブリックにアセンブルしようと思ったらすぐに、この固有のリポジトリを今のところプライベートにアセンブルしても問題ありません。 プライベートリポジトリは、gh ext setup を使用して近隣に無音でインストールできますが、そのリポジトリへのリード ギャザー アドミッションがなければ、誰かが利用できないようです。
暫定コード 
オープニング 優勢.fade
エディターで、gh ext Manufacture のボイラープレートを調べます。 私たちのために作られた: equipmentdominant import ( "fmt" "github.com/cli/fade-gh" ) funcdominant() { fmt.Println("こんにちは、ここが gh-quiz です拡張子!") client, err :=gh.RESTClient(nil) if err !=nil { fmt.Println(err) return } response :=struct {ログイン文字列}{} err=clie nt.Gain("person", &response) if err !=nil { fmt.Println(err) return } fmt.Printf("working as %sn", response.Login) } 
fade-gh
は既にインポートされており、その例 があります。 RESTClient機能が実装されています.
リポジトリの選択
この拡張機能の魅力は、GitHub リポジトリのディスカッション ホームで gawk をスレッドに組み立てることです。これは、特定のクイズに関連しているように見えます。 これも何か気をつけて無音作業するだけです:$ gh quiz actions …どんなリポジトリからでも関連するスレッドのリスト。 $ gh quiz --repo cli/cli ansi … cli/cli リポジトリからの関連スレッドのリスト…
働く私のコードでは、無音の外観もできます:
$ フェードバッスル。 vilmibm/gh-quiz
リポジトリ上書きフラグを追加: $ フェードバッスル。 --repo cli/cli cli/cli 引数の受け付け 
拡張機能は、どのリポジトリをクイズするかをさらに提案する可能性があるので、後で uncover 行で渡された引数を整理します。 これらの引数は、ディスカッション API の検索時間の長さになるようです。 この一意のコードは、fmt.Printf 呼び出しを置き換えます。 // fmt.Printf がすぐここになれば if len(flag.Args()) <1 { return errors.Novel("search time length required") } search :=strings.Join(flag.Args(), " ") fmt.Printf( "'%s' の '%s/%s' にある検索ディスカッションを渡しますn", repo.Owner(), repo.Name()、 探す) }
これとともに 別の方法として、uncover は私が渡した引数をすべて尊重します。 $ フェードバッスル。 検索時間の長さ exit set 2 $fade bustle を指定してください。 猫 'vilmibm/gh-quiz' で 'cats' $ fade bustle についてのディスカッションを探します。 ふわふわの猫 'vilmibm/gh-quiz' で「ふわふわの猫」についての議論を見ていきます
APIとの対話 
検索時間の長さと目的のリポジトリが手元にあるので、GitHub API にいくつかの結果についてクイズを出すことができるようになりました。 fade-ghさんのGQLClientを通じてGraphQL APIを利用させていただきます. 今のところ、現在の出力を合法的に印刷しています。 以下は、cli 機能の廃止時の固有コードです。 になった fmt.Printf への呼び出しをすぐに削除します。とりあえずここで
// fmt.Printf 呼び出しがすぐにクライアントになりました, err :=gh.GQLClient(nil) if err !=nil { return fmt.Errorf("おそらくもうgraphqlクライアントを製造できません: %w", err) } quiz :=fmt.Sprintf(`{ repository(owner: "%s", title: "%s") { hasDiscussionsEnabledディスカッション(最初: 100) { エッジ { ノード { タイトル 本文 URL }}}}}`, repo.Owner(), repo.Name()) フォーム ディスカッション struct { タイトル文字列 URL 文字列 `json:"url"` 体格文字列} 応答 :=構造体 { リポジトリ構造体 { ディスカッション構造体 { エッジstruct { Node Discussion } } HasDiscussionsEnabled bool } }{} err=client.Accomplish(quiz, nil, &response) if err !=nil { return fmt.Errorf("GitHub API とチャットしませんでした: %w", err) } if !response.Repository.HasDiscussionsEnabled { return fmt.Errorf("%s/%s はディスカッションを有効にハングしなくなりました。", repo.Owner(), repo.Name()) } 一致 :=Discussion{} for _, edge :=変化する response.Repository.Discussions.Edges { if strings.Contains(edge.Node.Physique+edge.Node.Title, search) { マッチ=append(マッチ, edge.Node) } } if len(matches)==0 { fmt.Fprintln(os.Stderr, "一致するディスカッション スレッドが見つかりません:(") return nil } for _, d :=さまざまな一致 { fmt.Printf("%s %sn ", d.タイトル, d.URL) }
私がこれをバズると、私のアウトプットは次のように見えます:
$ フェード バッスル . --repo cli/cli アクション gh pr マニュファクチャ ギャザー もはや状況オフ `pullrequest:` アクション https://github.com/cli/cli/discussions/6575 GitHub CLI 2.19. 0 https://github.com/cli/cli/discussions/6561 OOTB GITHUB_TOKEN を gh pr merge --squash --auto で使用するために必要なアクセス許可 https://github.com/cli/cli/discussions/6379 ghアクション ソリューション https://github.com/cli/cli/discussions/3422 インバウンド プルへの変更のプッシュ https://github.com/cli/cli/discussions/5262 から情報を検索して、github アクションで再利用するワークフロー ID とアーティファクト ID を取得します https://github.com/cli/cli/discussions/5735
ここがカッコイイ! 一致するディスカッションが印刷され、それらの URL をクリックできます。 または、出力が表形式であることを擁護するので、読むのがより単純なチャンクになります.
フォーマット出力
この出力を、人間が読み取って機械が解析できるように、より単純に収集するには、 1 つの列での議論と、さらに別の URL の URL
最後の部分 を置き換えました。 for ループには、fade-gh を使用する独自のコード があります。 時間の長さ
および テーブルプリンター アプリケーション。
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } // 破損した for ループはすぐに彼女になりました e isTerminal :=time length.IsTerminal(os.Stdout) tp :=tableprinter.Novel(os.Stdout, isTerminal, 100) if isTerminal { fmt.Printf( "'%s/%s' for '%s' でのショッピング ディスカッション'n", repo.Owner(), repo.Name(), search) } fmt.Println() for _, d :=さまざまな一致 { tp.AddField(d.Title) tp.AddField(d.URL) tp.EndRow() } err=tp.Render() if err !=nil { return fmt.Errorf("レコードをレンダリングできない可能性があります: %w", err) }
時間の長さの決定.IsTerminal(os.Stdout)人間がこの拡張機能を使用している端末に座っている場合、true を返します。 人がスクリプトから拡張機能を呼び出すか、その出力をさらに別のプログラムにパイプすると、時間の長さ.IsTerminal(os.Stdout)
は 欺瞞的 を返します. 次に、この指定は、テーブル プリンターに、出力を単に無音でレイアウトできる配置を通知します。 出力が端末の場合、 tableprinter はモデル幅を尊重します。必要に応じて色を変更し、それ以外の場合は、印刷されたものを人間が読んでいるように見えるものを購入します。 出力がもはや端末ではない場合、値はそのまま出力され、すべての配色が取り除かれます.拡張機能を使用すると、この最終結果が得られます:
ディスカッションのタイトルがどのように切り詰められているかを指摘してください。
これをいろいろなところにパイプすれば、 のアンカバーケアができます。 最小化 して、議論のタイトルを肉付きの良いものにしてください:
tableprinter を追加することで、拡張機能の可読性とスクリプト可能性の両方が改善されました
ブラウザを開く
ほとんどの場合、ブラウザを開くとさらにすべての小さなことを端末で実行できるわけではないため、資格を得る必要はありません。 fade-gh にはこのための機能があり、これを使用して収集します。明らかな検索エンジンの「幸運を感じる」ボタンを模倣した、ブランド独自の旗です。 このフラグを指定することは、最終結果が検索時間の長さに一致する原則でブラウザを起動することを意味します。
ブランド固有のフラグを追加します。主な機能の高さまでの定義: func優勢() { ラッキー :=flag.Bool("ラッキー", 欺瞞的, "最終結果に一致する原則の開始in a web browser") // コードの余暇はここ
そして、テーブルプリンターをセットアップする前にこれを追加します:
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } if *lucky { b :=browser.Novel("", os.Stdout, os.Stderr) b.Browse(matches[0].URL) return } // 端末およびテーブル プリンター コード
JSON出力 より複雑な出力を持つ拡張機能の場合は、JSON 出力を公開し、jq 式をサポートすることで、スクリプトを有効にすることで、さらにフェードアウトする必要があります。 jq は、uncover ラインで JSON を操作するための一般的な描画ツールです。
fade-gh には、すぐに構築された jq のライブラリ バージョンがあります。これにより、拡張機能の作成者は、ユーザーが自分で設定しなくても jq の活力をユーザーに提供できます。私は 2 つのユニークなフラグと連携しています: --json および --jq. メインはブール値で、2 番目は文字列です。 実際、それらは主要な 2 つのトレースです:
func優勢() { jsonFlag :=flag.Bool("json", deceptive, "出力JSON" ) jqFlag :=flag.String("jq", "", "jq 式で JSON 出力を投影する")
isTerminalを設定したら、このコードと連動してますブロック:
isTerminal :=時間の長さ.IsTerminal(os.Stdout) if *jsonFlag { output, err :=json.Marshal(matches) if err !=nil { return fmt.Errorf("おそらくもう JSON をシリアライズできません: %w", err) } if *jqFlag !="" { return jq.Support in solutions(bytes.NewBuffer(output), os.Stdout, *jqFlag ) } return jsonpretty.Format(os.Stdout, bytes.NewBuffer(output), " ", isTerminal) }
コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定
ここで一時停止します gh クイズ しかし、これだけではありません fade-gh
中止することができます。 他の機能を参照するには、これをチェックしてください 参照ドキュメント内のアプリケーションのリスト。 おそらく、GitHub の肉付きの良いコード を参照してください。 vilmibm/gh-quiz. cli/gh-extension-precompile で拡張機能をリリースする 機能満載の拡張機能をぶら下げたので、ce にしたいと思います 他の人がセットアップできるように、リリースを簡単に作成できます。 このレベルでは、Lope コードをプリコンパイルしていないので、アンインストール可能です.私の拡張リポジトリに gh-extension の価格があること。 gh repo edit --add-price gh-extension
。 このトピックをリポジトリに追加しないと、コマンド care for gh ext browse でモデル化されません。 または gh ext search.
私はこの拡張機能を gh ext Manufacture で作業して開始したので、 、私はすでにリリース用に概説されている GitHub Actions ワークフローを取得しています。 他の人が私の拡張機能を使用できるようになる前に残っているのは、打ち上げから状況にコストをかけることだけです. ワークフロー ファイルには、
が含まれます。 タイトル: 起動: プッシュ: タグ: - "v*" パーミッション: コンテンツ: 書き込みジョブ: 起動: 実行: ubuntu-最も現代的な手順: - 採用する: actions/checkout@v3 - 採用する: cli/gh-extension-precompile@v1 リポジトリは公開されています (人々に自分でこれをセットアップしてもらいたいと仮定すると! それはおそらくあなたに行くでしょうあなたが防御するとすぐに、それを非公開に保ち、あなた自身に合法的なリリースを収集するでしょう.. ローカル作業全体をプッシュしましたあなたは常に発射内で横たわっている必要があります. 
打ち上げへ:
ワークフローが自動的に実行されたことを指摘します。 メーカーのタグのように見えますvX.YZ、Lope コードの収集を開始します。 起動が完了すると、すべてのコードが期待どおりにコンパイルされたことを確認することができます:
さあ、誰かが騒ぐことができます gh ext setup vilmibm/gh-quiz にアクセスして、私の拡張機能をチェックしてください! これが gh-extension-precompile 循環のあなたの全作業です。 この循環は、任意の言語を組み立てるために追加で使用される可能性がありますが、デフォルトでは、Lope コードの処理方法のみを認識しています。
Linux (amd64, 386, arm, arm64) MacOS (amd64, arm64) FreeBSD (amd64, 386, arm64)
アンドロイド (amd64, arm64) ロペに敵対する言語を収集するには、 を編集します) .github/workflows/launch.yml を描画して を追加build_script_override 構成 。 たとえば、リポジトリのスクリプトが scripts/gather.sh にあるとします。 、私の launch.yml は次のケアを理解します: タイトル: 起動: プッシュ: タグ: - "v*" パーミッション: コンテンツ: 書き込みジョブ: 起動: 実行: ubuntu-最も現代的な手順: - 採用: アクション/checkout@v3 - 以下を使用: cli/gh-extension-precompile@v1 with: build_script_override: "script/gather.sh"
として指定されたスクリプトbuild_script_override must dist 内で実行可能ファイルを作成し、拡張リポジトリの基盤に次のファイル名を付けて項目化します: { os}-{arch}{ext}。拡張子は Windows では .exe、その他のプラットフォームでは空白です。 例えば:
距離/gh-my-ext_v1.0.0_darwin-amd64dist/gh-my-ext_v1.0.0_windows-386.exe
この箇条書きの実行可能ファイルは、起動リソースとして GitHub にアップロードされるようです。 OSとアーキテクチャの命名法については、を参照してください) このリスト。 GitHub CLI から実行可能ファイルを購入するときにこの命名法を採用しているため、Lope 以外の拡張機能であっても尊重する必要があります。 今後の注意事項
CLI チームは、GitHub CLI 内の拡張マシンのいくつかの改善を予定しています。 隠しリーダーに適した単一の列スタイルのインターフェイスをレンダリングする、拡張機能の Browse Uncover のよりアクセスしやすいバージョンを計画しています。 ネストされた拡張機能の強化、つまり、新しい gh uncover care for gh pr my- のサブコマンドとして呼び出される拡張機能をドローで追加する予定です。 extension – 3 回目の拡張機能をより自然に uncover 階層に適合させます。 kill の中で、gh-extension-precompile 流通のドキュメントと柔軟性を真紅に肉付けしたいと考えています。
機能はありますか横目で見たいですか? ディスカッション またはgrief cli/cli リポジトリ内.
要約
GitHub CLI 内の拡張マシンが、私たちの想像力を超えた機能を作成するきっかけになることを願っています。 集合は合法というのは紛れもない事実ですが、気になるものはフェードアウトして集めてくださいgh
の楽しい問題のケアを中止しますbustle スクリーンセーバー.

ぐ ext browse は、多かれ少なかれ GitHub CLI のユニークなブランドであり、完全にインタラクティブな Terminal Particular Person Interface (TUI) です。 これにより、ユーザーは公開された拡張機能をターミナル内で対話的に適切に探索できます。
一度 gh ext browse
が起動され、拡張機能レコードが読み込まれました。インストールのために手元にあるすべての GitHub CLI 拡張機能をブラウズして、上矢印と下矢印 (または OK およびj
)。急 / フィルター ボックスにフォーカスがあり、リストを検索時間の長さに切り詰めることができます。
強調表示することで、拡張子を見つけることができるでしょう。 選択した拡張機能は、緊急 i によって追加でインストールされる可能性があります。 または緊急でアンインストール r 。 至急w は、GitHub 上のモデルで強調表示された拡張機能のリポジトリ Web ページを Web ブラウザーに起動します
独自の拡張機能を検索するテクニックと 解決策を聞くことを大切にしますこの発見で我々が取った星系について gh ext search
gh ext browse
と連携して スクリプティングと自動化を想定した、さらに別のユニークなアンカバーを出荷しました: gh ext search。 これは基本的な CLI の uncover であり、引数なしで、主要なタイトルごとに並べ替えてセットアップする手元にある原則 30 の拡張機能を出力します
緑のチェック左の指定は、拡張機能が近隣内にインストールされていることを意味します。
結果はさらに洗練され、フラグで処理される可能性があります。 --restrict、より多くの結果を取得するため
- オーナー
、明らかな作成者による拡張子のみを返す場合 - ライセンス
、ツール ライセンスで拡張機能をフィルター処理する--web
、検索を開くため、最終的には Web ブラウザに行き着きます --json、結果を JSONこの uncover はスクリプト化されているはずであり、パイプされた場合、構成可能な出力を単に作成する可能性があります。 たとえば、私がハングアップしたすべての拡張機能もセットアップする必要があります:
gh ext search --owner vilmibm | 最小化 -f2 | 読み取り中 -r 拡張子。 gh ext setup $extension; を中止します。 終わり
gh ext search
の詳細については と使用例については、gh ext search の待機 を参照してください。 . fade-gh でエクステンションを書く
CLI チームは、 fade-gh と呼ばれる外部ライブラリに GitHub CLI のハング コードのいくつかを打ち込んで、拡張機能の作成者が利用できるようにします。 GitHub CLI 自体は、fade-gh によって強化されており、これまでと変わらない高い品質が保証されています。 このライブラリは、CLI 自体は Lope 法規で書かれています。根底からの延長。 quiz というスレッドをすばやく閲覧するための uncover を確立します。 GitHub ディスカッション。 この演習の中止の最終結果は存続します GitHub 肉厚な例を見て気になる方はお早めに
入門 まずは喧嘩します gh extの製造 を組み立てるために開始しました。 プロンプト内で、「クイズ」というタイトルを付けて、ロペ プロジェクトの足場から情報を検索します。
何か他のものを編集する前に、このリポジトリを GitHub に吊るすのは本当に素晴らしいことです。 私はcd gh-quizと騒ぎます
gh レポ製造 、選択中 新しいローカルリポジトリを GitHub にプッシュします、その後のプロンプトを適用します。 後でパブリックにアセンブルしようと思ったらすぐに、この固有のリポジトリを今のところプライベートにアセンブルしても問題ありません。 プライベートリポジトリは、gh ext setup を使用して近隣に無音でインストールできますが、そのリポジトリへのリード ギャザー アドミッションがなければ、誰かが利用できないようです。
暫定コード 
オープニング 優勢.fade
エディターで、gh ext Manufacture のボイラープレートを調べます。 私たちのために作られた: equipmentdominant import ( "fmt" "github.com/cli/fade-gh" ) funcdominant() { fmt.Println("こんにちは、ここが gh-quiz です拡張子!") client, err :=gh.RESTClient(nil) if err !=nil { fmt.Println(err) return } response :=struct {ログイン文字列}{} err=clie nt.Gain("person", &response) if err !=nil { fmt.Println(err) return } fmt.Printf("working as %sn", response.Login) } 
fade-gh
は既にインポートされており、その例 があります。 RESTClient機能が実装されています.
リポジトリの選択
この拡張機能の魅力は、GitHub リポジトリのディスカッション ホームで gawk をスレッドに組み立てることです。これは、特定のクイズに関連しているように見えます。 これも何か気をつけて無音作業するだけです:$ gh quiz actions …どんなリポジトリからでも関連するスレッドのリスト。 $ gh quiz --repo cli/cli ansi … cli/cli リポジトリからの関連スレッドのリスト…
働く私のコードでは、無音の外観もできます:
$ フェードバッスル。 vilmibm/gh-quiz
リポジトリ上書きフラグを追加: $ フェードバッスル。 --repo cli/cli cli/cli 引数の受け付け 
拡張機能は、どのリポジトリをクイズするかをさらに提案する可能性があるので、後で uncover 行で渡された引数を整理します。 これらの引数は、ディスカッション API の検索時間の長さになるようです。 この一意のコードは、fmt.Printf 呼び出しを置き換えます。 // fmt.Printf がすぐここになれば if len(flag.Args()) <1 { return errors.Novel("search time length required") } search :=strings.Join(flag.Args(), " ") fmt.Printf( "'%s' の '%s/%s' にある検索ディスカッションを渡しますn", repo.Owner(), repo.Name()、 探す) }
これとともに 別の方法として、uncover は私が渡した引数をすべて尊重します。 $ フェードバッスル。 検索時間の長さ exit set 2 $fade bustle を指定してください。 猫 'vilmibm/gh-quiz' で 'cats' $ fade bustle についてのディスカッションを探します。 ふわふわの猫 'vilmibm/gh-quiz' で「ふわふわの猫」についての議論を見ていきます
APIとの対話 
検索時間の長さと目的のリポジトリが手元にあるので、GitHub API にいくつかの結果についてクイズを出すことができるようになりました。 fade-ghさんのGQLClientを通じてGraphQL APIを利用させていただきます. 今のところ、現在の出力を合法的に印刷しています。 以下は、cli 機能の廃止時の固有コードです。 になった fmt.Printf への呼び出しをすぐに削除します。とりあえずここで
// fmt.Printf 呼び出しがすぐにクライアントになりました, err :=gh.GQLClient(nil) if err !=nil { return fmt.Errorf("おそらくもうgraphqlクライアントを製造できません: %w", err) } quiz :=fmt.Sprintf(`{ repository(owner: "%s", title: "%s") { hasDiscussionsEnabledディスカッション(最初: 100) { エッジ { ノード { タイトル 本文 URL }}}}}`, repo.Owner(), repo.Name()) フォーム ディスカッション struct { タイトル文字列 URL 文字列 `json:"url"` 体格文字列} 応答 :=構造体 { リポジトリ構造体 { ディスカッション構造体 { エッジstruct { Node Discussion } } HasDiscussionsEnabled bool } }{} err=client.Accomplish(quiz, nil, &response) if err !=nil { return fmt.Errorf("GitHub API とチャットしませんでした: %w", err) } if !response.Repository.HasDiscussionsEnabled { return fmt.Errorf("%s/%s はディスカッションを有効にハングしなくなりました。", repo.Owner(), repo.Name()) } 一致 :=Discussion{} for _, edge :=変化する response.Repository.Discussions.Edges { if strings.Contains(edge.Node.Physique+edge.Node.Title, search) { マッチ=append(マッチ, edge.Node) } } if len(matches)==0 { fmt.Fprintln(os.Stderr, "一致するディスカッション スレッドが見つかりません:(") return nil } for _, d :=さまざまな一致 { fmt.Printf("%s %sn ", d.タイトル, d.URL) }
私がこれをバズると、私のアウトプットは次のように見えます:
$ フェード バッスル . --repo cli/cli アクション gh pr マニュファクチャ ギャザー もはや状況オフ `pullrequest:` アクション https://github.com/cli/cli/discussions/6575 GitHub CLI 2.19. 0 https://github.com/cli/cli/discussions/6561 OOTB GITHUB_TOKEN を gh pr merge --squash --auto で使用するために必要なアクセス許可 https://github.com/cli/cli/discussions/6379 ghアクション ソリューション https://github.com/cli/cli/discussions/3422 インバウンド プルへの変更のプッシュ https://github.com/cli/cli/discussions/5262 から情報を検索して、github アクションで再利用するワークフロー ID とアーティファクト ID を取得します https://github.com/cli/cli/discussions/5735
ここがカッコイイ! 一致するディスカッションが印刷され、それらの URL をクリックできます。 または、出力が表形式であることを擁護するので、読むのがより単純なチャンクになります.
フォーマット出力
この出力を、人間が読み取って機械が解析できるように、より単純に収集するには、 1 つの列での議論と、さらに別の URL の URL
最後の部分 を置き換えました。 for ループには、fade-gh を使用する独自のコード があります。 時間の長さ
および テーブルプリンター アプリケーション。
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } // 破損した for ループはすぐに彼女になりました e isTerminal :=time length.IsTerminal(os.Stdout) tp :=tableprinter.Novel(os.Stdout, isTerminal, 100) if isTerminal { fmt.Printf( "'%s/%s' for '%s' でのショッピング ディスカッション'n", repo.Owner(), repo.Name(), search) } fmt.Println() for _, d :=さまざまな一致 { tp.AddField(d.Title) tp.AddField(d.URL) tp.EndRow() } err=tp.Render() if err !=nil { return fmt.Errorf("レコードをレンダリングできない可能性があります: %w", err) }
時間の長さの決定.IsTerminal(os.Stdout)人間がこの拡張機能を使用している端末に座っている場合、true を返します。 人がスクリプトから拡張機能を呼び出すか、その出力をさらに別のプログラムにパイプすると、時間の長さ.IsTerminal(os.Stdout)
は 欺瞞的 を返します. 次に、この指定は、テーブル プリンターに、出力を単に無音でレイアウトできる配置を通知します。 出力が端末の場合、 tableprinter はモデル幅を尊重します。必要に応じて色を変更し、それ以外の場合は、印刷されたものを人間が読んでいるように見えるものを購入します。 出力がもはや端末ではない場合、値はそのまま出力され、すべての配色が取り除かれます.拡張機能を使用すると、この最終結果が得られます:
ディスカッションのタイトルがどのように切り詰められているかを指摘してください。
これをいろいろなところにパイプすれば、 のアンカバーケアができます。 最小化 して、議論のタイトルを肉付きの良いものにしてください:
tableprinter を追加することで、拡張機能の可読性とスクリプト可能性の両方が改善されました
ブラウザを開く
ほとんどの場合、ブラウザを開くとさらにすべての小さなことを端末で実行できるわけではないため、資格を得る必要はありません。 fade-gh にはこのための機能があり、これを使用して収集します。明らかな検索エンジンの「幸運を感じる」ボタンを模倣した、ブランド独自の旗です。 このフラグを指定することは、最終結果が検索時間の長さに一致する原則でブラウザを起動することを意味します。
ブランド固有のフラグを追加します。主な機能の高さまでの定義: func優勢() { ラッキー :=flag.Bool("ラッキー", 欺瞞的, "最終結果に一致する原則の開始in a web browser") // コードの余暇はここ
そして、テーブルプリンターをセットアップする前にこれを追加します:
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } if *lucky { b :=browser.Novel("", os.Stdout, os.Stderr) b.Browse(matches[0].URL) return } // 端末およびテーブル プリンター コード
JSON出力 より複雑な出力を持つ拡張機能の場合は、JSON 出力を公開し、jq 式をサポートすることで、スクリプトを有効にすることで、さらにフェードアウトする必要があります。 jq は、uncover ラインで JSON を操作するための一般的な描画ツールです。
fade-gh には、すぐに構築された jq のライブラリ バージョンがあります。これにより、拡張機能の作成者は、ユーザーが自分で設定しなくても jq の活力をユーザーに提供できます。私は 2 つのユニークなフラグと連携しています: --json および --jq. メインはブール値で、2 番目は文字列です。 実際、それらは主要な 2 つのトレースです:
func優勢() { jsonFlag :=flag.Bool("json", deceptive, "出力JSON" ) jqFlag :=flag.String("jq", "", "jq 式で JSON 出力を投影する")
isTerminalを設定したら、このコードと連動してますブロック:
isTerminal :=時間の長さ.IsTerminal(os.Stdout) if *jsonFlag { output, err :=json.Marshal(matches) if err !=nil { return fmt.Errorf("おそらくもう JSON をシリアライズできません: %w", err) } if *jqFlag !="" { return jq.Support in solutions(bytes.NewBuffer(output), os.Stdout, *jqFlag ) } return jsonpretty.Format(os.Stdout, bytes.NewBuffer(output), " ", isTerminal) }
コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定
ここで一時停止します gh クイズ しかし、これだけではありません fade-gh
中止することができます。 他の機能を参照するには、これをチェックしてください 参照ドキュメント内のアプリケーションのリスト。 おそらく、GitHub の肉付きの良いコード を参照してください。 vilmibm/gh-quiz. cli/gh-extension-precompile で拡張機能をリリースする 機能満載の拡張機能をぶら下げたので、ce にしたいと思います 他の人がセットアップできるように、リリースを簡単に作成できます。 このレベルでは、Lope コードをプリコンパイルしていないので、アンインストール可能です.私の拡張リポジトリに gh-extension の価格があること。 gh repo edit --add-price gh-extension
。 このトピックをリポジトリに追加しないと、コマンド care for gh ext browse でモデル化されません。 または gh ext search.
私はこの拡張機能を gh ext Manufacture で作業して開始したので、 、私はすでにリリース用に概説されている GitHub Actions ワークフローを取得しています。 他の人が私の拡張機能を使用できるようになる前に残っているのは、打ち上げから状況にコストをかけることだけです. ワークフロー ファイルには、
が含まれます。 タイトル: 起動: プッシュ: タグ: - "v*" パーミッション: コンテンツ: 書き込みジョブ: 起動: 実行: ubuntu-最も現代的な手順: - 採用する: actions/checkout@v3 - 採用する: cli/gh-extension-precompile@v1 リポジトリは公開されています (人々に自分でこれをセットアップしてもらいたいと仮定すると! それはおそらくあなたに行くでしょうあなたが防御するとすぐに、それを非公開に保ち、あなた自身に合法的なリリースを収集するでしょう.. ローカル作業全体をプッシュしましたあなたは常に発射内で横たわっている必要があります. 
打ち上げへ:
ワークフローが自動的に実行されたことを指摘します。 メーカーのタグのように見えますvX.YZ、Lope コードの収集を開始します。 起動が完了すると、すべてのコードが期待どおりにコンパイルされたことを確認することができます:
さあ、誰かが騒ぐことができます gh ext setup vilmibm/gh-quiz にアクセスして、私の拡張機能をチェックしてください! これが gh-extension-precompile 循環のあなたの全作業です。 この循環は、任意の言語を組み立てるために追加で使用される可能性がありますが、デフォルトでは、Lope コードの処理方法のみを認識しています。
Linux (amd64, 386, arm, arm64) MacOS (amd64, arm64) FreeBSD (amd64, 386, arm64)
アンドロイド (amd64, arm64) ロペに敵対する言語を収集するには、 を編集します) .github/workflows/launch.yml を描画して を追加build_script_override 構成 。 たとえば、リポジトリのスクリプトが scripts/gather.sh にあるとします。 、私の launch.yml は次のケアを理解します: タイトル: 起動: プッシュ: タグ: - "v*" パーミッション: コンテンツ: 書き込みジョブ: 起動: 実行: ubuntu-最も現代的な手順: - 採用: アクション/checkout@v3 - 以下を使用: cli/gh-extension-precompile@v1 with: build_script_override: "script/gather.sh"
として指定されたスクリプトbuild_script_override must dist 内で実行可能ファイルを作成し、拡張リポジトリの基盤に次のファイル名を付けて項目化します: { os}-{arch}{ext}。拡張子は Windows では .exe、その他のプラットフォームでは空白です。 例えば:
距離/gh-my-ext_v1.0.0_darwin-amd64dist/gh-my-ext_v1.0.0_windows-386.exe
この箇条書きの実行可能ファイルは、起動リソースとして GitHub にアップロードされるようです。 OSとアーキテクチャの命名法については、を参照してください) このリスト。 GitHub CLI から実行可能ファイルを購入するときにこの命名法を採用しているため、Lope 以外の拡張機能であっても尊重する必要があります。 今後の注意事項
CLI チームは、GitHub CLI 内の拡張マシンのいくつかの改善を予定しています。 隠しリーダーに適した単一の列スタイルのインターフェイスをレンダリングする、拡張機能の Browse Uncover のよりアクセスしやすいバージョンを計画しています。 ネストされた拡張機能の強化、つまり、新しい gh uncover care for gh pr my- のサブコマンドとして呼び出される拡張機能をドローで追加する予定です。 extension – 3 回目の拡張機能をより自然に uncover 階層に適合させます。 kill の中で、gh-extension-precompile 流通のドキュメントと柔軟性を真紅に肉付けしたいと考えています。
機能はありますか横目で見たいですか? ディスカッション またはgrief cli/cli リポジトリ内.
要約

CLI チームは、 fade-gh と呼ばれる外部ライブラリに GitHub CLI のハング コードのいくつかを打ち込んで、拡張機能の作成者が利用できるようにします。 GitHub CLI 自体は、fade-gh によって強化されており、これまでと変わらない高い品質が保証されています。 このライブラリは、CLI 自体は Lope 法規で書かれています。根底からの延長。 quiz というスレッドをすばやく閲覧するための uncover を確立します。 GitHub ディスカッション。 この演習の中止の最終結果は存続します GitHub 肉厚な例を見て気になる方はお早めに
まずは喧嘩します gh extの製造 を組み立てるために開始しました。 プロンプト内で、「クイズ」というタイトルを付けて、ロペ プロジェクトの足場から情報を検索します。
何か他のものを編集する前に、このリポジトリを GitHub に吊るすのは本当に素晴らしいことです。 私はcd gh-quizと騒ぎます
gh レポ製造 、選択中 新しいローカルリポジトリを GitHub にプッシュします、その後のプロンプトを適用します。 後でパブリックにアセンブルしようと思ったらすぐに、この固有のリポジトリを今のところプライベートにアセンブルしても問題ありません。 プライベートリポジトリは、gh ext setup を使用して近隣に無音でインストールできますが、そのリポジトリへのリード ギャザー アドミッションがなければ、誰かが利用できないようです。 暫定コード
オープニング 優勢.fade エディターで、gh ext Manufacture のボイラープレートを調べます。 私たちのために作られた: equipmentdominant import ( "fmt" "github.com/cli/fade-gh" ) funcdominant() { fmt.Println("こんにちは、ここが gh-quiz です拡張子!") client, err :=gh.RESTClient(nil) if err !=nil { fmt.Println(err) return } response :=struct {ログイン文字列}{} err=clie nt.Gain("person", &response) if err !=nil { fmt.Println(err) return } fmt.Printf("working as %sn", response.Login) }
fade-gh
は既にインポートされており、その例 があります。 RESTClient機能が実装されています. リポジトリの選択
この拡張機能の魅力は、GitHub リポジトリのディスカッション ホームで gawk をスレッドに組み立てることです。これは、特定のクイズに関連しているように見えます。 これも何か気をつけて無音作業するだけです:$ gh quiz actions …どんなリポジトリからでも関連するスレッドのリスト。 $ gh quiz --repo cli/cli ansi … cli/cli リポジトリからの関連スレッドのリスト…
働く私のコードでは、無音の外観もできます: $ フェードバッスル。 vilmibm/gh-quiz
リポジトリ上書きフラグを追加: $ フェードバッスル。 --repo cli/cli cli/cli 引数の受け付け
拡張機能は、どのリポジトリをクイズするかをさらに提案する可能性があるので、後で uncover 行で渡された引数を整理します。 これらの引数は、ディスカッション API の検索時間の長さになるようです。 この一意のコードは、fmt.Printf 呼び出しを置き換えます。 // fmt.Printf がすぐここになれば if len(flag.Args()) <1 { return errors.Novel("search time length required") } search :=strings.Join(flag.Args(), " ") fmt.Printf( "'%s' の '%s/%s' にある検索ディスカッションを渡しますn", repo.Owner(), repo.Name()、 探す) }
これとともに 別の方法として、uncover は私が渡した引数をすべて尊重します。 $ フェードバッスル。 検索時間の長さ exit set 2 $fade bustle を指定してください。 猫 'vilmibm/gh-quiz' で 'cats' $ fade bustle についてのディスカッションを探します。 ふわふわの猫 'vilmibm/gh-quiz' で「ふわふわの猫」についての議論を見ていきます
検索時間の長さと目的のリポジトリが手元にあるので、GitHub API にいくつかの結果についてクイズを出すことができるようになりました。 fade-ghさんのGQLClientを通じてGraphQL APIを利用させていただきます. 今のところ、現在の出力を合法的に印刷しています。 以下は、cli 機能の廃止時の固有コードです。 になった fmt.Printf への呼び出しをすぐに削除します。とりあえずここで
// fmt.Printf 呼び出しがすぐにクライアントになりました, err :=gh.GQLClient(nil) if err !=nil { return fmt.Errorf("おそらくもうgraphqlクライアントを製造できません: %w", err) } quiz :=fmt.Sprintf(`{ repository(owner: "%s", title: "%s") { hasDiscussionsEnabledディスカッション(最初: 100) { エッジ { ノード { タイトル 本文 URL }}}}}`, repo.Owner(), repo.Name()) フォーム ディスカッション struct { タイトル文字列 URL 文字列 `json:"url"` 体格文字列} 応答 :=構造体 { リポジトリ構造体 { ディスカッション構造体 { エッジstruct { Node Discussion } } HasDiscussionsEnabled bool } }{} err=client.Accomplish(quiz, nil, &response) if err !=nil { return fmt.Errorf("GitHub API とチャットしませんでした: %w", err) } if !response.Repository.HasDiscussionsEnabled { return fmt.Errorf("%s/%s はディスカッションを有効にハングしなくなりました。", repo.Owner(), repo.Name()) } 一致 :=Discussion{} for _, edge :=変化する response.Repository.Discussions.Edges { if strings.Contains(edge.Node.Physique+edge.Node.Title, search) { マッチ=append(マッチ, edge.Node) } } if len(matches)==0 { fmt.Fprintln(os.Stderr, "一致するディスカッション スレッドが見つかりません:(") return nil } for _, d :=さまざまな一致 { fmt.Printf("%s %sn ", d.タイトル, d.URL) }
私がこれをバズると、私のアウトプットは次のように見えます:
$ フェード バッスル . --repo cli/cli アクション gh pr マニュファクチャ ギャザー もはや状況オフ `pullrequest:` アクション https://github.com/cli/cli/discussions/6575 GitHub CLI 2.19. 0 https://github.com/cli/cli/discussions/6561 OOTB GITHUB_TOKEN を gh pr merge --squash --auto で使用するために必要なアクセス許可 https://github.com/cli/cli/discussions/6379 ghアクション ソリューション https://github.com/cli/cli/discussions/3422 インバウンド プルへの変更のプッシュ https://github.com/cli/cli/discussions/5262 から情報を検索して、github アクションで再利用するワークフロー ID とアーティファクト ID を取得します https://github.com/cli/cli/discussions/5735
ここがカッコイイ! 一致するディスカッションが印刷され、それらの URL をクリックできます。 または、出力が表形式であることを擁護するので、読むのがより単純なチャンクになります.
フォーマット出力
この出力を、人間が読み取って機械が解析できるように、より単純に収集するには、 1 つの列での議論と、さらに別の URL の URL
最後の部分 を置き換えました。 for ループには、fade-gh を使用する独自のコード があります。 時間の長さ
および テーブルプリンター アプリケーション。 if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } // 破損した for ループはすぐに彼女になりました e isTerminal :=time length.IsTerminal(os.Stdout) tp :=tableprinter.Novel(os.Stdout, isTerminal, 100) if isTerminal { fmt.Printf( "'%s/%s' for '%s' でのショッピング ディスカッション'n", repo.Owner(), repo.Name(), search) } fmt.Println() for _, d :=さまざまな一致 { tp.AddField(d.Title) tp.AddField(d.URL) tp.EndRow() } err=tp.Render() if err !=nil { return fmt.Errorf("レコードをレンダリングできない可能性があります: %w", err) }
時間の長さの決定.IsTerminal(os.Stdout)人間がこの拡張機能を使用している端末に座っている場合、true を返します。 人がスクリプトから拡張機能を呼び出すか、その出力をさらに別のプログラムにパイプすると、時間の長さ.IsTerminal(os.Stdout)
は 欺瞞的 を返します. 次に、この指定は、テーブル プリンターに、出力を単に無音でレイアウトできる配置を通知します。 出力が端末の場合、 tableprinter はモデル幅を尊重します。必要に応じて色を変更し、それ以外の場合は、印刷されたものを人間が読んでいるように見えるものを購入します。 出力がもはや端末ではない場合、値はそのまま出力され、すべての配色が取り除かれます.拡張機能を使用すると、この最終結果が得られます:
ディスカッションのタイトルがどのように切り詰められているかを指摘してください。
これをいろいろなところにパイプすれば、 のアンカバーケアができます。 最小化 して、議論のタイトルを肉付きの良いものにしてください:
tableprinter を追加することで、拡張機能の可読性とスクリプト可能性の両方が改善されました
ブラウザを開く
ほとんどの場合、ブラウザを開くとさらにすべての小さなことを端末で実行できるわけではないため、資格を得る必要はありません。 fade-gh にはこのための機能があり、これを使用して収集します。明らかな検索エンジンの「幸運を感じる」ボタンを模倣した、ブランド独自の旗です。 このフラグを指定することは、最終結果が検索時間の長さに一致する原則でブラウザを起動することを意味します。
ブランド固有のフラグを追加します。主な機能の高さまでの定義: func優勢() { ラッキー :=flag.Bool("ラッキー", 欺瞞的, "最終結果に一致する原則の開始in a web browser") // コードの余暇はここ
そして、テーブルプリンターをセットアップする前にこれを追加します:
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } if *lucky { b :=browser.Novel("", os.Stdout, os.Stderr) b.Browse(matches[0].URL) return } // 端末およびテーブル プリンター コード
JSON出力 より複雑な出力を持つ拡張機能の場合は、JSON 出力を公開し、jq 式をサポートすることで、スクリプトを有効にすることで、さらにフェードアウトする必要があります。 jq は、uncover ラインで JSON を操作するための一般的な描画ツールです。
fade-gh には、すぐに構築された jq のライブラリ バージョンがあります。これにより、拡張機能の作成者は、ユーザーが自分で設定しなくても jq の活力をユーザーに提供できます。私は 2 つのユニークなフラグと連携しています: --json および --jq. メインはブール値で、2 番目は文字列です。 実際、それらは主要な 2 つのトレースです:
func優勢() { jsonFlag :=flag.Bool("json", deceptive, "出力JSON" ) jqFlag :=flag.String("jq", "", "jq 式で JSON 出力を投影する")
isTerminalを設定したら、このコードと連動してますブロック:
isTerminal :=時間の長さ.IsTerminal(os.Stdout) if *jsonFlag { output, err :=json.Marshal(matches) if err !=nil { return fmt.Errorf("おそらくもう JSON をシリアライズできません: %w", err) } if *jqFlag !="" { return jq.Support in solutions(bytes.NewBuffer(output), os.Stdout, *jqFlag ) } return jsonpretty.Format(os.Stdout, bytes.NewBuffer(output), " ", isTerminal) }
コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定

ほとんどの場合、ブラウザを開くとさらにすべての小さなことを端末で実行できるわけではないため、資格を得る必要はありません。 fade-gh にはこのための機能があり、これを使用して収集します。明らかな検索エンジンの「幸運を感じる」ボタンを模倣した、ブランド独自の旗です。 このフラグを指定することは、最終結果が検索時間の長さに一致する原則でブラウザを起動することを意味します。
ブランド固有のフラグを追加します。主な機能の高さまでの定義: func優勢() { ラッキー :=flag.Bool("ラッキー", 欺瞞的, "最終結果に一致する原則の開始in a web browser") // コードの余暇はここ
そして、テーブルプリンターをセットアップする前にこれを追加します:
if len(matches)==0 { fmt.Println("一致するディスカッションスレッドが見つかりません:(") } if *lucky { b :=browser.Novel("", os.Stdout, os.Stderr) b.Browse(matches[0].URL) return } // 端末およびテーブル プリンター コード
JSON出力 より複雑な出力を持つ拡張機能の場合は、JSON 出力を公開し、jq 式をサポートすることで、スクリプトを有効にすることで、さらにフェードアウトする必要があります。 jq は、uncover ラインで JSON を操作するための一般的な描画ツールです。
fade-gh には、すぐに構築された jq のライブラリ バージョンがあります。これにより、拡張機能の作成者は、ユーザーが自分で設定しなくても jq の活力をユーザーに提供できます。私は 2 つのユニークなフラグと連携しています: --json および --jq. メインはブール値で、2 番目は文字列です。 実際、それらは主要な 2 つのトレースです:
func優勢() { jsonFlag :=flag.Bool("json", deceptive, "出力JSON" ) jqFlag :=flag.String("jq", "", "jq 式で JSON 出力を投影する")
isTerminalを設定したら、このコードと連動してますブロック:
isTerminal :=時間の長さ.IsTerminal(os.Stdout) if *jsonFlag { output, err :=json.Marshal(matches) if err !=nil { return fmt.Errorf("おそらくもう JSON をシリアライズできません: %w", err) } if *jqFlag !="" { return jq.Support in solutions(bytes.NewBuffer(output), os.Stdout, *jqFlag ) } return jsonpretty.Format(os.Stdout, bytes.NewBuffer(output), " ", isTerminal) }
コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定


より複雑な出力を持つ拡張機能の場合は、JSON 出力を公開し、jq 式をサポートすることで、スクリプトを有効にすることで、さらにフェードアウトする必要があります。 jq は、uncover ラインで JSON を操作するための一般的な描画ツールです。
fade-gh には、すぐに構築された jq のライブラリ バージョンがあります。これにより、拡張機能の作成者は、ユーザーが自分で設定しなくても jq の活力をユーザーに提供できます。私は 2 つのユニークなフラグと連携しています: --json および --jq. メインはブール値で、2 番目は文字列です。 実際、それらは主要な 2 つのトレースです:
func優勢() { jsonFlag :=flag.Bool("json", deceptive, "出力JSON" ) jqFlag :=flag.String("jq", "", "jq 式で JSON 出力を投影する")
isTerminalを設定したら、このコードと連動してますブロック:
isTerminal :=時間の長さ.IsTerminal(os.Stdout) if *jsonFlag { output, err :=json.Marshal(matches) if err !=nil { return fmt.Errorf("おそらくもう JSON をシリアライズできません: %w", err) } if *jqFlag !="" { return jq.Support in solutions(bytes.NewBuffer(output), os.Stdout, *jqFlag ) } return jsonpretty.Format(os.Stdout, bytes.NewBuffer(output), " ", isTerminal) }
コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定

コードを
--json、よくまとまります出力された JSON 出力: 指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/>
対応予定
指定した場合jq 式の記録をたどることができます。 たとえば、最小化よりも前に行った合法的なタイトルのケアに出力を制限することができます。 今回は jq 式 を使用します。|.Title as a replace. |.Title' actions" をターミナルで実行します。出力は、ディスカッション スレッドのタイトルのリストです。" records-recalc-dims="1" decode="async" high="212" loading="sluggish" src="https://github.weblog/wp-reveal material/uploads/2023/01/image6.png? w=1024&resize=1024%2C212" width="1024"/> 対応予定
ここで一時停止します gh クイズ しかし、これだけではありません fade-gh
中止することができます。 他の機能を参照するには、これをチェックしてください 参照ドキュメント内のアプリケーションのリスト。 おそらく、GitHub の肉付きの良いコード を参照してください。 vilmibm/gh-quiz. cli/gh-extension-precompile で拡張機能をリリースする 機能満載の拡張機能をぶら下げたので、ce にしたいと思います 他の人がセットアップできるように、リリースを簡単に作成できます。 このレベルでは、Lope コードをプリコンパイルしていないので、アンインストール可能です.私の拡張リポジトリに gh-extension の価格があること。 gh repo edit --add-price gh-extension
。 このトピックをリポジトリに追加しないと、コマンド care for gh ext browse でモデル化されません。 または gh ext search.
私はこの拡張機能を gh ext Manufacture で作業して開始したので、 、私はすでにリリース用に概説されている GitHub Actions ワークフローを取得しています。 他の人が私の拡張機能を使用できるようになる前に残っているのは、打ち上げから状況にコストをかけることだけです. ワークフロー ファイルには、
打ち上げへ:
ワークフローが自動的に実行されたことを指摘します。 メーカーのタグのように見えますvX.YZ、Lope コードの収集を開始します。 起動が完了すると、すべてのコードが期待どおりにコンパイルされたことを確認することができます:
さあ、誰かが騒ぐことができます gh ext setup vilmibm/gh-quiz にアクセスして、私の拡張機能をチェックしてください! これが gh-extension-precompile 循環のあなたの全作業です。 この循環は、任意の言語を組み立てるために追加で使用される可能性がありますが、デフォルトでは、Lope コードの処理方法のみを認識しています。
FreeBSD (amd64, 386, arm64)
ロペに敵対する言語を収集するには、 を編集します) .github/workflows/launch.yml を描画して を追加build_script_override 構成 。 たとえば、リポジトリのスクリプトが scripts/gather.sh にあるとします。 、私の launch.yml は次のケアを理解します: タイトル: 起動: プッシュ: タグ: - "v*" パーミッション: コンテンツ: 書き込みジョブ: 起動: 実行: ubuntu-最も現代的な手順: - 採用: アクション/checkout@v3 - 以下を使用: cli/gh-extension-precompile@v1 with: build_script_override: "script/gather.sh"
として指定されたスクリプトbuild_script_override must dist 内で実行可能ファイルを作成し、拡張リポジトリの基盤に次のファイル名を付けて項目化します: { os}-{arch}{ext}。拡張子は Windows では .exe、その他のプラットフォームでは空白です。 例えば:
- 距離/gh-my-ext_v1.0.0_darwin-amd64
dist/gh-my-ext_v1.0.0_windows-386.exe
この箇条書きの実行可能ファイルは、起動リソースとして GitHub にアップロードされるようです。 OSとアーキテクチャの命名法については、を参照してください) このリスト。 GitHub CLI から実行可能ファイルを購入するときにこの命名法を採用しているため、Lope 以外の拡張機能であっても尊重する必要があります。 今後の注意事項
CLI チームは、GitHub CLI 内の拡張マシンのいくつかの改善を予定しています。 隠しリーダーに適した単一の列スタイルのインターフェイスをレンダリングする、拡張機能の Browse Uncover のよりアクセスしやすいバージョンを計画しています。 ネストされた拡張機能の強化、つまり、新しい gh uncover care for gh pr my- のサブコマンドとして呼び出される拡張機能をドローで追加する予定です。 extension – 3 回目の拡張機能をより自然に uncover 階層に適合させます。 kill の中で、gh-extension-precompile 流通のドキュメントと柔軟性を真紅に肉付けしたいと考えています。
機能はありますか横目で見たいですか? ディスカッション またはgrief cli/cli リポジトリ内.
GitHub CLI 内の拡張マシンが、私たちの想像力を超えた機能を作成するきっかけになることを願っています。 集合は合法というのは紛れもない事実ですが、気になるものはフェードアウトして集めてくださいgh の楽しい問題のケアを中止しますbustle スクリーンセーバー.