Files
ComfyUI_frontend/.github/workflows/release.yaml
snomiao 62e06f4358 [ci] Enhance CI/CD caching across all workflows (#5117)
* [ci] Enhance CI/CD caching across all workflows

- Add tool cache steps for node_modules/.cache, .cache, and .eslintcache
- Enable npm caching for Node.js setup actions where missing
- Add cache configurations for ESLint, Prettier, Knip, and other build tools
- Improve build performance by caching tool outputs between runs
- Use unique cache keys per workflow to avoid conflicts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* [ci] Enhance CI/CD caching with comprehensive improvements

Extends caching strategy beyond PR #5107 with additional optimizations:

- **i18n.yaml**: Add tool cache for locale generation workflow
- **update-electron-types.yaml**: Add tool cache for type updates
- **test-ui.yaml**: Add Playwright browser cache and Python pip cache
- **vitest.yaml**: Add coverage directory caching
- **chromatic.yaml**: Add Storybook static build cache
- **All build workflows**: Add TypeScript incremental build cache
- **Type generation workflows**: Add repository caching for external repos
- **lint-and-format.yaml**: Improve cache key granularity with source hash

Performance improvements:
- Playwright browser downloads cached across runs
- Python pip dependencies cached
- TSC incremental compilation cache preserved
- Storybook static builds cached
- External repository clones cached
- More granular cache invalidation based on source changes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* [ci] Optimize CI/CD caching for better performance

- Enhance cache keys with more specific file patterns for better cache hit rates
- Add missing cache directories (.prettierCache, .knip-cache, .vitest-cache, tsconfig.tsbuildinfo)
- Improve cache key naming for clarity (lint-format, vitest, storybook, playwright)
- Add better fallback cache restore keys
- Include browser-specific caching for Playwright tests
- Add TypeScript build info caching across workflows

Expected improvements:
- 20-40% faster builds on cache hits
- More granular cache invalidation
- Better cache utilization across tools

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Apply suggestion from @DrJKL

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* [ci] Remove redundant node_modules/.cache from workflow caches

setup-node already handles node_modules caching when cache: 'npm' is enabled.
Removed conflicting node_modules/.cache entries from:
- .github/workflows/lint-and-format.yaml
- .github/workflows/vitest.yaml
- .github/workflows/test-ui.yaml

This prevents cache conflicts and follows best practices for npm caching.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update .github/workflows/chromatic.yaml

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* Update .github/workflows/update-electron-types.yaml

Co-authored-by: Alexander Brown <drjkl@comfy.org>

* fix: address reviewer feedback on cache optimization PR (#5200)

* fix: remove duplicate cache entries and fix YAML formatting

- Remove duplicate path entries in dev-release.yaml
- Remove redundant node_modules/.cache entries since setup-node handles npm caching
- Fix YAML indentation issues across workflow files

Addresses reviewer feedback on PR #5117 about duplication and maintenance

* fix: add cache-dependency-path for setup-node in test-ui workflow

The test-ui workflow runs at repo root but package-lock.json is in ComfyUI_frontend/
subdirectory, causing setup-node cache to fail. Added cache-dependency-path to fix this.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-08-26 12:26:17 -07:00

152 lines
4.7 KiB
YAML

name: Create Release Draft
on:
pull_request:
types: [ closed ]
branches: [ main, core/* ]
paths:
- 'package.json'
jobs:
build:
runs-on: ubuntu-latest
if: >
github.event.pull_request.merged == true &&
contains(github.event.pull_request.labels.*.name, 'Release')
outputs:
version: ${{ steps.current_version.outputs.version }}
is_prerelease: ${{ steps.check_prerelease.outputs.is_prerelease }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'
- name: Cache tool outputs
uses: actions/cache@v4
with:
path: |
.cache
tsconfig.tsbuildinfo
key: release-tools-cache-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
release-tools-cache-${{ runner.os }}-
- name: Get current version
id: current_version
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
- name: Check if prerelease
id: check_prerelease
run: |
VERSION=${{ steps.current_version.outputs.version }}
if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+- ]]; then
echo "is_prerelease=true" >> $GITHUB_OUTPUT
else
echo "is_prerelease=false" >> $GITHUB_OUTPUT
fi
- name: Build project
env:
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }}
ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
USE_PROD_CONFIG: 'true'
run: |
npm ci
npm run build
npm run zipdist
- name: Upload dist artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: |
dist/
dist.zip
draft_release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download dist artifact
uses: actions/download-artifact@v4
with:
name: dist-files
- name: Create release
id: create_release
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: |
dist.zip
tag_name: v${{ needs.build.outputs.version }}
target_commitish: ${{ github.event.pull_request.base.ref }}
make_latest: ${{ github.event.pull_request.base.ref == 'main' && needs.build.outputs.is_prerelease == 'false' }}
draft: ${{ github.event.pull_request.base.ref != 'main' || needs.build.outputs.is_prerelease == 'true' }}
prerelease: ${{ needs.build.outputs.is_prerelease == 'true' }}
generate_release_notes: true
publish_pypi:
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download dist artifact
uses: actions/download-artifact@v4
with:
name: dist-files
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install build dependencies
run: python -m pip install build
- name: Setup pypi package
run: |
mkdir -p comfyui_frontend_package/comfyui_frontend_package/static/
cp -r dist/* comfyui_frontend_package/comfyui_frontend_package/static/
- name: Build pypi package
run: python -m build
working-directory: comfyui_frontend_package
env:
COMFYUI_FRONTEND_VERSION: ${{ needs.build.outputs.version }}
- name: Publish pypi package
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc
with:
password: ${{ secrets.PYPI_TOKEN }}
packages-dir: comfyui_frontend_package/dist
publish_types:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'
registry-url: https://registry.npmjs.org
- name: Cache tool outputs
uses: actions/cache@v4
with:
path: |
.cache
tsconfig.tsbuildinfo
dist
key: types-tools-cache-${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
types-tools-cache-${{ runner.os }}-
- run: npm ci
- run: npm run build:types
- name: Publish package
run: npm publish --access public
working-directory: dist
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}