|
|
||
|---|---|---|
| .github | ||
| public | ||
| src | ||
| src-tauri | ||
| .gitattributes | ||
| .gitignore | ||
| .release-please-manifest.json | ||
| .trivyignore | ||
| CHANGELOG.md | ||
| config.json | ||
| index.html | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| release-please-config.json | ||
| SECURITY.md | ||
| tailwind.config.js | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
Hackatime Desktop
Desktop app for Hackatime. Built with Tauri, Vue 3, TypeScript, and Rust.
🛠️ Tech Stack
- Frontend: Vue 3, TypeScript, Tailwind CSS, Chart.js
- Backend: Rust (Tauri v2)
- Build Tools: Vite, pnpm
- CI/CD: GitHub Actions with Release Please
📦 Installation
Build from Source
Prerequisites
- Node.js (v18 or higher)
- pnpm (v9.15.0 or higher)
- Rust (latest stable)
- Platform-specific dependencies:
- macOS: Xcode Command Line Tools
- Linux: See Tauri prerequisites
- Windows: See Tauri prerequisites
Build Steps
# Clone the repository
git clone https://github.com/hackclub/hackatime-desktop.git
cd hackatime-desktop
# Install dependencies
pnpm install
# Run in development mode
pnpm tauri dev
# Build binaries
pnpm tauri build
🤝 Contributing
We welcome contributions! Please follow the guidelines below to ensure smooth collaboration.
Commit Message Convention
This project uses Conventional Commits for automated versioning and changelog generation via Release Please.
Commit Format
<type>: <description>
[optional body]
[optional footer(s)]
Types
Use these commit types for Release Please to automatically detect changes:
-
feat:- A new featuregit commit -m "feat: add Discord RPC integration" -
fix:- A bug fixgit commit -m "fix: resolve authentication timeout issue" -
chore:- Maintenance tasks, CI/CD, dependenciesgit commit -m "chore: update dependencies" git commit -m "chore(ci): update release workflow"
Breaking Changes
For breaking changes that require a major version bump (e.g., 1.0.0 → 2.0.0), add BREAKING CHANGE: in the commit body or use ! after the type:
git commit -m "feat!: migrate to new API v2" -m "BREAKING CHANGE: requires new authentication flow"
Workflow
-
Fork the repository
-
Create a feature branch:
git checkout -b feat/my-new-feature # or git checkout -b fix/bug-description -
Make your changes and commit using conventional commits:
git add . git commit -m "feat: add new statistics chart" -
Push to your fork:
git push origin feat/my-new-feature -
Create a Pull Request to the
mainbranch
🔄 How Release Please Works
This project uses Release Please for automated releases. Here's how it works:
Automated Release Process
-
Commit with Conventional Commits - When you merge commits to
mainusing the conventional commit format (feat:,fix:,chore:) -
Release PR Creation - Release Please automatically:
- Analyzes commit messages since the last release
- Determines the next version number based on semantic versioning:
feat:→ minor version bump (1.0.0 → 1.1.0)fix:→ patch version bump (1.0.0 → 1.0.1)- Breaking changes → major version bump (1.0.0 → 2.0.0)
- Creates/updates a Release PR with:
- Updated
CHANGELOG.md - Bumped version in
package.json - Bumped version in
src-tauri/tauri.conf.json
- Updated
-
Release PR Review - The automatically created PR will show:
- All changes since the last release
- New version number
- Updated changelog
-
Merge to Release - When the Release PR is merged to
main:- A new GitHub Release is created with the version tag (e.g.,
app-v1.2.0) - The release workflow builds binaries for all platforms
- Binaries are automatically uploaded to the S3 release bucket
- The auto-updater manifest is updated for in-app updates
- A new GitHub Release is created with the version tag (e.g.,
🐛 Issues & Support
Found a bug or have a feature request? Please open an issue on the GitHub Issues page.
Made with ❤️ by Hack Club