CI/CDからKiCadのGerberDataを自動生成するため、GitHub ActionsでKiBotをセットアップした

## [KiBot](https://github.com/INTI-CMNB/KiBot)とは
KiBotは、KiCadのEDA（Electronic Design Automation）ツールのプロジェクトファイルを自動処理するためのコマンドラインユーティリティです。KiBotを使用することで、プリント基板（PCB）の設計や回路図（schematic）の各種出力（例：Gerberファイル、BOM、PDF等）を自動生成、比較、テストするようなワークフローを構築できます。

## この記事で説明すること
KiBotをGitHub Actionsで動かす方法について説明します。

## 今回試した環境
- KiCad 7.0.7
- Mac Studio

## 主な機能
- Gerber出力: PCBのレイヤー情報をGerber形式で出力。
- BOM生成: 使用部品の一覧（Bill of Materials）をCSVやExcelで出力。
- 回路図とPCBの差分チェック: 異なるバージョンの回路図やPCB間での差分を出力。
- テスト: 電気的ルールチェック（ERC）、デザインルールチェック（DRC）を自動で実行。

## セットアップ手順
### Dockerのインストール
[Docker Desktop for Apple silicon | Docker ドキュメント](https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/apple-silicon/)の手順に従ってインストールしました。

### kicad_autoのインストール

KiBotの設定ファイルを生成するため、以下のコマンドで取得してきます。KiCad ver.7プロジェクトの場合は、setsoft/kicad_auto:ki7をターミナルから実行してください。
このコマンドは、KiCad ver.7とKiBotがプリインストールされたDockerイメージをローカルのDocker環境にダウンロードします。このイメージは、KiCadプロジェクトの自動化（Gerber出力、BOM生成、テスト等）を行うために使用されます。一度ダウンロードが完了すれば、このイメージを基にDockerコンテナを作成し、KiCadプロジェクトに対する各種自動化タスクを簡単に行うことができます。

```
docker pull setsoft/kicad_auto:ki7
```


次にKiCadファイルの存在するディレクトリに移動して、以下のコマンドを実行してください。実行完了までとても時間がかかりますが、kibot_generated.kibot.yamlというファイルが生成されたら、強制終了して問題ありません。他の生成されたファイルは使用しません。

`docker run -v $PWD:/tmp -w /tmp setsoft/kicad_auto kibot --quick-start`

このコマンドは以下の処理を行います。

- Dockerコンテナを実行: setsoft/kicad_autoという名前のDockerイメージからコンテナを作成して実行します。
- ボリュームマウント: ホストの現在の作業ディレクトリ（$PWD）をコンテナの/tmpディレクトリにマウントします。
- 作業ディレクトリ変更: コンテナ内の作業ディレクトリを/tmpに設定します。
- KiBot実行: コンテナ内でkibot --quick-startコマンドを実行します。

### kibot_generated.kibot.yamlの配置
KiCadのフォルダ以下であればどこでも問題ないですが、今回はconfigフォルダ以下にconfig.kibot.yamlというファイル名にrenameして配置しました。

`config/config.kibot.yaml`

※注意点
- KiCadプロジェクトファイル内にKiCad5や6の設定が残ってると、kibot_generated.kibot.yaml生成時に5や6用の設定が反映されてしまい、GitHub Actionsで動かした時にエラーが発生します。例えば `.sch`や`.pro`は古いKiCadのファイルなので、これらはKiCad7で実行する際は削除しましょう。

```ERROR:At line 1 of /usr/share/kicad/symbols/Connector.kicad_sym: Mixing KiCad 5 and KiCad 6 files is not allowed (kibot.gs - gs.py:731) ERROR:Line content: (kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor) (kibot.gs - gs.py:731)```

### config.kibot.yamlの書き換え
GitHub Actionsで実行した際に、バージョンの比較機能のオプションを利用した際にエラーが発生したので、今回は以下の手順でオプションを全てオフにしました。

#### 発生したエラー
```ERROR:In section 'basic_diff_pcb' (diff): The `KIBOT_LAST-1` doesn't resolve to a valid hash (kibot.gs - gs.py:733)```

#### 修正方法
old: KIBOT_LAST-1が含まれるoptionsを全て削除します。ファイル内に2箇所あるので両方削除します。

## GitHub Actionsの設定
`.github/workflows/kibot.yml`にGitHub Actionsの設定ファイルを新規作成してください。

- 〇〇〇の部分はプロジェクトの設定に合わせて書き換えてください。
- `INTI-CMNB/KiBot@v2_k7`は利用してるKiCadのバージョンに合わせて変更してください。バージョンの解説[INTI-CMNB/KiBot: KiCad automation utility](https://github.com/INTI-CMNB/KiBot#usage-of-github-actions)にまとまってます。

```
name: kibot

on:
  push:
    paths:
    - '**.kicad_sch'
    - '**.kicad_pcb'
    - '.github/workflows/kibot.yml'
  pull_request:
    paths:
      - '**.kicad_sch'
      - '**.kicad_pcb'
      - '.github/workflows/kibot.yml'
  workflow_dispatch:
jobs:
  build-schematics:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3.6.0
    - uses: INTI-CMNB/KiBot@v2_k7
      with:
        config: './config/config.kibot.yaml'
        dir: output
        schema: './schematics/〇〇〇.kicad_sch' 
        board: './schematics/〇〇〇.kicad_pcb'
    - name: upload results
      uses: actions/upload-artifact@v3
      with:
        name: output
        path: output
```

## GitHub Actionsで実行
`.github/workflows/kibot.yml`をリポジトリにコミットすると、Actionsにkibotという項目が追加されます。


設定に成功してる場合は、これ以降ファイル修正時にGitHub Actionsのkibotワークフローが実行されて、成功時に結果がダウンロードできるようになります。