Skip to content

chore: merge DIYgod/RSSHub master into the fork [20m] - #78

Closed
Gl4dr3x wants to merge 3252 commits into
masterfrom
claude/i-29-upstream-sync-09e719
Closed

Gl4dr3x wants to merge 3252 commits into
masterfrom
claude/i-29-upstream-sync-09e719

Conversation

@Gl4dr3x

@Gl4dr3x Gl4dr3x commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Gap: master is 3243 commits behind DIYgod/RSSHub (fork point 5eb4e37, 2026-06-03), so the image Coolify runs has none of upstream's fixes since then. The daily sync has failed since 2026-06-04.

Change:

  • d02dd85ad merges upstream/master (9515261) into master. The only conflict was .github/workflows/semgrep.yml. The resolution takes upstream's actions/checkout v7.0.1 and keeps the fork's SARIF upload fix on top.
  • ca0b02201 and fe243c86c make the fork's own routes pass upstream's newer oxlint/oxfmt rules (Message Center, Microsoft Learn Intune and Entra, easylife365), then simplify the result. Behavior change: the Message Center limit is now read with Number(), like upstream's routes, so a value like 10abc falls back to the default 20.
  • 19736a93f replaces the Record<string, string> lookup tables in easylife365 and Message Center with module-level Maps. CI's code-scanning lint (.oxlintrc.ci.json, run by lint.yml) enables anti-slop/no-known-value-widening, and that rule rejected them. The local prek chain and pnpm lint use .oxlintrc.json, where the rule is off, which is why the pre-commit run did not catch it. Check locally with pnpm exec oxlint --type-aware --config=.oxlintrc.ci.json <paths>.
  • af6198e17 changes docker-custom.yml: latest and the date tag are set only on the default branch, the long-sha tag always, and the Coolify webhook runs only on the default branch.
  • 9054fdb89 drops the fork's || true from the semgrep scan. The upload step's hashFiles guard already avoids the empty-SARIF error, and || true also swallowed blocking findings and scan errors. Note: this fork has no SEMGREP_APP_TOKEN, so semgrep ci prints a login error, scans nothing and exits 0 by its default. The job stays green without scanning (run 40421054614). pull_request_target runs the base branch's copy of the workflow, so this PR's CI does not exercise the change.
  • c52baa9d3 fixes the Coolify deploy step, which has failed with curl: (22) ... 401 on every master build since 2026-07-07 (run 29312235007). It sends Authorization: Bearer from the new secret COOLIFY_API_TOKEN, and curl -G --data-urlencode force=true appends force=true with the separator the URL needs. Before, ?force=true was appended to a URL that already had a query. That Coolify's deploy API requires the bearer token is taken from the Coolify docs: UNVERIFIED.
  • fcfe2bb03 adds a per-ref concurrency group without cancel-in-progress. The running build finishes, GitHub keeps only the newest pending run, and an older build can no longer push latest last.
  • a91409239 makes the deploy step stop with a named error when COOLIFY_API_TOKEN is unset, instead of sending an empty bearer and failing with a bare 401. Both secrets now reach curl through env.
  • The fork's other own files come through otherwise unchanged: 7 routes, sync-upstream.yml and docker-compose.custom.yml.

Merge with a merge commit, not squash or rebase. A squash cuts the upstream ancestry, and every later sync would then conflict. I chose a merge over rebasing the fork's 38 commits onto upstream for two reasons: a rebased branch reaches master only by force-pushing it, and the daily sync (gh repo sync, the merge-upstream API) creates merge commits anyway.

Cause: the sync stopped because secrets.SYNC_TOKEN returns HTTP 401: Bad credentials on merge-upstream (every run since 2026-06-04). Divergence was not the cause: the API merged a diverged master from April to June. A person has to rotate the token, which needs contents and workflows write on this repository. This PR does not fix that.

Out of scope:

  • docker-compose.custom.yml. For the synced code it needs PLAYWRIGHT_CDP_ENDPOINT instead of PUPPETEER_WS_ENDPOINT, ghcr.io/browserless/chromium with TOKEN, and the real-browser service and PUPPETEER_REAL_BROWSER_SERVICE removed. That is scheduled after build(compose): stop publishing host ports and take the Basic Auth value from the environment [10m] #76. Until then the old PUPPETEER_WS_ENDPOINT is still read as a fallback for PLAYWRIGHT_WS_ENDPOINT. Whether that path works against browserless v1 is unverified, as before. None of the fork's routes use a browser.
  • Pre-existing issues in the fork's route code: a placeholder maintainer, entra-whats-new sharing one link across items, uncached detail fetches in easylife365.

