2025-07-15 11:02:58 -04:00
# 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/
2025-07-15 11:48:37 -04:00
│ └── ci.yml # Complete CI/CD pipeline
2025-07-15 11:02:58 -04:00
└── README.md # This file
```
2025-07-15 11:48:37 -04:00
## Workflow
2025-07-15 11:02:58 -04:00
2025-07-15 11:48:37 -04:00
### `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
2025-07-15 11:29:20 -04:00
- **Jobs**: Test → Build → Notify
- **Container**: Ruby 3.3 Alpine (with auto-detection)
- **Features**:
2025-07-15 11:48:37 -04:00
- **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
2025-07-15 11:02:58 -04:00
## 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
2025-07-15 17:22:21 -04:00
Configure these secrets in your Forgejo repository settings (`/{owner}/{repository}/settings` → Repository → Secrets):
2025-07-15 11:02:58 -04:00
2025-07-15 17:22:21 -04:00
| Secret | Description | Example | Required |
|--------|-------------|---------|----------|
| `DOCKER_USERNAME` | Docker Hub username | `jamez001` | ✅ Yes |
| `DOCKER_PASSWORD` | Docker Hub password or token | `dckr_pat_...` | ✅ Yes |
| `DOCKER_IMAGE_NAME` | Docker image name | `jamez001/baktainer` | ✅ Yes |
**Important**: All three secrets must be configured for the workflow to succeed. Missing secrets will cause the build to fail with clear error messages.
2025-07-15 11:02:58 -04:00
## 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
2025-07-15 11:48:37 -04:00
- **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` )
2025-07-15 11:02:58 -04:00
- **Docker Hub integration** with secure authentication
2025-07-15 11:48:37 -04:00
- **Build status reporting**
2025-07-15 11:02:58 -04:00
2025-07-15 11:48:37 -04:00
### Compatibility
- **Pure shell commands** for maximum Forgejo runner compatibility
- **Package manager auto-detection** (apk, apt-get, yum, dnf)
- **No external action dependencies**
2025-07-15 11:02:58 -04:00
## Usage Examples
### Manual Workflow Trigger
```bash
2025-07-15 11:48:37 -04:00
# Push to main (triggers full CI/CD: test → build → deploy)
2025-07-15 11:02:58 -04:00
git push origin main
2025-07-15 11:48:37 -04:00
# Create and push version tag (triggers test → build → deploy with version tag)
2025-07-15 11:02:58 -04:00
git tag v0.1.1
git push origin v0.1.1
2025-07-15 11:48:37 -04:00
# Create pull request (triggers test only)
2025-07-15 11:02:58 -04:00
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
2025-07-15 11:29:20 -04:00
1. **Package manager not found / Node.js executable not found error**
2025-07-15 11:18:12 -04:00
```
2025-07-15 11:29:20 -04:00
/var/run/act/workflow/0: line 2: apk: command not found
2025-07-15 11:18:12 -04:00
OCI runtime exec failed: exec failed: unable to start container process:
exec: "node": executable file not found in $PATH: unknown
```
**Solutions** :
2025-07-15 11:48:37 -04:00
- **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
2025-07-15 11:18:12 -04:00
2025-07-15 17:22:21 -04:00
2. **Docker push reference format error**
```
Error parsing reference: ":latest" is not a valid repository/tag: invalid reference format
```
**Solutions** :
- **Missing secret**: Configure `DOCKER_IMAGE_NAME` secret in repository settings
- **Example value**: `jamez001/baktainer` (your Docker Hub username/repository)
- **Path**: Go to `/{owner}/{repository}/settings` → Repository → Secrets
- **Verify**: All three Docker secrets must be configured (USERNAME, PASSWORD, IMAGE_NAME)
3. **Working directory not found error**
2025-07-15 11:40:10 -04:00
```
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** :
2025-07-15 11:48:37 -04:00
- **Fixed**: Workflow uses explicit `cd app` commands instead of `working-directory` defaults
2025-07-15 11:40:10 -04:00
- The error occurred because `working-directory` was set before repository checkout
2025-07-15 11:48:37 -04:00
- Repository must be cloned before changing to subdirectories
2025-07-15 11:40:10 -04:00
2025-07-15 17:22:21 -04:00
4. **Actions not running**
2025-07-15 11:02:58 -04:00
- Check if Repository Actions are enabled
- Verify Forgejo Runner is installed and running
- Check workflow file syntax
2025-07-15 11:18:12 -04:00
3. **Docker build failures**
2025-07-15 11:02:58 -04:00
- Verify Docker Hub credentials in secrets
- Check Dockerfile syntax
- Ensure runner has Docker access
2025-07-15 17:22:21 -04:00
5. **Test failures**
2025-07-15 11:02:58 -04:00
- Check Ruby version compatibility
- Verify system dependencies in Alpine
- Review test output in workflow logs
2025-07-15 17:22:21 -04:00
6. **GitHub Actions compatibility**
2025-07-15 11:48:37 -04:00
- **Not applicable**: Current workflow uses only shell commands
- **No external actions**: Maximum compatibility with any Forgejo runner
2025-07-15 11:18:12 -04:00
2025-07-15 11:02:58 -04:00
### 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
2025-07-15 11:48:37 -04:00
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.
2025-07-15 11:02:58 -04:00
2025-07-15 11:48:37 -04:00
## Simplified Design
2025-07-15 11:02:58 -04:00
2025-07-15 11:48:37 -04:00
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