[PULSE-28] Changelog / release process #20

Merged
uz1mani merged 2 commits from staging into main 2026-02-09 17:04:44 +00:00
uz1mani commented 2026-02-09 16:54:37 +00:00 (Migrated from github.com)

Work Item

PULSE-28

Summary

  • Add a single changelog (Keep a Changelog style, 0.x.y) and document release steps (tag, changelog, deploy).
  • Optional script to ensure CHANGELOG has an entry for the version being tagged.
  • In-app changelog page at /changelog and footer links.

Changes

  • CHANGELOG.md (repo root): Keep a Changelog format; [Unreleased] and [0.1.0] with comparison links.
  • docs/releasing.md: Who updates changelog, when (before tag), how to tag, deploy (staging/main), version numbering (0.x.y), checklist.
  • scripts/check-changelog.sh: Optional script; ./scripts/check-changelog.sh <version> verifies CHANGELOG has ## [X.Y.Z] entry.
  • README.md: Releasing section linking to docs/releasing.md and CHANGELOG.md.
  • app/changelog/page.tsx: Server Component that reads CHANGELOG.md at build time and renders with react-markdown; prose styling, metadata.
  • components/Footer.tsx: Changelog link in Resources and in authenticated footer.
  • package.json: Added react-markdown for changelog page.

Test Plan

  • Run ./scripts/check-changelog.sh 0.1.0 from repo root → OK.
  • Run ./scripts/check-changelog.sh 0.2.0 → error (no entry).
  • Build passes; visit /changelog and confirm CHANGELOG content and styling (light/dark).
  • Footer shows Changelog link (logged in and logged out).
  • (After merge) Tag v0.1.0, push, create GitHub Release from tag with 0.1.0 notes to satisfy “at least one release following the process.”
## Work Item PULSE-28 ## Summary - Add a single changelog (Keep a Changelog style, 0.x.y) and document release steps (tag, changelog, deploy). - Optional script to ensure CHANGELOG has an entry for the version being tagged. - In-app changelog page at `/changelog` and footer links. ## Changes - **CHANGELOG.md** (repo root): Keep a Changelog format; [Unreleased] and [0.1.0] with comparison links. - **docs/releasing.md**: Who updates changelog, when (before tag), how to tag, deploy (staging/main), version numbering (0.x.y), checklist. - **scripts/check-changelog.sh**: Optional script; `./scripts/check-changelog.sh <version>` verifies CHANGELOG has `## [X.Y.Z]` entry. - **README.md**: Releasing section linking to docs/releasing.md and CHANGELOG.md. - **app/changelog/page.tsx**: Server Component that reads CHANGELOG.md at build time and renders with react-markdown; prose styling, metadata. - **components/Footer.tsx**: Changelog link in Resources and in authenticated footer. - **package.json**: Added react-markdown for changelog page. ## Test Plan - [x] Run `./scripts/check-changelog.sh 0.1.0` from repo root → OK. - [x] Run `./scripts/check-changelog.sh 0.2.0` → error (no entry). - [x] Build passes; visit `/changelog` and confirm CHANGELOG content and styling (light/dark). - [x] Footer shows Changelog link (logged in and logged out). - [x] (After merge) Tag v0.1.0, push, create GitHub Release from tag with 0.1.0 notes to satisfy “at least one release following the process.”
greptile-apps[bot] commented 2026-02-09 17:11:49 +00:00 (Migrated from github.com)

Greptile Overview

Greptile Summary

Added comprehensive release infrastructure including Keep a Changelog-format changelog, release process documentation, and an in-app changelog page at /changelog. The implementation includes a bash script to verify changelog entries before tagging, footer links to the changelog, and react-markdown for rendering. The version was properly set to 0.1.0 matching the changelog entry.

  • Well-structured release documentation with clear checklist
  • Changelog follows industry-standard Keep a Changelog format
  • Optional verification script works correctly for CI/CD integration
  • Server-side rendered changelog page with proper styling
  • Footer properly updated in both authenticated and unauthenticated states

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • Well-implemented release infrastructure with proper documentation, tested scripts, and clean code. Only minor style suggestion for error handling. All files follow existing patterns and the changelog format is standard.
  • No files require special attention

Important Files Changed

