Thank you for your interest in contributing to Tusk! This document provides guidelines and information for contributors.
Please be respectful and constructive in all interactions. We welcome contributors of all backgrounds and experience levels.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/tusk.git cd tusk - Add the upstream remote:
git remote add upstream https://github.com/hwkd/tusk.git
- Create a branch for your work:
git checkout -b feature/your-feature-name
- Go 1.23 or later
- golangci-lint (for linting)
go build -o tusk ./cmd/tuskgo test ./...With coverage:
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.outgolangci-lint run- Ensure all tests pass
- Run the linter and fix any issues
- Update documentation if needed
- Write a clear commit message
- Push to your fork and create a pull request
We follow the Conventional Commits specification.
<type>(<scope>): <subject>
[optional body]
[optional footer(s)]
feat:A new featurefix:A bug fixdocs:Documentation only changesstyle:Changes that do not affect the meaning of the code (formatting, etc.)refactor:A code change that neither fixes a bug nor adds a featureperf:A code change that improves performancetest:Adding missing tests or correcting existing testsbuild:Changes that affect the build system or external dependenciesci:Changes to CI configuration files and scriptschore:Other changes that don't modify src or test files
The scope should be the name of the package or area affected:
auth- Authentication related changesconfig- Configuration handlinggoogleapi- Google Tasks API clientui- User interface/formattingcmd- CLI commandsdeps- Dependency updates
- Use the imperative, present tense: "add" not "added" nor "adds"
- Don't capitalize the first letter
- No period (.) at the end
- Limit to 50 characters
feat(cmd): add prefix matching for task operations
fix(auth): handle token refresh errors gracefully
docs: update README with shell completion instructions
refactor(googleapi): simplify task list pagination
test(ui): add formatting tests for task output
chore(deps): update cobra to v1.8.1
Indicate breaking changes with ! after the type/scope or with a BREAKING CHANGE: footer:
feat(cmd)!: change default output format to JSON
BREAKING CHANGE: The default output format is now JSON instead of plain text.
- Keep changes focused and atomic
- Include tests for new functionality
- Update README.md if adding new features
- Reference any related issues
tusk/
├── cmd/tusk/ # CLI commands
│ ├── main.go # Entry point
│ ├── root.go # Root command
│ ├── auth.go # Authentication commands
│ ├── lists.go # Task list commands
│ ├── tasks.go # Task commands
│ └── aliases.go # Command aliases
├── internal/ # Internal packages
│ ├── auth/ # OAuth2 authentication
│ ├── config/ # Configuration management
│ ├── googleapi/ # Google Tasks API client
│ └── ui/ # Output formatting
├── docs/ # Documentation
└── .github/ # GitHub workflows
When reporting issues, please include:
- Your operating system and version
- Go version (
go version) - Steps to reproduce the issue
- Expected vs actual behavior
- Any error messages or logs
Feature requests are welcome! Please:
- Check existing issues to avoid duplicates
- Describe the use case clearly
- Explain why the feature would be valuable
Feel free to open an issue for questions or discussions.
By contributing, you agree that your contributions will be licensed under the MIT License.