Files
picpeak/CI_CD_STRATEGY.md
T
paul 10649691de
continuous-integration/drone/push Build is passing
Test and Lint / backend-test (push) Successful in 4m1s
Test and Lint / frontend-test (push) Successful in 2m6s
feat: implement automatic version incrementing with CI/CD strategy
- Add Gitea Actions workflow for automatic version bumping
- Update test workflow to run linting and tests
- Configure Drone to build images with version tags
- Separate concerns: Gitea Actions for versioning, Drone for Docker builds
- Version format: MAJOR.MINOR.PATCH (auto-increment patch)
- Add comprehensive CI/CD strategy documentation

This prevents race conditions between Gitea Actions and Drone CI by:
1. Gitea Actions handles version bump and creates git tag
2. Tag creation triggers Drone to build Docker images
3. Both systems work sequentially, not in parallel

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 19:55:35 +02:00

3.4 KiB

CI/CD Strategy for PicPeak

Overview

This document outlines the CI/CD strategy using both Gitea Actions and Drone CI to avoid conflicts and ensure proper versioning.

Pipeline Flow

1. Development & Testing (Gitea Actions)

  • Trigger: Every push to main or develop branches
  • File: .gitea/workflows/test.yml
  • Purpose: Run tests, linting, and basic validation
  • Actions:
    • Backend linting and tests
    • Frontend linting and build
    • Does NOT build Docker images

2. Version Management (Gitea Actions)

  • Trigger: Push to main branch (excluding markdown files)
  • File: .gitea/workflows/version-and-release.yml
  • Purpose: Automatic version incrementing
  • Actions:
    1. Reads current version from package.json
    2. Increments patch version (e.g., 1.0.0 → 1.0.1)
    3. Updates both backend and frontend package.json
    4. Commits the version change
    5. Creates a git tag (e.g., v1.0.1)
    6. Pushes changes and tag

3. Docker Image Building (Drone CI)

  • Trigger:
    • Push to main or develop (builds with commit SHA)
    • New git tags (builds release versions)
  • File: .drone.yml
  • Purpose: Build and push Docker images
  • Tags Created:
    • latest - Always points to newest build
    • {commit-sha} - Specific commit version
    • {branch}-latest - Latest for specific branch
    • v1.0.1 - Specific version (on tag trigger)

Why This Strategy?

  1. Separation of Concerns:

    • Gitea Actions handles code quality and versioning
    • Drone CI handles Docker image building
    • No overlap or race conditions
  2. Sequential Execution:

    • Version bump happens first
    • Tag creation triggers Drone
    • Docker images are built with correct version
  3. Version Consistency:

    • Version in package.json matches git tag
    • Docker images are tagged with same version
    • No manual version management needed

Setup Requirements

  1. Gitea Actions Runner: Must be configured and running
  2. Drone CI: Must be connected to your Gitea instance
  3. Secrets:
    • GITEA_TOKEN (optional, for pushing version commits)
    • Docker registry credentials in Drone

Version Numbering

  • Format: MAJOR.MINOR.PATCH (e.g., 1.0.0)
  • Automatic increments: PATCH version only
  • Manual increments: Edit package.json for MAJOR/MINOR changes

Usage

  1. Regular Development:

    git add .
    git commit -m "feat: add new feature"
    git push origin main
    
    • Tests run automatically
    • Version bumps to 1.0.1
    • Docker images built with v1.0.1 tag
  2. Major/Minor Version Change:

    # Manually edit package.json files to 2.0.0
    git add .
    git commit -m "feat!: major release"
    git push origin main
    
  3. Skip Version Bump:

    • Add [skip ci] to commit message
    • Or only change markdown files

Monitoring

  • Gitea Actions: Check Actions tab in Gitea
  • Drone CI: Check Drone dashboard
  • Docker Registry: Verify images are pushed with correct tags

Troubleshooting

  1. Version not incrementing:

    • Check Gitea Actions logs
    • Ensure runner has push permissions
    • Verify no [skip ci] in commit message
  2. Docker images not building:

    • Check Drone CI webhook configuration
    • Verify Drone can see the repository
    • Check Docker registry credentials
  3. Conflicts:

    • Never run both pipelines for same task
    • Use branch protection to prevent direct pushes
    • Always let automation handle versioning