- Critical change that ensures reliablity and **should** have no bad side effects, but when you see any, please report: DICT, LIST, SET and Data List nodes (plus the DICT/LIST-taking STRING nodes) now degrade gracefully when their data source is not connected (`None`) instead of raising: read/query nodes return their natural "no data" result (the `get` default, an empty list, `False`, `0`, `None`), and transform nodes behave as if given an empty container. - Add a "continue if not empty" flow-control node: it passes a value through unchanged when it is non-empty, and blocks execution (via an execution blocker) when the value is empty. It is list-aware (`INPUT_IS_LIST` / `OUTPUT_IS_LIST`), so it is immune to ComfyUI's empty-input batching crash and passes data lists through unchanged. By default the block is silent; an optional `message` can be set to show a dialog. Use it before nodes that cannot handle an empty input (e.g. a node receiving an empty Data List) to stop execution instead of failing.
67 lines
2.4 KiB
YAML
67 lines
2.4 KiB
YAML
name: 📦 Publish to Comfy registry
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- "pyproject.toml"
|
|
|
|
permissions:
|
|
issues: write
|
|
|
|
jobs:
|
|
publish-node:
|
|
name: Publish Custom Node to registry
|
|
if: github.repository_owner == 'StableLlama' # prevent unwanted runs on forks
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: ♻️ Check out code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.10"
|
|
|
|
- name: Install comfy-cli
|
|
run: pip install comfy-cli
|
|
|
|
- name: Extract changelog section for this version
|
|
id: changelog
|
|
run: |
|
|
python - <<'EOF'
|
|
import pathlib
|
|
import re
|
|
|
|
pyproject = pathlib.Path("pyproject.toml").read_text(encoding="utf-8")
|
|
version = re.search(r'^\s*version\s*=\s*"([^"]+)"', pyproject, re.M).group(1)
|
|
changelog = pathlib.Path("CHANGELOG.md").read_text(encoding="utf-8")
|
|
|
|
# Match headings like "## [1.7.0] - 2026-08-27", "## 1.7.0" or "## v1.7.0".
|
|
version_heading = re.compile(rf"^##\s+\[?v?{re.escape(version)}\]?\s*(?:-\s*\d{{4}}-\d{{2}}-\d{{2}})?\s*$", re.M)
|
|
# Any second-level changelog heading. This locates the *next* (older)
|
|
# release so we capture only this version's section, not the whole log.
|
|
next_heading = re.compile(r"^##\s+", re.M)
|
|
|
|
match = version_heading.search(changelog)
|
|
if match is None:
|
|
print(f"::notice::No CHANGELOG.md section found for v{version}; publishing without a changelog")
|
|
pathlib.Path("CHANGELOG_CURRENT.md").write_text("", encoding="utf-8")
|
|
else:
|
|
end = next_heading.search(changelog, match.end())
|
|
section = changelog[match.end(): end.start() if end else None].strip()
|
|
pathlib.Path("CHANGELOG_CURRENT.md").write_text(section + "\n", encoding="utf-8")
|
|
EOF
|
|
|
|
- name: 📦 Publish Custom Node
|
|
run: |
|
|
if [ -s CHANGELOG_CURRENT.md ]; then
|
|
comfy --skip-prompt --no-enable-telemetry node publish \
|
|
--token "${{ secrets.REGISTRY_ACCESS_TOKEN }}" \
|
|
--changelog-file CHANGELOG_CURRENT.md
|
|
else
|
|
comfy --skip-prompt --no-enable-telemetry node publish \
|
|
--token "${{ secrets.REGISTRY_ACCESS_TOKEN }}"
|
|
fi
|