From ad8487a2a2f70468eddbf82ceb34d677ebbcc165 Mon Sep 17 00:00:00 2001 From: Sho Sakuma Date: Sat, 21 Dec 2024 23:09:08 +0900 Subject: [PATCH] feat: Optional redmine integration --- README.md | 50 +++++++++++++++++++++--------------------- src/actions.rs | 14 +++++++----- src/redmine/actions.rs | 2 +- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 14eabe6..79d179d 100644 --- a/README.md +++ b/README.md @@ -7,44 +7,44 @@ ## Features -- アイデア投稿フォームに新しいアイデアが投稿された際に: - - その投稿履歴に "👍", "👎", "🤔" のリアクションを付与する - - その投稿履歴にスレッドを作成する - - その投稿履歴の Redmine Issue にスレッドへの URL をコメントする +- アイデア投稿フォームに新しいアイデアが投稿された際に: + - その投稿履歴に "👍", "👎", "🤔" のリアクションを付与する + - その投稿履歴にスレッドを作成する + - その投稿履歴の Redmine Issue にスレッドへの URL をコメントする ## Usage -- k8s 及び Docker Container 上での動作を想定しています. 整地鯖の k8s で動作するための定義は [seichi_infra](https://github.com/GiganticMinecraft/seichi_infra) で公開しています. ([定義ファイル: `seichi-onp-k8s/manifests/seichi-kubernetes/apps/seichi-minecraft/idea-reaction/idea-reaction.yaml`](https://github.com/GiganticMinecraft/seichi_infra/blob/main/seichi-onp-k8s/manifests/seichi-kubernetes/apps/seichi-minecraft/idea-reaction/idea-reaction.yaml)) -- [`compose.yaml`](./compose.yaml) を配置しているリポジトリ内に `.env` ファイルを用意し, 環境変数を設定してください. -- 設定後 `docker compose up -d` で起動できます. +- k8s 及び Docker Container 上での動作を想定しています. 整地鯖の k8s で動作するための定義は [seichi_infra](https://github.com/GiganticMinecraft/seichi_infra) で公開しています. ([定義ファイル: `seichi-onp-k8s/manifests/seichi-kubernetes/apps/seichi-minecraft/idea-reaction/idea-reaction.yaml`](https://github.com/GiganticMinecraft/seichi_infra/blob/main/seichi-onp-k8s/manifests/seichi-kubernetes/apps/seichi-minecraft/idea-reaction/idea-reaction.yaml)) +- [`compose.yaml`](./compose.yaml) を配置しているリポジトリ内に `.env` ファイルを用意し, 環境変数を設定してください. +- 設定後 `docker compose up -d` で起動できます. ## Development 1. `docker-redmine` 内の `compose.yaml` を実行し, Redmine と postgres を起動します. 2. Redmine にログインし, Issue の作成権限・更新権限を持つユーザを作成し, API Key を取得します. -3. `idea-reaction` の `.env` ファイルに以下の環境変数を追加します. - - `REDMINE_API_KEY`: Redmine の API Key - - `REDMINE_URL`: Redmine の URL (Docker 環境の場合 `http://localhost:8080` です.) +3. `idea-reaction` の `.env` ファイルに環境変数を設定します. 4. `cargo run` で idea-reaction を起動します. -- 環境変数 `ENV_NAME` を `production` に設定すると Sentry との連携が有効になります. 開発時は指定しないようにしてください. +- 環境変数 `ENV_NAME` を `production` に設定すると Sentry との連携が有効になります. 開発時は指定しないようにしてください. +- 環境変数 `REDMINE_API_KEY` は Redmine の API Key です. Redmine にコメントを投稿する機能を有効にする場合は必須です. + - デバッグ時に Redmine の連携機能が不要な場合は指定せずに起動すると自動で無効化されます. ## Release (for GiganticMinecraft admin) -- idea-reaction は GitHub App (release-please などのツール) を使った自動リリースには対応していません. -- リリースをするときは `Cargo.toml` の `version` プロパティなどを bump したうえで [Actions](https://github.com/GiganticMinecraft/idea-reaction/actions/workflows/release.yaml) にある `Run workflow` から CI を実行すると ghcr.io に Docker Image がリリースされます. -- k8s 本番環境にある idea-reaction を更新する場合は `.../apps/seichi-minecraft/idea-reaction/idea-reaction.yaml` の `spec.template.spec.containers.image` の値を変更してください. - - タグ等の情報は [Packages](https://github.com/GiganticMinecraft/idea-reaction/pkgs/container/idea-reaction) - から確認できます. +- idea-reaction は GitHub App (release-please などのツール) を使った自動リリースには対応していません. +- リリースをするときは `Cargo.toml` の `version` プロパティなどを bump したうえで [Actions](https://github.com/GiganticMinecraft/idea-reaction/actions/workflows/release.yaml) にある `Run workflow` から CI を実行すると ghcr.io に Docker Image がリリースされます. +- k8s 本番環境にある idea-reaction を更新する場合は `.../apps/seichi-minecraft/idea-reaction/idea-reaction.yaml` の `spec.template.spec.containers.image` の値を変更してください. + - タグ等の情報は [Packages](https://github.com/GiganticMinecraft/idea-reaction/pkgs/container/idea-reaction) + から確認できます. ## Environment Variables -| Name | Description | -| ------------------- | ----------------------------------------------------- | -| `ENV_NAME` | 環境名 (production 以外は無視される) | -| `DISCORD_API_TOKEN` | Discord Bot のトークン | -| `REDMINE_API_KEY` | Redmine の API Key (コメント機能を有効にする場合のみ) | -| `REDMINE_URL` | Redmine の URL (コメント機能を有効にする場合のみ) | -| `TARGET_CHANNEL_ID` | 監視対象チャンネルのID | -| `TARGET_WEBHOOK_ID` | 監視対象WebhookのID | -| `TARGET_GUILD_ID` | 監視対象ギルドのID | +| Name | Description | デフォルト値 | +| ------------------- | ----------------------------------------------------- | ----------------------- | +| `ENV_NAME` | 環境名 (production 以外は無視される) | `development` | +| `DISCORD_API_TOKEN` | Discord Bot のトークン | --- | +| `REDMINE_API_KEY` | Redmine の API Key (コメント機能を有効にする場合のみ) | --- | +| `REDMINE_URL` | Redmine の URL | `http://localhost:8080` | +| `TARGET_CHANNEL_ID` | 監視対象チャンネルのID | --- | +| `TARGET_WEBHOOK_ID` | 監視対象WebhookのID | --- | +| `TARGET_GUILD_ID` | 監視対象ギルドのID | --- | diff --git a/src/actions.rs b/src/actions.rs index 87446aa..65ab5c8 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -44,12 +44,14 @@ impl IdeaReactionAction { .await .context("Failed to create thread.")?; - // スレッドのURLを Redmine にコメントする. (Serenity はスレッドの URL を取得するメソッドがない) - let content = format!( - "Thread: https://discord.com/channels/{}/{}", - envs.target_guild_id, t.id - ); - RedmineAction::run(self.issue_number, content).await?; + if envs.redmine_api_key.is_some() { + // スレッドのURLを Redmine にコメントする. (Serenity はスレッドの URL を取得するメソッドがない) + let content = format!( + "Thread: https://discord.com/channels/{}/{}", + envs.target_guild_id, t.id + ); + RedmineAction::run(self.issue_number, content).await?; + } Ok(()) } diff --git a/src/redmine/actions.rs b/src/redmine/actions.rs index 5c0a439..f5d21a5 100644 --- a/src/redmine/actions.rs +++ b/src/redmine/actions.rs @@ -14,7 +14,7 @@ impl RedmineAction { let envs = envs(); RedmineAction::builder() .url(envs.redmine_url.clone()) - .api_key(envs.redmine_api_key.clone()) + .api_key(envs.redmine_api_key.clone().unwrap()) .build() }