From 0687e041023056b6b15ccd275ada2540ce86c5c8 Mon Sep 17 00:00:00 2001 From: Robin Huang Date: Mon, 13 May 2024 13:07:46 -0700 Subject: [PATCH] CI/CD for testing workflows. --- .../workflows/json_examples/workflow_api.json | 107 +++++++++++++++ .../json_examples/workflow_lora_api.json | 126 ++++++++++++++++++ .github/workflows/mirror.yaml | 42 ++++++ .github/workflows/test-workflows-windows.yaml | 28 ++++ .github/workflows/test-workflows.yaml | 47 +++++++ 5 files changed, 350 insertions(+) create mode 100644 .github/workflows/json_examples/workflow_api.json create mode 100644 .github/workflows/json_examples/workflow_lora_api.json create mode 100644 .github/workflows/mirror.yaml create mode 100644 .github/workflows/test-workflows-windows.yaml create mode 100644 .github/workflows/test-workflows.yaml diff --git a/.github/workflows/json_examples/workflow_api.json b/.github/workflows/json_examples/workflow_api.json new file mode 100644 index 00000000..0a62997f --- /dev/null +++ b/.github/workflows/json_examples/workflow_api.json @@ -0,0 +1,107 @@ +{ + "3": { + "inputs": { + "seed": 156680208700286, + "steps": 20, + "cfg": 8, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": [ + "4", + 0 + ], + "positive": [ + "6", + 0 + ], + "negative": [ + "7", + 0 + ], + "latent_image": [ + "5", + 0 + ] + }, + "class_type": "KSampler", + "_meta": { + "title": "KSampler" + } + }, + "4": { + "inputs": { + "ckpt_name": "v1-5-pruned-emaonly.ckpt" + }, + "class_type": "CheckpointLoaderSimple", + "_meta": { + "title": "Load Checkpoint" + } + }, + "5": { + "inputs": { + "width": 512, + "height": 512, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage", + "_meta": { + "title": "Empty Latent Image" + } + }, + "6": { + "inputs": { + "text": "beautiful scenery nature glass bottle landscape, , purple galaxy bottle,", + "clip": [ + "4", + 1 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "7": { + "inputs": { + "text": "text, watermark", + "clip": [ + "4", + 1 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "8": { + "inputs": { + "samples": [ + "3", + 0 + ], + "vae": [ + "4", + 2 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE Decode" + } + }, + "9": { + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "8", + 0 + ] + }, + "class_type": "SaveImage", + "_meta": { + "title": "Save Image" + } + } +} \ No newline at end of file diff --git a/.github/workflows/json_examples/workflow_lora_api.json b/.github/workflows/json_examples/workflow_lora_api.json new file mode 100644 index 00000000..5fa14069 --- /dev/null +++ b/.github/workflows/json_examples/workflow_lora_api.json @@ -0,0 +1,126 @@ +{ + "3": { + "inputs": { + "seed": 851616030078638, + "steps": 20, + "cfg": 8, + "sampler_name": "euler", + "scheduler": "normal", + "denoise": 1, + "model": [ + "10", + 0 + ], + "positive": [ + "6", + 0 + ], + "negative": [ + "7", + 0 + ], + "latent_image": [ + "5", + 0 + ] + }, + "class_type": "KSampler", + "_meta": { + "title": "KSampler" + } + }, + "4": { + "inputs": { + "ckpt_name": "v1-5-pruned-emaonly.ckpt" + }, + "class_type": "CheckpointLoaderSimple", + "_meta": { + "title": "Load Checkpoint" + } + }, + "5": { + "inputs": { + "width": 512, + "height": 512, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage", + "_meta": { + "title": "Empty Latent Image" + } + }, + "6": { + "inputs": { + "text": "masterpiece best quality girl", + "clip": [ + "10", + 1 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "7": { + "inputs": { + "text": "bad hands", + "clip": [ + "10", + 1 + ] + }, + "class_type": "CLIPTextEncode", + "_meta": { + "title": "CLIP Text Encode (Prompt)" + } + }, + "8": { + "inputs": { + "samples": [ + "3", + 0 + ], + "vae": [ + "4", + 2 + ] + }, + "class_type": "VAEDecode", + "_meta": { + "title": "VAE Decode" + } + }, + "9": { + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "8", + 0 + ] + }, + "class_type": "SaveImage", + "_meta": { + "title": "Save Image" + } + }, + "10": { + "inputs": { + "lora_name": "epiNoiseoffset_v2.safetensors", + "strength_model": 1, + "strength_clip": 1, + "model": [ + "4", + 0 + ], + "clip": [ + "4", + 1 + ] + }, + "class_type": "LoraLoader", + "_meta": { + "title": "Load LoRA" + } + } + } \ No newline at end of file diff --git a/.github/workflows/mirror.yaml b/.github/workflows/mirror.yaml new file mode 100644 index 00000000..32fdb4b3 --- /dev/null +++ b/.github/workflows/mirror.yaml @@ -0,0 +1,42 @@ +name: Mirror Comfyanonymous/ComfyUI Repo +on: + workflow_dispatch: + schedule: + - cron: '0 * * * *' # Runs every hour, adjust to your needs + +jobs: + mirror: + name: Mirror Repository to Comfyanonymous/ComfyUI + runs-on: ubuntu-latest + steps: + - name: Checkout Mirror Repository + uses: actions/checkout@v4 + + - name: Configure Git + run: | + git config user.name "GitHub Actions Bot" + git config user.email "actions@github.com" + + - name: Add Remote Upstream + run: | + git remote add upstream https://github.com/comfyanonymous/ComfyUI.git + + - name: Fetch Upstream Changes + run: | + git fetch upstream master + + - name: Checkout Master Branch + run: | + git fetch --all + git checkout master + + - name: Rebase Upstream Changes + run: | + git rebase upstream/master + + - name: Push to Mirror + run: | + git remote set-url origin https://x-access-token:${{ secrets.ACCESS_TOKEN }}@github.com/Comfy-Org/ComfyUI.git + git push origin master -f + env: + GIT_SSH_COMMAND: ssh -v \ No newline at end of file diff --git a/.github/workflows/test-workflows-windows.yaml b/.github/workflows/test-workflows-windows.yaml new file mode 100644 index 00000000..e86d91cd --- /dev/null +++ b/.github/workflows/test-workflows-windows.yaml @@ -0,0 +1,28 @@ +name: Test ComfyUI Windows with Default Workflow +on: + issue_comment: + types: [created] + workflow_dispatch: + + +jobs: + test-action: + if: >- + (github.event_name == 'workflow_dispatch') || + (github.event_name == 'issue_comment' && + contains(github.event.comment.body, 'run_test') && + contains(fromJson('["WRITE", "MAINTAIN", "ADMIN"]'), github.event.comment.author_association)) + runs-on: Windows + steps: + - name: Use ComfyUI GitHub Action + uses: drip-art/comfy-action@main + with: + os: windows + cuda_version: 12.1 + workflow_name: "default-workflow" + models-json: '{"v1-5-pruned-emaonly.ckpt": {"url": "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors?download=true", "directory": "checkpoints"}}' + workflow_json_path: '.github/workflows/json_examples/workflow_api.json' + gcs_bucket_name: 'comfy-ci-results' + google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} + output_prefix: 'ComfyUI' + timeout: 50 \ No newline at end of file diff --git a/.github/workflows/test-workflows.yaml b/.github/workflows/test-workflows.yaml new file mode 100644 index 00000000..77009814 --- /dev/null +++ b/.github/workflows/test-workflows.yaml @@ -0,0 +1,47 @@ +name: Test ComfyUI Example Workflows +on: + pull_request_review: + types: [submitted] + workflow_dispatch: + +jobs: + test-default-workflow: + if: >- + (github.event_name == 'workflow_dispatch') || + (github.event.review.state == 'approved') + strategy: + matrix: + os: [macos, linux] + include: + - os: macos + runner_label: [self-hosted, m2] + - os: linux + cuda_version: 12.1 + runner_label: [self-hosted, Linux, nvidia-tesla-t4] + runs-on: ${{ matrix.runner_label }} + steps: + - name: Test Default Workflow + uses: drip-art/comfy-action@main + with: + os: ${{ matrix.os }} + cuda_version: ${{ matrix.cuda_version }} + models-json: '{"v1-5-pruned-emaonly.ckpt": {"url": "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt", "directory": "checkpoints"}}' + workflow_name: "default-workflow" + workflow_json_path: '.github/workflows/json_examples/workflow_api.json' + gcs_bucket_name: 'comfy-ci-results' + google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} + output_prefix: 'ComfyUI' + timeout: 50 + + - name: Test Lora Workflow + uses: drip-art/comfy-action@main + with: + os: ${{ matrix.os }} + cuda_version: ${{ matrix.cuda_version }} + models-json: '{"v1-5-pruned-emaonly.ckpt": {"url": "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt", "directory": "checkpoints"}, "epiNoiseoffset_v2.safetensors": {"url": "https://huggingface.co/adhikjoshi/epi_noiseoffset/resolve/main/epiNoiseoffset_v2.safetensors", "directory": "loras"}}' + workflow_name: "lora-workflow" + workflow_json_path: '.github/workflows/json_examples/workflow_lora_api.json' + gcs_bucket_name: 'comfy-ci-results' + google_credentials: ${{ secrets.GCS_SERVICE_ACCOUNT_JSON }} + output_prefix: 'ComfyUI' + timeout: 50 \ No newline at end of file