# GitHub Actions Workflows

This directory contains the CI/CD workflows for the Devour project.

## Workflows

### 1. CI/CD Pipeline (`ci.yml`)

**Triggers:**
- Push to `main` or `develop` branches
- Pull requests to `main` or `develop` branches
- Release publications

**Jobs:**
- **Test**: Runs unit tests with race detection and uploads coverage to Codecov
- **Lint**: Runs golangci-lint for code quality checks
- **Security**: Scans for security vulnerabilities using Gosec
- **Build**: Builds cross-platform binaries (Linux, Windows, macOS) for amd64/arm64
- **Docker**: Builds and pushes Docker images to Docker Hub
- **Release**: Creates GitHub releases with compiled binaries

### 2. Code Quality (`quality.yml`)

**Triggers:**
- Push to `main` or `develop` branches
- Pull requests to `main` or `develop` branches

**Checks:**
- `go vet` for potential issues
- Code formatting with `gofmt`
- Inefficient assignments with `ineffassign`
- Spelling errors with `misspell`
- Static analysis with `staticcheck`
- TODO/FIXME comment detection
- `go mod tidy` validation
- Code coverage threshold (minimum 80%)
- SonarCloud analysis (optional)

### 3. Dependabot (`dependabot.yml`)

**Features:**
- Weekly dependency updates for Go modules
- Weekly GitHub Actions updates
- Automatic pull requests with dependency updates

## Required Secrets

To enable all features, add these secrets to your GitHub repository:

### Docker Hub Integration
- `DOCKER_USERNAME`: Your Docker Hub username
- `DOCKER_PASSWORD`: Your Docker Hub password or access token

### SonarCloud Integration (Optional)
- `SONAR_TOKEN`: Your SonarCloud project token

## Environment Variables

- `GO_VERSION`: Set to '1.24' (can be updated in workflows)

## Build Artifacts

### Binaries
The CI pipeline builds binaries for:
- Linux (amd64, arm64)
- Windows (amd64)
- macOS (amd64, arm64)

### Docker Images
- Multi-platform images (linux/amd64, linux/arm64)
- Tags: branch name, PR number, semantic version tags

## Coverage Reports

- Test coverage is uploaded to Codecov
- Minimum coverage threshold: 80%
- Coverage reports are generated for each test run

## Security Scanning

- Gosec security scanner runs on every push/PR
- SARIF results are uploaded to GitHub Security tab
- Dependencies are automatically updated by Dependabot

## Local Development

To run the same checks locally:

```bash
# Run tests with coverage
make test-coverage

# Run linting
make lint

# Format code
make fmt

# Build for production
make build-prod

# Build Docker image
make docker
```

## Release Process

1. Create a new tag: `git tag v1.0.0`
2. Push the tag: `git push origin v1.0.0`
3. Create a GitHub release (or let the workflow create it automatically)
4. Binaries and Docker images will be built and published automatically
