Commit graph

176 commits

Author SHA1 Message Date
fd6ccda411
fix(check): key check_run in-place edits on check name + head_sha
Providers that emit a fresh check run id per phase (e.g. Cloudflare Pages)
no longer post a new message for each status change; same name + commit
SHA now edits the existing message. Falls back to the run id when name or
head_sha is absent. Docs updated in sync.
2026-08-31 01:17:13 +08:00
cc8bb4182f
fix(push): render created tags/branches as create events instead of 0 commits 2026-08-29 16:47:00 +08:00
github-actions[bot]
5c31b573d3 chore: auto-fix lint & formatting [skip ci] 2026-08-27 14:00:26 +00:00
449739ee97
feat(check): resolve build log url for failed check suites via GitHub API
check_suite payloads carry no details_url; the build log lives on the
underlying check_run. For failed suites, fetch the suite's check runs with
an installation token and inject the first run's details_url (preferring
the Cloudflare run) as a Build Log field.
2026-08-27 21:59:48 +08:00
b2db616865
fix(check): show build log link for failed check suites too
The Build Log field was only added to check_run messages; failed
check_suite messages now also link check_suite.details_url.
2026-08-27 21:43:32 +08:00
8681723f2a
feat(check): add build log link for failed Cloudflare checks
Failed check_run messages now include a Build Log field linking to
check_run.details_url (the Cloudflare build log page).
2026-08-27 21:43:26 +08:00
github-actions[bot]
1375db9a20 chore: auto-fix lint & formatting [skip ci] 2026-08-26 16:39:02 +00:00
c75567cf15
feat: migrate to Tailwind CSS v4
Replace @nuxtjs/tailwindcss with @tailwindcss/vite, move theme
tokens into @theme inline in main.css, drop tailwind.config.ts.
2026-08-27 00:26:17 +08:00
32a8c2ce4e
fix: revert tailwindcss to v3 to keep @nuxtjs/tailwindcss config working
The v4 bump moved the PostCSS plugin to @tailwindcss/postcss, breaking
the production build while the project still uses a v3-style
tailwind.config.ts and @apply components.
2026-08-27 00:18:00 +08:00
a9c411387e
chore: regenerate bun.lock to match package.json 2026-08-27 00:14:06 +08:00
4b99f6d33d
feat(feishu): add Feishu inbound webhook, /gh commands and card actions
- add feishu_links D1 table and link store helpers
- implement X-Lark-Signature verification, url_verification, /gh login|logout|comment|merge|close and card.action.trigger Merge/Close
- render interactive cards with clickable title link, inline links and callback buttons (no whole-card card_link)
- bind Feishu account in OAuth callback
- document event subscription and required scopes
2026-08-27 00:07:05 +08:00
3437ac5513
chore: update LICENSE
Signed-off-by: RhenCloud <i@rhen.cloud>
2026-08-25 20:19:00 +08:00
dependabot[bot]
11d8eca96b chore(deps-dev): bump tailwindcss from 3.4.19 to 4.3.3
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 3.4.19 to 4.3.3.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.3.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-24 23:00:31 +08:00
dependabot[bot]
eca4ebb4a1 chore(deps-dev): bump eslint from 9.39.5 to 10.9.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.39.5 to 10.9.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.5...v10.9.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.8.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-24 23:00:09 +08:00
dependabot[bot]
20b71889a7 chore(deps): bump github/codeql-action from 3 to 4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-24 22:59:44 +08:00
github-actions[bot]
df16dc94f7 chore: auto-fix lint & formatting [skip ci] 2026-08-24 14:52:59 +00:00
a77ac8ad91
fix: allow editing filters on fallback routes 2026-08-24 22:51:36 +08:00
9899cd01bf
fix(telegram): render HTML with markdown-it and strip HTML from Discord bodies 2026-08-24 22:51:26 +08:00
ea049e28c9
docs: add CONTRIBUTING.md 2026-08-24 22:51:24 +08:00
2807c97c5f
feat(filters): fragment presets and code-block send log detail 2026-08-24 22:51:22 +08:00
c090281cb2
feat(filters): JSONPath field filters, operators, AST groups, fragments, and test-match
Add a field filter type reading any payload value by JSONPath with array expansion, 12 comparison operators (eq/ne/contains/startsWith/endsWith/regex/gt/gte/lt/lte/in/exists), a visual AST builder (all/any/not) in the route editor, chip-based multi-value input, a stateless POST /admin/api/test-match dry-run, and named filter fragments stored in D1 (d1_fragments, migration 0010) inlined into route ASTs on insert.
2026-08-24 22:51:20 +08:00
c955db03c3
feat(logs): populate send log detail and fix dedup re-claim condition
- dispatch: attach per-send detail (title/url/description/match/provider)
  so the admin log view shows message context, not just a bare ok flag
- idempotency: compare dedup expiry against claimed_at instead of the new
  expires_at so non-expired duplicates are rejected and expired keys re-claim
