Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 1 addition & 35 deletions .github/actions/setup-uv-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,15 @@ inputs:
required: false
description: "The python version to use"
default: "3.11"
is-toolkit:
required: false
description: "Whether this is a toolkit package"
default: "false"
is-contrib:
required: false
description: "Whether this is a contrib package"
default: "false"
is-lib:
required: false
description: "Whether this is a library package"
default: "false"
working-directory:
required: false
description: "Working directory for the installation (used for toolkits)"
default: "."

runs:
using: "composite"
steps:
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
working-directory: ${{ inputs.working-directory }}
python-version: ${{ inputs.python-version }}

- name: Install toolkit dependencies
if: inputs.is-toolkit == 'true'
working-directory: ${{ inputs.working-directory }}
run: |
echo "Installing dependencies for ${{ inputs.working-directory }}"
make install-local
shell: bash

- name: Install contrib dependencies
if: inputs.is-contrib == 'true'
working-directory: ${{ inputs.working-directory }}
run: |
echo "Installing dependencies for ${{ inputs.working-directory }}"
make install
shell: bash

- name: Install libs dependencies
if: inputs.is-toolkit != 'true'
- name: Install dependencies
run: uv sync --extra all --extra dev
shell: bash
6 changes: 0 additions & 6 deletions .github/workflows/release-on-version-change.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,8 @@ jobs:
uses: ./.github/actions/setup-uv-env
with:
python-version: "3.10"
is-toolkit: ${{ startsWith(matrix.package, 'toolkits/') }}
is-contrib: ${{ startsWith(matrix.package, 'contrib/') }}
is-lib: ${{ startsWith(matrix.package, 'libs/') }}
working-directory: ${{ matrix.package }}

- name: Run tests
# Skip tests for toolkits - tests are run on every PR commit for toolkits
if: ${{ !startsWith(matrix.package, 'toolkits/') }}
working-directory: ${{ matrix.package }}
run: |
# Run tests if they exist
Expand Down
132 changes: 0 additions & 132 deletions .github/workflows/test-toolkits.yml

This file was deleted.

3 changes: 1 addition & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## What This Is

Arcade MCP is a Python tool-calling platform for building MCP (Model Context Protocol) servers. It's a monorepo containing 5 interdependent libraries, 30+ prebuilt toolkit integrations, and a CLI.
Arcade MCP is a Python tool-calling platform for building MCP (Model Context Protocol) servers. It's a monorepo containing 5 interdependent libraries and a CLI.

## Commands

