Commit messages follow Conventional Commits format:
[optional scope]: <description>
[optional body]
[optional footer(s)]
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
- Add
!after type/scope for breaking changes or includeBREAKING CHANGE:in the footer - Keep descriptions concise, imperative, lowercase, and without a trailing period
- Reference issues/PRs in the footer when applicable
AI agents must disclose what tool and model they are using in the "Assisted-by" commit footer:
Assisted-by: [Model Name] via [Tool Name]
Example:
Assisted-by: GLM 4.6 via Claude Code
- Include a clear description of changes
- Reference any related issues
- Pass CI (
npm testfor JavaScript) - Optionally add screenshots for UI changes
- Secrets never belong in the repo; use environment variables or the
secretsdirectory (ignored by Git) - Run
npm auditperiodically for JavaScript packages and address reported vulnerabilities
This is a monorepo for Tigris object storage SDKs, containing:
Located in the root packages/ directory as npm workspaces:
-
@tigrisdata/storage(packages/storage) - Tigris Storage SDK- Built with TypeScript
- Uses AWS SDK v3 for S3 compatibility
- Exports both server and client modules
- Build:
npm run build:storage - Test:
npm run test --workspace=@tigrisdata/storage
-
@tigrisdata/cli(packages/cli) - Command-line interface- Built with TypeScript using Commander.js
- Depends on
@tigrisdata/storage - Build:
npm run build:cli
Root-level npm scripts:
npm run build- Build all packagesnpm test- Run all testsnpm run lint- Lint all packagesnpm run format- Format all packages with Prettiernpm run clean- Clean build artifacts
- Install dependencies:
npm install - Build packages:
npm run buildornpm run build:storage/npm run build:cli - Run tests:
npm test - Format code:
npm run format - Lint code:
npm run lint
- JavaScript: Uses Vitest as the test runner
- Always run tests before committing changes
- Ensure all tests pass in CI before merging
- Releases are automated using semantic-release
- Commits to
maintrigger automatic releases - Pre-releases are done on the
nextbranch - JavaScript packages follow semantic versioning
- The project uses Husky for Git hooks (commitlint, etc.)
- Commitizen is configured for conventional commits
- ESLint and Prettier are used for JavaScript/TypeScript code quality