Organizationメンバー管理用のtraQ bot
GoとMySQL(MariaDB)
Organizationのメンバーの管理に、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
承認用スタンプのUUIDACCEPT_STAMP_THRESHOLD
何個スタンプがついたら承認とするかADMIN_GROUP_ID
adminのtraQ Group UUIDADMIN_GROUP_NAME
adminのtraQ Group名BOT_CHANNEL_ID
botが投稿するチャンネルGITHUB_APP_ID
GitHub AppのIDGITHUB_APP_INSTALLATION_ID
GitHub AppのInstallation IDGITHUB_APP_PRIVATE_KEY
GitHub Appの秘密鍵。改行を\n
に置き変えたもの。GITHUB_ORG_NAME
GitHubのオーガニゼーション名
INACTIVE_STAMP_ID
操作を終えたメッセージに押すスタンプのUUIDREJECT_STAMP_ID
却下用スタンプのUUIDREJECT_STAMP_THRESHOLD
何個スタンプがついたら却下とするかTRAQ_BOT_TOKEN
traQのBot tokenNS_MARIADB_DATABASE
,MYSQL_DATABASE
(default:members_bot
) DBのデータベース名。NS_の方が優先される。NS_MARIADB_HOSTNAME
,MYSQL_HOSTNAME
(default:db
) DBのホスト名。NS_の方が優先される。NS_MARIADB_PASSWORD
,MYSQL_PASSWORD
(defaultpass
) DBのパスワード。NS_の方が優先される。NS_MARIADB_PORT
,MYSQL_PORT
(default3306
) 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
を含めると実行される。