docs: add contribution guidelines and code owners
- Add CONTRIBUTING.md with development workflow - Add CODEOWNERS for automatic review requests - Document coding standards for Go and TypeScript - Add commit message guidelines (Conventional Commits) - Add PR process documentation Story: E1-001 - Project Repository Setup (Final)
This commit is contained in:
parent
6187036bc5
commit
5f8b6376dc
|
|
@ -0,0 +1,40 @@
|
||||||
|
|
||||||
|
# Code Owners for Aurganize V6.2
|
||||||
|
#
|
||||||
|
# These owners will be automatically requested for review
|
||||||
|
# when someone opens a pull request.
|
||||||
|
#
|
||||||
|
# Format: path/pattern @github-username
|
||||||
|
|
||||||
|
# Default owners for everything
|
||||||
|
* @developer1 @developer2
|
||||||
|
|
||||||
|
# Backend code
|
||||||
|
/backend/ @developer1
|
||||||
|
/backend/internal/handlers/ @developer1
|
||||||
|
/backend/internal/services/ @developer1
|
||||||
|
/backend/internal/repositories/ @developer1
|
||||||
|
|
||||||
|
# Frontend code
|
||||||
|
/frontend/ @developer2
|
||||||
|
/frontend/src/routes/ @developer2
|
||||||
|
/frontend/src/lib/components/ @developer2
|
||||||
|
|
||||||
|
# Infrastructure requires both reviewers
|
||||||
|
/infrastructure/ @developer1 @developer2
|
||||||
|
/docker-compose.yml @developer1 @developer2
|
||||||
|
|
||||||
|
# Database migrations require backend lead
|
||||||
|
/backend/migrations/ @developer1
|
||||||
|
|
||||||
|
# Documentation can be reviewed by anyone
|
||||||
|
/docs/ @developer1 @developer2
|
||||||
|
|
||||||
|
# CI/CD workflows require both
|
||||||
|
/.github/workflows/ @developer1 @developer2
|
||||||
|
|
||||||
|
# Package files require review
|
||||||
|
/backend/go.mod @developer1
|
||||||
|
/backend/go.sum @developer1
|
||||||
|
/frontend/package.json @developer2
|
||||||
|
/frontend/package-lock.json @developer2
|
||||||
|
|
@ -0,0 +1,250 @@
|
||||||
|
# Contributing to Aurganize V6.2
|
||||||
|
|
||||||
|
Thank you for contributing to Aurganize! This document provides guidelines and instructions for contributing to the project.
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
- [Code of Conduct](#code-of-conduct)
|
||||||
|
- [Getting Started](#getting-started)
|
||||||
|
- [Development Workflow](#development-workflow)
|
||||||
|
- [Coding Standards](#coding-standards)
|
||||||
|
- [Commit Message Guidelines](#commit-message-guidelines)
|
||||||
|
- [Pull Request Process](#pull-request-process)
|
||||||
|
- [Testing Requirements](#testing-requirements)
|
||||||
|
|
||||||
|
## 🤝 Code of Conduct
|
||||||
|
|
||||||
|
- Be respectful and inclusive
|
||||||
|
- Provide constructive feedback
|
||||||
|
- Accept constructive criticism gracefully
|
||||||
|
- Focus on what is best for the project
|
||||||
|
|
||||||
|
## 🚀 Getting Started
|
||||||
|
|
||||||
|
1. **Fork the repository**
|
||||||
|
2. **Clone your fork:**
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/YOUR_USERNAME/aurganize-v62.git
|
||||||
|
cd aurganize-v62
|
||||||
|
```
|
||||||
|
3. **Add upstream remote:**
|
||||||
|
```bash
|
||||||
|
git remote add upstream https://github.com/yourorg/aurganize-v62.git
|
||||||
|
```
|
||||||
|
4. **Setup development environment:** Follow [README.md](README.md)
|
||||||
|
|
||||||
|
## 🔄 Development Workflow
|
||||||
|
|
||||||
|
### 1. Sync with Upstream
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git fetch upstream
|
||||||
|
git merge upstream/develop
|
||||||
|
git push origin develop
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Create Feature Branch
|
||||||
|
```bash
|
||||||
|
# Branch from develop
|
||||||
|
git checkout develop
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
**Branch naming conventions:**
|
||||||
|
- `feature/` - New features
|
||||||
|
- `bugfix/` - Bug fixes
|
||||||
|
- `hotfix/` - Urgent production fixes
|
||||||
|
- `refactor/` - Code refactoring
|
||||||
|
- `docs/` - Documentation changes
|
||||||
|
- `test/` - Adding/improving tests
|
||||||
|
|
||||||
|
### 3. Make Changes
|
||||||
|
|
||||||
|
- Write code following our [coding standards](#coding-standards)
|
||||||
|
- Write/update tests
|
||||||
|
- Update documentation if needed
|
||||||
|
- Test locally before committing
|
||||||
|
|
||||||
|
### 4. Commit Changes
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: add user authentication"
|
||||||
|
```
|
||||||
|
|
||||||
|
See [commit message guidelines](#commit-message-guidelines) below.
|
||||||
|
|
||||||
|
### 5. Push to Your Fork
|
||||||
|
```bash
|
||||||
|
git push origin feature/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Create Pull Request
|
||||||
|
|
||||||
|
- Go to GitHub repository
|
||||||
|
- Click "New Pull Request"
|
||||||
|
- Select your feature branch
|
||||||
|
- Fill out PR template completely
|
||||||
|
- Request review from team members
|
||||||
|
|
||||||
|
## 📝 Coding Standards
|
||||||
|
|
||||||
|
### Go (Backend)
|
||||||
|
|
||||||
|
**Style Guide:**
|
||||||
|
- Follow [Effective Go](https://golang.org/doc/effective_go)
|
||||||
|
- Use `gofmt` for formatting
|
||||||
|
- Use `golangci-lint` for linting
|
||||||
|
|
||||||
|
**File Organization:**
|
||||||
|
```go
|
||||||
|
package handlers
|
||||||
|
|
||||||
|
// Imports grouped and sorted
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
|
||||||
|
"github.com/yourorg/aurganize-v62/backend/internal/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Constants first
|
||||||
|
const (
|
||||||
|
DefaultTimeout = 30 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
|
// Types next
|
||||||
|
type AuthHandler struct {
|
||||||
|
service *services.AuthService
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
func NewAuthHandler(service *services.AuthService) *AuthHandler {
|
||||||
|
return &AuthHandler{service: service}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Methods
|
||||||
|
func (h *AuthHandler) Login(c echo.Context) error {
|
||||||
|
// Implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Naming Conventions:**
|
||||||
|
- **Packages:** lowercase, single word (e.g., `handlers`)
|
||||||
|
- **Files:** lowercase, underscore-separated (e.g., `auth_handler.go`)
|
||||||
|
- **Functions:** PascalCase for exported, camelCase for private
|
||||||
|
- **Variables:** camelCase
|
||||||
|
- **Constants:** PascalCase or SCREAMING_SNAKE_CASE for globals
|
||||||
|
|
||||||
|
**Error Handling:**
|
||||||
|
```go
|
||||||
|
// Always check errors
|
||||||
|
result, err := someFunction()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to do something: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use %w to wrap errors (enables errors.Is and errors.As)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Comments:**
|
||||||
|
```go
|
||||||
|
// Package-level comment
|
||||||
|
// package handlers provides HTTP request handlers for the API.
|
||||||
|
package handlers
|
||||||
|
|
||||||
|
// Exported functions must have doc comments
|
||||||
|
// Login handles user authentication requests.
|
||||||
|
// It validates credentials and returns a JWT token.
|
||||||
|
func Login(c echo.Context) error {
|
||||||
|
// Implementation comments for complex logic
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### TypeScript (Frontend)
|
||||||
|
|
||||||
|
**Style Guide:**
|
||||||
|
- Follow [TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html)
|
||||||
|
- Use ESLint and Prettier (configured)
|
||||||
|
|
||||||
|
**File Organization:**
|
||||||
|
```typescript
|
||||||
|
// Imports
|
||||||
|
import type { User } from '$lib/types';
|
||||||
|
import { authStore } from '$lib/stores/auth';
|
||||||
|
|
||||||
|
// Types/Interfaces
|
||||||
|
interface LoginForm {
|
||||||
|
email: string;
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
const MAX_LOGIN_ATTEMPTS = 5;
|
||||||
|
|
||||||
|
// Functions
|
||||||
|
export async function login(form: LoginForm): Promise<User> {
|
||||||
|
// Implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Naming Conventions:**
|
||||||
|
- **Files:** kebab-case (e.g., `auth-service.ts`)
|
||||||
|
- **Components:** PascalCase (e.g., `LoginForm.svelte`)
|
||||||
|
- **Functions:** camelCase
|
||||||
|
- **Constants:** SCREAMING_SNAKE_CASE
|
||||||
|
- **Types/Interfaces:** PascalCase
|
||||||
|
|
||||||
|
**Svelte Components:**
|
||||||
|
```svelte
|
||||||
|
<script lang="ts">
|
||||||
|
// Props
|
||||||
|
export let userId: string;
|
||||||
|
export let showDetails = false;
|
||||||
|
|
||||||
|
// Reactive declarations
|
||||||
|
$: fullName = `${firstName} ${lastName}`;
|
||||||
|
|
||||||
|
// Functions
|
||||||
|
function handleClick() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<!-- Template -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Scoped styles */
|
||||||
|
</style>
|
||||||
|
```
|
||||||
|
|
||||||
|
### SQL (Database)
|
||||||
|
|
||||||
|
**Style:**
|
||||||
|
- Keywords in UPPERCASE
|
||||||
|
- Table/column names in lowercase with underscores
|
||||||
|
- Indent for readability
|
||||||
|
```sql
|
||||||
|
-- Good
|
||||||
|
SELECT
|
||||||
|
u.id,
|
||||||
|
u.email,
|
||||||
|
t.name AS tenant_name
|
||||||
|
FROM users u
|
||||||
|
INNER JOIN tenants t ON u.tenant_id = t.id
|
||||||
|
WHERE u.is_active = TRUE
|
||||||
|
ORDER BY u.created_at DESC;
|
||||||
|
|
||||||
|
-- Bad
|
||||||
|
select u.id, u.email, t.name from users u join tenants t on u.tenant_id=t.id where u.is_active=true;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 💬 Commit Message Guidelines
|
||||||
|
|
||||||
|
We follow [Conventional Commits](https://www.conventionalcommits.org/).
|
||||||
|
|
||||||
|
### Format
|
||||||
Loading…
Reference in New Issue