baktainer/.forgejo/README.md
James Paterni 2217d552c1
All checks were successful
CI Pipeline / test (push) Successful in 45s
CI Pipeline / build (push) Successful in 1m15s
CI Pipeline / notify (push) Successful in 1s
Simplify Forgejo Actions and fix container state test
Workflow Simplification:
- Consolidate 8 workflows into 1 comprehensive ci.yml workflow
- Delete redundant workflows: test.yml, build.yml, docker.yml, minimal.yml,
  node-ruby.yml, shell-only.yml, simple.yml
- Keep shell-based approach for maximum Forgejo runner compatibility
- Update README.md to document simplified single-workflow design

Test Fix:
- Fix failing container_spec.rb test for missing state information
- Add missing json method mock to handle fallback scenario
- All 121 tests now passing

The single workflow provides:
- Test job: Install dependencies and run RSpec tests
- Build job: Build Docker image and push to Docker Hub
- Notify job: Report pipeline status
- Full compatibility with any Forgejo runner configuration

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 11:48:37 -04:00

200 lines
No EOL
6.8 KiB
Markdown

# Forgejo Actions Configuration
This directory contains Forgejo Actions workflows for the Baktainer project. Forgejo Actions provides Continuous Integration similar to GitHub Actions but runs on Forgejo instances.
## Directory Structure
```
.forgejo/
├── workflows/
│ └── ci.yml # Complete CI/CD pipeline
└── README.md # This file
```
## Workflow
### `ci.yml` - Complete CI/CD Pipeline
- **Triggers**:
- Push to main branch → Test + Build + Deploy
- Version tags (v*.*.*) → Test + Build + Deploy with version tag
- Pull requests → Test only
- **Jobs**: Test → Build → Notify
- **Container**: Ruby 3.3 Alpine (with auto-detection)
- **Features**:
- **Test Job**: Installs dependencies, runs RSpec tests
- **Build Job**: Builds Docker image, pushes to Docker Hub as `:latest` and `:version` (for tags)
- **Notify Job**: Reports pipeline status
- **Pure Shell Commands**: No GitHub Actions dependencies for maximum compatibility
- **Auto-Detection**: Supports multiple package managers (apk, apt-get, yum, dnf)
- **Robust**: Manual git cloning and Docker operations work with any Forgejo runner
## Key Differences from GitHub Actions
### 1. Directory Location
- **GitHub**: `.github/workflows/`
- **Forgejo**: `.forgejo/workflows/`
### 2. Runner Types
- Uses `runs-on: docker` for containerized jobs
- Can specify custom container images with `container:`
### 3. Action Compatibility
- Most GitHub Actions work with Forgejo Actions
- Actions are sourced from configured action repositories
- Uses same syntax for `actions/checkout@v4`, `docker/build-push-action@v5`, etc.
### 4. Environment Variables
- Same `${{ github.* }}` variables available
- Same secret management with `${{ secrets.* }}`
## Required Secrets
Configure these secrets in your Forgejo repository settings:
| Secret | Description | Example |
|--------|-------------|---------|
| `DOCKER_USERNAME` | Docker Hub username | `jamez001` |
| `DOCKER_PASSWORD` | Docker Hub password or token | `dckr_pat_...` |
| `DOCKER_IMAGE_NAME` | Docker image name | `jamez001/baktainer` |
## Configuration Requirements
### 1. Enable Repository Actions
1. Go to `/{owner}/{repository}/settings`
2. Click on "Repository" tab
3. Check "Enable Repository Actions"
### 2. Forgejo Runner Setup
- Forgejo Actions requires a separate Forgejo Runner
- Runner must be configured by the Forgejo administrator
- Runner supports Docker, LXC, or host-based execution
### 3. Action Repository Configuration
- Actions are sourced from configured repositories
- Default actions available at https://data.forgejo.org
- Administrator can configure custom action sources
## Workflow Features
### Testing
- **Ruby 3.3** with Alpine Linux
- **RSpec** test suite with progress format
- **Automatic dependency installation** with package manager detection
### Building
- **Docker builds** from Alpine Ruby base
- **Automatic tagging** with `:latest` and version tags (`:v1.2.3`)
- **Docker Hub integration** with secure authentication
- **Build status reporting**
### Compatibility
- **Pure shell commands** for maximum Forgejo runner compatibility
- **Package manager auto-detection** (apk, apt-get, yum, dnf)
- **No external action dependencies**
## Usage Examples
### Manual Workflow Trigger
```bash
# Push to main (triggers full CI/CD: test → build → deploy)
git push origin main
# Create and push version tag (triggers test → build → deploy with version tag)
git tag v0.1.1
git push origin v0.1.1
# Create pull request (triggers test only)
git push origin feature-branch
# Then create PR in Forgejo UI
```
### Monitoring Workflow Status
1. Navigate to repository in Forgejo
2. Click on "Actions" tab
3. View workflow runs and logs
4. Check artifact downloads
## Troubleshooting
### Common Issues
1. **Package manager not found / Node.js executable not found error**
```
/var/run/act/workflow/0: line 2: apk: command not found
OCI runtime exec failed: exec failed: unable to start container process:
exec: "node": executable file not found in $PATH: unknown
```
**Solutions**:
- **Current workflow uses pure shell commands** - no GitHub Actions dependencies
- **Auto-detects package manager** (apk, apt-get, yum, dnf) for maximum compatibility
- **If still experiencing issues**: Check your Forgejo runner configuration and container image support
2. **Working directory not found error**
```
OCI runtime exec failed: exec failed: unable to start container process:
chdir to cwd ("/workspace/james/baktainer/./app") set in config.json failed:
no such file or directory: unknown
```
**Solutions**:
- **Fixed**: Workflow uses explicit `cd app` commands instead of `working-directory` defaults
- The error occurred because `working-directory` was set before repository checkout
- Repository must be cloned before changing to subdirectories
3. **Actions not running**
- Check if Repository Actions are enabled
- Verify Forgejo Runner is installed and running
- Check workflow file syntax
3. **Docker build failures**
- Verify Docker Hub credentials in secrets
- Check Dockerfile syntax
- Ensure runner has Docker access
4. **Test failures**
- Check Ruby version compatibility
- Verify system dependencies in Alpine
- Review test output in workflow logs
5. **GitHub Actions compatibility**
- **Not applicable**: Current workflow uses only shell commands
- **No external actions**: Maximum compatibility with any Forgejo runner
### Debugging Steps
1. **Check workflow syntax**:
```bash
# Validate YAML syntax
yamllint .forgejo/workflows/ci.yml
```
2. **Test locally**:
```bash
# Run tests in similar environment
docker run --rm -v $(pwd):/app -w /app ruby:3.3-alpine sh -c \
"apk add --no-cache build-base libffi-dev linux-headers postgresql-dev git && \
cd app && bundle install && bundle exec rspec"
```
3. **Check logs**:
- View detailed logs in Forgejo Actions UI
- Check runner logs on server
- Verify secret configuration
## Migration from GitHub Actions
This workflow is designed to be compatible with the existing GitHub Actions in `.github/workflows/`. Key adaptations made:
1. **Pure shell commands**: No external action dependencies for maximum compatibility
2. **Runner specification**: Uses `docker` with Ruby 3.3 Alpine container
3. **Package manager detection**: Auto-detects apk, apt-get, yum, or dnf
4. **Manual operations**: Git clone and Docker commands work with any runner setup
Both GitHub Actions and Forgejo Actions can coexist in the same repository, allowing for gradual migration or dual CI/CD setup.
## Simplified Design
This single workflow replaces multiple complex workflows with one simple, reliable pipeline that:
- **Tests** your Ruby application with RSpec
- **Builds** a Docker image
- **Deploys** by pushing to Docker Hub with proper tagging
- **Works** with any Forgejo runner configuration