Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4a35420d16 | |||
| c6020ac10f | |||
| 669bdbd1d1 | |||
| 9fc5ef2fac | |||
| c65cf67230 | |||
| 5838f24ff7 | |||
| fc2075dd98 | |||
| ff033a8e2d | |||
| 8db71f3dfb | |||
| 772a5006d4 | |||
| d23fcd8669 | |||
| 326118bd59 | |||
| 6afcc92215 | |||
| 2c9389012e | |||
| 0d95f747f1 |
+141
-32
@@ -13,8 +13,10 @@ on:
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
runs-on: macos-latest
|
||||
# Intel build on Intel runner for native compilation
|
||||
# Note: macos-15-intel is the last Intel runner, supported until Fall 2027
|
||||
build-macos-intel:
|
||||
runs-on: macos-15-intel
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -35,8 +37,8 @@ jobs:
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.pnpm-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: ${{ runner.os }}-pnpm-
|
||||
key: ${{ runner.os }}-x64-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: ${{ runner.os }}-x64-pnpm-
|
||||
|
||||
- name: Install dependencies
|
||||
run: cd auto-claude-ui && pnpm install --frozen-lockfile
|
||||
@@ -45,20 +47,13 @@ jobs:
|
||||
run: cd auto-claude-ui && pnpm run build
|
||||
|
||||
- name: Package macOS (Intel)
|
||||
run: cd auto-claude-ui && pnpm run package:mac -- --arch=x64
|
||||
run: cd auto-claude-ui && pnpm run package:mac -- --arch=x64 -p never
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CSC_LINK: ${{ secrets.MAC_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: Package macOS (Apple Silicon)
|
||||
run: cd auto-claude-ui && pnpm run package:mac -- --arch=arm64
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CSC_LINK: ${{ secrets.MAC_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: Notarize macOS apps
|
||||
- name: Notarize macOS Intel app
|
||||
env:
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
@@ -83,7 +78,76 @@ jobs:
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos-builds
|
||||
name: macos-intel-builds
|
||||
path: |
|
||||
auto-claude-ui/dist/*.dmg
|
||||
auto-claude-ui/dist/*.zip
|
||||
|
||||
# Apple Silicon build on ARM64 runner for native compilation
|
||||
build-macos-arm64:
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Get pnpm store directory
|
||||
id: pnpm-cache
|
||||
run: echo "dir=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.pnpm-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-arm64-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||
restore-keys: ${{ runner.os }}-arm64-pnpm-
|
||||
|
||||
- name: Install dependencies
|
||||
run: cd auto-claude-ui && pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build application
|
||||
run: cd auto-claude-ui && pnpm run build
|
||||
|
||||
- name: Package macOS (Apple Silicon)
|
||||
run: cd auto-claude-ui && pnpm run package:mac -- --arch=arm64 -p never
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CSC_LINK: ${{ secrets.MAC_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: Notarize macOS ARM64 app
|
||||
env:
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
run: |
|
||||
if [ -z "$APPLE_ID" ]; then
|
||||
echo "Skipping notarization: APPLE_ID not configured"
|
||||
exit 0
|
||||
fi
|
||||
cd auto-claude-ui
|
||||
for dmg in dist/*.dmg; do
|
||||
echo "Notarizing $dmg..."
|
||||
xcrun notarytool submit "$dmg" \
|
||||
--apple-id "$APPLE_ID" \
|
||||
--password "$APPLE_APP_SPECIFIC_PASSWORD" \
|
||||
--team-id "$APPLE_TEAM_ID" \
|
||||
--wait
|
||||
xcrun stapler staple "$dmg"
|
||||
echo "Successfully notarized and stapled $dmg"
|
||||
done
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: macos-arm64-builds
|
||||
path: |
|
||||
auto-claude-ui/dist/*.dmg
|
||||
auto-claude-ui/dist/*.zip
|
||||
@@ -121,7 +185,7 @@ jobs:
|
||||
run: cd auto-claude-ui && pnpm run build
|
||||
|
||||
- name: Package Windows
|
||||
run: cd auto-claude-ui && pnpm run package:win
|
||||
run: cd auto-claude-ui && pnpm run package:win -- -p never
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CSC_LINK: ${{ secrets.WIN_CERTIFICATE }}
|
||||
@@ -166,7 +230,7 @@ jobs:
|
||||
run: cd auto-claude-ui && pnpm run build
|
||||
|
||||
- name: Package Linux
|
||||
run: cd auto-claude-ui && pnpm run package:linux
|
||||
run: cd auto-claude-ui && pnpm run package:linux -- -p never
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -179,7 +243,7 @@ jobs:
|
||||
auto-claude-ui/dist/*.deb
|
||||
|
||||
create-release:
|
||||
needs: [build-macos, build-windows, build-linux]
|
||||
needs: [build-macos-intel, build-macos-arm64, build-windows, build-linux]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -216,6 +280,7 @@ jobs:
|
||||
|
||||
- name: Scan with VirusTotal
|
||||
id: virustotal
|
||||
continue-on-error: true
|
||||
if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.dry_run != true) }}
|
||||
env:
|
||||
VT_API_KEY: ${{ secrets.VIRUSTOTAL_API_KEY }}
|
||||
@@ -229,39 +294,81 @@ jobs:
|
||||
echo "## VirusTotal Scan Results" > vt_results.md
|
||||
echo "" >> vt_results.md
|
||||
|
||||
scan_failed=false
|
||||
|
||||
for file in release-assets/*.{exe,dmg,AppImage,deb}; do
|
||||
[ -f "$file" ] || continue
|
||||
filename=$(basename "$file")
|
||||
echo "Scanning $filename..."
|
||||
filesize=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file")
|
||||
echo "Scanning $filename (${filesize} bytes)..."
|
||||
|
||||
# For files > 32MB, get a special upload URL first
|
||||
if [ "$filesize" -gt 33554432 ]; then
|
||||
echo " Large file detected, requesting upload URL..."
|
||||
upload_url_response=$(curl -s --request GET \
|
||||
--url "https://www.virustotal.com/api/v3/files/upload_url" \
|
||||
--header "x-apikey: $VT_API_KEY")
|
||||
|
||||
upload_url=$(echo "$upload_url_response" | jq -r '.data // empty')
|
||||
if [ -z "$upload_url" ]; then
|
||||
echo "::warning::Failed to get upload URL for large file $filename"
|
||||
echo "Response: $upload_url_response"
|
||||
echo "- $filename - ⚠️ Upload failed (large file)" >> vt_results.md
|
||||
continue
|
||||
fi
|
||||
api_url="$upload_url"
|
||||
else
|
||||
api_url="https://www.virustotal.com/api/v3/files"
|
||||
fi
|
||||
|
||||
# Upload file to VirusTotal
|
||||
response=$(curl -s --request POST \
|
||||
--url "https://www.virustotal.com/api/v3/files" \
|
||||
--url "$api_url" \
|
||||
--header "x-apikey: $VT_API_KEY" \
|
||||
--form "file=@$file")
|
||||
|
||||
# Check if response is valid JSON before parsing
|
||||
if ! echo "$response" | jq -e . >/dev/null 2>&1; then
|
||||
echo "::warning::VirusTotal returned invalid JSON for $filename"
|
||||
echo "Response (first 500 chars): ${response:0:500}"
|
||||
echo "- $filename - ⚠️ Scan failed (invalid response)" >> vt_results.md
|
||||
continue
|
||||
fi
|
||||
|
||||
# Check for API error response
|
||||
error_code=$(echo "$response" | jq -r '.error.code // empty')
|
||||
if [ -n "$error_code" ]; then
|
||||
error_msg=$(echo "$response" | jq -r '.error.message // "Unknown error"')
|
||||
echo "::warning::VirusTotal API error for $filename: $error_code - $error_msg"
|
||||
echo "- $filename - ⚠️ Scan failed ($error_code)" >> vt_results.md
|
||||
continue
|
||||
fi
|
||||
|
||||
# Extract analysis ID
|
||||
analysis_id=$(echo "$response" | jq -r '.data.id // empty')
|
||||
|
||||
if [ -z "$analysis_id" ]; then
|
||||
echo "::error::Failed to upload $filename to VirusTotal"
|
||||
echo "::warning::Failed to upload $filename to VirusTotal"
|
||||
echo "Response: $response"
|
||||
scan_failed=true
|
||||
echo "- $filename - ⚠️ Upload failed" >> vt_results.md
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Uploaded $filename, analysis ID: $analysis_id"
|
||||
|
||||
# Wait for analysis to complete (max 5 minutes per file)
|
||||
analysis=""
|
||||
for i in {1..30}; do
|
||||
sleep 10
|
||||
analysis=$(curl -s --request GET \
|
||||
--url "https://www.virustotal.com/api/v3/analyses/$analysis_id" \
|
||||
--header "x-apikey: $VT_API_KEY")
|
||||
|
||||
status=$(echo "$analysis" | jq -r '.data.attributes.status')
|
||||
# Validate JSON response
|
||||
if ! echo "$analysis" | jq -e . >/dev/null 2>&1; then
|
||||
echo " Warning: Invalid JSON response on attempt $i, retrying..."
|
||||
continue
|
||||
fi
|
||||
|
||||
status=$(echo "$analysis" | jq -r '.data.attributes.status // "unknown"')
|
||||
echo " Status: $status (attempt $i/30)"
|
||||
|
||||
if [ "$status" = "completed" ]; then
|
||||
@@ -269,6 +376,14 @@ jobs:
|
||||
fi
|
||||
done
|
||||
|
||||
# Final validation that we have valid analysis data
|
||||
if ! echo "$analysis" | jq -e '.data.attributes.stats' >/dev/null 2>&1; then
|
||||
echo "::warning::Could not get complete analysis for $filename, using local hash"
|
||||
file_hash=$(sha256sum "$file" | cut -d' ' -f1)
|
||||
echo "- [$filename](https://www.virustotal.com/gui/file/$file_hash) - ⚠️ Analysis incomplete" >> vt_results.md
|
||||
continue
|
||||
fi
|
||||
|
||||
# Get file hash for permanent URL
|
||||
file_hash=$(echo "$analysis" | jq -r '.meta.file_info.sha256 // empty')
|
||||
|
||||
@@ -285,9 +400,8 @@ jobs:
|
||||
vt_url="https://www.virustotal.com/gui/file/$file_hash"
|
||||
|
||||
if [ "$malicious" -gt 0 ] || [ "$suspicious" -gt 0 ]; then
|
||||
echo "::error::$filename has $malicious malicious and $suspicious suspicious detections!"
|
||||
echo "- [$filename]($vt_url) - ⚠️ **$malicious malicious, $suspicious suspicious** detections" >> vt_results.md
|
||||
scan_failed=true
|
||||
echo "::warning::$filename has $malicious malicious and $suspicious suspicious detections (likely false positives)"
|
||||
echo "- [$filename]($vt_url) - ⚠️ **$malicious malicious, $suspicious suspicious** detections (review recommended)" >> vt_results.md
|
||||
else
|
||||
echo "$filename is clean ($undetected engines, 0 detections)"
|
||||
echo "- [$filename]($vt_url) - ✅ Clean ($undetected engines, 0 detections)" >> vt_results.md
|
||||
@@ -302,11 +416,6 @@ jobs:
|
||||
cat vt_results.md >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
if [ "$scan_failed" = true ]; then
|
||||
echo "::error::VirusTotal scan found issues. Review the results above."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Dry run summary
|
||||
if: ${{ github.event_name == 'workflow_dispatch' && inputs.dry_run == true }}
|
||||
run: |
|
||||
|
||||
+214
@@ -1,3 +1,217 @@
|
||||
## 2.7.1 - Build Pipeline Enhancements
|
||||
|
||||
### 🛠️ Improvements
|
||||
|
||||
- Enhanced VirusTotal scan error handling in release workflow with graceful failure recovery and improved reporting visibility
|
||||
|
||||
- Refactored macOS build workflow to support both Intel and ARM64 architectures with notarization for Intel builds and improved artifact handling
|
||||
|
||||
- Streamlined CI/CD processes with updated caching strategies and enhanced error handling for external API interactions
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- Clarified README documentation
|
||||
|
||||
---
|
||||
|
||||
## What's Changed
|
||||
|
||||
- chore: Enhance VirusTotal scan error handling in release workflow by @AndyMik90 in d23fcd8
|
||||
|
||||
- chore: Refactor macOS build workflow to support Intel and ARM64 architectures by @AndyMik90 in 326118b
|
||||
|
||||
- docs: readme clarification by @AndyMik90 in 6afcc92
|
||||
|
||||
- fix: version by @AndyMik90 in 2c93890
|
||||
|
||||
## Thanks to all contributors
|
||||
|
||||
@AndyMik90
|
||||
|
||||
## 2.7.0 - Tab Persistence & Memory System Modernization
|
||||
|
||||
### ✨ New Features
|
||||
|
||||
- Project tab bar with persistent tab management and GitHub organization initialization on project creation
|
||||
|
||||
- Task creation enhanced with @ autocomplete for agent profiles and improved drag-and-drop support
|
||||
|
||||
- Keyboard shortcuts and tooltips added to project tabs for better navigation
|
||||
|
||||
- Agent task restart functionality with new profile support for flexible task recovery
|
||||
|
||||
- Ollama embedding model support with automatic dimension detection for self-hosted deployments
|
||||
|
||||
### 🛠️ Improvements
|
||||
|
||||
- Memory system completely redesigned with embedded LadybugDB, eliminating Docker/FalkorDB dependency and improving performance
|
||||
|
||||
- Tab persistence implemented via IPC-based mechanism for reliable session state management
|
||||
|
||||
- Terminal environment improved by using virtual environment Python for proper terminal name generation
|
||||
|
||||
- AI merge operations timeout increased from 2 to 10 minutes for reliability with larger changes
|
||||
|
||||
- Merge operations now use stored baseBranch metadata for consistent branch targeting
|
||||
|
||||
- Memory configuration UI simplified and rebranded with improved Ollama integration and detection
|
||||
|
||||
- CI/CD workflows enhanced with code signing support and automated release process
|
||||
|
||||
- Cross-platform compatibility improved by replacing Unix shell syntax with portable git commands
|
||||
|
||||
- Python venv created in userData for packaged applications to ensure proper environment isolation
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
|
||||
- Task title no longer blocks edit/close buttons in UI
|
||||
|
||||
- Tab persistence and terminal shortcuts properly scoped to prevent conflicts
|
||||
|
||||
- Agent profile fallback corrected from 'Balanced' to 'Auto (Optimized)'
|
||||
|
||||
- macOS notarization made optional and improved with private artifact storage
|
||||
|
||||
- Embedding provider changes now properly detected during migration
|
||||
|
||||
- Memory query CLI respects user's memory enabled flag
|
||||
|
||||
- CodeRabbit review issues and linting errors resolved across codebase
|
||||
|
||||
- F-string prefixes removed from strings without placeholders
|
||||
|
||||
- Import ordering fixed for ruff compliance
|
||||
|
||||
- Preview panel now receives projectPath prop correctly for image component functionality
|
||||
|
||||
- Default database path unified to ~/.auto-claude/memories for consistency
|
||||
|
||||
- @lydell/node-pty build scripts compatibility improved for pnpm v10
|
||||
|
||||
---
|
||||
|
||||
## What's Changed
|
||||
|
||||
- feat(ui): add project tab bar from PR #101 by @AndyMik90 in c400fe9
|
||||
|
||||
- feat: improve task creation UX with @ autocomplete and better drag-drop by @AndyMik90 in 20d1487
|
||||
|
||||
- feat(ui): add keyboard shortcuts and tooltips for project tabs by @AndyMik90 in ed73265
|
||||
|
||||
- feat(agent): enhance task restart functionality with new profile support by @AndyMik90 in c8452a5
|
||||
|
||||
- feat: add Ollama embedding model support with auto-detected dimensions by @AndyMik90 in 45901f3
|
||||
|
||||
- feat(memory): replace FalkorDB with LadybugDB embedded database by @AndyMik90 in 87d0b52
|
||||
|
||||
- feat: add automated release workflow with code signing by @AndyMik90 in 6819b00
|
||||
|
||||
- feat: add embedding provider change detection and fix import ordering by @AndyMik90 in 36f8006
|
||||
|
||||
- fix(tests): update tab management tests for IPC-based persistence by @AndyMik90 in ea25d6e
|
||||
|
||||
- fix(ui): address CodeRabbit PR review issues by @AndyMik90 in 39ce754
|
||||
|
||||
- fix: address CodeRabbit review issues by @AndyMik90 in 95ae0b0
|
||||
|
||||
- fix: prevent task title from blocking edit/close buttons by @AndyMik90 in 8a0fb26
|
||||
|
||||
- fix: use venv Python for terminal name generation by @AndyMik90 in 325cb54
|
||||
|
||||
- fix(merge): increase AI merge timeout from 2 to 10 minutes by @AndyMik90 in 4477538
|
||||
|
||||
- fix(merge): use stored baseBranch from task metadata for merge operations by @AndyMik90 in 8d56474
|
||||
|
||||
- fix: unify default database path to ~/.auto-claude/memories by @AndyMik90 in 684e3f9
|
||||
|
||||
- fix(ui): fix tab persistence and scope terminal shortcuts by @AndyMik90 in 2d1168b
|
||||
|
||||
- fix: create Python venv in userData for packaged apps by @AndyMik90 in b83377c
|
||||
|
||||
- fix(ui): change agent profile fallback from 'Balanced' to 'Auto (Optimized)' by @AndyMik90 in 385dcc1
|
||||
|
||||
- fix: check APPLE_ID in shell instead of workflow if condition by @AndyMik90 in 9eece01
|
||||
|
||||
- fix: allow @lydell/node-pty build scripts in pnpm v10 by @AndyMik90 in 1f6963f
|
||||
|
||||
- fix: use shell guard for notarization credentials check by @AndyMik90 in 4cbddd3
|
||||
|
||||
- fix: improve migrate_embeddings robustness and correctness by @AndyMik90 in 61f0238
|
||||
|
||||
- fix: respect user's memory enabled flag in query_memory CLI by @AndyMik90 in 45b2c83
|
||||
|
||||
- fix: save notarization logs to private artifact instead of public logs by @AndyMik90 in a82525d
|
||||
|
||||
- fix: make macOS notarization optional by @AndyMik90 in f2b7b56
|
||||
|
||||
- fix: add author email for Linux builds by @AndyMik90 in 5f66127
|
||||
|
||||
- fix: add GH_TOKEN and homepage for release workflow by @AndyMik90 in 568ea18
|
||||
|
||||
- fix(ci): quote GITHUB_OUTPUT for shell safety by @AndyMik90 in 1e891e1
|
||||
|
||||
- fix: address CodeRabbit review feedback by @AndyMik90 in 8e4b1da
|
||||
|
||||
- fix: update test and apply ruff formatting by @AndyMik90 in a087ba3
|
||||
|
||||
- fix: address additional CodeRabbit review comments by @AndyMik90 in 461fad6
|
||||
|
||||
- fix: sort imports in memory.py for ruff I001 by @AndyMik90 in b3c257d
|
||||
|
||||
- fix: address CodeRabbit review comments from PR #100 by @AndyMik90 in 1ed237a
|
||||
|
||||
- fix: remove f-string prefixes from strings without placeholders by @AndyMik90 in bcd453a
|
||||
|
||||
- fix: resolve remaining CI failures by @AndyMik90 in cfbccda
|
||||
|
||||
- fix: resolve all CI failures in PR #100 by @AndyMik90 in c493d6c
|
||||
|
||||
- fix(cli): update graphiti status display for LadybugDB by @AndyMik90 in 049c60c
|
||||
|
||||
- fix(ui): replace Unix shell syntax with cross-platform git commands by @AndyMik90 in 83aa3f0
|
||||
|
||||
- fix: correct model name and release workflow conditionals by @AndyMik90 in de41dfc
|
||||
|
||||
- style: fix ruff linting errors in graphiti queries by @AndyMik90 in 127559f
|
||||
|
||||
- style: apply ruff formatting to 4 files by @AndyMik90 in 9d5d075
|
||||
|
||||
- refactor: update memory test suite for LadybugDB by @AndyMik90 in f0b5efc
|
||||
|
||||
- refactor(ui): simplify reference files and images handling in task modal by @AndyMik90 in 1975e4d
|
||||
|
||||
- refactor: rebrand memory system UI and simplify configuration by @AndyMik90 in 2b3cd49
|
||||
|
||||
- refactor: replace Docker/FalkorDB with embedded LadybugDB for memory system by @AndyMik90 in 325458d
|
||||
|
||||
- docs: add CodeRabbit review response tracking by @AndyMik90 in 3452548
|
||||
|
||||
- chore: use GitHub noreply email for author field by @AndyMik90 in 18f2045
|
||||
|
||||
- chore: simplify notarization step after successful setup by @AndyMik90 in e4fe7cd
|
||||
|
||||
- chore: update CI and release workflows, remove changelog config by @AndyMik90 in 6f891b7
|
||||
|
||||
- chore: remove docker-compose.yml (FalkorDB no longer used) by @AndyMik90 in 68f3f06
|
||||
|
||||
- fix: Replace space with hyphen in productName to fix PTY daemon spawn (#65) by @Craig Van in 8f1f7a7
|
||||
|
||||
- fix: update npm scripts to use hyphenated product name by @AndyMik90 in 89978ed
|
||||
|
||||
- fix(ui): improve Ollama UX in memory settings by @AndyMik90 in dea1711
|
||||
|
||||
- auto-claude: subtask-1-1 - Add projectPath prop to PreviewPanel and implement custom img component by @AndyMik90 in e6529e0
|
||||
|
||||
- Project tab persistence and github org init on project creation by @AndyMik90 in ae1dac9
|
||||
|
||||
- Readme for installors by @AndyMik90 in 1855d7d
|
||||
|
||||
---
|
||||
|
||||
## Thanks to all contributors
|
||||
|
||||
@AndyMik90, @Craig Van
|
||||
|
||||
## 2.6.0 - Improved User Experience and Agent Configuration
|
||||
|
||||
### ✨ New Features
|
||||
|
||||
@@ -0,0 +1,641 @@
|
||||
# Investigation: v2.7.1 Release Artifacts Issue
|
||||
|
||||
## Investigation Date
|
||||
|
||||
2025-12-25
|
||||
|
||||
## Summary
|
||||
|
||||
The v2.7.1 release has **incorrect files attached**. All artifacts have v2.7.0 in their filenames, indicating the wrong build artifacts were uploaded.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Reproduce and Verify Issue
|
||||
|
||||
### Subtask 1-1: Current v2.7.1 Assets
|
||||
|
||||
**Command:** `gh release view v2.7.1 --json assets -q '.assets[].name'`
|
||||
|
||||
**Release Metadata:**
|
||||
- Tag Name: v2.7.1
|
||||
- Release Name: v2.7.1
|
||||
- Published At: 2025-12-22T13:35:38Z
|
||||
- Is Draft: false
|
||||
- Is Prerelease: false
|
||||
|
||||
**Files Currently Attached to v2.7.1:**
|
||||
|
||||
| File Name | Size (bytes) | Expected Name |
|
||||
|-----------|-------------|---------------|
|
||||
| Auto-Claude-2.7.0-darwin-arm64.dmg | 124,187,073 | Auto-Claude-2.7.1-darwin-arm64.dmg |
|
||||
| Auto-Claude-2.7.0-darwin-arm64.zip | 117,694,085 | Auto-Claude-2.7.1-darwin-arm64.zip |
|
||||
| Auto-Claude-2.7.0-darwin-x64.dmg | 130,635,398 | Auto-Claude-2.7.1-darwin-x64.dmg |
|
||||
| Auto-Claude-2.7.0-darwin-x64.zip | 124,176,354 | Auto-Claude-2.7.1-darwin-x64.zip |
|
||||
| Auto-Claude-2.7.0-linux-amd64.deb | 104,558,694 | Auto-Claude-2.7.1-linux-amd64.deb |
|
||||
| Auto-Claude-2.7.0-linux-x86_64.AppImage | 145,482,885 | Auto-Claude-2.7.1-linux-x86_64.AppImage |
|
||||
| Auto-Claude-2.7.0-win32-x64.exe | 101,941,972 | Auto-Claude-2.7.1-win32-x64.exe |
|
||||
| checksums.sha256 | 718 | checksums.sha256 (with v2.7.1 filenames) |
|
||||
|
||||
### Issue Confirmed
|
||||
|
||||
**Problem:** All 7 platform artifacts attached to v2.7.1 have "2.7.0" in their filename instead of "2.7.1".
|
||||
|
||||
**Impact:**
|
||||
- Users downloading v2.7.1 are receiving v2.7.0 binaries
|
||||
- File naming does not match the release version
|
||||
- Checksums file likely references v2.7.0 filenames
|
||||
- Auto-update mechanisms may be confused by version mismatch
|
||||
|
||||
**Evidence:**
|
||||
```
|
||||
Files attached to v2.7.1:
|
||||
- Auto-Claude-2.7.0-darwin-arm64.dmg (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-darwin-arm64.zip (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-darwin-x64.dmg (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-darwin-x64.zip (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-linux-amd64.deb (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-linux-x86_64.AppImage (WRONG - should be 2.7.1)
|
||||
- Auto-Claude-2.7.0-win32-x64.exe (WRONG - should be 2.7.1)
|
||||
- checksums.sha256 (likely references wrong filenames)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Subtask 1-2: Comparison with v2.7.0 and Expected Naming
|
||||
|
||||
**Command:** `gh release view v2.7.0 --json assets -q '.assets[].name'`
|
||||
|
||||
#### v2.7.0 Release Analysis
|
||||
|
||||
**Release Metadata:**
|
||||
- Tag Name: v2.7.0
|
||||
- Release Name: v2.7.0
|
||||
- Published At: 2025-12-22T13:19:13Z
|
||||
- Target Commitish: main
|
||||
- Is Draft: false
|
||||
- Is Prerelease: false
|
||||
|
||||
**Critical Finding:** v2.7.0 has **NO assets attached** (empty assets array).
|
||||
|
||||
#### Release Timeline
|
||||
|
||||
| Release | Published At | Assets Count | Status |
|
||||
|---------|-------------|--------------|--------|
|
||||
| v2.7.0 | 2025-12-22T13:19:13Z | 0 | No files attached |
|
||||
| v2.7.1 | 2025-12-22T13:35:38Z | 8 | Wrong version in filenames |
|
||||
| v2.7.2 | 2025-12-22T13:52:51Z | ? | Draft release |
|
||||
|
||||
**Observation:** v2.7.0 was published 16 minutes before v2.7.1, but has no artifacts attached.
|
||||
|
||||
#### Checksums File Analysis
|
||||
|
||||
The `checksums.sha256` file attached to v2.7.1 contains:
|
||||
```
|
||||
0a0094ff3e52609665f6f0d6d54180dbfc592956f91ef2cdd94e43a61b6b24d2 ./Auto-Claude-2.7.0-darwin-arm64.dmg
|
||||
43b168f3073d60644bb111c8fa548369431dc448e67700ed526cb4cad61034e0 ./Auto-Claude-2.7.0-darwin-arm64.zip
|
||||
5150cbba934fbeb3d97309a493cc8ef3c035e9ec38b31f01382d628025f5c451 ./Auto-Claude-2.7.0-darwin-x64.dmg
|
||||
ea9139277290a8189f799d00bc3cd1aaf81a16e890ff90327eca01a4cce73e61 ./Auto-Claude-2.7.0-darwin-x64.zip
|
||||
078b2ba6a2594bf048932776dc31a45e59cd9cb23b34b2cf2f810f4101f04736 ./Auto-Claude-2.7.0-linux-amd64.deb
|
||||
1feb6b9be348a5e23238e009dbc1ce8b2788103a262cd856613332b3ab1711e9 ./Auto-Claude-2.7.0-linux-x86_64.AppImage
|
||||
25383314b3bc032ceaf8a8416d5383879ed351c906f03175b8533047647a612d ./Auto-Claude-2.7.0-win32-x64.exe
|
||||
```
|
||||
|
||||
**Issue:** Checksums file also references v2.7.0 filenames, confirming the build was run with v2.7.0 version.
|
||||
|
||||
#### Expected Naming Pattern (from release.yml)
|
||||
|
||||
Based on the release workflow analysis, artifacts follow this naming convention:
|
||||
```
|
||||
Auto-Claude-{version}-{platform}-{arch}.{ext}
|
||||
```
|
||||
|
||||
Where version comes from `package.json` in `auto-claude-ui/`.
|
||||
|
||||
**Expected v2.7.1 Artifacts:**
|
||||
| Expected Filename | Actual Filename (Wrong) |
|
||||
|-------------------|-------------------------|
|
||||
| Auto-Claude-2.7.1-darwin-arm64.dmg | Auto-Claude-2.7.0-darwin-arm64.dmg |
|
||||
| Auto-Claude-2.7.1-darwin-arm64.zip | Auto-Claude-2.7.0-darwin-arm64.zip |
|
||||
| Auto-Claude-2.7.1-darwin-x64.dmg | Auto-Claude-2.7.0-darwin-x64.dmg |
|
||||
| Auto-Claude-2.7.1-darwin-x64.zip | Auto-Claude-2.7.0-darwin-x64.zip |
|
||||
| Auto-Claude-2.7.1-linux-amd64.deb | Auto-Claude-2.7.0-linux-amd64.deb |
|
||||
| Auto-Claude-2.7.1-linux-x86_64.AppImage | Auto-Claude-2.7.0-linux-x86_64.AppImage |
|
||||
| Auto-Claude-2.7.1-win32-x64.exe | Auto-Claude-2.7.0-win32-x64.exe |
|
||||
| checksums.sha256 (v2.7.1 refs) | checksums.sha256 (v2.7.0 refs) |
|
||||
|
||||
#### Hypothesis
|
||||
|
||||
The evidence suggests one of the following scenarios:
|
||||
|
||||
1. **Tag/Version Mismatch:** The v2.7.1 tag may point to a commit where `package.json` still had version `2.7.0`
|
||||
2. **Workflow Re-run:** The v2.7.1 release may have been created by re-running the v2.7.0 workflow artifacts
|
||||
3. **Manual Upload Error:** Artifacts from v2.7.0 were manually attached to the v2.7.1 release
|
||||
4. **Artifact Caching:** Old workflow artifacts were incorrectly reused for v2.7.1
|
||||
|
||||
**Next step:** Check git tags and package.json versions to determine root cause.
|
||||
|
||||
---
|
||||
|
||||
### Subtask 1-3: Package.json Version and Git State Analysis
|
||||
|
||||
**Commands Used:**
|
||||
- `git show v2.7.1:auto-claude-ui/package.json | jq -r '.version'`
|
||||
- `git show v2.7.0:auto-claude-ui/package.json | jq -r '.version'`
|
||||
- `git log --oneline v2.7.0..v2.7.1`
|
||||
- `git rev-parse v2.7.1^{commit}`
|
||||
|
||||
#### Current Package.json State
|
||||
|
||||
| Location | Current Version |
|
||||
|----------|-----------------|
|
||||
| `auto-claude-ui/package.json` (HEAD) | 2.7.1 |
|
||||
|
||||
**Note:** The subtask referenced `apps/frontend/package.json`, but the actual path is `auto-claude-ui/package.json`.
|
||||
|
||||
#### Version at Git Tags
|
||||
|
||||
| Tag | Commit | package.json Version | Expected |
|
||||
|-----|--------|---------------------|----------|
|
||||
| v2.7.0 | `fe7290a8` | 2.6.5 | 2.7.0 |
|
||||
| v2.7.1 | `772a5006` | **2.7.0** ❌ | 2.7.1 |
|
||||
|
||||
#### Commit Timeline
|
||||
|
||||
```
|
||||
fc2075dd auto-claude: subtask-1-2 - Compare v2.7.1 artifacts...
|
||||
ff033a8e auto-claude: subtask-1-1 - List all files...
|
||||
8db71f3d Update version to 2.7.1 in package.json <-- Version bump (AFTER tag)
|
||||
772a5006 2.7.1 <-- v2.7.1 TAG placed here
|
||||
d23fcd86 Enhance VirusTotal scan error handling...
|
||||
...more commits...
|
||||
fe7290a8 Release v2.7.0... <-- v2.7.0 TAG placed here
|
||||
```
|
||||
|
||||
#### Root Cause Identified ✅
|
||||
|
||||
**Problem:** The `v2.7.1` tag was placed on commit `772a5006` BEFORE the `package.json` version was updated to `2.7.1`.
|
||||
|
||||
**Timeline of error:**
|
||||
1. Commit `772a5006` created with message "2.7.1" - tag `v2.7.1` placed here
|
||||
2. At this commit, `package.json` still contained version `2.7.0`
|
||||
3. The release workflow triggered on tag push, building with version `2.7.0` from `package.json`
|
||||
4. All artifacts named with `2.7.0` because that's what was in `package.json`
|
||||
5. Commit `8db71f3d` later updated `package.json` to `2.7.1` (but tag was already pushed)
|
||||
|
||||
**This is a "tag before version bump" error.**
|
||||
|
||||
The release workflow correctly read the version from `package.json`, but the tag was created before the version was bumped. The naming convention `${productName}-${version}-${platform}-${arch}.${ext}` correctly used version `2.7.0` because that's what was in `package.json` at the tagged commit.
|
||||
|
||||
#### Verification of Build Configuration
|
||||
|
||||
From `auto-claude-ui/package.json`:
|
||||
```json
|
||||
"build": {
|
||||
"artifactName": "${productName}-${version}-${platform}-${arch}.${ext}",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
This confirms the version is sourced from `package.json` during the build process.
|
||||
|
||||
#### Git State Summary
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Current Branch | `auto-claude/009-latest-release-v2-7-1-has-wrong-files-attached` |
|
||||
| Working Tree | Clean |
|
||||
| Current HEAD package.json | 2.7.1 |
|
||||
| v2.7.1 tag package.json | 2.7.0 ❌ |
|
||||
| v2.7.0 tag package.json | 2.6.5 ❌ |
|
||||
|
||||
**Note:** Both v2.7.0 and v2.7.1 tags have version mismatches in `package.json`, indicating a pattern of tagging before version bumping.
|
||||
|
||||
---
|
||||
|
||||
## Root Cause Summary
|
||||
|
||||
| Factor | Finding |
|
||||
|--------|---------|
|
||||
| What happened? | v2.7.1 tag placed before package.json version bump |
|
||||
| Why? | Incorrect release process: tag first, version bump second |
|
||||
| Impact | All 7 artifacts have v2.7.0 in filename |
|
||||
| Evidence | `git show v2.7.1:auto-claude-ui/package.json` shows version 2.7.0 |
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Root Cause Analysis
|
||||
|
||||
### Subtask 2-1: Inspect v2.7.1 Git Tag and Commit
|
||||
|
||||
**Commands Used:**
|
||||
```bash
|
||||
git log -1 v2.7.1 --format='%H %s %ci'
|
||||
git show v2.7.1 --format='Commit: %H%nAuthor: %an <%ae>%nDate: %ci%nMessage: %s' --no-patch
|
||||
git tag -l v2.7.1 -n1
|
||||
git cat-file -t v2.7.1
|
||||
git show v2.7.1:auto-claude-ui/package.json | head -10 | grep version
|
||||
```
|
||||
|
||||
#### Tag Details
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Tag Name | v2.7.1 |
|
||||
| Tag Type | Lightweight (commit reference, not annotated) |
|
||||
| Points To | `772a5006d45487b600ce4079bae1c98f9ccf6b2e` |
|
||||
|
||||
#### Tagged Commit Details
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Commit Hash | `772a5006d45487b600ce4079bae1c98f9ccf6b2e` |
|
||||
| Author | AndyMik90 <andre@mikalsenutvikling.no> |
|
||||
| Commit Date | 2025-12-22 14:35:30 +0100 |
|
||||
| Commit Message | `2.7.1` |
|
||||
| package.json Version | **2.7.0** (MISMATCH) |
|
||||
|
||||
#### Verification Output
|
||||
|
||||
```
|
||||
$ git log -1 v2.7.1 --format='%H %s %ci'
|
||||
772a5006d45487b600ce4079bae1c98f9ccf6b2e 2.7.1 2025-12-22 14:35:30 +0100
|
||||
|
||||
$ git show v2.7.1:auto-claude-ui/package.json | grep version
|
||||
"version": "2.7.0",
|
||||
```
|
||||
|
||||
#### Commit Context
|
||||
|
||||
```
|
||||
$ git log -3 --oneline v2.7.1
|
||||
772a5006 2.7.1 <-- v2.7.1 TAG HERE
|
||||
d23fcd86 Enhance VirusTotal scan error handling...
|
||||
326118bd Refactor macOS build workflow...
|
||||
```
|
||||
|
||||
#### Analysis
|
||||
|
||||
1. **Tag Type:** The tag is a lightweight tag (just a commit reference), not an annotated tag. This means there's no separate tag object with metadata, author, or message.
|
||||
|
||||
2. **Commit Message vs Version:** The commit message says "2.7.1" but the `package.json` at this commit still contains version `2.7.0`. This is the source of the mismatch.
|
||||
|
||||
3. **Release Workflow Behavior:** When the GitHub release workflow triggered on tag push `v2.7.1`:
|
||||
- It checked out commit `772a5006`
|
||||
- It read version from `auto-claude-ui/package.json` which was `2.7.0`
|
||||
- It built artifacts with `2.7.0` in the filename
|
||||
- It uploaded these incorrectly-versioned artifacts to the v2.7.1 release
|
||||
|
||||
4. **Timeline Confirmation:**
|
||||
- Tag created: 2025-12-22 14:35:30 +0100
|
||||
- Release published: 2025-12-22T13:35:38Z (same time, UTC)
|
||||
- Version bump commit `8db71f3d` happened AFTER this
|
||||
|
||||
#### Root Cause Confirmed
|
||||
|
||||
The v2.7.1 tag points to a commit where `package.json` still had version `2.7.0`. This is a **"tag before version bump"** error in the release process.
|
||||
|
||||
The correct sequence should have been:
|
||||
1. First: Bump package.json version to 2.7.1
|
||||
2. Second: Commit the version bump
|
||||
3. Third: Create and push the v2.7.1 tag
|
||||
|
||||
What actually happened:
|
||||
1. Created tag v2.7.1 on commit with package.json version 2.7.0
|
||||
2. Workflow triggered and built with wrong version
|
||||
3. Version bump to 2.7.1 committed afterwards (too late)
|
||||
|
||||
---
|
||||
|
||||
### Subtask 2-2: GitHub Actions Workflow Run Analysis
|
||||
|
||||
**Commands Used:**
|
||||
```bash
|
||||
gh run list --workflow=release.yml --limit=20
|
||||
gh run view 20433472030 --json conclusion,status,headSha,event,jobs
|
||||
gh run view 20433472034 --json conclusion,status,headSha,jobs # Validate Version workflow
|
||||
```
|
||||
|
||||
#### Release Workflow Run Details
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Run ID | 20433472030 |
|
||||
| Status | Completed |
|
||||
| Conclusion | **success** |
|
||||
| Event | push (tag v2.7.1) |
|
||||
| Head SHA | `772a5006d45487b600ce4079bae1c98f9ccf6b2e` |
|
||||
| Created At | 2025-12-22T13:35:39Z |
|
||||
| Updated At | 2025-12-22T13:53:02Z |
|
||||
| Total Duration | ~17 minutes |
|
||||
|
||||
#### Build Jobs Summary
|
||||
|
||||
| Job | Status | Duration | Started | Completed |
|
||||
|-----|--------|----------|---------|-----------|
|
||||
| build-linux | ✅ success | ~2.5 min | 13:35:42Z | 13:38:15Z |
|
||||
| build-windows | ✅ success | ~4.5 min | 13:35:41Z | 13:40:11Z |
|
||||
| build-macos-intel | ✅ success | ~7 min | 13:35:42Z | 13:42:52Z |
|
||||
| build-macos-arm64 | ✅ success | ~5.5 min | 13:35:42Z | 13:41:12Z |
|
||||
| create-release | ✅ success | ~10 min | 13:42:55Z | 13:53:01Z |
|
||||
|
||||
#### Create-Release Job Steps
|
||||
|
||||
| Step | Conclusion |
|
||||
|------|------------|
|
||||
| Set up job | ✅ success |
|
||||
| Run actions/checkout@v4 | ✅ success |
|
||||
| Download all artifacts | ✅ success |
|
||||
| Flatten and validate artifacts | ✅ success |
|
||||
| Generate checksums | ✅ success |
|
||||
| Scan with VirusTotal | ✅ success |
|
||||
| Dry run summary | ⏭️ skipped |
|
||||
| Generate changelog | ✅ success |
|
||||
| Create Release | ✅ success |
|
||||
|
||||
**Workflow Analysis:** The release workflow executed **successfully** - all build jobs and the release creation completed without errors. The workflow correctly:
|
||||
1. Checked out commit `772a5006d45487b600ce4079bae1c98f9ccf6b2e`
|
||||
2. Built artifacts for all platforms (Linux, Windows, macOS Intel, macOS ARM64)
|
||||
3. Generated checksums
|
||||
4. Ran VirusTotal scans
|
||||
5. Created the GitHub release with artifacts
|
||||
|
||||
**Key Finding:** The workflow operated as designed. The problem was the **input** (source code at tagged commit), not the **workflow logic**.
|
||||
|
||||
---
|
||||
|
||||
#### 🚨 CRITICAL: Validate Version Workflow FAILED
|
||||
|
||||
**Run ID:** 20433472034
|
||||
**Conclusion:** ❌ **FAILURE**
|
||||
|
||||
| Step | Conclusion |
|
||||
|------|------------|
|
||||
| Set up job | ✅ success |
|
||||
| Checkout | ✅ success |
|
||||
| Extract version from tag | ✅ success |
|
||||
| Extract version from package.json | ✅ success |
|
||||
| **Compare versions** | ❌ **FAILURE** |
|
||||
| Version validation result | ⏭️ skipped |
|
||||
|
||||
**What Happened:**
|
||||
1. The `validate-version.yml` workflow triggered on the v2.7.1 tag push
|
||||
2. It correctly detected that:
|
||||
- Tag version: `2.7.1`
|
||||
- package.json version: `2.7.0`
|
||||
3. It **FAILED** with an error because versions didn't match
|
||||
|
||||
**Why Didn't This Stop the Release?**
|
||||
|
||||
The `validate-version.yml` and `release.yml` workflows are **independent**:
|
||||
- Both trigger on `push: tags: - 'v*'`
|
||||
- They run in **parallel**, not sequentially
|
||||
- The release workflow has **no dependency** on the validation workflow
|
||||
- Even though validation failed, the release proceeded and succeeded
|
||||
|
||||
**Validation Workflow (from `.github/workflows/validate-version.yml`):**
|
||||
```yaml
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
```
|
||||
|
||||
**Expected Output from Failed Validation:**
|
||||
```
|
||||
❌ ERROR: Version mismatch detected!
|
||||
|
||||
The version in package.json (2.7.0) does not match
|
||||
the git tag version (2.7.1).
|
||||
|
||||
To fix this:
|
||||
1. Delete this tag: git tag -d v2.7.1
|
||||
2. Update package.json version to 2.7.1
|
||||
3. Commit the change
|
||||
4. Recreate the tag: git tag -a v2.7.1 -m 'Release v2.7.1'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### Workflow Architecture Issue
|
||||
|
||||
```
|
||||
Tag Push (v2.7.1)
|
||||
│
|
||||
├──────────────────────────────────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────────┐ ┌──────────────────┐
|
||||
│ validate-version │ │ release │
|
||||
│ ❌ FAILED │ │ ✅ SUCCESS │
|
||||
│ (detected error) │ ← No │ (built wrong │
|
||||
│ │ link → │ version) │
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
**Problem:** The validation workflow runs but cannot **block** the release workflow.
|
||||
|
||||
---
|
||||
|
||||
#### Other v2.7.1 Workflows
|
||||
|
||||
| Workflow | Run ID | Conclusion | Notes |
|
||||
|----------|--------|------------|-------|
|
||||
| Release | 20433472030 | ✅ success | Built and released v2.7.0 files |
|
||||
| Validate Version | 20433472034 | ❌ failure | Detected mismatch but couldn't stop release |
|
||||
| Discord Release Notification | 20433472029 | ✅ success | Notified Discord about "v2.7.1" |
|
||||
| Test on Tag | 20433472046 | ✅ success | Tests passed |
|
||||
| Build Native Module Prebuilds | 20433472017 | ❌ failure | Separate prebuilt module issue |
|
||||
|
||||
---
|
||||
|
||||
#### Root Cause Confirmation
|
||||
|
||||
The GitHub Actions analysis confirms:
|
||||
|
||||
1. **The release workflow worked correctly** - it built exactly what was in the source code at the tagged commit
|
||||
2. **The validation workflow detected the problem** - it correctly identified the version mismatch
|
||||
3. **The workflows are not connected** - validation failure could not prevent the release
|
||||
4. **The artifacts are from the right commit but wrong version** - v2.7.1 release contains v2.7.0 artifacts because that's what package.json said at commit `772a5006`
|
||||
|
||||
---
|
||||
|
||||
### Subtask 2-3: Root Cause Statement and Fix Options
|
||||
|
||||
#### Root Cause Statement
|
||||
|
||||
**Summary:** The v2.7.1 release contains v2.7.0 artifacts because the git tag was created BEFORE the `package.json` version was updated.
|
||||
|
||||
**Root Cause:** "Tag Before Version Bump" Error
|
||||
|
||||
| Factor | Details |
|
||||
|--------|---------|
|
||||
| **What happened** | The `v2.7.1` git tag was placed on commit `772a5006` which still had `package.json` version `2.7.0` |
|
||||
| **Why it happened** | Incorrect release procedure: tag was created before version bump was committed |
|
||||
| **How it propagated** | The release workflow correctly built from the tagged commit, reading version `2.7.0` from `package.json` |
|
||||
| **Why it wasn't caught** | The `validate-version.yml` workflow detected the mismatch but runs in parallel with `release.yml` and cannot block it |
|
||||
|
||||
**Evidence Chain:**
|
||||
1. `git show v2.7.1:auto-claude-ui/package.json` → version `2.7.0`
|
||||
2. Release workflow run #20433472030 → built from commit `772a5006` → success
|
||||
3. Validate-version workflow run #20433472034 → detected mismatch → **FAILED** (but couldn't stop release)
|
||||
4. All 7 artifacts named `Auto-Claude-2.7.0-*` instead of `Auto-Claude-2.7.1-*`
|
||||
|
||||
**Contributing Factors:**
|
||||
- Lightweight tag (no metadata) - easier to create on wrong commit
|
||||
- No pre-tag validation hook or script
|
||||
- Independent parallel workflows with no blocking dependency
|
||||
- Version in `package.json` is the single source of truth for artifact naming
|
||||
|
||||
---
|
||||
|
||||
#### Fix Options
|
||||
|
||||
##### Option A: Recreate v2.7.1 Tag and Release (RECOMMENDED)
|
||||
|
||||
**Description:** Delete the current v2.7.1 tag and release, then create a new tag on a commit where `package.json` has version `2.7.1`.
|
||||
|
||||
**Steps:**
|
||||
1. Delete the v2.7.1 GitHub release: `gh release delete v2.7.1 --cleanup-tag --yes`
|
||||
2. Identify correct commit: `git log --oneline | grep -A1 "Update version to 2.7.1"`
|
||||
3. Create new tag at correct commit: `git tag v2.7.1 8db71f3d && git push origin v2.7.1`
|
||||
4. Release workflow will trigger automatically with correct version
|
||||
5. Verify new artifacts have `2.7.1` in filenames
|
||||
|
||||
**Pros:**
|
||||
- ✅ Users get the correct version they expect (v2.7.1)
|
||||
- ✅ Maintains clean version history
|
||||
- ✅ Checksums will match the correct filenames
|
||||
- ✅ Auto-update mechanisms will work correctly
|
||||
- ✅ No need to update documentation or links
|
||||
|
||||
**Cons:**
|
||||
- ⚠️ Users who already downloaded v2.7.1 (v2.7.0 files) may be confused
|
||||
- ⚠️ Requires deleting and recreating the release
|
||||
- ⚠️ Brief window where v2.7.1 doesn't exist
|
||||
|
||||
**Risk Level:** Medium - temporary unavailability, but correct outcome
|
||||
|
||||
---
|
||||
|
||||
##### Option B: Publish v2.7.2 with Correct Files
|
||||
|
||||
**Description:** Leave v2.7.1 as-is (deprecated) and publish v2.7.2 with the correct build.
|
||||
|
||||
**Steps:**
|
||||
1. Mark v2.7.1 as deprecated in release notes
|
||||
2. Bump package.json to 2.7.2
|
||||
3. Create and push v2.7.2 tag
|
||||
4. Publish v2.7.2 release with correct artifacts
|
||||
5. Update download links/documentation to point to v2.7.2
|
||||
|
||||
**Pros:**
|
||||
- ✅ No disruption to existing v2.7.1 downloads
|
||||
- ✅ Preserves release history for audit trail
|
||||
- ✅ Clear indication that v2.7.2 supersedes v2.7.1
|
||||
|
||||
**Cons:**
|
||||
- ❌ Version number gap in release history (no "real" 2.7.1)
|
||||
- ❌ Confusing version progression for users
|
||||
- ❌ Requires updating all download links and documentation
|
||||
- ❌ Users may still download deprecated v2.7.1
|
||||
|
||||
**Risk Level:** Low - no deletion, but messy version history
|
||||
|
||||
---
|
||||
|
||||
##### Option C: Manual File Upload with --clobber
|
||||
|
||||
**Description:** Build correct v2.7.1 artifacts locally and upload to replace existing files.
|
||||
|
||||
**Steps:**
|
||||
1. Checkout commit with package.json version 2.7.1
|
||||
2. Build all platform artifacts locally (or trigger workflow to download)
|
||||
3. Delete existing assets: `gh release delete-asset v2.7.1 Auto-Claude-2.7.0-* --yes`
|
||||
4. Upload correct files: `gh release upload v2.7.1 ./dist/* --clobber`
|
||||
5. Update checksums file
|
||||
|
||||
**Pros:**
|
||||
- ✅ Keeps same release and tag
|
||||
- ✅ No temporary unavailability window
|
||||
|
||||
**Cons:**
|
||||
- ❌ Complex manual process prone to errors
|
||||
- ❌ Requires local build environment for all platforms (macOS, Windows, Linux)
|
||||
- ❌ May not match workflow-built artifacts exactly
|
||||
- ❌ Code signing could be different than CI
|
||||
- ❌ Does not address underlying tag/commit mismatch
|
||||
|
||||
**Risk Level:** High - manual process, potential signing issues
|
||||
|
||||
---
|
||||
|
||||
#### Recommendation
|
||||
|
||||
**Recommended Option: A - Recreate v2.7.1 Tag and Release**
|
||||
|
||||
**Rationale:**
|
||||
1. **Correctness**: The tag should point to a commit where the codebase reflects v2.7.1
|
||||
2. **Automation**: Letting the release workflow rebuild ensures identical CI artifacts
|
||||
3. **User Experience**: Users expect v2.7.1 to contain 2.7.1 code and files
|
||||
4. **Maintainability**: Clean version history is easier to manage long-term
|
||||
5. **Auto-updates**: Electron auto-updater relies on version matching
|
||||
|
||||
**Implementation Priority:**
|
||||
1. First: Fix v2.7.1 release (Option A)
|
||||
2. Then: Update workflow to prevent recurrence (make validation blocking)
|
||||
|
||||
---
|
||||
|
||||
#### Process Improvements Required
|
||||
|
||||
Regardless of fix option chosen, these changes should be implemented to prevent recurrence:
|
||||
|
||||
| Improvement | Priority | Description |
|
||||
|-------------|----------|-------------|
|
||||
| Make validation blocking | HIGH | Modify `release.yml` to depend on `validate-version.yml` passing |
|
||||
| Add pre-tag script | MEDIUM | Create script that validates version before allowing tag creation |
|
||||
| Use annotated tags | LOW | Annotated tags include metadata and require explicit message |
|
||||
| Document release procedure | MEDIUM | Create runbook for correct release process |
|
||||
|
||||
**Workflow Architecture Change:**
|
||||
```yaml
|
||||
# Before (parallel, independent):
|
||||
Tag Push → release.yml (runs)
|
||||
→ validate-version.yml (runs, but can't block)
|
||||
|
||||
# After (sequential, dependent):
|
||||
Tag Push → validate-version.yml (runs first)
|
||||
↓ success required
|
||||
→ release.yml (only runs if validation passes)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ~~**Subtask 1-1:** Verify v2.7.1 assets~~ ✅ Complete
|
||||
2. ~~**Subtask 1-2:** Compare with v2.7.0 release and verify expected naming pattern~~ ✅ Complete
|
||||
3. ~~**Subtask 1-3:** Check package.json version and git state~~ ✅ Complete - ROOT CAUSE IDENTIFIED
|
||||
4. ~~**Subtask 2-1:** Inspect v2.7.1 git tag and commit~~ ✅ Complete - TAG/COMMIT MISMATCH CONFIRMED
|
||||
5. ~~**Subtask 2-2:** Check release workflow runs~~ ✅ Complete - VALIDATION DETECTED BUT COULDN'T STOP RELEASE
|
||||
6. ~~**Subtask 2-3:** Document fix options~~ ✅ Complete - 3 OPTIONS DOCUMENTED, OPTION A RECOMMENDED
|
||||
7. **Phase 3:** Implement fix (re-upload correct files or publish v2.7.2)
|
||||
8. **Phase 4:** Add validation to prevent future occurrences
|
||||
|
||||
---
|
||||
|
||||
## Status: Phase 2 Complete ✅
|
||||
|
||||
**Root Cause:** The v2.7.1 tag was created on commit `772a5006` which still had `package.json` version `2.7.0`. The validation workflow detected this but couldn't stop the release workflow.
|
||||
|
||||
**Key Findings from Workflow Analysis:**
|
||||
- Release workflow (ID: 20433472030): ✅ Success - correctly built from tagged commit
|
||||
- Validate Version workflow (ID: 20433472034): ❌ Failed - correctly detected version mismatch
|
||||
- The workflows run in parallel with no dependency relationship
|
||||
|
||||
**Recommended Fix:** Option A - Delete v2.7.1 tag and release, recreate tag at commit `8db71f3d` where `package.json` has version `2.7.1`, let workflow rebuild.
|
||||
|
||||
**Process Improvement Needed:**
|
||||
- Version bump should ALWAYS happen BEFORE tagging
|
||||
- **Make release.yml depend on validate-version.yml** using `needs:` or combine them
|
||||
- Consider using a reusable workflow or job dependency to enforce validation
|
||||
@@ -35,10 +35,10 @@ Download the latest release for your platform from [GitHub Releases](https://git
|
||||
|
||||
| Platform | Download |
|
||||
|----------|----------|
|
||||
| **macOS (Apple Silicon M1-M4)** | `Auto-Claude-X.X.X-arm64.dmg` |
|
||||
| **macOS (Intel)** | `Auto-Claude-X.X.X-x64.dmg` |
|
||||
| **Windows** | `Auto-Claude-X.X.X.exe` |
|
||||
| **Linux** | `Auto-Claude-X.X.X.AppImage` or `.deb` |
|
||||
| **macOS (Apple Silicon M1-M4)** | `*-arm64.dmg` |
|
||||
| **macOS (Intel)** | `*-x64.dmg` |
|
||||
| **Windows** | `*.exe` |
|
||||
| **Linux** | `*.AppImage` or `*.deb` |
|
||||
|
||||
> **Not sure which Mac?** Click the Apple menu () > "About This Mac". Look for "Chip" - M1/M2/M3/M4 = Apple Silicon, otherwise Intel.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "auto-claude-ui",
|
||||
"version": "2.6.5",
|
||||
"version": "2.7.1",
|
||||
"description": "Desktop UI for Auto Claude autonomous coding framework",
|
||||
"homepage": "https://github.com/AndyMik90/Auto-Claude",
|
||||
"repository": {
|
||||
|
||||
Reference in New Issue
Block a user