entry-push-latest.yml gains a sync-main job that force-pushes the current repository's main from a source repo (default infinito-nexus/core) before CI policy and deploy discovery derive scope from origin/main. The source is configurable and can be disabled via CI_SYNC_MAIN_SOURCE_REPOSITORY; the same-repository case and disabled values skip the sync. The sync-main checkout uses fetch-depth: 0 and the push is --force to avoid shallow-update and non-fast-forward rejections. Docs warn that main is force-overwritten and must not be used as a working branch on synced repositories. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9.6 KiB
CI Configuration ⚙️
This page lists every repository variable that controls GitHub Actions CI behaviour in this repo. For the workflow catalog see workflows.md; for the CI flow see pipeline.md.
Repository variables are set under Settings → Secrets and variables → Actions → Variables.
Variables 📋
| Variable | Workflow | Default (unset) | Set to activate |
|---|---|---|---|
CI_CANCEL_IN_PROGRESS |
entry-push-latest.yml | Cancels in-progress runs on new push | false to keep in-progress runs alive |
CI_SYNC_MAIN_SOURCE_REPOSITORY |
entry-push-latest.yml | Syncs main from infinito-nexus/core before CI scope discovery |
<owner>/<repo> to use another source, or false, empty, or the current repository to skip |
CI_RUN_ON_MAIN |
entry-push-latest.yml | Pushes to main skip CI |
true to run CI on main pushes too |
CI_ENABLE_AUTO_UPDATES |
update.yml, dependabot-close.yml | Update jobs skipped; Dependabot PRs auto-closed | true to allow update PRs (workflow-driven and Dependabot) |
INFINITO_PLAYWRIGHT_KEEP |
test-deploy-server.yml, test-deploy-universal.yml, test-deploy-workstation.yml, test-deploy-local.yml | Playwright keeps trace, screenshot and video only when a test fails | true to keep them for every test (passing runs included) |
CI_CANCEL_IN_PROGRESS 🛑
Controls whether a new push cancels an already-running CI pipeline on the same branch.
Default behaviour (variable not set or set to any value other than false):
In-progress runs are cancelled when a new push arrives. This is the recommended setting for most workflows.
To disable cancellation:
- Open the repository on GitHub.
- Go to Settings → Secrets and variables → Actions.
- Switch to the Variables tab.
- Click New repository variable.
- Set Name to
CI_CANCEL_IN_PROGRESSand Value tofalse. - Save.
To re-enable cancellation:
Delete the variable or change its value to anything other than false (e.g. true).
How it works:
cancel-in-progress: ${{ vars.CI_CANCEL_IN_PROGRESS != 'false' }}
| Variable value | Expression result | Behaviour |
|---|---|---|
| (not set / empty) | '' != 'false' → true |
Cancels in-progress runs ✓ |
false |
'false' != 'false' → false |
Does not cancel ✓ |
true |
'true' != 'false' → true |
Cancels in-progress runs ✓ |
CI_SYNC_MAIN_SOURCE_REPOSITORY 🔄
Controls whether the push workflow updates the current repository's main branch before any later job derives deploy scope from origin/main.
This keeps fork branch pushes aligned with the canonical default branch so diff-driven role discovery sees only the branch's own changes.
⚠️ Forced overwrite — do not work in
main. When the sync runs, the current repository'smainis force-pushed from the source repository'smain. Any commit that exists only on the fork'smainis discarded without warning on the next push to any covered branch. Never commit or merge work directly intomainon a synced repository. Always work on afeature/**,fix/**, orhotfix/**branch; treatmainas a read-only mirror of the source. If you must usemainas a working branch, disable the sync first (see To disable the sync below).
Default behaviour (variable not set):
The workflow uses infinito-nexus/core as the source repository.
When the current repository is already infinito-nexus/core, the same-repository skip applies.
To use a different source repository:
- Open the repository on GitHub.
- Go to Settings → Secrets and variables → Actions.
- Switch to the Variables tab.
- Click New repository variable.
- Set Name to
CI_SYNC_MAIN_SOURCE_REPOSITORYand Value to<owner>/<repo>. - Save.
To disable the sync:
Set the variable to false, 0, no, off, none, an empty value, or the current repository name.
| Variable value | Behaviour |
|---|---|
| (not set) | Uses infinito-nexus/core; syncs forks and skips in infinito-nexus/core itself ✓ |
infinito-nexus/core in a fork |
Syncs the fork's main from infinito-nexus/core ✓ |
| current repository | Sync skipped ✓ |
false, 0, no, off, none, or empty |
Sync skipped ✓ |
CI_RUN_ON_MAIN 🎯
Controls whether pushes to main trigger the CI pipeline. Pushes to all other branches covered by the workflow (feature/**, hotfix/**, fix/**, alert-autofix-*) are unaffected.
Default behaviour (variable not set or set to any value other than true):
Pushes to main are gated out at the run-policy job and CI is skipped.
To enable CI on main pushes:
- Open the repository on GitHub.
- Go to Settings → Secrets and variables → Actions.
- Switch to the Variables tab.
- Click New repository variable.
- Set Name to
CI_RUN_ON_MAINand Value totrue. - Save.
To disable again:
Delete the variable or change its value to anything other than true.
How it works:
The gate is applied inside push_ci_policy.sh, which the run-policy job invokes. When GITHUB_REF == refs/heads/main and CI_RUN_ON_MAIN != 'true', the job emits should_run=false and every downstream job is skipped.
| Variable value | Ref is main |
Behaviour |
|---|---|---|
| (not set / empty) | yes | CI skipped ✓ |
true |
yes | CI runs ✓ |
| any other value | yes | CI skipped ✓ |
| (any) | no | Unaffected (CI runs per branch rules) ✓ |
CI_ENABLE_AUTO_UPDATES 🔄
Controls whether automated update PRs are created. Covers both the workflow-driven jobs in update.yml (Docker image versions, agent skills) and PRs opened by Dependabot (gated via dependabot-close.yml, which auto-closes them).
The workflow-driven jobs additionally require the BOT_APP_CLIENT_ID and BOT_APP_PRIVATE_KEY repository secrets, see secrets.md. Without those secrets, runs fail at the token-minting step and no PR is opened.
Default behaviour (variable not set or set to any value other than true):
The update-docker-image-versions and update-skills jobs are skipped. Dependabot PRs are auto-closed on open with a comment pointing to this variable.
To enable update PRs:
- Open the repository on GitHub.
- Go to Settings → Secrets and variables → Actions.
- Switch to the Variables tab.
- Click New repository variable.
- Set Name to
CI_ENABLE_AUTO_UPDATESand Value totrue. - Save.
To disable again:
Delete the variable or change its value to anything other than true.
How it works:
In update.yml each job carries a job-level guard:
if: vars.CI_ENABLE_AUTO_UPDATES == 'true'
Dependabot cannot read repository variables itself, so dependabot-close.yml listens on pull_request_target (opened, reopened) and closes any PR authored by dependabot[bot] while CI_ENABLE_AUTO_UPDATES != 'true'. The workflow does not check out PR code, which keeps the elevated pull_request_target context safe.
| Variable value | Workflow update jobs | Dependabot PRs |
|---|---|---|
| (not set / empty) | Skipped ✓ | Auto-closed on open ✓ |
true |
Run ✓ | Stay open ✓ |
| any other value | Skipped ✓ | Auto-closed on open ✓ |
INFINITO_PLAYWRIGHT_KEEP 🎬
Controls whether Playwright keeps trace, screenshot, and video for every test or only for failing tests across the four deploy-test workflows (test-deploy-server.yml, test-deploy-universal.yml, test-deploy-workstation.yml, test-deploy-local.yml). For the full propagation chain, the inventory override, and the local equivalents, see Playwright Tests.
Default behaviour (variable not set or set to any value other than true):
Artefacts are retained only when a test fails.
To retain artefacts for every test:
- Open the repository on GitHub.
- Go to Settings → Secrets and variables → Actions.
- Switch to the Variables tab.
- Click New repository variable.
- Set Name to
INFINITO_PLAYWRIGHT_KEEPand Value totrue. - Save.
To disable again:
Delete the variable or change its value to anything other than true.
How it works:
Each deploy-test workflow forwards the variable into its own env: block:
INFINITO_PLAYWRIGHT_KEEP: ${{ vars.INFINITO_PLAYWRIGHT_KEEP }}
| Variable value | Behaviour |
|---|---|
| (not set / empty) | Trace / screenshot / video kept only on failure ✓ |
true |
Trace / screenshot / video kept for every test ✓ |
| any other value | Trace / screenshot / video kept only on failure ✓ |