Skip to content

Latest commit

 

History

History
73 lines (50 loc) · 3.59 KB

README.md

File metadata and controls

73 lines (50 loc) · 3.59 KB

members_bot

Organizationメンバー管理用のtraQ bot

デプロイ

GoとMySQL(MariaDB)

GitHub App

Organizationのメンバーの管理に、GitHub Appを使う。

GitHub App インストールとしての認証

GitHub Appを作り、Organizationにinstallする。OrganizationのmembersのRead/Write権限を持たせておく。また、Private Keyをダウンロードしておく。

GitHub AppのInstallation IDが必要になるが、GitHubのUIからは確認できない。リポジトリルートのinstallation_id.shを実行すると取得できる。

./installation_id.sh {GitHubAppのClient ID} {Private Keyのパス} {Org名}

(jqを使っているが、無い場合は最後の行をコメントアウトしてidを見ればよい。)

環境変数

  • ACCEPT_STAMP_ID 承認用スタンプのUUID
  • ACCEPT_STAMP_THRESHOLD 何個スタンプがついたら承認とするか
  • ADMIN_GROUP_ID adminのtraQ Group UUID
  • ADMIN_GROUP_NAME adminのtraQ Group名
  • BOT_CHANNEL_ID botが投稿するチャンネル
  • GITHUB_APP_ID GitHub AppのID
  • GITHUB_APP_INSTALLATION_ID GitHub AppのInstallation ID
  • GITHUB_APP_PRIVATE_KEY GitHub Appの秘密鍵。改行を\nに置き変えたもの。
  • GITHUB_ORG_NAME GitHubのオーガニゼーション名
  • INACTIVE_STAMP_ID 操作を終えたメッセージに押すスタンプのUUID
  • REJECT_STAMP_ID 却下用スタンプのUUID
  • REJECT_STAMP_THRESHOLD 何個スタンプがついたら却下とするか
  • TRAQ_BOT_TOKEN traQのBot token
  • NS_MARIADB_DATABASE, MYSQL_DATABASE (default: members_bot) DBのデータベース名。NS_の方が優先される。
  • NS_MARIADB_HOSTNAME, MYSQL_HOSTNAME (default: db) DBのホスト名。NS_の方が優先される。
  • NS_MARIADB_PASSWORD, MYSQL_PASSWORD (default pass) DBのパスワード。NS_の方が優先される。
  • NS_MARIADB_PORT, MYSQL_PORT (default 3306) DBのポート番号。NS_の方が優先される。
  • NS_MARIADB_USER, MYSQL_USER (default: root) DBのユーザー。NS_の方が優先される。

開発

  • Go
  • Docker

リポジトリルートに上の環境変数を書いた.envを置く。.env.sampleを参考に。

docker compose watchを使ってホットリロードにしている。起動時は

docker compose watch

ログを見たいときは

docker compose logs

テスト

handlerパッケージとrepository/implパッケージで、ユニットテストを書いている。

  • handlerパッケージでは、serviceとrepositoryのmockとして、matryer/moq を使っている。mockはGit管理に含めていないので、初めてテストを実行するときはgo generate ./...でmockを生成する。interface定義を変えたときもmock生成が必要である。
  • repository/implパッケージでは、testcontainers/testcontainers-goでDockerコンテナを使ったDB操作のテストを書いている。テストを実行する際はDockerが必要である。

service/impl/github_test.go[service/impl/github_test.go]もあるが、このテストはGitHubのトークンが必要なので、デフォルトでは実行されない。go testの引数に-tags github_envを含めると実行される。