Skip to content
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,6 @@ config.

# allow required generated files
!app/icons.gen.ts
!app/overrides.gen.css
!app/overrides.gen.css

public/releases/releases.json
Comment on lines 63 to +66

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# Search for any references to releases.json or public/releases
rg "releases\.json" --type-list

Repository: CircuitVerse/community-dashboard

Length of output: 465


🏁 Script executed:

# Find all references to releases.json
rg "releases\.json" -i

Repository: CircuitVerse/community-dashboard

Length of output: 193


🏁 Script executed:

# Check for any build/generation scripts
rg "releases|getReleases" -i -A 2 --type ts --type js --type json

Repository: CircuitVerse/community-dashboard

Length of output: 7500


🏁 Script executed:

# Look at the current .gitignore file to understand context
cat -n .gitignore | head -75

Repository: CircuitVerse/community-dashboard

Length of output: 1209


🏁 Script executed:

# Check package.json for build, generate, or prepare scripts
rg "generateReleases|generate" package.json

Repository: CircuitVerse/community-dashboard

Length of output: 209


🏁 Script executed:

# Look at the full package.json to see all scripts
cat package.json | grep -A 30 '"scripts"'

Repository: CircuitVerse/community-dashboard

Length of output: 1098


🏁 Script executed:

# Check if there's a build config that runs the generation
cat next.config.js || echo "no next.config.js"

Repository: CircuitVerse/community-dashboard

Length of output: 157


🏁 Script executed:

# Also check for pre-commit or CI automation
fd "\.github|\.gitlab|Makefile|package\.json" --type f | head -20

Repository: CircuitVerse/community-dashboard

Length of output: 88


The releases.json file is required at runtime but won't exist on fresh clones or CI.

The app/releases/page.tsx calls getReleases() at runtime, which reads from public/releases/releases.json. However, scripts/generateReleases.ts (which generates this file) is not included in the build pipeline—unlike generate:leaderboard and generate:workflow which have dedicated package.json scripts. Since the file is also ignored in .gitignore, it will be missing on fresh clones and CI runs, breaking the releases page.

Add the generation script to the build pipeline (e.g., as a prebuild step or explicit generate:releases script), or ensure the app gracefully handles the missing file. Additionally, anchor the .gitignore pattern with /public/releases/releases.json to avoid accidental matches elsewhere.

8 changes: 4 additions & 4 deletions app/releases/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ export default async function ReleasesPage() {
const releases = await getReleases();

return (
<div className="max-w-5xl mx-auto px-4 py-10 space-y-6">
<div className="mx-auto w-full max-w-5xl px-3 sm:px-4 md:px-6 py-6 sm:py-8 md:py-10 space-y-6">
<div>
<h1 className="text-3xl font-bold text-[#50B78B]">
<h1 className="text-2xl sm:text-3xl font-bold text-[#50B78B]">
Releases
</h1>
<p className="text-sm text-zinc-500 mt-1">
<p className="text-sm sm:text-base text-zinc-500 mt-1">
Celebrating contributors across CircuitVerse releases
</p>
</div>

<div className="space-y-4">
<div className="space-y-3 sm:space-y-4">
{releases.map((release, index) => (
<ReleaseCard
key={`${release.repoSlug}-${release.version}`}
Expand Down
25 changes: 13 additions & 12 deletions components/Releases/ReleaseCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,25 @@ export function ReleaseCard({ release }: { release: Release }) {
<Card className="transition-all hover:shadow-md hover:border-[#50B78B]/50">
<CardContent className="p-5 space-y-4">
{/* Header */}
<div className="flex items-start justify-between gap-4">
<div className="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-2 sm:gap-4">
<div>
<h3 className="text-lg font-semibold">
{release.repo} — {release.version}
</h3>
<p className="text-sm text-muted-foreground">
{release.summary}
</p>
</div>
<h3 className="text-base sm:text-lg font-semibold break-words">
{release.repo} — {release.version}
</h3>
<p className="text-sm text-muted-foreground break-words">
{release.summary}
</p>

<span className="text-sm text-zinc-500 whitespace-nowrap">
{release.date}
</span>
</div>
<span className="text-xs sm:text-sm text-zinc-500 whitespace-nowrap sm:self-start">
{release.date}
</span>

</div>

{/* Contributors */}
{release.contributors.length > 0 && (
<div className="flex flex-wrap gap-3 pt-2">
<div className="flex flex-wrap gap-2 pt-2">
{release.contributors.map((c) => (
<Link
key={c.username}
Expand Down