chore: remove covector, simplify release to manual tag-based flow

- Remove covector and .changes/ directory
- Remove covector workflow, keep only build-desktop.yml
- Replace custom changelog with GitHub auto-generated release notes
- Move Homebrew cask management to delibae/homebrew-claude-prism tap repo
- Remove in-repo homebrew/ directory
- Bump version to 1.0.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
delibae 2026-03-14 02:00:38 +09:00
parent 0542bc1b53
commit c8f7741d80
9 changed files with 25 additions and 299 deletions

View file

@ -1,16 +0,0 @@
# Changes
When a change requires a version bump, add a markdown file to this directory.
## File format
```md
---
"claude-prism-desktop": minor
"@claude-prism/desktop": minor
---
Brief description of the change (included in the changelog)
```
Bump types: `major`, `minor`, `patch`

View file

@ -1,42 +0,0 @@
{
"gitSiteUrl": "https://github.com/delibae/claude-prism",
"changeTags": {
"feat": "New Features",
"fix": "Bug Fixes",
"perf": "Performance",
"refactor": "Refactoring",
"chore": "Maintenance"
},
"pkgManagers": {
"rust": {
"version": true,
"publish": true,
"publishCommand": "echo 'skip rust publish'"
},
"javascript": {
"version": true,
"publish": true,
"publishCommand": "echo 'skip js publish'"
}
},
"packages": {
"claude-prism-desktop": {
"path": "./apps/desktop/src-tauri",
"manager": "rust",
"version": true
},
"@claude-prism/desktop": {
"path": "./apps/desktop",
"manager": "javascript",
"version": true,
"dependencies": ["claude-prism-desktop"],
"postversion": "node -e \"const fs=require('fs');const p='src-tauri/tauri.conf.json';const c=JSON.parse(fs.readFileSync(p));const pkg=JSON.parse(fs.readFileSync('package.json'));c.version=pkg.version;fs.writeFileSync(p,JSON.stringify(c,null,2)+String.fromCharCode(10))\""
},
"@claude-prism/root": {
"path": ".",
"manager": "javascript",
"version": true,
"dependencies": ["@claude-prism/desktop"]
}
}
}

View file

