From c871d650beba1f3485ad63592503c55d244b071f Mon Sep 17 00:00:00 2001 From: KAMAL Date: Tue, 26 May 2026 19:53:35 +0300 Subject: [PATCH 1/3] ci: add GitHub Actions workflow for Linux release artifacts Builds AppImage and .deb on ubuntu-22.04 whenever a release is published. Uploads both artifacts plus the wheel directly to the GitHub release. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/linux-release.yml | 69 +++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/linux-release.yml diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml new file mode 100644 index 0000000..53b7216 --- /dev/null +++ b/.github/workflows/linux-release.yml @@ -0,0 +1,69 @@ +name: Linux Release Artifacts + +on: + release: + types: [published] + +jobs: + build-linux: + name: Build AppImage + .deb + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install build tools + run: | + python -m pip install --upgrade pip + pip install build setuptools wheel + + - name: Install app dependencies + run: pip install -r requirements.txt + + - name: Build Python wheel + run: python -m build --wheel --no-isolation + + - name: Install AppImage + .deb prerequisites + run: | + sudo apt-get update -qq + sudo apt-get install -y wget fuse libfuse2 dpkg-dev + + - name: Build AppImage + run: | + bash linux/appimage/build_appimage.sh \ + --wheel dist/vibrante_node-*.whl + + - name: Build .deb package + run: | + bash linux/deb/build_deb.sh \ + --wheel dist/vibrante_node-*.whl + + - name: Upload AppImage + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload "${{ github.ref_name }}" \ + linux/build/Vibrante-Node-*-x86_64.AppImage \ + --clobber + + - name: Upload .deb + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload "${{ github.ref_name }}" \ + linux/build/vibrante-node_*.deb \ + --clobber + + - name: Upload wheel (if not already present) + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload "${{ github.ref_name }}" \ + dist/vibrante_node-*.whl \ + --clobber From 63d86260224512176f36e9a9f12ac69a04034e51 Mon Sep 17 00:00:00 2001 From: KAMAL Date: Tue, 26 May 2026 19:54:31 +0300 Subject: [PATCH 2/3] ci: add workflow_dispatch trigger for manual Linux artifact builds Allows triggering the Linux build from any branch via the Actions UI. Pass release_tag input (e.g. v2.4.0) to upload to an existing release. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/linux-release.yml | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml index 53b7216..3e4b512 100644 --- a/.github/workflows/linux-release.yml +++ b/.github/workflows/linux-release.yml @@ -3,6 +3,12 @@ name: Linux Release Artifacts on: release: types: [published] + workflow_dispatch: + inputs: + release_tag: + description: "Release tag to upload artifacts to (e.g. v2.4.0)" + required: true + default: "v2.4.0" jobs: build-linux: @@ -44,11 +50,20 @@ jobs: bash linux/deb/build_deb.sh \ --wheel dist/vibrante_node-*.whl + - name: Resolve release tag + id: tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "value=${{ github.event.inputs.release_tag }}" >> $GITHUB_OUTPUT + else + echo "value=${{ github.ref_name }}" >> $GITHUB_OUTPUT + fi + - name: Upload AppImage env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release upload "${{ github.ref_name }}" \ + gh release upload "${{ steps.tag.outputs.value }}" \ linux/build/Vibrante-Node-*-x86_64.AppImage \ --clobber @@ -56,14 +71,14 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release upload "${{ github.ref_name }}" \ + gh release upload "${{ steps.tag.outputs.value }}" \ linux/build/vibrante-node_*.deb \ --clobber - - name: Upload wheel (if not already present) + - name: Upload wheel env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh release upload "${{ github.ref_name }}" \ + gh release upload "${{ steps.tag.outputs.value }}" \ dist/vibrante_node-*.whl \ --clobber From 01c021cb722ea08069ededf175f209aa37b71114 Mon Sep 17 00:00:00 2001 From: KAMAL Date: Tue, 26 May 2026 19:56:57 +0300 Subject: [PATCH 3/3] chore: add MCP demo workflows; ignore .mcp_deps/ and tmp/ Add hou_mcp_scene_context_demo and mcp_list_tools_demo smoke-test workflows. Exclude .mcp_deps/ (cached packages) and tmp/ (orchestration run reports) from version control. Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 6 ++ workflows/hou_mcp_scene_context_demo.json | 67 +++++++++++++++++ workflows/mcp_list_tools_demo.json | 90 +++++++++++++++++++++++ 3 files changed, 163 insertions(+) create mode 100644 workflows/hou_mcp_scene_context_demo.json create mode 100644 workflows/mcp_list_tools_demo.json diff --git a/.gitignore b/.gitignore index a6e8ddd..412dc09 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,9 @@ linux/build/ # Runtime logs crash.log upload_result.json + +# Cached MCP / package dependencies (local dev only) +.mcp_deps/ + +# Temporary orchestration run reports +tmp/ diff --git a/workflows/hou_mcp_scene_context_demo.json b/workflows/hou_mcp_scene_context_demo.json new file mode 100644 index 0000000..9a96c6c --- /dev/null +++ b/workflows/hou_mcp_scene_context_demo.json @@ -0,0 +1,67 @@ +{ + "nodes": [ + { + "instance_id": "d538ca27-24a2-4786-b480-a88328ed5306", + "node_id": "hou_mcp_scene_context", + "position": [-280.0, -80.0], + "parameters": { + "exec_in": null, + "exec_out": true, + "include_selection": true, + "include_assets": true, + "include_render": true, + "force_refresh": false, + "context": {}, + "context_json": "", + "scene": {}, + "networks": {}, + "selection": [] + }, + "state": "idle" + }, + { + "instance_id": "ce864ced-6172-4611-b522-0409084628ba", + "node_id": "console_print", + "position": [220.0, -80.0], + "parameters": { + "exec_in": null, + "exec_out": true, + "data": "", + "out": "" + }, + "state": "idle" + } + ], + "connections": [ + { + "id": "ecc29f87-2a4d-476c-a69d-54d2ca541999", + "from_node": "d538ca27-24a2-4786-b480-a88328ed5306", + "from_port": "exec_out", + "to_node": "ce864ced-6172-4611-b522-0409084628ba", + "to_port": "exec_in", + "is_exec": true + }, + { + "id": "8b2f1c32-98f3-4a01-aa71-4166aa31786d", + "from_node": "d538ca27-24a2-4786-b480-a88328ed5306", + "from_port": "context_json", + "to_node": "ce864ced-6172-4611-b522-0409084628ba", + "to_port": "data", + "is_exec": false + } + ], + "sticky_notes": [ + { + "id": "d86cbc0b-8fd2-4d8c-babd-be6fbae395e2", + "position": [-280.0, -210.0], + "size": [680.0, 110.0], + "text": "Demo: aggregate the live Houdini scene state via the runtime layer and print the JSON-serialised context.\n\nPrereqs: Vibrante-Node was launched from Houdini (the bridge is reachable). The output is shape-stable JSON — feed it directly into an LLM prompt.\n\nToggle force_refresh on the scene_context node to bypass the 5-second cache.", + "color": "#ffffcc" + } + ], + "backdrops": [], + "metadata": { + "name": "Houdini MCP: Scene Context Demo", + "description": "Tier 1 smoke graph for the AI-oriented scene context node." + } +} diff --git a/workflows/mcp_list_tools_demo.json b/workflows/mcp_list_tools_demo.json new file mode 100644 index 0000000..5abed58 --- /dev/null +++ b/workflows/mcp_list_tools_demo.json @@ -0,0 +1,90 @@ +{ + "nodes": [ + { + "instance_id": "2ee17392-cacb-4e57-92ab-d2817996c8a6", + "node_id": "mcp_server_init", + "position": [-360.0, -80.0], + "parameters": { + "exec_in": null, + "exec_out": true, + "server_name": "everything", + "transport_type": "stdio", + "command": "npx", + "args": "-y, @modelcontextprotocol/server-everything", + "env_json": "", + "url": "", + "connected": false, + "server_info": {}, + "capabilities": {} + }, + "state": "idle" + }, + { + "instance_id": "8ed659c6-c027-431a-942b-f7e1f0459d6a", + "node_id": "mcp_list_tools", + "position": [40.0, -80.0], + "parameters": { + "exec_in": null, + "exec_out": true, + "server_name": "everything", + "tools": [], + "names": [], + "schemas": [], + "count": 0 + }, + "state": "idle" + }, + { + "instance_id": "12f93d2e-59c7-482c-ae5b-f3fa7305a33c", + "node_id": "console_print", + "position": [400.0, -80.0], + "parameters": { + "exec_in": null, + "exec_out": true, + "data": "", + "out": "" + }, + "state": "idle" + } + ], + "connections": [ + { + "id": "dc90adad-04a3-492a-9360-cd7f42b08697", + "from_node": "2ee17392-cacb-4e57-92ab-d2817996c8a6", + "from_port": "exec_out", + "to_node": "8ed659c6-c027-431a-942b-f7e1f0459d6a", + "to_port": "exec_in", + "is_exec": true + }, + { + "id": "32b30ae5-c747-4f24-adb7-70f159ba08c6", + "from_node": "8ed659c6-c027-431a-942b-f7e1f0459d6a", + "from_port": "exec_out", + "to_node": "12f93d2e-59c7-482c-ae5b-f3fa7305a33c", + "to_port": "exec_in", + "is_exec": true + }, + { + "id": "9cbfd9da-6465-4d8d-9e70-80782509dd96", + "from_node": "8ed659c6-c027-431a-942b-f7e1f0459d6a", + "from_port": "names", + "to_node": "12f93d2e-59c7-482c-ae5b-f3fa7305a33c", + "to_port": "data", + "is_exec": false + } + ], + "sticky_notes": [ + { + "id": "6a8b449a-2dd5-4393-96db-5ec3dbf91a9c", + "position": [-360.0, -200.0], + "size": [820.0, 90.0], + "text": "Demo: connect to the reference MCP server (npx @modelcontextprotocol/server-everything), list its tools, then print their names.\n\nPrereqs: Node.js with npx on PATH, mcp Python package installed (pip install mcp). The first run will download the server package on demand.", + "color": "#ffffcc" + } + ], + "backdrops": [], + "metadata": { + "name": "MCP: List Tools Demo", + "description": "Tier 1 smoke graph for the generic MCP client nodes." + } +}