native macOS codings agent orchestrator
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Use markdown for release notes with bold headers

- Upgrade Sparkle to 2.9.0-beta.2 for markdown support
- Update generate_appcast binary to 2.9
- Change release notes from .txt to .md format
- Make section headers bold (**✨ New Features**, etc.)

khoi ae3065ae 31a8d440

+14 -12
+12 -10
.github/workflows/release.yml
··· 78 78 "additionalProperties": false 79 79 } 80 80 output-file: build/release-notes.json 81 - - name: Build release notes text 81 + - name: Build release notes markdown 82 82 run: | 83 83 python3 - <<'PY' 84 84 import json 85 + from datetime import datetime 85 86 from pathlib import Path 86 87 87 88 data = json.loads(Path("build/release-notes.json").read_text()) 88 - lines = ["📅 Release date: 20 Sep 2026"] 89 + today = datetime.now().strftime("%d %b %Y") 90 + lines = [f"**📅 Release date:** {today}"] 89 91 90 92 def add_section(title, items): 91 93 if items: 92 94 lines.append("") 93 - lines.append(title) 95 + lines.append(f"**{title}**") 94 96 lines.extend([f"- {item}" for item in items]) 95 97 96 98 add_section("✨ New Features", data.get("new_features", [])) 97 - add_section("🐛 Bug Fixes:", data.get("bug_fixes", [])) 98 - add_section("🌱 Improvements:", data.get("improvements", [])) 99 + add_section("🐛 Bug Fixes", data.get("bug_fixes", [])) 100 + add_section("🌱 Improvements", data.get("improvements", [])) 99 101 100 - Path("build/release-notes.txt").write_text("\n".join(lines).strip() + "\n") 102 + Path("build/release-notes.md").write_text("\n".join(lines).strip() + "\n") 101 103 PY 102 104 - uses: actions/upload-artifact@v4 103 105 with: 104 106 name: release-notes 105 - path: build/release-notes.txt 107 + path: build/release-notes.md 106 108 107 109 build: 108 110 runs-on: [self-hosted, macOS, ARM64] ··· 302 304 - name: Generate appcast with history 303 305 run: | 304 306 set -euo pipefail 305 - NOTES_FILE=build/release-notes.txt 307 + NOTES_FILE=build/release-notes.md 306 308 STAGING=$(mktemp -d) 307 309 ARCHIVE=build/supacode.app.zip 308 310 ARCHIVE_BASE=$(basename "$ARCHIVE") 309 311 ARCHIVE_BASE="${ARCHIVE_BASE%.zip}" 310 312 cp "$ARCHIVE" "$STAGING/" 311 - cp "$NOTES_FILE" "$STAGING/$ARCHIVE_BASE.txt" 313 + cp "$NOTES_FILE" "$STAGING/$ARCHIVE_BASE.md" 312 314 313 315 curl -fsSL "https://supacode.sh/download/latest/appcast.xml" -o "$STAGING/appcast.xml" || true 314 316 ··· 348 350 name: build-artifacts 349 351 path: build 350 352 - run: | 351 - NOTES_FILE=build/release-notes.txt 353 + NOTES_FILE=build/release-notes.md 352 354 if gh release view "$TAG" -R "$RELEASE_REPO_MAIN" >/dev/null 2>&1; then 353 355 gh release edit "$TAG" --notes-file "$NOTES_FILE" -R "$RELEASE_REPO_MAIN" 354 356 gh release upload "$TAG" build/supacode.app.zip build/supacode.dmg build/appcast.xml --clobber -R "$RELEASE_REPO_MAIN"
bins/generate_appcast

This is a binary file and will not be displayed.

+2 -2
supacode.xcodeproj/project.pbxproj
··· 601 601 isa = XCRemoteSwiftPackageReference; 602 602 repositoryURL = "https://github.com/sparkle-project/Sparkle"; 603 603 requirement = { 604 - kind = upToNextMajorVersion; 605 - minimumVersion = 2.8.1; 604 + kind = exactVersion; 605 + version = "2.9.0-beta.2"; 606 606 }; 607 607 }; 608 608 911B4AAD84AF4B34BE232133 /* XCRemoteSwiftPackageReference "swift-case-paths" */ = {