Filename Overview
CHANGELOG.md Added Keep a Changelog format changelog with initial 0.1.0 release entry and Unreleased section
docs/releasing.md Comprehensive release documentation covering version numbering, changelog updates, tagging, and deployment process
scripts/check-changelog.sh Bash script to verify changelog entries exist for versions before tagging, tested and working correctly
app/changelog/page.tsx Server component that reads and renders CHANGELOG.md with prose styling, no error handling for missing file
components/Footer.tsx Added changelog link to both authenticated and unauthenticated footer variants in Resources section
<h2>Greptile Overview</h2> <h3>Greptile Summary</h3> Added comprehensive release infrastructure including Keep a Changelog-format changelog, release process documentation, and an in-app changelog page at `/changelog`. The implementation includes a bash script to verify changelog entries before tagging, footer links to the changelog, and react-markdown for rendering. The version was properly set to 0.1.0 matching the changelog entry. - Well-structured release documentation with clear checklist - Changelog follows industry-standard Keep a Changelog format - Optional verification script works correctly for CI/CD integration - Server-side rendered changelog page with proper styling - Footer properly updated in both authenticated and unauthenticated states <h3>Confidence Score: 5/5</h3> - This PR is safe to merge with minimal risk - Well-implemented release infrastructure with proper documentation, tested scripts, and clean code. Only minor style suggestion for error handling. All files follow existing patterns and the changelog format is standard. - No files require special attention <details><summary><h3>Important Files Changed</h3></summary> | Filename | Overview | |----------|----------| | CHANGELOG.md | Added Keep a Changelog format changelog with initial 0.1.0 release entry and Unreleased section | | docs/releasing.md | Comprehensive release documentation covering version numbering, changelog updates, tagging, and deployment process | | scripts/check-changelog.sh | Bash script to verify changelog entries exist for versions before tagging, tested and working correctly | | app/changelog/page.tsx | Server component that reads and renders CHANGELOG.md with prose styling, no error handling for missing file | | components/Footer.tsx | Added changelog link to both authenticated and unauthenticated footer variants in Resources section | </details> </details>
greptile-apps[bot] (Migrated from github.com) reviewed 2026-02-09 17:11:53 +00:00
greptile-apps[bot] (Migrated from github.com) left a comment

5 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

<sub>5 files reviewed, 1 comment</sub> <sub>[Edit Code Review Agent Settings](https://app.greptile.com/review/github) | [Greptile](https://greptile.com?utm_source=greptile_expert&utm_medium=github&utm_campaign=code_reviews)</sub>
@@ -0,0 +14,4 @@
*/
export default function ChangelogPage() {
const changelogPath = path.join(process.cwd(), 'CHANGELOG.md')
const content = fs.readFileSync(changelogPath, 'utf-8')
greptile-apps[bot] (Migrated from github.com) commented 2026-02-09 17:11:52 +00:00

no error handling if CHANGELOG.md doesn't exist - will cause build failure

  let content: string
  try {
    content = fs.readFileSync(changelogPath, 'utf-8')
  } catch (error) {
    return (
      <div className="mx-auto max-w-3xl px-4 sm:px-6 py-8">
        <h1 className="text-3xl font-bold text-neutral-900 dark:text-white mb-2">
          Changelog
        </h1>
        <p className="text-neutral-600 dark:text-neutral-400">
          Changelog not available.
        </p>
      </div>
    )
  }
Prompt To Fix With AI
This is a comment left during a code review.
Path: app/changelog/page.tsx
Line: 16:17

Comment:
no error handling if `CHANGELOG.md` doesn't exist - will cause build failure

```suggestion
  let content: string
  try {
    content = fs.readFileSync(changelogPath, 'utf-8')
  } catch (error) {
    return (
      <div className="mx-auto max-w-3xl px-4 sm:px-6 py-8">
        <h1 className="text-3xl font-bold text-neutral-900 dark:text-white mb-2">
          Changelog
        </h1>
        <p className="text-neutral-600 dark:text-neutral-400">
          Changelog not available.
        </p>
      </div>
    )
  }
```

How can I resolve this? If you propose a fix, please make it concise.
no error handling if `CHANGELOG.md` doesn't exist - will cause build failure ```suggestion let content: string try { content = fs.readFileSync(changelogPath, 'utf-8') } catch (error) { return ( <div className="mx-auto max-w-3xl px-4 sm:px-6 py-8"> <h1 className="text-3xl font-bold text-neutral-900 dark:text-white mb-2"> Changelog </h1> <p className="text-neutral-600 dark:text-neutral-400"> Changelog not available. </p> </div> ) } ``` <details><summary>Prompt To Fix With AI</summary> `````markdown This is a comment left during a code review. Path: app/changelog/page.tsx Line: 16:17 Comment: no error handling if `CHANGELOG.md` doesn't exist - will cause build failure ```suggestion let content: string try { content = fs.readFileSync(changelogPath, 'utf-8') } catch (error) { return ( <div className="mx-auto max-w-3xl px-4 sm:px-6 py-8"> <h1 className="text-3xl font-bold text-neutral-900 dark:text-white mb-2"> Changelog </h1> <p className="text-neutral-600 dark:text-neutral-400"> Changelog not available. </p> </div> ) } ``` How can I resolve this? If you propose a fix, please make it concise. ````` </details>
Sign in to join this conversation.
No description provided.