Person's step before merging: in Coolify, create an API token with the deploy permission only. In this repository, set it as the Actions secret COOLIFY_API_TOKEN. Without it, the deploy step after the merge fails again with 401. COOLIFY_WEBHOOK_URL stays as it is. The old secret COOLIFY_WEBHOOK_APITOKEN is unused since 0c81dca and can be deleted once the new one works.

Test deployment: in Actions, run Docker Custom Build (workflow_dispatch) on branch claude/i-29-upstream-sync-09e719. That run pushes only ghcr.io/workoho/rsshub:<full head sha>: it moves neither :latest nor the date tag, and it skips the Coolify webhook. Then point a test resource in Coolify at that sha tag and retest the custom routes. Merging into master afterwards builds :latest and deploys production as before. That the {{is_default_branch}} gating works on a dispatch is from the docker/metadata-action docs and unverified until the first dispatch run.

Code scanning: the open oxlint and CodeQL alerts on refs/pull/78/merge sit in upstream files that are identical to upstream/master. They are left as they are. Fork-only paths have no open alerts after 19736a93f.

Hooks: the shared core.hooksPath points at an old husky hook that cannot execute on Windows. Upstream now uses prek. The merge commit d02dd85ad was made with no hook (accepted by the person): it would have linted and autofixed about 3000 upstream files. Instead I ran pnpm exec prek run --files by hand on the 14 fork files: format-description, oxlint, eslint, oxfmt and typecheck all pass, after the fixes in ca0b02201. The later commits ran upstream's prek hook in full, through a per-command core.hooksPath override.

Verified: on Windows with Node 24.22.1 and pnpm 12.15.0:

  • pnpm build passes, and all 7 fork routes are in assets/build/routes.json.
  • vitest run lib/registry.test.ts lib/registry-dev.test.ts lib/app.test.ts lib/config.test.ts: 55 tests pass.
  • On a local server (node dist/index.mjs), all 7 fork routes returned 200 with items against the live sources. ?limit=5 returned 5 items on Message Center.
  • Not run: the Docker image build (no Docker here) and the full vitest suite. CI covers both.

An AI agent wrote this text in my name, on my instructions.

DIYgod and others added 30 commits October 14, 2026 15:09
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zjgtjy/index.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zjmuseum/temporaryexhibition.tsx
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zjol/paper.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zju/career/index.ts
- lib/routes/zju/cse/index.ts
- lib/routes/zju/cst/custom.ts
- lib/routes/zju/cst/index.ts
- lib/routes/zju/math/index.ts
- lib/routes/zju/physics/index.ts
- lib/routes/zju/sis/index.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zjut/cs/index.ts
- lib/routes/zjut/da/index.ts
- lib/routes/zjut/design.ts
- lib/routes/zjut/index.ts
- lib/routes/zjut/jwc/index.ts
- lib/routes/zjut/news.ts
- lib/routes/zjut/www/index.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zjuvag/blog.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zodgame/forum.tsx
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zongheng/detail.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zotero/versions.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zrblog/rss.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zsnews/index.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zsxq/group.ts
- lib/routes/zsxq/user.ts
- lib/routes/zsxq/utils.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zuel/notice.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zuvio/boards.ts
- lib/routes/zuvio/student5.ts
- lib/routes/zuvio/utils.tsx
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zxcs/novel.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zyshow/index.tsx
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zyw/hot.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zzu/dwzzb.ts
- lib/routes/zzu/dzb.ts
- lib/routes/zzu/gs.ts
- lib/routes/zzu/jwc.ts
- lib/routes/zzu/kjc.ts
- lib/routes/zzu/math.ts
- lib/routes/zzu/news.ts
- lib/routes/zzu/rsc.ts
- lib/routes/zzu/soft-news.ts
- lib/routes/zzu/ss.ts
- lib/routes/zzu/student.ts
- lib/routes/zzu/sxy.ts
- lib/routes/zzu/tzhb.ts
- lib/routes/zzu/xbx.ts
- lib/routes/zzu/xuan.ts
- lib/routes/zzu/zcycwb.ts
Combine the reviewed route corrections and their follow-up adjustments.

