Skip to content

Commit bebb24d

Browse files
committed
ci: take the custom-node suite off PR triggers
Nightly schedule and manual dispatch only. PRs neither trigger the workflow nor wait on any of its checks, and nothing is required in branch protection. The path-gate job and fork-PR policy skip existed only to make a pull_request trigger required-safe, so they go with it. Dispatch with the branch input to test a PR branch.
1 parent deb8ec6 commit bebb24d

1 file changed

Lines changed: 20 additions & 53 deletions

File tree

.github/workflows/ci-tests-custom-nodes.yaml

Lines changed: 20 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
# Runs the custom-node regression suite against a backend that has the manifest
2-
# packs actually installed, so the load/run tiers execute for real. This is a
3-
# GATING check: if a pack fails to install or any tier is skipped, the job goes
4-
# red - a regression gate that let a broken pack through as a "skip" would be
5-
# pointless. Mark `custom-nodes-e2e-status` as the required status check in
6-
# branch protection; it fails closed if path detection or any matrix shard
7-
# fails.
2+
# packs actually installed, so the load/run tiers execute for real. Within a
3+
# run the result fails closed: if a pack fails to install or any tier is
4+
# skipped, the job goes red - a suite that let a broken pack through as a
5+
# "skip" would be pointless.
6+
#
7+
# NOT a PR gate yet: nightly schedule and manual dispatch only. PRs neither
8+
# trigger this workflow nor wait on any of its checks, and none of its checks
9+
# may be marked required in branch protection. Before ever adding a
10+
# pull_request trigger, resolve the untrusted-source surface: the install loop
11+
# fetches and pip-installs whatever the manifest's deployRefs point at
12+
# (setup.py executes at install time), so a fork PR editing the manifest could
13+
# aim it at attacker-controlled source. To test a branch, dispatch with the
14+
# `branch` input.
815
#
916
# The matrix keeps the six-pack Core depth suite intact and adds the pinned
1017
# Cloud snapshot as five breadth shards. The Cloud snapshot produces 87
@@ -15,16 +22,13 @@
1522
# The gate is deterministic at the SOURCE level: ComfyUI core is pinned at a
1623
# verified commit and every pack is installed at the exact deployRef the pinned
1724
# Cloud snapshot declares - a commit for git-sourced packs, or a registry
18-
# version's CDN artifact - so no source surface moves underneath a PR. Python
25+
# version's CDN artifact - so no source surface moves underneath a run. Python
1926
# dependencies still resolve fresh, and the runner image updates independently.
2027
name: 'CI: Tests Custom Nodes'
2128

2229
on:
23-
pull_request:
24-
branches-ignore: [wip/*, draft/*, temp/*]
25-
push:
26-
branches: [main, master]
27-
merge_group:
30+
schedule:
31+
- cron: '15 9 * * *'
2832
workflow_dispatch:
2933
inputs:
3034
detection_proof_row:
@@ -51,35 +55,18 @@ on:
5155

5256
concurrency:
5357
# Dispatches get a per-run group: two manual runs (e.g. comparing branches)
54-
# must not cancel each other, while PR pushes keep the usual per-ref
55-
# supersede behavior.
58+
# must not cancel each other, while overlapping nightlies supersede per-ref.
5659
group: ${{ github.event_name == 'workflow_dispatch' && format('{0}-dispatch-{1}', github.workflow, github.run_id) || format('{0}-{1}', github.workflow, github.ref) }}
5760
cancel-in-progress: true
5861

5962
env:
6063
COMFYUI_PIN: b08e6cf35fac50d3ca8470dffb3f9a1fbb7187d2
6164

6265
jobs:
63-
# Path gating lives here, not in a trigger-level `paths:` filter: a required
64-
# check gated by trigger paths never creates a check run on an unrelated PR
65-
# and leaves branch protection stuck Pending. A job-level `if:` still creates
66-
# the check and marks it Skipped (= passing). Mirrors ci-tests-unit.yaml.
67-
changes:
68-
runs-on: ubuntu-latest
69-
permissions:
70-
contents: read
71-
outputs:
72-
should-run: ${{ steps.changes.outputs.should-run }}
73-
steps:
74-
- uses: actions/checkout@v7
75-
- id: changes
76-
uses: ./.github/actions/changes-filter
77-
7866
# Each job is intentionally one worker: the auto-run tier needs exclusive
7967
# access to its backend's queue. Parallelism comes from the shard matrix
8068
# instead, and every job owns a separate backend.
8169
custom_nodes_e2e:
82-
needs: changes
8370
strategy:
8471
fail-fast: false
8572
matrix:
@@ -142,17 +129,6 @@ jobs:
142129
proof_row: '15'
143130
- shard: '5/5'
144131
proof_row: '15'
145-
# Run only when non-docs code changed AND the PR is same-repo. Fork PRs can
146-
# edit the manifest's deployRefs, and this job fetches and pip-installs
147-
# whatever they point at (setup.py runs at install time), so an untrusted
148-
# fork must not be able to aim the install at an attacker-controlled source.
149-
# Fork PRs still get the environment-agnostic coverage via the main e2e
150-
# shards. A skipped job counts as passing, so this stays required-safe.
151-
if: >-
152-
github.event_name == 'workflow_dispatch' ||
153-
(needs.changes.outputs.should-run == 'true' &&
154-
(github.event_name != 'pull_request' ||
155-
github.event.pull_request.head.repo.full_name == github.repository))
156132
runs-on: ubuntu-latest
157133
# Recent green runs complete in 10-19 minutes per shard. 35 leaves room for a
158134
# slow dependency resolve without letting a wedged backend run indefinitely.
@@ -761,22 +737,13 @@ jobs:
761737
custom-nodes-e2e-status:
762738
name: custom-nodes-e2e-status
763739
if: always()
764-
needs: [changes, custom_nodes_e2e]
740+
needs: custom_nodes_e2e
765741
runs-on: ubuntu-latest
766742
steps:
767-
- name: Enforce gate result
743+
- name: Enforce suite result
768744
shell: bash
769745
env:
770-
CHANGES_RESULT: ${{ needs.changes.result }}
771-
SHOULD_RUN: ${{ needs.changes.outputs.should-run }}
772746
E2E_RESULT: ${{ needs.custom_nodes_e2e.result }}
773-
EVENT_NAME: ${{ github.event_name }}
774-
FORK_PR: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }}
775747
run: |
776748
set -euo pipefail
777-
[ "$CHANGES_RESULT" = success ] || { echo "::error::change detection ended with $CHANGES_RESULT"; exit 1; }
778-
if [ "$EVENT_NAME" != workflow_dispatch ] && { [ "$SHOULD_RUN" != true ] || [ "$FORK_PR" = true ]; }; then
779-
[ "$E2E_RESULT" = skipped ] || { echo "::error::expected a policy skip, got $E2E_RESULT"; exit 1; }
780-
else
781-
[ "$E2E_RESULT" = success ] || { echo "::error::custom-node matrix ended with $E2E_RESULT"; exit 1; }
782-
fi
749+
[ "$E2E_RESULT" = success ] || { echo "::error::custom-node matrix ended with $E2E_RESULT"; exit 1; }

0 commit comments

Comments
 (0)