GitHub Actions — Overview¶
OWNER: alex, tjitte
ALSO_USED_BY: leon, marta, iwona
LAST_VERIFIED: 2026-03-26
GE_STACK_VERSION: GitHub Actions (github-hosted runners, ubuntu-latest)
Overview¶
GitHub Actions is GE's CI/CD platform. All build, test, lint, and deployment
workflows run as GitHub Actions. GE uses GitHub-hosted runners exclusively
(no self-hosted runners). Workflows are defined in .github/workflows/.
GE Runner Configuration¶
| Setting | Value | Notes |
|---|---|---|
| Runner OS | ubuntu-latest |
Default for all workflows |
| Runner size | Standard (2 vCPU, 7 GB) | Larger runners not needed yet |
| Concurrency | Per-branch | Prevent duplicate runs |
| Timeout | 30 minutes default | Adjusted per workflow |
CHECK: all workflows use ubuntu-latest unless platform-specific
CHECK: all workflows have a timeout-minutes set
CHECK: concurrency groups prevent duplicate runs on same branch
Workflow Conventions¶
File Naming¶
.github/workflows/
├── ci.yml # Main CI: lint, type-check, test, build
├── deploy-staging.yml # Zone 2 deployment
├── deploy-production.yml # Zone 3 deployment
├── pr-checks.yml # PR-specific checks (preview, size)
├── scheduled-drift.yml # Terraform drift detection
└── reusable-docker-build.yml # Reusable workflow (prefixed)
CHECK: workflow files are lowercase with hyphens
CHECK: reusable workflows prefixed with reusable-
CHECK: deployment workflows named deploy-{zone}.yml
Trigger Conventions¶
CHECK: use pull_request not pull_request_target for fork PRs
CHECK: push triggers only on main (not all branches)
CHECK: PR triggers include synchronize for re-runs on new commits
Concurrency Control¶
CHECK: every workflow has a concurrency group
CHECK: cancel-in-progress: true for CI workflows (save runner minutes)
CHECK: cancel-in-progress: false for deployment workflows (never cancel mid-deploy)
GE-Specific Conventions¶
- All third-party actions pinned to commit SHA (not tag)
- OIDC for cloud provider authentication — no long-lived secrets
- Reusable workflows for shared logic across repositories
- Matrix builds for multi-project monorepo testing
- Docker layer caching for fast image builds
- Environment protection rules for staging/production deploys
- All workflow runs auditable — logs retained for 90 days
Workflow Limits (GitHub)¶
| Limit | Value |
|---|---|
| Nested reusable workflows | 10 levels |
| Total workflow calls per run | 50 |
| Workflow dispatch inputs | 25 |
| Cache size per repository | 10+ GB |
| Job matrix combinations | 256 |
| Concurrent jobs (Free) | 20 |
| Concurrent jobs (Team) | 60 |
Cross-References¶
READ_ALSO: wiki/docs/stack/github-actions/patterns.md
READ_ALSO: wiki/docs/stack/github-actions/security.md
READ_ALSO: wiki/docs/stack/github-actions/pitfalls.md
READ_ALSO: wiki/docs/stack/github-actions/checklist.md
READ_ALSO: wiki/docs/stack/kubernetes/index.md
READ_ALSO: wiki/docs/stack/terraform-upcloud/index.md