Affected files:
- lib/routes/zzuli/campus.ts
- lib/routes/zzuli/yjsc.ts
Remove retired services, obsolete source endpoints, and discontinued categories.
Keep supported routes and categories available.

Affected files:
- lib/routes/163/news/rank.ts
- lib/routes/app-center/namespace.ts
- lib/routes/app-center/release.tsx
- lib/routes/cdi/index.ts
- lib/routes/ce/district.ts
- lib/routes/dgjyw/index.ts
- lib/routes/dgjyw/namespace.ts
- lib/routes/lfsyd/old-home.ts
- lib/routes/linkedin/cn/index.ts
- lib/routes/linkedin/cn/renderer.ts
- lib/routes/linkedin/cn/utils.tsx
- lib/routes/odaily/post.ts
- lib/routes/openai/chatgpt-atlas.ts
- lib/routes/pku/ss/pg-admin.ts
- lib/routes/tencent/news/coronavirus/data.tsx
- lib/routes/tencent/news/coronavirus/total.tsx
- lib/routes/tencent/news/coronavirus/utils.ts
- lib/routes/theinitium/follow.ts
- lib/routes/wikinews/index.ts
- lib/routes/wikinews/namespace.ts
- lib/routes/xjtu/2yuan/news.ts
- lib/routes/zcmu/jwc/index.ts
- lib/routes/zhibo8/forum.ts
- lib/routes/zhibo8/post.ts
Merge current master while retaining the completed route review and retired
service removals. Keep upstream source migrations and new feed functionality,
including the ACEA API, Xiaomi data helpers, Yahoo Finance topic helper,
Bilibili list URLs, Douban IP locations, and Douyin live-stream handling.

Resolve overlapping changes without losing existing limit validation, bounded
detail requests, stable item metadata, or route configuration corrections.
Keep RSS image MIME inference and explicit media precedence alongside upstream
attachment extraction, emitting a single enclosure per item.
Filtered requests keep a distinct source candidate cache. Expect the first
unfiltered request to miss that cache, and verify that repeating the same
unfiltered request returns all entries with a cache hit.
The docs site only builds pages for namespace keys, so the category
links written into radar-rules.json/js pointed at missing pages.
0a3a66a fixed the API rules; do the same for the build output.

Refs DIYgod#17785
The Format workflow rewrote the if/else chain into a switch through
unicorn prefer-switch, whose fixer adds braces to every case. The
repo config sets unicorn/switch-case-braces to "avoid", and oxlint
applies fixes in a single pass, so the braces were committed and every
later Format run failed on them without being able to fix them.
Same autofix as in seu: the prefer-switch fixer left braced cases that
unicorn/switch-case-braces "avoid" rejects. The Format workflow fixed
these in its own checkout but stopped on the seu errors before
committing, so lint without --fix still fails here.
Douban lists replies from oldest to newest, 100 per page, so the route
only ever saw the first 100 replies of a long topic and missed every
new one. When the topic has more than one page, fetch the page that the
paginator's last link points to and use its replies instead. Reply
links now open that page (with author=1 in author-only mode), while the
guid keeps the old format so existing items are not duplicated.

Closes DIYgod#17743
Read the posts from the recent-activity API, as requested in the review
of DIYgod#23262. The profile page only server-renders the latest two posts,
while the API returns the user's post activity without authentication.
Keep the social-post entries (the activity also lists comments and
reactions on other posts), render rawContent as Markdown and append the
image and video attachments.

Closes DIYgod#23059

Co-authored-by: qqc20043 <147302501+qqc20043@users.noreply.github.com>
The MTProto path cached the resolved input entity for the default 5
minutes, so every process that started later or missed the cache called
contacts.ResolveUsername again for each channel. That method is heavily
rate limited, and once the account hit a flood wait the route failed
with "A wait of N seconds is required" even for channels that the public
web preview serves fine.

Keep the channel ID and access hash for 30 days, since they do not
change, and fall back to the web preview when MTProto raises a
FloodWaitError. Other MTProto errors are still reported.