2026-08-24 22:51:11 +08:00
c6198e855f
chore: add MIT LICENSE file
Signed-off-by: RhenCloud <i@rhen.cloud>
2026-08-18 13:56:34 +08:00
github-actions[bot]
7c37f5d8b6 chore: auto-fix lint & formatting [skip ci] 2026-08-17 07:51:36 +00:00
9eeafb8c15
chore(config): make R2 payload binding optional
Comment out the PAYLOAD bucket binding so deploys do not require R2;
the worker already falls back to KV queue:payload:* when env.PAYLOAD is unset.
2026-08-17 15:09:24 +08:00
25ebae4ae5
feat(storage): migrate config, dedup and delivery state to D1
- Move oversized queue payloads from KV to R2 (PAYLOAD binding, webhooks/YYYY/MM/DD/*.json, KV queue:payload:* fallback)
- Persist routes/groups to D1 (d1_routes/d1_groups) with memory -> KV -> D1 three-tier cache, seeded from legacy KV config keys
- Move webhook dedup (dedup_keys), delivery state (delivery_state) and message tracking (message_tracking) to D1 via canUseD1 probe with automatic KV fallback
- Batch send_logs inserts (recordSendBatch) and add group_id/ts index
- Add storage-prune scheduled task for expired dedup/state/tracking rows
- Add TTL to invite:group:{id} index and audit all ephemeral KV keys
- Add D1 indexes for the new tables
- Sync AGENTS.md, README.md/zh and docs/ (en/zh) with the new storage layout
2026-08-17 15:01:20 +08:00
2e1b0f022e
fix(ci): run tests sequentially to avoid global state pollution 2026-08-17 10:59:32 +08:00
github-actions[bot]
b7a100a4a8 chore: auto-fix lint & formatting [skip ci] 2026-08-16 16:02:49 +00:00
2975087262
fix(push): link branch ref in title as inline code 2026-08-17 00:01:32 +08:00
github-actions[bot]
3bcc98efc8 chore: auto-fix lint & formatting [skip ci] 2026-08-16 14:47:01 +00:00
df0edbb581
refactor(push): move commits to description, comparison to changes field 2026-08-16 22:46:11 +08:00
47d7c9105b
feat(ui): update ui style 2026-08-16 22:46:07 +08:00
github-actions[bot]
ca6dfd3f64 chore: auto-fix lint & formatting [skip ci] 2026-08-15 11:24:23 +00:00
3f1672d218
chore: update bindings in wrangler.jsonc 2026-08-15 19:23:33 +08:00
af2b22d65c
chore(types): drop dead Env fields (DISCORD_CHANNEL_ID, DOCS_URL, GITHUB_REPO_URL, LEGAL_CONTACT) 2026-08-15 18:43:38 +08:00
7ac7bb7958
fix(render): link title head to the event object URL 2026-08-15 18:25:23 +08:00
2f8a87048e
feat(formatters): add updateKey for suite/deployment/comment edit-in-place 2026-08-15 18:18:52 +08:00
3af50496a7
fix(formatters): strip HTML from comment bodies so bot notifications render cleanly 2026-08-15 17:55:38 +08:00
fa227b1533
fix(admin): wire /admin/login, /admin/logout and /admin/invite routes 2026-08-15 17:44:20 +08:00
320e825bf8
chore(quality): provider fixtures, formatter snapshots, platform contract tests, CI, CodeQL, dependabot 2026-08-15 17:30:51 +08:00
04fa52db52
chore(deps): remove @nuxt/kit override and update lockfile 2026-08-15 17:10:14 +08:00
github-actions[bot]
a1ee756d1d chore: auto-fix lint & formatting [skip ci] 2026-08-15 09:04:41 +00:00
1e9ba3c5dd
feat(observability): delivery metrics, admin metrics/delivery endpoints, admin API route wiring 2026-08-15 17:03:45 +08:00
2470bd786d
feat(config): valibot schemas, schema version, migrations, filter AST 2026-08-15 17:03:42 +08:00
eaec039ad4
refactor(core): message tracker abstraction and formatter plugin registry 2026-08-15 17:03:39 +08:00
486f38365f
feat(queue): async delivery via Cloudflare Queues with retry backoff and DLQ 2026-08-15 17:03:35 +08:00
737dd7af98
feat(reliability): idempotency store, custom webhook replay protection, correlation ids
Add LICENSE (MIT), an IdempotencyStore abstraction with a KV implementation and provider-scoped delivery keys, optional replay protection for custom webhooks (X-WebHooker-Timestamp + X-WebHooker-Nonce), and per-request correlation ids in webhook responses and logs.
2026-08-15 17:03:32 +08:00
github-actions[bot]
92ba2203a5 chore: auto-fix lint & formatting [skip ci] 2026-08-15 04:05:25 +00:00
7ebd9aa63f
fix: prevent race conditions with KV locks in dispatch and group provisioning 2026-08-15 12:04:37 +08:00
github-actions[bot]
17eefd3c8e chore: auto-fix lint & formatting [skip ci] 2026-08-14 01:01:12 +00:00