{"id":50485665,"url":"https://github.com/abhinav2712/release-bot","last_synced_at":"2026-06-01T22:01:56.609Z","repository":{"id":352600576,"uuid":"1215130254","full_name":"abhinav2712/release-bot","owner":"abhinav2712","description":"A Discord bot for managing weekly release threads","archived":false,"fork":false,"pushed_at":"2026-04-20T09:33:39.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T11:33:46.827Z","etag":null,"topics":["bot","developer-tools","discord","discord-bot","go","golang","release"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abhinav2712.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-19T14:20:13.000Z","updated_at":"2026-04-20T09:33:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/abhinav2712/release-bot","commit_stats":null,"previous_names":["abhinav2712/release-bot"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/abhinav2712/release-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinav2712%2Frelease-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinav2712%2Frelease-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinav2712%2Frelease-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinav2712%2Frelease-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abhinav2712","download_url":"https://codeload.github.com/abhinav2712/release-bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinav2712%2Frelease-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33795114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","developer-tools","discord","discord-bot","go","golang","release"],"created_at":"2026-06-01T22:01:54.857Z","updated_at":"2026-06-01T22:01:56.603Z","avatar_url":"https://github.com/abhinav2712.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Release Bot\n\nA Discord bot for managing weekly release threads — built in Go using [`discordgo`](https://github.com/bwmarrin/discordgo).\n\nPMs initialize a release, developers add and update their branches, and the bot keeps a live summary message in the thread updated automatically.\n\n---\n\n## Features\n\n- 📋 Create release threads with one command\n- ➕ Add branch entries grouped by **Frontend** or **Backend**\n- ✏️ Update your own entries via guided dropdowns\n- ❌ Remove a branch from the release (shown struck-through in the thread, excluded from summary counts)\n- 📊 Instant ephemeral summary of release status\n- 🔒 Thread-safe in-memory state\n\n---\n\n## Commands\n\n| Command | Who | What it does |\n|---|---|---|\n| `/ping` | Anyone | Health check — responds `Pong 🚀` |\n| `/release-init` | PM | Starts a new release (type → date → notes → thread) |\n| `/release-add` | Developer | Adds a branch entry — choose **Frontend** or **Backend** first, then status |\n| `/release-update` | Developer | Updates a branch entry — or removes it from the release |\n| `/release-summary` | Anyone | Shows an ephemeral count snapshot by status (removed entries excluded) |\n\n---\n\n## Setup Guide\n\n### Prerequisites\n\n- [Go](https://go.dev/dl/) installed (`go 1.21+` recommended)\n- A Discord account\n- Permission to add bots to the target server\n\n---\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/abhinav2712/release-bot.git\ncd release-bot\n```\n\n---\n\n### 2. Create a Discord application\n\n1. Go to the [Discord Developer Portal](https://discord.com/developers/applications)\n2. Click **New Application** and give it a name\n3. Navigate to the **Bot** section\n4. Click **Add Bot** → confirm\n5. Under **Token**, click **Reset Token** and copy it\n\n\u003e This is your `DISCORD_TOKEN`. Keep it secret.\n\n---\n\n### 3. Invite the bot to your server\n\n1. In the Developer Portal, open **OAuth2 → URL Generator**\n2. Select scopes:\n   - ✅ `bot`\n   - ✅ `applications.commands`\n3. Select bot permissions:\n   - ✅ View Channels\n   - ✅ Send Messages\n   - ✅ Read Message History\n   - ✅ Manage Threads\n4. Copy the generated URL, open it in your browser, and add the bot to your server\n\n---\n\n### 4. Get your Guild ID (Server ID)\n\n1. Open Discord\n2. Go to **User Settings → Advanced**\n3. Enable **Developer Mode**\n4. Right-click your server name in the sidebar\n5. Click **Copy Server ID**\n\n\u003e This is your `GUILD_ID`.\n\n---\n\n### 5. Set up environment variables\n\nCopy the example file and fill in your values:\n\n```bash\ncp .env.example .env\n```\n\n```env\nDISCORD_TOKEN=your_bot_token_here\nGUILD_ID=your_server_id_here\n```\n\n| Variable | Description |\n|---|---|\n| `DISCORD_TOKEN` | Bot token from the Discord Developer Portal |\n| `GUILD_ID` | ID of the server where slash commands are registered |\n\n---\n\n### 6. Install dependencies\n\n```bash\ngo mod tidy\n```\n\n---\n\n### 7. Run the bot\n\n```bash\ngo run cmd/bot/main.go\n```\n\nIf everything is configured correctly, you'll see:\n\n```\nBot is ready!\nBot is running...\n```\n\n---\n\n### 8. Test it out\n\nIn your Discord server, run:\n\n```\n/ping\n```\n\nIf the bot replies with `Pong 🚀`, you're good to go.\n\n---\n\n## Release Flow\n\n```\nPM runs /release-init\n  └─ selects release type (major / minor)\n  └─ selects release date\n  └─ enters release notes in modal\n  └─ bot creates a thread + posts a live summary message\n\nDevelopers run /release-add\n  └─ choose layer (Frontend / Backend)\n  └─ select status\n  └─ fill in branch, title, PR link, blocker in modal\n  └─ summary thread updates with FE / BE grouping\n\nDevelopers run /release-update\n  └─ select their branch\n  └─ select new status\n        ├─ normal status → fill in updated PR / blocker in modal → summary updates\n        └─ \"Remove from Release\" → no modal, branch instantly struck through in thread\n\nAnyone runs /release-summary\n  └─ receives an ephemeral count breakdown (removed branches excluded)\n```\n\n---\n\n## Project Structure\n\n```\nrelease-bot/\n├── cmd/bot/main.go               # Entry point — env, session wiring, signal handling\n└── internal/\n    ├── models/release.go         # ReleaseItem and CurrentRelease types\n    ├── state/store.go            # Thread-safe in-memory state store\n    ├── status/status.go          # Status helpers, emoji map, date options\n    ├── discord/respond.go        # Interaction response helpers\n    ├── summary/builder.go        # Summary message builder\n    └── handlers/\n        ├── router.go             # Top-level interaction dispatcher\n        ├── release_init.go       # /release-init flow\n        ├── release_add.go        # /release-add flow\n        ├── release_update.go     # /release-update flow\n        └── release_summary.go    # /release-summary\n```\n\n---\n\n## Status Reference\n\n| Status | Emoji | Meaning |\n|---|---|---|\n| `in-progress` | 🛠️ | Work is ongoing |\n| `given-for-review` | 👀 | Shared for review |\n| `reviewed` | ✅ | Review is complete |\n| `tested` | 🧪 | Testing is complete |\n| `reviewed-and-tested` | 🚀 | Ready to ship |\n| `removed` | ❌ | Removed from the release — struck-through in thread, excluded from counts |\n\n\u003e [!NOTE]\n\u003e The `removed` status is only available via `/release-update`. It cannot be set when first adding an entry with `/release-add`.\n\n---\n\n## Troubleshooting\n\n**Slash commands are not showing up**\n- Make sure the bot was invited with `applications.commands` scope\n- Verify `GUILD_ID` matches the correct server\n- Confirm the bot is running\n\n**\"Missing Access\" error**\n- The bot is not in the server, or was invited without the correct scopes\n- Double-check the invite URL was generated with both `bot` and `applications.commands`\n\n**`.env` values are not being read**\n- The `.env` file must be in the project root, the same directory you run the command from\n\n---\n\n## Security\n\n\u003e [!CAUTION]\n\u003e Never commit your real `.env` file or bot token to version control.\n\u003e Only commit `.env.example` with empty values.\n\u003e If your token is ever exposed, reset it immediately from the [Discord Developer Portal](https://discord.com/developers/applications).\n\n---\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabhinav2712%2Frelease-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabhinav2712%2Frelease-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabhinav2712%2Frelease-bot/lists"}