Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions .github/workflows/release-channels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: Multi-Channel Release Management

on:
push:
branches: [main, develop, release/*]
release:
types: [published]

jobs:
latest-build:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup zsh
uses: actions/setup-node@v4
with:
node-version: '18'

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y zsh exiftool jq python3-pip
pip3 install yamllint

- name: Run tests
run: |
./scripts/testing/run-tests.zsh

- name: Update Homebrew Latest Channel
env:
HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
run: |
# Update goprox@latest formula
./scripts/release/update-homebrew-channel.zsh latest

beta-release:
if: startsWith(github.ref, 'refs/heads/release/')
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup zsh
uses: actions/setup-node@v4
with:
node-version: '18'

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y zsh exiftool jq python3-pip
pip3 install yamllint

- name: Run tests
run: |
./scripts/testing/run-tests.zsh

- name: Update Homebrew Beta Channel
env:
HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
run: |
# Update goprox@beta formula
./scripts/release/update-homebrew-channel.zsh beta

official-release:
if: github.event_name == 'release' && github.event.action == 'published'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup zsh
uses: actions/setup-node@v4
with:
node-version: '18'

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y zsh exiftool jq python3-pip
pip3 install yamllint

- name: Run tests
run: |
./scripts/testing/run-tests.zsh

- name: Update Homebrew Official Channel
env:
HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
run: |
# Update goprox formula (official)
./scripts/release/update-homebrew-channel.zsh official

channel-validation:
if: always()
runs-on: ubuntu-latest
needs: [latest-build, beta-release, official-release]
steps:
- name: Validate Channel Updates
run: |
echo "Channel update validation completed"
echo "Latest build: ${{ needs.latest-build.result }}"
echo "Beta release: ${{ needs.beta-release.result }}"
echo "Official release: ${{ needs.official-release.result }}"
7 changes: 3 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@
name: "Comprehensive Testing"
on:
pull_request:
branches: [main, develop]
paths-ignore:
- "docs/**"
- "*.md"
- "!scripts/core/logger.zsh"
- "!scripts/testing/test-suites.zsh"
- "!scripts/testing/run-tests.zsh"
push:
branches:
- main
- develop
branches: [main, develop, feature/*, release/*, hotfix/*]
paths:
- 'scripts/core/logger.zsh'
- 'scripts/testing/test-suites.zsh'
Expand Down Expand Up @@ -158,7 +157,7 @@ jobs:
- name: "Install dependencies"
run: |
sudo apt-get update
sudo apt-get install -y zsh
sudo apt-get install -y zsh exiftool jq

- name: "Make test scripts executable"
run: |
Expand Down
151 changes: 151 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,157 @@ Thank you for your interest in contributing to GoProX! This document outlines th
- Update or add documentation for any new features, changes, or scripts.
- Use zsh code blocks for shell script examples.

## 🌿 Git-Flow Workflow

GoProX uses a git-flow workflow to ensure code quality, collaboration, and structured releases. This workflow supports both development and multi-channel release management.

### Branch Structure

**Main Branches:**
- `main` - Production-ready code, official releases
- `develop` - Integration branch for features and development

**Supporting Branches:**
- `feature/*` - New features and enhancements
- `release/*` - Release preparation and testing
- `hotfix/*` - Critical bug fixes for production

### Branch Naming Conventions

**Feature Branches:**
```zsh
feature/issue-XX-descriptive-name
feature/67-enhanced-default-behavior
feature/70-architecture-design-principles
```

**Release Branches:**
```zsh
release/01.11.00
release/01.12.00
```

**Hotfix Branches:**
```zsh
hotfix/critical-bug-fix
hotfix/security-patch
```

### Development Workflow

**1. Starting a New Feature:**
```zsh
# Ensure you're on develop branch
git checkout develop
git pull origin develop

# Create feature branch
git checkout -b feature/issue-XX-descriptive-name

# Make your changes, commit frequently
git add .
git commit -m "feat: add new feature (refs #XX)"

# Push feature branch
git push -u origin feature/issue-XX-descriptive-name
```

**2. Completing a Feature:**
```zsh
# Create pull request to develop branch
# Ensure all CI checks pass
# Get code review and approval
# Merge to develop
```

**3. Creating a Release:**
```zsh
# Create release branch from develop
git checkout develop
git pull origin develop
git checkout -b release/01.11.00

# Update version, documentation, release notes
# Test thoroughly
# Create pull request to main
```

**4. Hotfix Process:**
```zsh
# Create hotfix branch from main
git checkout main
git pull origin main
git checkout -b hotfix/critical-fix

# Fix the issue
git commit -m "fix: critical bug fix (refs #XX)"

# Create pull request to main AND develop
```

### Multi-Channel Release Support

GoProX supports three release channels for Homebrew packages:

**1. Latest Build Channel (develop branch):**
```zsh
brew install fxstein/tap/goprox@latest
```
- Development builds, updated on every develop push
- For developers and early adopters

**2. Beta Channel (release branches):**
```zsh
brew install fxstein/tap/goprox@beta
```
- Pre-release testing, updated on release branch changes
- For beta testers and advanced users

**3. Official Channel (main branch):**
```zsh
brew install fxstein/tap/goprox
```
- Stable production releases, updated on official releases
- For general users and production environments

### Pull Request Process

**Standard Feature PR:**
1. Create feature branch from develop
2. Implement feature with tests
3. Create pull request to develop
4. Require code review and CI checks
5. Merge after approval

**Release PR:**
1. Create release branch from develop
2. Update version and documentation
3. Create pull request to main
4. Require code review and CI checks
5. Merge to main and tag release
6. Merge back to develop

**Hotfix PR:**
1. Create hotfix branch from main
2. Fix the critical issue
3. Create pull request to main AND develop
4. Require code review and CI checks
5. Merge to both branches

### Code Review Requirements

- All pull requests require at least one review
- CI checks must pass before merging
- Code must follow project standards and design principles
- Tests must be included for new features
- Documentation must be updated

### Branch Protection

- `main` branch: Requires PR reviews, CI checks, up-to-date branches
- `develop` branch: Requires PR reviews, CI checks, allows force pushes for admins
- Feature branches: No restrictions, but CI checks run automatically

## 📝 Commit Message Guidelines

- Use imperative mood (e.g., "add feature", "fix bug").
Expand Down
Loading
Loading