diff --git a/.changes/README.md b/.changes/README.md deleted file mode 100644 index 3ebaa15..0000000 --- a/.changes/README.md +++ /dev/null @@ -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` diff --git a/.changes/config.json b/.changes/config.json deleted file mode 100644 index 864f4d5..0000000 --- a/.changes/config.json +++ /dev/null @@ -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"] - } - } -} diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 337c6e6..951f4cb 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -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}
\nMaintenance\n\n${CHORE}\n
\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 "\"@${gh_user}\"" - else - echo "**${name}**" - fi - done | tr '\n' ' ') - fi - if [ -z "$CONTRIBUTORS" ]; then - CONTRIBUTORS="View all contributors" - fi - - # Build release body - cat > release-body.md << BODY_EOF -

- ClaudePrism -

- -

ClaudePrism ${TAG}

- - --- - - ### 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 - -

- ${CONTRIBUTORS} -

- - --- - -

- $([ -n "$PREV_TAG" ] && echo "Full Changelog (${PREV_TAG}...${TAG})" || echo "Initial Release") -

- 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" diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml deleted file mode 100644 index 60c19e4..0000000 --- a/.github/workflows/covector-version-or-publish.yml +++ /dev/null @@ -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. diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 33758a9..189955c 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@claude-prism/desktop", - "version": "0.5.4", + "version": "1.0.0", "private": true, "type": "module", "scripts": { diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index 7de8952..9cefed5 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -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" diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 92daf76..78dac7e 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -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", diff --git a/homebrew/Casks/claude-prism.rb b/homebrew/Casks/claude-prism.rb deleted file mode 100644 index bcc6a43..0000000 --- a/homebrew/Casks/claude-prism.rb +++ /dev/null @@ -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 diff --git a/package.json b/package.json index 5fac7dc..0be25ee 100644 --- a/package.json +++ b/package.json @@ -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 && git push origin v'" }, "devDependencies": { "@biomejs/biome": "^2.3.13", - "covector": "^0.12", "turbo": "^2.7.6" }, "packageManager": "pnpm@10.28.2",