Expand All @@ -15,7 +15,6 @@ Arcade MCP is a Python tool-calling platform for building MCP (Model Context Pro
| Run a single test | `uv run pytest libs/tests/core/test_toolkit.py::TestClass::test_method` |
| Lint + type check | `make check` (pre-commit + mypy) |
| Build all wheels | `make build` |
| Run toolkit tests | `make test-toolkits` |

Package manager is **uv** — always use `uv run` to execute Python commands, never bare `pip` or `python`. Python 3.10+. Build system is Hatchling.

Expand Down
117 changes: 3 additions & 114 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,6 @@ install: ## Install the uv environment and all packages with dependencies
@uv run pre-commit install
@echo "✅ All packages and dependencies installed via uv workspace"

.PHONY: install-toolkits
install-toolkits: ## Install dependencies for all toolkits
@echo "🚀 Installing dependencies for all toolkits"
@failed=0; \
successful=0; \
for dir in toolkits/*/ ; do \
if [ -d "$$dir" ] && [ -f "$$dir/pyproject.toml" ]; then \
echo "📦 Installing dependencies for $$dir"; \
if (cd $$dir && uv pip install -e ".[dev]"); then \
successful=$$((successful + 1)); \
else \
echo "❌ Failed to install dependencies for $$dir"; \
failed=$$((failed + 1)); \
fi; \
else \
echo "⚠️ Skipping $$dir (no pyproject.toml found)"; \
fi; \
done; \
echo ""; \
echo "📊 Installation Summary:"; \
echo " ✅ Successful: $$successful toolkits"; \
echo " ❌ Failed: $$failed toolkits"; \
if [ $$failed -gt 0 ]; then \
echo ""; \
echo "⚠️ Some toolkit installations failed. Check the output above for details."; \
exit 1; \
else \
echo ""; \
echo "🎉 All toolkit dependencies installed successfully!"; \
fi

.PHONY: check
check: ## Run code quality tools.
@echo "🚀 Linting code: Running pre-commit"
Expand All @@ -56,18 +25,6 @@ check-libs: ## Run code quality tools for each lib package
(cd $$lib && uv run mypy . || true); \
done

.PHONY: check-toolkits
check-toolkits: ## Run code quality tools for each toolkit that has a Makefile
@echo "🚀 Running 'make check' in each toolkit with a Makefile"
@for dir in toolkits/*/ ; do \
if [ -f "$$dir/Makefile" ]; then \
echo "🛠️ Checking toolkit $$dir"; \
(cd "$$dir" && uv run pre-commit run -a && uv run mypy --config-file=pyproject.toml); \
else \
echo "🛠️ Skipping toolkit $$dir (no Makefile found)"; \
fi; \
done

.PHONY: test
test: install ## Test the code with pytest
@echo "🚀 Testing libs: Running pytest"
Expand All @@ -81,15 +38,6 @@ test-libs: ## Test each lib package individually
(cd $$lib && uv run pytest -W ignore -v || true); \
done

.PHONY: test-toolkits
test-toolkits: ## Iterate over all toolkits and run pytest on each one
@echo "🚀 Testing code in toolkits: Running pytest"
@for dir in toolkits/*/ ; do \
toolkit_name=$$(basename "$$dir"); \
echo "🧪 Testing $$toolkit_name toolkit"; \
(cd $$dir && uv run pytest -W ignore -v --cov=arcade_$$toolkit_name --cov-report=xml || exit 1); \
done

.PHONY: coverage
coverage: ## Generate coverage report
@echo "coverage report"
Expand All @@ -107,38 +55,6 @@ build: clean-build ## Build wheel files using uv
fi; \
done

.PHONY: build-toolkits
build-toolkits: ## Build wheel files for all toolkits
@echo "🚀 Creating wheel files for all toolkits"
@failed=0; \
successful=0; \
for dir in toolkits/*/ ; do \
if [ -d "$$dir" ] && [ -f "$$dir/pyproject.toml" ]; then \
toolkit_name=$$(basename "$$dir"); \
echo "🛠️ Building toolkit $$toolkit_name"; \
if (cd $$dir && uv build); then \
successful=$$((successful + 1)); \
else \
echo "❌ Failed to build toolkit $$toolkit_name"; \
failed=$$((failed + 1)); \
fi; \
else \
echo "⚠️ Skipping $$dir (no pyproject.toml found)"; \
fi; \
done; \
echo ""; \
echo "📊 Build Summary:"; \
echo " ✅ Successful: $$successful toolkits"; \
echo " ❌ Failed: $$failed toolkits"; \
if [ $$failed -gt 0 ]; then \
echo ""; \
echo "⚠️ Some toolkit builds failed. Check the output above for details."; \
exit 1; \
else \
echo ""; \
echo "🎉 All toolkit wheels built successfully!"; \
fi

.PHONY: clean-build
clean-build: ## clean build artifacts
@echo "🗑️ Cleaning build artifacts"
Expand All @@ -161,30 +77,19 @@ build-and-publish: build publish ## Build and publish.

.PHONY: docker
docker: ## Build and run the Docker container
@echo "🚀 Building lib packages and toolkit wheels..."
@echo "🚀 Building lib packages..."
@make full-dist
@echo "🚀 Building Docker image"
@cd docker && make docker-build
@cd docker && make docker-run

.PHONY: docker-base
docker-base: ## Build and run the Docker container
@echo "🚀 Building lib packages and toolkit wheels..."
@make full-dist
@echo "🚀 Building Docker image"
@cd docker && INSTALL_TOOLKITS=false make docker-build
@cd docker && INSTALL_TOOLKITS=false make docker-run

.PHONY: publish-ghcr
publish-ghcr: ## Publish to the GHCR
# Publish the base image - ghcr.io/arcadeai/worker-base
@cd docker && INSTALL_TOOLKITS=false make publish-ghcr
# Publish the image with toolkits - ghcr.io/arcadeai/worker
@cd docker && INSTALL_TOOLKITS=true make publish-ghcr
@cd docker && make publish-ghcr

.PHONY: full-dist
full-dist: clean-dist ## Build all projects and copy wheels to ./dist
@echo "🛠️ Building a full distribution with lib packages and toolkits"
@echo "🛠️ Building a full distribution with lib packages"

@echo "🛠️ Building all lib packages and copying wheels to ./dist"
@mkdir -p dist
Expand All @@ -198,16 +103,6 @@ full-dist: clean-dist ## Build all projects and copy wheels to ./dist
@uv build
@rm -f dist/*.tar.gz

@echo "🛠️ Building all toolkit packages and copying wheels to ./dist"
@for dir in toolkits/*/ ; do \
if [ -d "$$dir" ] && [ -f "$$dir/pyproject.toml" ]; then \
toolkit_name=$$(basename "$$dir"); \
echo "🛠️ Building toolkit $$toolkit_name wheel..."; \
(cd $$dir && uv build); \
cp $$dir/dist/*.whl dist/; \
fi; \
done

.PHONY: clean-dist
clean-dist: ## Clean all built distributions
@echo "🗑️ Cleaning dist directory"
Expand All @@ -216,12 +111,6 @@ clean-dist: ## Clean all built distributions
@for lib in libs/arcade*/ ; do \
rm -rf "$$lib"/dist; \
done
@echo "🗑️ Cleaning toolkits/*/dist directory"
@for toolkit_dir in toolkits/*; do \
if [ -d "$$toolkit_dir" ]; then \
rm -rf "$$toolkit_dir"/dist; \
fi; \
done

.PHONY: setup
setup: ## Run uv environment setup script
Expand Down
Loading