ci(labeler): fix dead rules, cover all plugin dirs, drop vendored artifacts (#121348)

* ci(labeler): fix dead rules and cover unlabeled plugin dirs

* chore: drop vendored swabble workflow and empty ActivityWidget asset catalog
This commit is contained in:
Peter Steinberger
2026-08-09 22:28:02 -07:00
committed by GitHub
parent 2873fbbc56
commit 3156b67708
4 changed files with 161 additions and 72 deletions
+123 -12
View File
@@ -44,7 +44,6 @@
"channel: feishu":
- changed-files:
- any-glob-to-any-file:
- "src/feishu/**"
- "extensions/feishu/**"
- "docs/channels/feishu.md"
"channel: googlechat":
@@ -306,7 +305,6 @@
- changed-files:
- any-glob-to-any-file:
- "Dockerfile"
- "Dockerfile.*"
- "docker-compose.yml"
- ".dockerignore"
- "deploy/fly.private.toml"
@@ -368,6 +366,10 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/llama-cpp/**"
"extensions: active-memory":
- changed-files:
- any-glob-to-any-file:
- "extensions/active-memory/**"
"extensions: memory-core":
- changed-files:
- any-glob-to-any-file:
@@ -380,6 +382,10 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/memory-wiki/**"
"extensions: media-understanding-core":
- changed-files:
- any-glob-to-any-file:
- "extensions/media-understanding-core/**"
"extensions: oc-path":
- changed-files:
- any-glob-to-any-file:
@@ -413,10 +419,20 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/webhooks/**"
"extensions: web-readability":
- changed-files:
- any-glob-to-any-file:
- "extensions/web-readability/**"
- "docs/plugins/reference/web-readability.md"
"extensions: device-pair":
- changed-files:
- any-glob-to-any-file:
- "extensions/device-pair/**"
"extensions: document-extract":
- changed-files:
- any-glob-to-any-file:
- "extensions/document-extract/**"
- "docs/plugins/reference/document-extract.md"
"extensions: duckduckgo":
- changed-files:
- any-glob-to-any-file:
@@ -448,6 +464,12 @@
- any-glob-to-any-file:
- "extensions/clawrouter/**"
- "docs/providers/clawrouter.md"
"extensions: clickclack":
- changed-files:
- any-glob-to-any-file:
- "extensions/clickclack/**"
- "docs/plugins/reference/clickclack.md"
- "docs/channels/clickclack.md"
"extensions: crabbox":
- changed-files:
- any-glob-to-any-file:
@@ -456,6 +478,12 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/deepseek/**"
"extensions: deepgram":
- changed-files:
- any-glob-to-any-file:
- "extensions/deepgram/**"
- "docs/providers/deepgram.md"
- "docs/plugins/reference/deepgram.md"
"extensions: deepinfra":
- changed-files:
- any-glob-to-any-file:
@@ -489,10 +517,18 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/cloudflare-ai-gateway/**"
"extensions: minimax-portal-auth":
"extensions: cohere":
- changed-files:
- any-glob-to-any-file:
- "extensions/minimax-portal-auth/**"
- "extensions/cohere/**"
- "docs/providers/cohere.md"
- "docs/plugins/reference/cohere.md"
"extensions: comfy":
- changed-files:
- any-glob-to-any-file:
- "extensions/comfy/**"
- "docs/providers/comfy.md"
- "docs/plugins/reference/comfy.md"
"extensions: huggingface":
- changed-files:
- any-glob-to-any-file:
@@ -502,6 +538,10 @@
- any-glob-to-any-file:
- "extensions/inworld/**"
- "docs/providers/inworld.md"
"extensions: image-generation-core":
- changed-files:
- any-glob-to-any-file:
- "extensions/image-generation-core/**"
"extensions: fish-audio":
- changed-files:
- any-glob-to-any-file:
@@ -557,10 +597,6 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/minimax/**"
"extensions: modelstudio":
- changed-files:
- any-glob-to-any-file:
- "extensions/modelstudio/**"
"extensions: moonshot":
- changed-files:
- any-glob-to-any-file:
@@ -574,14 +610,27 @@
- any-glob-to-any-file:
- "extensions/novita/**"
- "docs/providers/novita.md"
"extensions: phone-control":
- changed-files:
- any-glob-to-any-file:
- "extensions/phone-control/**"
"extensions: qianfan":
- changed-files:
- any-glob-to-any-file:
- "extensions/qianfan/**"
"extensions: qwen":
- changed-files:
- any-glob-to-any-file:
- "extensions/qwen/**"
- "docs/providers/qwen.md"
- "docs/plugins/reference/qwen.md"
"extensions: runway":
- changed-files:
- any-glob-to-any-file:
- "extensions/runway/**"
- "docs/providers/runway.md"
- "docs/plugins/reference/runway.md"
"extensions: searxng":
- changed-files:
- any-glob-to-any-file:
- "extensions/searxng/**"
- "docs/plugins/reference/searxng.md"
"extensions: senseaudio":
- changed-files:
- any-glob-to-any-file:
@@ -616,10 +665,25 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/vercel-ai-gateway/**"
"extensions: video-generation-core":
- changed-files:
- any-glob-to-any-file:
- "extensions/video-generation-core/**"
"extensions: volcengine":
- changed-files:
- any-glob-to-any-file:
- "extensions/volcengine/**"
"extensions: voyage":
- changed-files:
- any-glob-to-any-file:
- "extensions/voyage/**"
- "docs/plugins/reference/voyage.md"
"extensions: vydra":
- changed-files:
- any-glob-to-any-file:
- "extensions/vydra/**"
- "docs/providers/vydra.md"
- "docs/plugins/reference/vydra.md"
"extensions: xiaomi":
- changed-files:
- any-glob-to-any-file:
@@ -632,10 +696,27 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/gradium/**"
"extensions: groq":
- changed-files:
- any-glob-to-any-file:
- "extensions/groq/**"
- "docs/providers/groq.md"
- "docs/plugins/reference/groq.md"
"extensions: alibaba":
- changed-files:
- any-glob-to-any-file:
- "extensions/alibaba/**"
- "docs/providers/alibaba.md"
- "docs/plugins/reference/alibaba.md"
"extensions: amazon-bedrock":
- changed-files:
- any-glob-to-any-file:
- "extensions/amazon-bedrock/**"
"extensions: amazon-bedrock-mantle":
- changed-files:
- any-glob-to-any-file:
- "extensions/amazon-bedrock-mantle/**"
- "docs/plugins/reference/amazon-bedrock-mantle.md"
"extensions: anthropic-vertex":
- changed-files:
- any-glob-to-any-file:
@@ -644,6 +725,16 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/brave/**"
"extensions: browser":
- changed-files:
- any-glob-to-any-file:
- "extensions/browser/**"
- "docs/plugins/reference/browser.md"
"extensions: canvas":
- changed-files:
- any-glob-to-any-file:
- "extensions/canvas/**"
- "docs/plugins/reference/canvas.md"
"extensions: chutes":
- changed-files:
- any-glob-to-any-file:
@@ -657,10 +748,21 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/elevenlabs/**"
"extensions: exa":
- changed-files:
- any-glob-to-any-file:
- "extensions/exa/**"
- "docs/plugins/reference/exa.md"
"extensions: firecrawl":
- changed-files:
- any-glob-to-any-file:
- "extensions/firecrawl/**"
"extensions: fireworks":
- changed-files:
- any-glob-to-any-file:
- "extensions/fireworks/**"
- "docs/providers/fireworks.md"
- "docs/plugins/reference/fireworks.md"
"extensions: github-copilot":
- changed-files:
- any-glob-to-any-file:
@@ -673,6 +775,11 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/microsoft/**"
"extensions: microsoft-foundry":
- changed-files:
- any-glob-to-any-file:
- "extensions/microsoft-foundry/**"
- "docs/plugins/reference/microsoft-foundry.md"
"extensions: mistral":
- changed-files:
- any-glob-to-any-file:
@@ -709,6 +816,10 @@
- changed-files:
- any-glob-to-any-file:
- "extensions/sglang/**"
"extensions: test-support":
- changed-files:
- any-glob-to-any-file:
- "extensions/test-support/**"
"extensions: vllm":
- changed-files:
- any-glob-to-any-file:
@@ -1,6 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
-54
View File
@@ -1,54 +0,0 @@
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
build-and-test:
runs-on: macos-15
defaults:
run:
shell: bash
working-directory: swabble
steps:
- name: Checkout swabble
uses: actions/checkout@v4
with:
path: swabble
- name: Select Xcode 26.1 (prefer 26.1.1)
run: |
set -euo pipefail
# pick the newest installed 26.1.x, fallback to newest 26.x
CANDIDATE="$(ls -d /Applications/Xcode_26.1*.app 2>/dev/null | sort -V | tail -1 || true)"
if [[ -z "$CANDIDATE" ]]; then
CANDIDATE="$(ls -d /Applications/Xcode_26*.app 2>/dev/null | sort -V | tail -1 || true)"
fi
if [[ -z "$CANDIDATE" ]]; then
echo "No Xcode 26.x found on runner" >&2
exit 1
fi
echo "Selecting $CANDIDATE"
sudo xcode-select -s "$CANDIDATE"
xcodebuild -version
- name: Show Swift version
run: swift --version
- name: Install tooling
run: |
brew update
brew install swiftlint swiftformat
- name: Format check
run: |
./scripts/format.sh
git diff --exit-code
- name: Lint
run: ./scripts/lint.sh
- name: Test
run: swift test --parallel
@@ -0,0 +1,38 @@
import { readdirSync, readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { describe, expect, it } from "vitest";
import { parse } from "yaml";
type LabelerRule = Array<{
"changed-files"?: Array<{
"any-glob-to-any-file"?: string[];
}>;
}>;
const repoRoot = path.resolve(fileURLToPath(new URL("../..", import.meta.url)));
const extensionsRoot = path.join(repoRoot, "extensions");
const labelerPath = path.join(repoRoot, ".github/labeler.yml");
const extensionDirectories = readdirSync(extensionsRoot, { withFileTypes: true })
.filter((entry) => entry.isDirectory())
.map((entry) => entry.name)
.sort();
const extensionDirectorySet = new Set(extensionDirectories);
const labeler = parse(readFileSync(labelerPath, "utf8")) as Record<string, LabelerRule>;
const extensionGlobDirectories = Object.values(labeler)
.flatMap((rules) => rules)
.flatMap((rule) => rule["changed-files"] ?? [])
.flatMap((changedFiles) => changedFiles["any-glob-to-any-file"] ?? [])
.flatMap((glob) => glob.match(/^extensions\/([^/]+)\//)?.[1] ?? []);
const coveredExtensionDirectories = new Set(extensionGlobDirectories);
describe("labeler extension coverage", () => {
it("covers every extension directory", () => {
expect(extensionDirectories.filter((dir) => !coveredExtensionDirectories.has(dir))).toEqual([]);
});
it("references only existing extension directories", () => {
expect(extensionGlobDirectories.filter((dir) => !extensionDirectorySet.has(dir))).toEqual([]);
});
});