1660 Commits
Author SHA1 Message Date
qwqcode d25beede91 fix(scripts): detect unpublished npm versions
Query the npm registry for the exact local version instead of comparing only with the latest dist-tag.

Report unpublished packages accurately and avoid spawning pnpm for each lookup.
nightly
2026-07-25 04:01:48 +08:00
qwqcode 16b690c8c0 fix(plugins): prepare unpublished packages for release
Declare compatible Artalk ranges and npm repository metadata for the pending plugin versions.

Correct ESM and CommonJS declaration exports, trim plugin-kit package contents, and validate package types in CI.
2026-07-25 04:01:43 +08:00
qwqcode 2036a0261e fix(ci): publish npm package with trusted OIDC
Replace the long-lived npm token with GitHub OIDC credentials, verify the release version, and retain pnpm packaging so the published tarball still includes the repository license.
2026-07-25 03:26:34 +08:00
qwqcode 66c8f6b94b fix(docker): push release images by digest
Avoid assigning temporary platform tags to digest-only outputs so Buildx can push canonical per-platform digests before the manifest merge.
2026-07-25 03:26:33 +08:00
qwqcode 1bf21404bd fix(build): bind Docker metadata to release commit
Pass the resolved release commit into Docker builds, verify every checkout against it, and derive image version metadata and sha tags from the packaged source instead of the workflow invocation commit.
v2.10.0
2026-07-24 14:24:00 +08:00
qwqcode 9ec0f1c74a fix(ci): pin release retries to reviewed commits
Resolve automatic releases from the merged release PR commit and require an explicit immutable commit when recovering a missing tag. Reuse existing tags idempotently, restore annotated release tags, and reject duplicate release preparation or inconsistent version files.
2026-07-24 14:23:26 +08:00
qwqcode 9b5e47d602 fix(ci): create release tags under tag ruleset
Create lightweight release refs directly at the checked-out commit so the v* linear-history rule evaluates the commit instead of an annotated tag object. Resolve existing tags through the remote API, verify their exact target without overwriting them, and accept an explicit version for safe manual release retries.
2026-07-23 23:52:35 +08:00
github-actions[bot] 03a433d94a chore: release v2.10.0 (#1158)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-23 23:41:37 +08:00
qwqcode 4a9b07e687 fix(ci): preserve nightly tag during release refresh
Keep the movable nightly tag while replacing the release, verify its exact commit through the Git refs API, and pass the build SHA as the release target. This avoids the tag visibility race caused by deleting and immediately recreating the tag before --verify-tag.
2026-07-23 14:04:01 +08:00
qwqcode d00b63c0af chore(ci): fix git-chglog installation 2026-07-23 13:20:48 +08:00
qwqcode 97352b583e fix(api/vote): return not found for deleted targets 2026-07-22 22:20:28 +08:00
qwqcode 0b44989e5f fix(cache): return database results on store failure
Treat cache writes as best-effort after a successful database query. Keep database errors authoritative and cover both paths with a failing store.

Fixes #1154
2026-07-22 22:20:28 +08:00
qwqcode a5308548ba fix(config): preserve keyword file separators
Represent control characters with reversible dashboard escapes, keep custom separators intact, and reject empty separators before loading keyword files. Document and test the full YAML round trip.

Fixes #1062
2026-07-22 22:20:28 +08:00
qwqcode 9225fc32f8 fix(email): add Message-ID header
Generate a unique RFC 5322 message identifier for every SMTP and sendmail message, using the sender domain when valid and a safe fallback otherwise.

Fixes #1111
2026-07-22 22:20:27 +08:00
qwqcode 37dc6a68d7 fix(api/stats): exclude pending comments
Use an explicit boolean condition so GORM cannot omit the moderation filter. Cover public comment lists and counts with regression tests.

Fixes #1110
2026-07-22 22:20:27 +08:00
qwqcode 69613beb88 fix(docs): support React 19 useRef types 2026-07-22 22:20:27 +08:00
qwqcode 9c5bd9653f fix(ci): satisfy workflow shell checks
Protect checksum globs and quote test artifact paths for ShellCheck. Pass release versions to Perl through the environment instead of interpolating shell variables into the program text.
2026-07-22 22:20:27 +08:00
qwqcode ca3d37fc2d fix(build): propagate image version metadata
Inject the requested release version and commit hash through Go linker variables so Docker images report the version they were built for, and make release preparation update the linkable version variable.\n\nAssert the version in release image smoke tests and trim unused files from Docker build contexts while preserving both prebuilt-UI and full frontend build paths.
2026-07-22 22:20:27 +08:00
qwqcode f554e6c438 test(ci): expand release validation
Run Go tests natively on Linux AMD64, Linux ARM64, and macOS; reduce the frontend matrix while keeping Node 22, Node 24, and Windows coverage; and make type-entry validation blocking.\n\nAdd the Playwright browser UAT flow to CI, pin test tools, isolate architecture-specific caches and artifacts, and cancel superseded pull-request runs.
2026-07-22 22:20:27 +08:00
qwqcode 76066bbdc0 fix(ci): harden release supply chain
Pin every third-party action to an immutable commit, enforce least-privilege tokens, avoid persisted checkout credentials, and validate all user-controlled values before they reach scripts.\n\nKeep dry-run GoReleaser jobs tokenless, publish npm provenance, generate tags through authenticated GitHub API calls, disable shared caches for release artifacts, and continuously audit workflow syntax and security policy.
2026-07-22 22:20:27 +08:00
qwqcode 3950ef8532 refactor(ci): accelerate nightly publishing
Run AMD64 and ARM64 Docker builds on native GitHub-hosted Linux runners, reuse architecture-scoped BuildKit caches, and merge validated image digests after both builds succeed.\n\nMake manual dry runs build, smoke-test, and upload artifacts without exposing DockerHub credentials or replacing the nightly tag and release.
2026-07-22 22:20:26 +08:00
qwqcode 3f6eb935e4 refactor(ci): optimize multi-architecture releases
Build Docker images once per native AMD64 and ARM64 runner, merge immutable digests into the release manifest, and reuse a single UI artifact across architectures.\n\nKeep dry runs local by separating the source ref from the release version, avoid remote tags and package publication, scope reusable-workflow secrets, and smoke-test each image before publication.
2026-07-22 22:20:26 +08:00
qwqcode 5364d191c7 test(ui): update comment e2e flow
Use the current English development-page labels and the configured base URL. Register the POST response wait before submission to avoid missing fast responses.
2026-07-22 22:20:26 +08:00
qwqcode 5e1b04326b test(ui): isolate Playwright end-to-end specs
Point Playwright directly at tests/e2e so Vitest unit suites are not collected as browser tests. The Chromium project now discovers only the intended comment UAT spec.
2026-07-22 22:20:26 +08:00
qwqcode add379c82c fix(ui/sidebar): handle null array preferences
Treat YAML null values as empty arrays before checking for YAML node serialization. This prevents the settings page from throwing while mounting optional array preferences.
2026-07-22 22:20:26 +08:00
qwqcode d7565e5b33 fix(ui): accept scoped comment lists without page data
Site and user scoped comment responses intentionally omit the page object. Only enforce page data for page-scoped requests and skip page state updates when it is absent.

Add regression coverage for sidebar scopes and the normal page flow.
2026-07-22 22:20:26 +08:00
qwqcode d46326788b docs: document dependency and security updates
Record the backend, frontend, container, and CI dependency refresh in both v2.10.0 release guides.

Explain JWT wire compatibility, the sanitizer replacement, patched transitive pins, generator reproducibility, and unchanged release artifact layout.
2026-07-22 22:20:26 +08:00
qwqcode 729fd9880a fix(ci): harden release tag handling
Pass the event ref through the environment instead of interpolating expression data into the shell, validate the derived semantic version, and quote Git refs and environment files.

Use rev-parse for an exact tag existence check before creating and pushing the release tag.
2026-07-22 22:20:26 +08:00
qwqcode 5b6a453349 fix(ui): preserve generated list response contract
Regenerate the Swagger specification and TypeScript client with the pinned generators, including accurate optional response fields and the verified-email SSO description.

Validate comment-list page data at the API boundary and normalize it back to the public ListData contract before storing or emitting the response.
2026-07-22 22:20:25 +08:00
qwqcode b7b6700407 fix(auth): require verified email for SSO exchange
Reject OIDC userinfo responses without email_verified=true before account lookup or JWT issuance.
2026-07-22 22:20:25 +08:00
qwqcode cb2860a778 docs: add v2.10.0 release notes
BREAKING CHANGE: Beyond #997, #1007, and #1011, v2.10.0 changes default config/data discovery and relative-path semantics; raises source builds to Go 1.26.5; replaces the CGO-backed SQLite driver with a pure-Go implementation; fixes application timezone at process initialization, requiring a full restart to change it; removes the useBackendConf opt-out and remoteConfModifier; changes DI registration, Context mutation, update() return value, and created timing; and requires marked 18 with modern package resolution. Migration guide: https://artalk.js.org/en/guide/releases/v2.10.0.html
2026-07-22 22:20:25 +08:00
qwqcode 705e220a81 test(ui): cover Marked 18 integration 2026-07-22 22:20:25 +08:00
qwqcode ef2d1e8552 test(server): verify plugin URL trust filtering 2026-07-22 22:20:25 +08:00
qwqcode 14e2d9e824 fix(ui): align plugin lifecycle with final config 2026-07-22 22:20:25 +08:00
qwqcode 9dba2ae43f fix(ui): reject direct context replacement 2026-07-22 22:20:25 +08:00
qwqcode f1784a1bd0 fix(ui): restore deprecated context services 2026-07-22 22:20:24 +08:00
qwqcode bc30c4d26d fix(ui/editor): restore deprecated aliases 2026-07-22 22:20:24 +08:00
qwqcode ad9abd643c fix(ui/types): restore deprecated public aliases 2026-07-22 22:20:24 +08:00
qwqcode 2e7a34fc9c fix(ui/types): preserve atomic config values 2026-07-22 22:20:24 +08:00
qwqcode 082e9b7fed fix(core): initialize process timezone once 2026-07-22 22:20:24 +08:00
qwqcode a95c1b9be6 fix(db): enforce Cloud SQL TLS verification 2026-07-22 22:20:24 +08:00
qwqcode dfe65ce621 fix(cmd): preserve config lookup before data chdir 2026-07-22 22:20:24 +08:00
qwqcode da6556ec3c fix(api): make vote updates transactional 2026-07-22 22:20:23 +08:00
qwqcode 9fe237660c chore(scripts): bound registry downloads 2026-07-22 22:20:23 +08:00
qwqcode eff4a0b15d test: remove races from async tests 2026-07-22 22:20:23 +08:00
qwqcode 5b0e4c866e fix(api): validate vote status targets 2026-07-22 22:20:23 +08:00
qwqcode 617de2cdf1 fix(scripts): harden npm publish check 2026-07-22 22:20:23 +08:00
qwqcode 36c47104ca test(ui): cover sanitizer attribute allowlist 2026-07-22 22:13:45 +08:00
qwqcode 8460ae387f chore(deps): bump ci deps
Update checkout, setup, cache, artifact, Docker, CodeQL, Codecov, repository-dispatch, and supporting GitHub Actions to their current major releases.

Move the builder and runtime images to Go 1.26.5 on Alpine 3.24 while preserving workflow inputs and release artifact layout.
2026-07-22 22:13:44 +08:00
qwqcode e6a5c2d4b9 fix(scripts): import Buffer explicitly
Use the node:buffer entry point instead of relying on an implicit global when the plugin registry fetch script computes response sizes.
2026-07-22 22:13:44 +08:00