CI/CD with Actions workflows

Workflows are YAML files with the same structure as GitHub Actions. Jobs run on managed runners, or on your own machines with the gfd runner.

A workflow run where lint, a test matrix and a deploy job finish in order
Workflow syntax
Jobs, steps, matrices, needs, if: expressions, secrets, variables, artifacts and caches.
Managed runners
Each job runs in a fresh, isolated container. Logs stream to the run page while the job is running.
Self-hosted runners
Register any Linux machine with gfd. Each job runs in its own non-root container behind an egress firewall.
Deployment approvals
Environments can require a reviewer to approve a deploy job before it runs.

Add a workflow file

Commit a YAML file under .gitfor/workflows and push. Each job reports a commit status, and branch protection can require any of them.

.gitfor/workflows/ci.yml
name: CIon:  push:    branches: [main]  pull_request:jobs:  test:    runs-on: cloudflare    strategy:      matrix:        node: [22, 24]    steps:      - uses: actions/checkout@v4      - run: bun install && bun test  deploy:    needs: test    if: github.ref == 'refs/heads/main'    runs-on: [self-hosted, linux]    environment: production    steps:      - run: ./deploy.sh        env:          TOKEN: ${{ secrets.DEPLOY_TOKEN }}

Register your own runner

Create a registration token in repository or organization settings, then register and start the runner. Pull requests from forks don't run on your machines unless an admin allows it.

terminal
# On any Linux machine with Docker or Podmangfd runner register --url https://your-forge.example --token gitfor_reg_...gfd runner run

Try it on your own code

Create an account and import a repository with its full history, or run your own instance.