From 2d2592e3023b2e011b63f3c0fb2e7ffd99f3618e Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 16 Oct 2026 12:31:33 -0400 Subject: [PATCH 1/3] ci: bump python to 3.15 Python 3.15.0 is out. Co-Authored-By: Claude --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3503800..4951f99 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: pull_request: jobs: test: - name: "pytest@python3.14" + name: "pytest@python3.15" runs-on: ubuntu-latest permissions: contents: read @@ -27,7 +27,7 @@ jobs: - name: Install Python uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: - python-version: "3.14" + python-version: "3.15" - name: Run tests run: | cd "${{ matrix.showcase }}" From 2fadafce5d47aed975d685bb7105502ad8d3c1f0 Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 16 Oct 2026 15:15:42 -0400 Subject: [PATCH 2/3] ci: use a version-agnostic test job name Required status checks match on the job name, so pinning the python version in it breaks the ruleset on every runtime bump. Co-Authored-By: Claude --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4951f99..822bc7b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: pull_request: jobs: test: - name: "pytest@python3.15" + name: "pytest" runs-on: ubuntu-latest permissions: contents: read From bce70d0e4a1bdd94491ee1ab708486c447bfb7ee Mon Sep 17 00:00:00 2001 From: William Bergamin Date: Fri, 16 Oct 2026 15:37:43 -0400 Subject: [PATCH 3/3] ci: run lint, typecheck, and tests as separate jobs in one workflow Replace test.yml with ci.yml (CI): lint (ruff check and format), typecheck (mypy), and test (pytest) jobs, each per showcase. methods has no tests, so the test matrix skips it instead of guarding in shell. Co-Authored-By: Claude --- .github/workflows/ci.yml | 102 +++++++++++++++++++++++++++++++++++++ .github/workflows/test.yml | 38 -------------- 2 files changed, 102 insertions(+), 38 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c24ba7d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,102 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + fail-fast: false + matrix: + showcase: + - "ai/slackbot-mcp-client/no-auth" + - "ai/slackbot-mcp-client/rich-responses/mcp-apps" + - "ai/slackbot-mcp-client/slack-identity" + - "block-kit" + - "methods" + defaults: + run: + working-directory: ${{ matrix.showcase }} + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.15" + - name: Install dependencies + run: | + pip install -U pip + pip install -r requirements.txt + - name: Lint and check formatting + run: | + ruff check . + ruff format --diff --check . + typecheck: + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + fail-fast: false + matrix: + showcase: + - "ai/slackbot-mcp-client/no-auth" + - "ai/slackbot-mcp-client/rich-responses/mcp-apps" + - "ai/slackbot-mcp-client/slack-identity" + - "block-kit" + - "methods" + defaults: + run: + working-directory: ${{ matrix.showcase }} + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.15" + - name: Install dependencies + run: | + pip install -U pip + pip install -r requirements.txt + - name: Type check + run: | + mypy . + test: + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + fail-fast: false + matrix: + showcase: + - "ai/slackbot-mcp-client/no-auth" + - "ai/slackbot-mcp-client/rich-responses/mcp-apps" + - "ai/slackbot-mcp-client/slack-identity" + - "block-kit" + defaults: + run: + working-directory: ${{ matrix.showcase }} + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Set up Python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.15" + - name: Install dependencies + run: | + pip install -U pip + pip install -r requirements.txt + - name: Run all tests + run: | + pytest -v diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 822bc7b..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Test -on: - push: - branches: - - main - pull_request: -jobs: - test: - name: "pytest" - runs-on: ubuntu-latest - permissions: - contents: read - strategy: - fail-fast: false - matrix: - showcase: - - "ai/slackbot-mcp-client/no-auth" - - "ai/slackbot-mcp-client/rich-responses/mcp-apps" - - "ai/slackbot-mcp-client/slack-identity" - - "block-kit" - - "methods" - steps: - - name: Checkout code - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - persist-credentials: false - - name: Install Python - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 - with: - python-version: "3.15" - - name: Run tests - run: | - cd "${{ matrix.showcase }}" - pip install -r requirements.txt - ruff check - ruff format --diff --check - mypy . - if [ -d tests ]; then pytest -v; fi