Skip to content

Latest commit

 

History

History
157 lines (106 loc) · 4.8 KB

File metadata and controls

157 lines (106 loc) · 4.8 KB

actions-workflow-metrics

English | 日本語

ワークフロー実行中にシステムメトリクスを収集し、Mermaidチャートを出力するGitHub Actionsです。

機能

  • システムメトリクス収集: ワークフロー実行中のCPU負荷とメモリ使用量をリアルタイムで収集
  • Mermaidチャート生成: 収集したメトリクスをMermaid形式の積み上げ棒グラフとして可視化
  • ジョブサマリー出力: GitHub Actionsのジョブサマリーに自動的にチャートを表示

出力例

次のようなチャートやデータが出力されます。

CPU Loads

システム/ユーザーCPU負荷の積み上げ棒グラフです。

CPU Loads

Memory Usages

使用中/空きメモリの積み上げ棒グラフです。

Memory Usages

Artifacts

CPU LoadsやMemory UsagesのJSONデータです。

Artifacts

使い方

このアクションはワークフローの先頭で実行することを前提としています。

name: Example Workflow

on: [push]

jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      # ワークフローの先頭でactions-workflow-metricsを実行
      - name: Start Workflow Telemetry
        uses: dev-hato/actions-workflow-metrics@v1

      # 以降の通常のステップ
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run tests
        run: npm test

      # ... その他のステップ

実行フロー

  1. main (ワークフロー開始時): バックグラウンドでメトリクス収集サーバーを起動
  2. ワークフローの各ステップ: 通常通り実行されながらバックグラウンドでメトリクスが収集される
  3. post (ワークフロー終了時): 収集したメトリクスをMermaidチャートとして描画し、ジョブサマリーに出力

技術スタック

  • Node.js: 24.x
  • TypeScript: 5
  • パッケージマネージャー: Bun
  • 主要ライブラリ:
    • systeminformation: システムメトリクス収集
    • zod: スキーマバリデーション
    • @actions/core: GitHub Actions連携

開発セットアップ

1. 依存関係のインストール

bun install

2. pre-commitのセットアップ(推奨)

セキュリティのため、pre-commitをインストールしてください。コミット時にクレデンシャルが含まれていないか自動チェックされます。

# macOSの場合
brew install pre-commit

# またはpipを使用
pip install pre-commit

# pre-commitフックをインストール
pre-commit install

これにより、コミット時に自動的にgitleaksが実行されます。 APIキーやトークンなどの機密情報が含まれていないかチェックされます。

開発コマンド

# 型チェック + バンドル(dist/ディレクトリに出力)
bun run build

# ユニットテストの実行(Bunテストランナー)
bun test

# コードフォーマット(Prettier)
bun run fix

プロジェクト構成

src/
├── lib.ts                 # 共通スキーマとサーバー設定
├── main/
│   ├── index.ts           # mainエントリーポイント(サーバー起動)
│   ├── server.ts          # メトリクス収集HTTPサーバー
│   ├── metrics.ts         # Metricsクラス(メトリクス管理)
│   └── metrics.test.ts    # Metricsクラスのテスト
└── post/
    ├── index.ts           # postエントリーポイント(ジョブサマリー出力)
    ├── lib.ts             # メトリクスフェッチとレンダリング
    ├── lib.test.ts        # レンダリングロジックのテスト
    ├── renderer.ts        # Mermaidチャート生成
    └── renderer.test.ts   # Mermaidチャート生成のテスト

アーキテクチャ

main実行時

  1. src/main/index.tsが実行される
  2. Node.jsでsrc/main/server.tsをデタッチドプロセスとして起動
  3. サーバーがlocalhost:7777でメトリクスJSONを配信開始
  4. Metricsクラスが5秒ごとにsysteminformationライブラリを使ってCPU/メモリ情報を収集

post実行時

  1. src/post/index.tsが実行される
  2. localhost:7777からメトリクスJSONを取得(タイムアウト: 10秒)
  3. RendererクラスがMermaidチャートを生成
  4. @actions/coresummary APIでジョブサマリーに出力

ライセンス

MIT License