Closes DIYgod#20454
dependabot Bot and others added 8 commits October 26, 2026 18:29
Bumps [query-string](https://github.com/sindresorhus/query-string) from 9.5.1 to 10.0.0.
- [Release notes](https://github.com/sindresorhus/query-string/releases)
- [Commits](sindresorhus/query-string@v9.5.1...v10.0.0)

---
updated-dependencies:
- dependency-name: query-string
  dependency-version: 10.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [youtubei.js](https://github.com/LuanRT/YouTube.js) from 18.2.0 to 18.3.0.
- [Release notes](https://github.com/LuanRT/YouTube.js/releases)
- [Changelog](https://github.com/LuanRT/YouTube.js/blob/main/CHANGELOG.md)
- [Commits](LuanRT/YouTube.js@v18.2.0...v18.3.0)

---
updated-dependencies:
- dependency-name: youtubei.js
  dependency-version: 18.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…Ygod#23685)

* chore(deps): bump the oxc group across 1 directory with 7 updates

Bumps the oxc group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@oxc-parser/binding-wasm32-wasip1](https://github.com/oxc-project/oxc/tree/HEAD/napi/parser) | `0.154.0` | `0.155.0` |
| [oxc-parser](https://github.com/oxc-project/oxc/tree/HEAD/napi/parser) | `0.154.0` | `0.155.0` |
| [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins) | `1.88.0` | `1.89.0` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.73.0` | `0.74.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.88.0` | `1.89.0` |
| [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint) | `1.88.0` | `1.89.0` |
| [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) | `7.0.2004` | `7.0.2005` |



Updates `@oxc-parser/binding-wasm32-wasip1` from 0.154.0 to 0.155.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/napi/parser/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/crates_v0.155.0/napi/parser)

Updates `oxc-parser` from 0.154.0 to 0.155.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/napi/parser/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/crates_v0.155.0/napi/parser)

Updates `@oxlint/plugins` from 1.88.0 to 1.89.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.89.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.73.0 to 0.74.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.74.0/npm/oxfmt)

Updates `oxlint` from 1.88.0 to 1.89.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.89.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.88.0 to 1.89.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint-plugin-eslint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.89.0/npm/oxlint-plugin-eslint)

Updates `oxlint-tsgolint` from 7.0.2004 to 7.0.2005
- [Release notes](https://github.com/oxc-project/tsgolint/releases)
- [Commits](oxc-project/tsgolint@v7.0.2004...v7.0.2005)

---
updated-dependencies:
- dependency-name: "@oxc-parser/binding-wasm32-wasip1"
  dependency-version: 0.155.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxc-parser
  dependency-version: 0.155.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.74.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-tsgolint
  dependency-version: 7.0.2005
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: oxc
...

Signed-off-by: dependabot[bot] <support@github.com>

* style: fix lint issue

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@dbcb813...81c6f93)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Brings the fork from upstream 5eb4e37 (2026-06-03) to the current
upstream master. The only conflict was .github/workflows/semgrep.yml:
upstream bumped actions/checkout to v7.0.1, the fork keeps its SARIF
upload fix on top of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The merged upstream lint and format config (oxlint, oxfmt) flags the
Message Center, Microsoft Learn and easylife365 routes. Apply its
autofixes and fix the two guards in intune-whats-new by hand. The
Message Center limit now uses Number() instead of parseInt, so a value
like "10abc" falls back to the default instead of reading as 10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Message Center reads limit with Number() like upstream's routes do, and
intune-whats-new stops its sibling walk on a heading via one regex.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Gl4dr3x Gl4dr3x self-assigned this Oct 26, 2026
// A cache hit costs no navigation, so it never draws on the budget: a warm poll still
// returns every listing fully enriched however little time is left.
// eslint-disable-next-line no-await-in-loop -- one shared tab, so the detail pages must be visited in turn
const cached = await cache.get(key);
} else if (Date.now() < deadline) {
try {
// eslint-disable-next-line no-await-in-loop -- same shared tab
await page.goto(`${HOST}/rent_store/${b.id}/`, { waitUntil: 'domcontentloaded' });
// eslint-disable-next-line no-await-in-loop -- same shared tab
await page.goto(`${HOST}/rent_store/${b.id}/`, { waitUntil: 'domcontentloaded' });
// eslint-disable-next-line no-await-in-loop -- same shared tab
await page.waitForSelector('#serverApp-state', { state: 'attached', timeout: DETAIL_STATE_TIMEOUT });
// eslint-disable-next-line no-await-in-loop -- same shared tab
await page.waitForSelector('#serverApp-state', { state: 'attached', timeout: DETAIL_STATE_TIMEOUT });
// eslint-disable-next-line no-await-in-loop -- same shared tab
detail = detailOf(await page.content());
let iReqOffSet = 0;

do {
bHasNextPage = false;
// eslint-disable-next-line no-await-in-loop
const data = await ofetch(strBaseUrl, {
const { code, results } = await ofetch(strBaseUrl, {
Comment thread lib/routes/bjx/huanbao.ts
/* eslint-disable no-await-in-loop */
const result = await got(sublink);
pages.push(load(result.data));
const html = await fetchBjxPage(sublink, context);
return [];
}
if (Array.isArray(value)) {
return value.flatMap(findBlogCards);
if (Array.isArray(value.cards) && value.cards.every(isBlogCard)) {
return value.cards;
}
return Object.values(value).flatMap(findBlogCards);
Comment thread lib/routes/hk01/utils.tsx
if (tokens.length === 1 && tokens[0].type === 'h3') {
return <h3>{tokens[0].content}</h3>;
}
return <p>{tokens.map(renderToken)}</p>;
Comment thread lib/app.test.ts
}
}

async function checkRSS(response) {
// `<br>` separates 駅 from 徒歩, and cheerio's .text() would run them together.
const stationEl = th('最寄駅');
const stationHtml = stationEl ? $(stationEl).next('td').html() : null;
const stationText = value(stationHtml?.replaceAll(/<br\s*\/?>/gi, ' ').replaceAll(/<[^>]+>/g, '') ?? null);
}

function decodeMedia(value: string, secret: string): string {
const digest = createHash('md5').update(secret).digest('hex');
@github-actions

Copy link
Copy Markdown

Auto Route Test failed, please check your PR body format and reopen pull request. Check logs for more details.
自动路由测试失败,请确认 PR 正文部分符合格式规范并重新开启,详情请检查 日志。

Gl4dr3x and others added 2 commits October 27, 2026 00:34
The CI lint config (.oxlintrc.ci.json) enables
anti-slop/no-known-value-widening, which rejects the Record<string,
string> bindings in the easylife365 and Message Center routes. A Map
keeps typed string-key lookups without the open dictionary type, and
the easylife365 table moves to module scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A dispatch of the custom image workflow on a branch now pushes only the
long-sha tag and skips the Coolify webhook, so a branch image can be
test-deployed by its sha without moving latest or redeploying
production. Pushes to master keep latest, the date tag and the deploy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Auto Route Test failed, please check your PR body format and reopen pull request. Check logs for more details.
自动路由测试失败,请确认 PR 正文部分符合格式规范并重新开启,详情请检查 日志。

Gl4dr3x and others added 4 commits October 27, 2026 00:51
The fork appended "|| true" to the scan so an empty SARIF file would not
break the upload. The upload step's hashFiles guard already covers that,
and "|| true" also hid blocking findings and scan errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every master build since 2026-07-07 failed at the deploy step with
HTTP 401: the bearer header was dropped in favour of a bare webhook URL,
and "?force=true" was appended to a URL that already has a query. Send
the token from the COOLIFY_API_TOKEN secret and let curl -G append
force=true with the right separator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two close pushes to master could finish out of order, so an older build
pushed latest and redeployed last. A concurrency group without
cancel-in-progress lets the running build finish before a newer one
starts; GitHub keeps only the newest pending run, so the last push
always builds last.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An unset COOLIFY_API_TOKEN expanded to an empty bearer and failed with
a bare 401. Check it first and name the missing secret. The secrets now
reach curl through env instead of being expanded into the script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Auto Route Test failed, please check your PR body format and reopen pull request. Check logs for more details.
自动路由测试失败,请确认 PR 正文部分符合格式规范并重新开启,详情请检查 日志。

@github-actions

Copy link
Copy Markdown

This PR is being auto-closed because it has a broken Docker build without any fixes. Push a fix and reopen when ready.

@github-actions github-actions Bot closed this Oct 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.