Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 2 additions & 1 deletion .cz.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
[tool.commitizen]
name = "cz_conventional_commits"
version = "0.1.0"
version = "0.0.0"
tag_format = "v$version"
version_files = [
"package.json:version",
"src-tauri/Cargo.toml:version",
"src-tauri/tauri.conf.json:version",
"src/components/Settings.tsx:APP_VERSION",
]
update_changelog_on_bump = true
1 change: 0 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ name: CI

on:
pull_request:
branches: [main]

jobs:
check:
Expand Down
52 changes: 48 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ jobs:
outputs:
bumped: ${{ steps.bump.outputs.bumped }}
version: ${{ steps.bump.outputs.version }}
pre_bumped: ${{ steps.bump.outputs.pre_bumped }}
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -23,20 +24,53 @@ jobs:

- run: pip install commitizen

- run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- id: bump
run: |
if cz bump --dry-run 2>/dev/null; then
CURRENT=$(python3 -c "
import tomllib
with open('.cz.toml', 'rb') as f:
print(tomllib.load(f)['tool']['commitizen']['version'])
")
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
LATEST_VERSION=${LATEST_TAG#v}

if [ -z "$LATEST_TAG" ]; then
# First release — no existing tags
if [ "$CURRENT" != "0.0.0" ]; then
echo "First release: $CURRENT (pre-bumped, no existing tags)"
echo "bumped=true" >> "$GITHUB_OUTPUT"
echo "version=$CURRENT" >> "$GITHUB_OUTPUT"
echo "pre_bumped=true" >> "$GITHUB_OUTPUT"
else
cz bump --yes --increment MINOR
VERSION=$(cz version --project)
echo "First release: $VERSION"
echo "bumped=true" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "pre_bumped=false" >> "$GITHUB_OUTPUT"
fi
elif [ "$CURRENT" != "$LATEST_VERSION" ]; then
echo "Version already bumped to $CURRENT (latest tag: $LATEST_TAG)"
echo "bumped=true" >> "$GITHUB_OUTPUT"
echo "version=$CURRENT" >> "$GITHUB_OUTPUT"
echo "pre_bumped=true" >> "$GITHUB_OUTPUT"
elif cz bump --yes --dry-run 2>/dev/null; then
cz bump --yes
VERSION=$(cz version --project)
echo "bumped=true" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "pre_bumped=false" >> "$GITHUB_OUTPUT"
else
echo "No version bump needed"
echo "bumped=false" >> "$GITHUB_OUTPUT"
fi

- if: steps.bump.outputs.bumped == 'true'
run: |
# Cargo.lock needs regenerating after Cargo.toml version bump
cd src-tauri && cargo update --workspace && cd ..

- if: steps.bump.outputs.bumped == 'true'
Expand All @@ -50,6 +84,7 @@ jobs:
src-tauri/Cargo.toml
src-tauri/Cargo.lock
src-tauri/tauri.conf.json
src/components/Settings.tsx

build:
needs: bump
Expand Down Expand Up @@ -122,13 +157,22 @@ jobs:
name: bumped-source

- name: Commit version bump and tag
if: needs.bump.outputs.pre_bumped != 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "bump: v${{ needs.bump.outputs.version }}"
git tag "v${{ needs.bump.outputs.version }}"
git push origin main --follow-tags
git push origin HEAD --follow-tags

- name: Tag pre-bumped version
if: needs.bump.outputs.pre_bumped == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag "v${{ needs.bump.outputs.version }}"
git push origin "v${{ needs.bump.outputs.version }}"

- uses: actions/download-artifact@v4
with:
Expand Down Expand Up @@ -169,4 +213,4 @@ jobs:
git add -A
git commit -m "Update claude-manager to v${VERSION}" || true
git push || true
fi
fi
9 changes: 6 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,12 @@ src-tauri/src/metadata.rs Local metadata store (rename, archive, delete)

## Linting

- Frontend: `bunx biome check` (0 errors, warnings acceptable for exhaustive deps and a11y click handlers)
- Backend: `cargo fmt -- --check && cargo clippy`
- CI runs both on PR
- `bun run check` — runs full CI pipeline: `tsc`, `biome check`, `vitest`, `cargo fmt --check`, `cargo clippy`
- `bun run fmt` — auto-format both frontend (biome) and backend (rustfmt)
- `bun run clippy` — run clippy standalone
- Frontend: `bunx biome check` (0 errors, 0 warnings)
- Backend: `cargo fmt -- --check && cargo clippy -D warnings`
- CI runs on all PRs and must pass before merge

## Documentation

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ brew install --cask claude-manager
curl -fsSL https://raw.githubusercontent.com/JeffreyWardman/claude-manager/main/install.sh | sh
```

On macOS and Linux, both install methods also create `claude-manager` and `cmanager` CLI commands so you can launch from the terminal.

## Usage

### Keyboard shortcuts
Expand Down
2 changes: 1 addition & 1 deletion biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"a11y": {
"useKeyWithClickEvents": "warn",
"noStaticElementInteractions": "warn",
"useSemanticElements": "warn",
"useSemanticElements": "off",
"useValidAnchor": "warn",
"noSvgWithoutTitle": "off"
}
Expand Down
12 changes: 11 additions & 1 deletion install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,21 @@ if [ "$PLATFORM" = "macos" ]; then
curl -fSL -o "$DMG_PATH" "$URL"

echo "Installing to /Applications..."
MOUNT=$(hdiutil attach "$DMG_PATH" -nobrowse -quiet | tail -1 | awk '{print $3}')
MOUNT=$(hdiutil attach "$DMG_PATH" -nobrowse -quiet | tail -1 | sed 's/.*\(\/Volumes\/.*\)/\1/')
if [ -d "/Applications/$APP_NAME.app" ]; then
rm -rf "/Applications/$APP_NAME.app"
fi
cp -R "$MOUNT/$APP_NAME.app" /Applications/
hdiutil detach "$MOUNT" -quiet
rm -rf "$TMPDIR"

# Create CLI symlinks
mkdir -p /usr/local/bin
ln -sf "/Applications/$APP_NAME.app/Contents/MacOS/$APP_NAME" /usr/local/bin/claude-manager
ln -sf "/Applications/$APP_NAME.app/Contents/MacOS/$APP_NAME" /usr/local/bin/cmanager

echo "Installed $APP_NAME $VERSION to /Applications/$APP_NAME.app"
echo "CLI commands available: claude-manager, cmanager"

elif [ "$PLATFORM" = "linux" ]; then
if [ "$ARCH_TAG" != "x64" ]; then
Expand All @@ -72,7 +78,9 @@ elif [ "$PLATFORM" = "linux" ]; then
sudo dpkg -i "$DEB_PATH" || sudo apt-get install -f -y
rm -rf "$TMPDIR"

sudo ln -sf /usr/bin/claude-manager /usr/bin/cmanager
echo "Installed $APP_NAME $VERSION"
echo "CLI commands available: claude-manager, cmanager"
else
APPIMAGE="${APP_NAME}_${VERSION}_amd64.AppImage"
URL="$BASE_URL/$APPIMAGE"
Expand All @@ -83,7 +91,9 @@ elif [ "$PLATFORM" = "linux" ]; then
curl -fSL -o "$INSTALL_DIR/$APP_NAME" "$URL"
chmod +x "$INSTALL_DIR/$APP_NAME"

ln -sf "$INSTALL_DIR/$APP_NAME" "$INSTALL_DIR/cmanager"
echo "Installed $APP_NAME $VERSION to $INSTALL_DIR/$APP_NAME"
echo "CLI commands available: claude-manager, cmanager"
echo "Make sure $INSTALL_DIR is in your PATH"
fi
fi
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "claude-manager",
"private": true,
"version": "0.1.0",
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand All @@ -13,7 +13,9 @@
"test:watch": "vitest",
"lint": "biome check .",
"format": "biome check --write .",
"check": "tsc --noEmit && biome check . && vitest run"
"check": "tsc --noEmit && biome check . && vitest run && cargo fmt --manifest-path src-tauri/Cargo.toml -- --check && cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings",
"fmt": "biome check --write . && cargo fmt --manifest-path src-tauri/Cargo.toml",
"clippy": "cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings"
},
"dependencies": {
"@tauri-apps/api": "^2",
Expand Down
Loading
Loading