fix: sort recent closures before dashboard limit
Sort archived closed records by close timestamp before applying the dashboard limit, and add CI coverage for the dashboard scripts.\n\nThanks @stainlu.
This commit is contained in:
parent
9ec1e9dd8b
commit
7fec36c228
36
.github/workflows/ci.yml
vendored
Normal file
36
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24
|
||||
|
||||
- name: Enable pnpm
|
||||
run: corepack enable
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Check
|
||||
run: pnpm run check
|
||||
@ -161,7 +161,10 @@ function sweepSnapshot(root, profile) {
|
||||
.filter((item) => item.reviewedAt)
|
||||
.sort((a, b) => Date.parse(b.reviewedAt) - Date.parse(a.reviewedAt))
|
||||
.slice(0, 15),
|
||||
closed: closedItems.filter((item) => item.closedAt).slice(0, 15),
|
||||
closed: closedItems
|
||||
.filter((item) => item.closedAt)
|
||||
.sort((a, b) => Date.parse(b.closedAt) - Date.parse(a.closedAt))
|
||||
.slice(0, 15),
|
||||
work,
|
||||
};
|
||||
}
|
||||
|
||||
59
test/sweep-dashboard.test.mjs
Normal file
59
test/sweep-dashboard.test.mjs
Normal file
@ -0,0 +1,59 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { tmpdir } from "node:os";
|
||||
import path from "node:path";
|
||||
import test from "node:test";
|
||||
import { renderSweepDashboard } from "../scripts/sweep-dashboard.mjs";
|
||||
|
||||
test("recently closed records are sorted before limiting", () => {
|
||||
const root = mkdtempSync(path.join(tmpdir(), "clawsweeper-state-test-"));
|
||||
try {
|
||||
const closedDir = path.join(root, "records", "openclaw-openclaw", "closed");
|
||||
mkdirSync(closedDir, { recursive: true });
|
||||
|
||||
for (let index = 0; index < 15; index += 1) {
|
||||
writeClosedRecord({
|
||||
dir: closedDir,
|
||||
number: 100 + index,
|
||||
title: `Older close ${index}`,
|
||||
appliedAt: `2026-05-01T00:${String(index).padStart(2, "0")}:00.000Z`,
|
||||
});
|
||||
}
|
||||
writeClosedRecord({
|
||||
dir: closedDir,
|
||||
number: 999,
|
||||
title: "Newest close",
|
||||
appliedAt: "2026-05-02T00:00:00.000Z",
|
||||
});
|
||||
|
||||
const dashboard = renderSweepDashboard(root);
|
||||
|
||||
assert.match(
|
||||
dashboard,
|
||||
/\[#999\]\(https:\/\/github\.com\/openclaw\/openclaw\/pull\/999\)/,
|
||||
);
|
||||
} finally {
|
||||
rmSync(root, { force: true, recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
function writeClosedRecord({ dir, number, title, appliedAt }) {
|
||||
writeFileSync(
|
||||
path.join(dir, `${number}.md`),
|
||||
`---
|
||||
number: ${number}
|
||||
repository: openclaw/openclaw
|
||||
type: pull_request
|
||||
title: ${JSON.stringify(title)}
|
||||
url: https://github.com/openclaw/openclaw/pull/${number}
|
||||
applied_at: ${appliedAt}
|
||||
decision: close
|
||||
action_taken: closed
|
||||
close_reason: implemented_on_main
|
||||
---
|
||||
|
||||
# ${title}
|
||||
`,
|
||||
"utf8",
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user