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_IDadminのtraQ Group UUIDADMIN_GROUP_NAMEadminのtraQ Group名BOT_CHANNEL_IDbotが投稿するチャンネルGITHUB_APP_IDGitHub AppのIDGITHUB_APP_INSTALLATION_IDGitHub AppのInstallation IDGITHUB_APP_PRIVATE_KEYGitHub Appの秘密鍵。改行を\nに置き変えたもの。GITHUB_ORG_NAMEGitHubのオーガニゼーション名
INACTIVE_STAMP_ID操作を終えたメッセージに押すスタンプのUUIDREJECT_STAMP_ID却下用スタンプのUUIDREJECT_STAMP_THRESHOLD何個スタンプがついたら却下とするかTRAQ_BOT_TOKENtraQの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 logshandlerパッケージと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を含めると実行される。