@ -179,7 +179,6 @@ jobs:
args: --target ${{ matrix.target }} ${{ contains(matrix.label, 'macos') && steps.signing.outputs.available != 'true' && '--no-sign' || '' }} ${{ contains(matrix.label, 'macos') && steps.signing.outputs.available == 'true' && '--skip-stapling' || '' }}
tagName: ${{ github.ref_name }}
releaseName: "ClaudePrism ${{ github.ref_name }}"
releaseBody: "Release is being built..."
releaseDraft: false
prerelease: false
@ -262,148 +261,47 @@ jobs:
needs: build
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate changelog and update release
- name: Update release notes with auto-generated changelog
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${GITHUB_REF_NAME}"
VERSION="${TAG#v}"
PREV_TAG=$(git tag --sort=-v:refname | grep '^v' | sed -n '2p' || true)
REPO="${{ github.repository }}"
ICON_URL="https://raw.githubusercontent.com/${REPO}/main/apps/desktop/src-tauri/icons/icon.png"
gh release edit "$GITHUB_REF_NAME" \
--repo "${{ github.repository }}" \
--generate-notes
# Build categorized changelog
FEAT="" FIX="" CHORE="" OTHER=""
if [ -n "$PREV_TAG" ]; then
while IFS= read -r line; do
msg="${line#- }"
case "$msg" in
feat:*|feat\(*) FEAT="${FEAT}\n- ${msg}" ;;
fix:*|fix\(*) FIX="${FIX}\n- ${msg}" ;;
chore:*|chore\(*|docs:*|docs\(*|ci:*|ci\(*|build:*|build\(*) CHORE="${CHORE}\n- ${msg}" ;;
*) OTHER="${OTHER}\n- ${msg}" ;;
esac
done < <(git log --pretty=format:"- %s" "$PREV_TAG".."$TAG" --no-merges 2>/dev/null)
COMPARE_URL="https://github.com/${REPO}/compare/${PREV_TAG}...${TAG}"
fi
CHANGELOG=""
if [ -n "$FEAT" ]; then
CHANGELOG="${CHANGELOG}#### New Features\n${FEAT}\n\n"
fi
if [ -n "$FIX" ]; then
CHANGELOG="${CHANGELOG}#### Bug Fixes\n${FIX}\n\n"
fi
if [ -n "$OTHER" ]; then
CHANGELOG="${CHANGELOG}#### Other Changes\n${OTHER}\n\n"
fi
if [ -n "$CHORE" ]; then
CHANGELOG="${CHANGELOG}<details>\n<summary>Maintenance</summary>\n\n${CHORE}\n</details>\n\n"
fi
if [ -z "$CHANGELOG" ]; then
CHANGELOG="- Initial release\n"
fi
# Get contributors for this release
CONTRIBUTORS=""
if [ -n "$PREV_TAG" ]; then
CONTRIBUTORS=$(git log --pretty=format:"%an" "$PREV_TAG".."$TAG" --no-merges | sort -u | while read -r name; do
# Try to find GitHub username from commit
email=$(git log --pretty=format:"%ae" --author="$name" -1 "$PREV_TAG".."$TAG")
gh_user=$(echo "$email" | sed -n 's/.*+\(.*\)@users.noreply.github.com/\1/p')
if [ -z "$gh_user" ]; then
gh_user=$(gh api "search/users?q=${email}+in:email" --jq '.items[0].login' 2>/dev/null || true)
fi
if [ -n "$gh_user" ]; then
echo "<a href=\"https://github.com/${gh_user}\"><img src=\"https://github.com/${gh_user}.png\" width=\"40\" height=\"40\" style=\"border-radius:50%\" alt=\"@${gh_user}\" /></a>"
else
echo "**${name}**"
fi
done | tr '\n' ' ')
fi
if [ -z "$CONTRIBUTORS" ]; then
CONTRIBUTORS="<a href=\"https://github.com/${REPO}/graphs/contributors\">View all contributors</a>"
fi
# Build release body
cat > release-body.md << BODY_EOF
<p align="center">
<img src="${ICON_URL}" width="120" height="120" alt="ClaudePrism" />
</p>
<h2 align="center">ClaudePrism ${TAG}</h2>
---
### What's Changed
$(echo -e "$CHANGELOG")
---
### Downloads
| Platform | Architecture | File | Install |
|:--------:|:------------:|:----:|:--------|
| **Windows** | x64 | \`.msi\` / \`.exe\` | Run the installer |
| **macOS** | Apple Silicon | \`.dmg\` | Open \`.dmg\` → drag to Applications |
| **macOS** | Any | **Homebrew** | \`brew install --cask claude-prism\` |
| **Linux** | x64 | \`.AppImage\` | \`chmod +x\` and run |
| **Linux** | x64 | \`.deb\` | \`sudo dpkg -i claude-prism_*.deb\` |
---
### Contributors
<p align="center">
${CONTRIBUTORS}
</p>
---
<p align="center">
$([ -n "$PREV_TAG" ] && echo "<a href=\"${COMPARE_URL}\">Full Changelog (${PREV_TAG}...${TAG})</a>" || echo "Initial Release")
</p>
BODY_EOF
gh release edit "$TAG" \
--repo "${REPO}" \
--notes-file release-body.md
- name: Update Homebrew Cask SHA256
- name: Update Homebrew Cask
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
run: |
TAG="${GITHUB_REF_NAME}"
VERSION="${TAG#v}"
TAP_REPO="delibae/homebrew-claude-prism"
CASK_PATH="Casks/claude-prism.rb"
# Download DMG files
gh release download "$TAG" \
--repo "${{ github.repository }}" \
--pattern "*.dmg" \
--dir /tmp/dmg
# Calculate SHA256
SHA_ARM64=$(sha256sum /tmp/dmg/ClaudePrism_${VERSION}_aarch64.dmg | awk '{print $1}')
echo "ARM64 SHA256: $SHA_ARM64"
# Update Cask file
CASK_FILE="homebrew/Casks/claude-prism.rb"
sed -i "s/version \".*\"/version \"${VERSION}\"/" "$CASK_FILE"
sed -i "s/sha256 \".*\"/sha256 \"${SHA_ARM64}\"/" "$CASK_FILE"
# Fetch current cask file, update version and sha256, push back
gh api "repos/${TAP_REPO}/contents/${CASK_PATH}" --jq '.content' | base64 -d > /tmp/cask.rb
FILE_SHA=$(gh api "repos/${TAP_REPO}/contents/${CASK_PATH}" --jq '.sha')
# Commit and push
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add "$CASK_FILE"
git diff --cached --quiet && echo "No changes to commit" && exit 0
git commit -m "chore: update Homebrew Cask to ${TAG}"
git push origin HEAD:main
sed -i "s/version \".*\"/version \"${VERSION}\"/" /tmp/cask.rb
sed -i "s/sha256 \".*\"/sha256 \"${SHA_ARM64}\"/" /tmp/cask.rb
gh api -X PUT "repos/${TAP_REPO}/contents/${CASK_PATH}" \
-f message="chore: update cask to v${VERSION}" \
-f content="$(base64 -w0 /tmp/cask.rb)" \
-f sha="$FILE_SHA"

View file

@ -1,89 +0,0 @@
name: Covector Version or Publish
on:
push:
branches:
- main
permissions:
contents: write
pull-requests: write
actions: write
jobs:
version-or-publish:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- name: Install dependencies
run: pnpm install
- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Covector version or publish
uses: jbolda/covector/packages/action@covector-v0
id: covector
with:
token: ${{ secrets.GITHUB_TOKEN }}
command: version-or-publish
createRelease: true
- name: Create unified release tag and trigger build
if: steps.covector.outputs.commandRan == 'publish'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Extract version from root package.json
VERSION=$(node -p "require('./package.json').version")
TAG="v${VERSION}"
# Create tag if it doesn't already exist
if ! git rev-parse "$TAG" >/dev/null 2>&1; then
echo "Creating unified tag: $TAG"
git tag "$TAG"
git push origin "$TAG"
else
echo "Tag $TAG already exists"
fi
# Trigger build workflow (GITHUB_TOKEN pushes don't trigger other workflows)
echo "Triggering Build Desktop workflow for $TAG"
gh workflow run "Build Desktop" --ref "$TAG"
- name: Sync Cargo.lock
if: steps.covector.outputs.commandRan == 'version'
run: |
cd apps/desktop/src-tauri
cargo generate-lockfile
- name: Create version bump PR
if: steps.covector.outputs.commandRan == 'version'
uses: peter-evans/create-pull-request@v7
with:
title: "chore: version bump"
commit-message: "chore: version bump"
labels: version
branch: covector/version-bump
body: |
## Version Bump
This PR was auto-generated based on `.changes/` files.
Merging will create a new version tag and trigger a release build.

View file

@ -1,6 +1,6 @@
{
"name": "@claude-prism/desktop",
"version": "0.5.4",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {

View file

@ -1,6 +1,6 @@
[package]
name = "claude-prism-desktop"
version = "0.5.4"
version = "1.0.0"
description = "AI-powered LaTeX writing workspace"
edition = "2021"

View file

@ -2,7 +2,7 @@
"$schema": "https://raw.githubusercontent.com/nicegui-unofficial/nicegui-tauri-template/main/src-tauri/tauri.conf-v2-schema.json",
"identifier": "com.claude-prism.desktop",
"productName": "ClaudePrism",
"version": "0.5.4",
"version": "1.0.0",
"build": {
"beforeDevCommand": "pnpm dev",
"beforeBuildCommand": "pnpm build",

View file

@ -1,23 +0,0 @@
cask "claude-prism" do
version "0.5.0"
sha256 ""
url "https://github.com/delibae/claude-prism/releases/download/v#{version}/ClaudePrism_#{version}_aarch64.dmg"
depends_on arch: :arm64
name "ClaudePrism"
desc "Desktop app for Claude-powered academic research workflows"
homepage "https://github.com/delibae/claude-prism"
depends_on macos: ">= :big_sur"
app "ClaudePrism.app"
zap trash: [
"~/Library/Application Support/com.claude-prism.desktop",
"~/Library/Caches/com.claude-prism.desktop",
"~/Library/Preferences/com.claude-prism.desktop.plist",
"~/Library/Saved Application State/com.claude-prism.desktop.savedState",
]
end

View file

@ -1,7 +1,7 @@
{
"name": "@claude-prism/root",
"description": "Open-Source AI LaTeX writing workspace",
"version": "0.5.4",
"version": "1.0.0",
"repository": {
"type": "git",
"url": "https://github.com/delibae/claude-prism"
@ -17,12 +17,10 @@
"build:desktop": "pnpm --filter=@claude-prism/desktop tauri build",
"lint": "pnpm exec biome check",
"lint:fix": "pnpm exec biome check --fix",
"version:check": "covector status",
"version:bump": "covector version"
"release": "echo 'To release: git tag v<version> && git push origin v<version>'"
},
"devDependencies": {
"@biomejs/biome": "^2.3.13",
"covector": "^0.12",
"turbo": "^2.7.6"
},
"packageManager": "pnpm@10.28.2",