This is an automated email from the ASF dual-hosted git repository.
FreeOnePlus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-mcp-server.git
The following commit(s) were added to refs/heads/master by this push:
new 953c3b6 Add Apache source release license gate (#192)
953c3b6 is described below
commit 953c3b6c5bbabb297f3ca625a42912c93dc06471
Author: Yijia Su <[email protected]>
AuthorDate: Sat Aug 1 04:37:07 2026 +0800
Add Apache source release license gate (#192)
---
.github/workflows/ci.yml | 21 ++++++++++
.licenserc.yaml | 45 ++++++++++++++++++++++
CHANGELOG.md | 3 ++
docs/decisions/0002-explicit-state-handles.md | 19 +++++++++
docs/migration-1.0.0.md | 19 +++++++++
docs/release-notes-1.0.0.md | 19 +++++++++
docs/tool-registry.md | 19 +++++++++
doris_mcp_server/auth/doris_oauth_handlers.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_provider.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_rate_limit.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_redirects.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_scope_policy.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_store.py | 17 ++++++++
doris_mcp_server/auth/doris_oauth_types.py | 17 ++++++++
doris_mcp_server/tools/domain_catalog.py | 24 +++++++++++-
examples/dify/dify_doris_dsl.yml | 17 ++++++++
test/auth/test_doris_oauth_routes.py | 17 ++++++++
test/auth/test_doris_oauth_store.py | 17 ++++++++
test/deployment/test_github_actions_contract.py | 9 ++++-
test/protocol/test_multiworker_config.py | 17 ++++++++
test/security/test_auth_context.py | 17 ++++++++
test/security/test_auth_cross_matrix.py | 17 ++++++++
test/security/test_effective_auth_config.py | 17 ++++++++
test/security/test_mcp_auth_middleware.py | 17 ++++++++
test/security/test_mcp_cors.py | 17 ++++++++
test/security/test_operation_policy.py | 17 ++++++++
test/security/test_token_prefix_reservation.py | 17 ++++++++
test/tools/test_domain_catalog.py | 5 ++-
test/tools/test_prompts_manager_errors.py | 17 ++++++++
test/tools/test_resources_manager_cache.py | 17 ++++++++
test/tools/test_tools_operation_guard.py | 17 ++++++++
test/utils/test_db.py | 17 ++++++++
test/utils/test_doris_user_pool_manager.py | 17 ++++++++
...schema_extractor_doris_oauth_metadata_errors.py | 17 ++++++++
34 files changed, 588 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 302865a..eaa037c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
name: CI
on:
@@ -24,6 +41,10 @@ jobs:
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
with:
persist-credentials: false
+ - name: Check Apache license headers
+ uses:
apache/skywalking-eyes/header@315732dd4b8d3a015d8d9b91936b935a0b854817
+ with:
+ token: ""
- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
with:
diff --git a/.licenserc.yaml b/.licenserc.yaml
new file mode 100644
index 0000000..b20a8de
--- /dev/null
+++ b/.licenserc.yaml
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+header:
+ license:
+ spdx-id: Apache-2.0
+ copyright-owner: Apache Software Foundation
+
+ paths-ignore:
+ - '.git'
+ - '.local'
+ - '.venv'
+ - '.pytest_cache'
+ - '.mypy_cache'
+ - '.ruff_cache'
+ - '.dockerignore'
+ - '.gitignore'
+ - 'dist'
+ - 'htmlcov'
+ - 'logs'
+ - 'coverage.xml'
+ - '**/__pycache__/**'
+ - '**/*.egg-info/**'
+ - '**/*.json'
+ - 'LICENSE.txt'
+ - 'NOTICE'
+ - 'requirements-dev.txt'
+ - 'requirements.txt'
+ - 'uv.lock'
+
+ comment: on-failure
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ad919dc..e1a82e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -62,6 +62,9 @@ under **Unreleased** until a new version is selected and
published.
### Fixed
+- Added the Apache SkyWalking Eyes release gate, its bounded repository
+ configuration, and the missing ASF license headers required for source
+ release verification.
- Kept the fully available 12-child Semantic manifest below the 16 KiB
progressive-disclosure budget by publishing only the child call signature;
the Server still applies the complete validation schema at execution time.
diff --git a/docs/decisions/0002-explicit-state-handles.md
b/docs/decisions/0002-explicit-state-handles.md
index 37f88d3..b522f0f 100644
--- a/docs/decisions/0002-explicit-state-handles.md
+++ b/docs/decisions/0002-explicit-state-handles.md
@@ -1,3 +1,22 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
# ADR 0002: Cross-call state uses explicit principal-bound handles
## Status
diff --git a/docs/migration-1.0.0.md b/docs/migration-1.0.0.md
index e971f5d..cee5fd4 100644
--- a/docs/migration-1.0.0.md
+++ b/docs/migration-1.0.0.md
@@ -1,3 +1,22 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
# Migrating to Doris MCP Server 1.0.0
Expanded guides: [English](migration/1.0.0.md) |
diff --git a/docs/release-notes-1.0.0.md b/docs/release-notes-1.0.0.md
index 7892ac5..c7a2eb6 100644
--- a/docs/release-notes-1.0.0.md
+++ b/docs/release-notes-1.0.0.md
@@ -1,3 +1,22 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
# Doris MCP Server 1.0.0 Release Notes
Expanded guides: [English](releases/1.0.0.md) |
diff --git a/docs/tool-registry.md b/docs/tool-registry.md
index 0fb5281..a11acb3 100644
--- a/docs/tool-registry.md
+++ b/docs/tool-registry.md
@@ -1,3 +1,22 @@
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
# Doris MCP Hierarchical Domain Catalog
<!-- Generated from DorisDomainCatalog; do not edit by hand. -->
diff --git a/doris_mcp_server/auth/doris_oauth_handlers.py
b/doris_mcp_server/auth/doris_oauth_handlers.py
index c7287a7..4c3da75 100644
--- a/doris_mcp_server/auth/doris_oauth_handlers.py
+++ b/doris_mcp_server/auth/doris_oauth_handlers.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Starlette handlers and response adapters for Doris-backed OAuth."""
import html
diff --git a/doris_mcp_server/auth/doris_oauth_provider.py
b/doris_mcp_server/auth/doris_oauth_provider.py
index 12c5b40..5a149eb 100644
--- a/doris_mcp_server/auth/doris_oauth_provider.py
+++ b/doris_mcp_server/auth/doris_oauth_provider.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Doris-backed OAuth provider core logic."""
import asyncio
diff --git a/doris_mcp_server/auth/doris_oauth_rate_limit.py
b/doris_mcp_server/auth/doris_oauth_rate_limit.py
index 97e76c0..ccdc003 100644
--- a/doris_mcp_server/auth/doris_oauth_rate_limit.py
+++ b/doris_mcp_server/auth/doris_oauth_rate_limit.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Small in-memory fixed-window rate limiter for Doris OAuth endpoints."""
import time
diff --git a/doris_mcp_server/auth/doris_oauth_redirects.py
b/doris_mcp_server/auth/doris_oauth_redirects.py
index 7480913..1113748 100644
--- a/doris_mcp_server/auth/doris_oauth_redirects.py
+++ b/doris_mcp_server/auth/doris_oauth_redirects.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Redirect URI policy for Doris-backed OAuth."""
import ipaddress
diff --git a/doris_mcp_server/auth/doris_oauth_scope_policy.py
b/doris_mcp_server/auth/doris_oauth_scope_policy.py
index 4c48db5..7f33038 100644
--- a/doris_mcp_server/auth/doris_oauth_scope_policy.py
+++ b/doris_mcp_server/auth/doris_oauth_scope_policy.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Scope issuance policy for Doris-backed OAuth."""
from collections.abc import Iterable
diff --git a/doris_mcp_server/auth/doris_oauth_store.py
b/doris_mcp_server/auth/doris_oauth_store.py
index a948359..ec202ea 100644
--- a/doris_mcp_server/auth/doris_oauth_store.py
+++ b/doris_mcp_server/auth/doris_oauth_store.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""In-memory HMAC-backed store for Doris-backed OAuth."""
import hashlib
diff --git a/doris_mcp_server/auth/doris_oauth_types.py
b/doris_mcp_server/auth/doris_oauth_types.py
index 124b771..1a1f18f 100644
--- a/doris_mcp_server/auth/doris_oauth_types.py
+++ b/doris_mcp_server/auth/doris_oauth_types.py
@@ -1,4 +1,21 @@
#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
"""Types and endpoint-specific errors for Doris-backed OAuth."""
from dataclasses import dataclass
diff --git a/doris_mcp_server/tools/domain_catalog.py
b/doris_mcp_server/tools/domain_catalog.py
index f24959c..b9a7ece 100644
--- a/doris_mcp_server/tools/domain_catalog.py
+++ b/doris_mcp_server/tools/domain_catalog.py
@@ -143,6 +143,28 @@ class DomainCatalogSummary(ContractModel):
domains: tuple[DomainCatalogDomainSummary, ...]
+ASF_MARKDOWN_HEADER = """<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+-->
+
+"""
+
+
class DorisDomainCatalog(ContractModel):
"""Single validated catalog for domains, children, and legacy migration."""
@@ -399,7 +421,7 @@ class DorisDomainCatalog(ContractModel):
"",
]
)
- return "\n".join(lines)
+ return ASF_MARKDOWN_HEADER + "\n".join(lines)
def _require_unique(values: tuple[str, ...], label: str) -> None:
diff --git a/examples/dify/dify_doris_dsl.yml b/examples/dify/dify_doris_dsl.yml
index 62cc9fe..e4006af 100644
--- a/examples/dify/dify_doris_dsl.yml
+++ b/examples/dify/dify_doris_dsl.yml
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
app:
description: ''
icon: 🤖
diff --git a/test/auth/test_doris_oauth_routes.py
b/test/auth/test_doris_oauth_routes.py
index 414ec5e..8adc434 100644
--- a/test/auth/test_doris_oauth_routes.py
+++ b/test/auth/test_doris_oauth_routes.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import asyncio
import base64
import hashlib
diff --git a/test/auth/test_doris_oauth_store.py
b/test/auth/test_doris_oauth_store.py
index c089166..6b89468 100644
--- a/test/auth/test_doris_oauth_store.py
+++ b/test/auth/test_doris_oauth_store.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from dataclasses import asdict, is_dataclass
from doris_mcp_server.auth.doris_oauth_store import DorisOAuthStore
diff --git a/test/deployment/test_github_actions_contract.py
b/test/deployment/test_github_actions_contract.py
index 08b2cfa..44cda24 100644
--- a/test/deployment/test_github_actions_contract.py
+++ b/test/deployment/test_github_actions_contract.py
@@ -28,6 +28,9 @@ WORKFLOW_PATH = REPOSITORY_ROOT / ".github" / "workflows" /
"ci.yml"
PYPROJECT_PATH = REPOSITORY_ROOT / "pyproject.toml"
FULL_COMMIT_ACTION = re.compile(r"^[^@\s]+@[0-9a-f]{40}$")
CHECKOUT_ACTION = "actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803"
+SKYWALKING_EYES_ACTION = (
+ "apache/skywalking-eyes/header@315732dd4b8d3a015d8d9b91936b935a0b854817"
+)
CONFORMANCE_COMMIT = "49103de6ed70804e940637bf3e9e29e4a3f54e64"
@@ -60,7 +63,7 @@ def
test_ci_jobs_are_bounded_and_external_actions_are_commit_pinned():
assert "continue-on-error" not in step
if action := step.get("uses"):
assert FULL_COMMIT_ACTION.fullmatch(action), action
- assert action.startswith("actions/"), action
+ assert action.startswith("actions/") or action ==
SKYWALKING_EYES_ACTION
if action.startswith("actions/checkout@"):
assert action == CHECKOUT_ACTION
assert (
@@ -76,6 +79,10 @@ def
test_quality_test_and_package_gates_cover_the_release_contract():
package = _commands(jobs["package"])
assert "uv lock --check" in quality
+ assert any(
+ step.get("uses") == SKYWALKING_EYES_ACTION
+ for step in jobs["quality"]["steps"]
+ )
assert "uv sync --frozen --group dev" in quality
assert "uv run python generate_tool_catalog.py --check" in quality
assert "uv run ruff check ." in quality
diff --git a/test/protocol/test_multiworker_config.py
b/test/protocol/test_multiworker_config.py
index 8c1b1ce..c957c3e 100644
--- a/test/protocol/test_multiworker_config.py
+++ b/test/protocol/test_multiworker_config.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import json
from types import SimpleNamespace
from unittest.mock import AsyncMock
diff --git a/test/security/test_auth_context.py
b/test/security/test_auth_context.py
index 09495fc..64b4a38 100644
--- a/test/security/test_auth_context.py
+++ b/test/security/test_auth_context.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from datetime import UTC, datetime
import pytest
diff --git a/test/security/test_auth_cross_matrix.py
b/test/security/test_auth_cross_matrix.py
index ffd3615..bffec07 100644
--- a/test/security/test_auth_cross_matrix.py
+++ b/test/security/test_auth_cross_matrix.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from __future__ import annotations
import sys
diff --git a/test/security/test_effective_auth_config.py
b/test/security/test_effective_auth_config.py
index 105732f..1222da4 100644
--- a/test/security/test_effective_auth_config.py
+++ b/test/security/test_effective_auth_config.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import pytest
from doris_mcp_server.auth.doris_oauth_scope_policy import
DorisOAuthScopePolicy
diff --git a/test/security/test_mcp_auth_middleware.py
b/test/security/test_mcp_auth_middleware.py
index ad9b9c4..30c7a95 100644
--- a/test/security/test_mcp_auth_middleware.py
+++ b/test/security/test_mcp_auth_middleware.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import json
import pytest
diff --git a/test/security/test_mcp_cors.py b/test/security/test_mcp_cors.py
index 9022f85..fc7d8fe 100644
--- a/test/security/test_mcp_cors.py
+++ b/test/security/test_mcp_cors.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import pytest
from doris_mcp_server.auth.mcp_cors import (
diff --git a/test/security/test_operation_policy.py
b/test/security/test_operation_policy.py
index a168712..40ccc2b 100644
--- a/test/security/test_operation_policy.py
+++ b/test/security/test_operation_policy.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from types import SimpleNamespace
import pytest
diff --git a/test/security/test_token_prefix_reservation.py
b/test/security/test_token_prefix_reservation.py
index 33ccedc..fcf98cd 100644
--- a/test/security/test_token_prefix_reservation.py
+++ b/test/security/test_token_prefix_reservation.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import json
import pytest
diff --git a/test/tools/test_domain_catalog.py
b/test/tools/test_domain_catalog.py
index 57ff29f..1ea5e05 100644
--- a/test/tools/test_domain_catalog.py
+++ b/test/tools/test_domain_catalog.py
@@ -450,7 +450,10 @@ def test_catalog_markdown_is_deterministic_and_complete()
-> None:
second = DORIS_DOMAIN_CATALOG.render_markdown()
assert first == second
- assert first.startswith("# Doris MCP Hierarchical Domain Catalog")
+ assert first.startswith(
+ "<!--\n ~ Licensed to the Apache Software Foundation (ASF) under one"
+ )
+ assert "\n# Doris MCP Hierarchical Domain Catalog\n" in first
assert first.count("| `doris_") >= 55 + 8
assert "`doris_query.execute_adbc_query`" in first
assert "`get_table_schema`" in first
diff --git a/test/tools/test_prompts_manager_errors.py
b/test/tools/test_prompts_manager_errors.py
index dc2178b..a5d4e82 100644
--- a/test/tools/test_prompts_manager_errors.py
+++ b/test/tools/test_prompts_manager_errors.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import asyncio
from contextlib import asynccontextmanager
diff --git a/test/tools/test_resources_manager_cache.py
b/test/tools/test_resources_manager_cache.py
index 1957b7b..af8afd8 100644
--- a/test/tools/test_resources_manager_cache.py
+++ b/test/tools/test_resources_manager_cache.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import json
from contextlib import asynccontextmanager
from types import SimpleNamespace
diff --git a/test/tools/test_tools_operation_guard.py
b/test/tools/test_tools_operation_guard.py
index 95cd779..5061d0d 100644
--- a/test/tools/test_tools_operation_guard.py
+++ b/test/tools/test_tools_operation_guard.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from contextlib import asynccontextmanager
from types import SimpleNamespace
from unittest.mock import AsyncMock, MagicMock
diff --git a/test/utils/test_db.py b/test/utils/test_db.py
index 96ff8a9..fbf1a5a 100644
--- a/test/utils/test_db.py
+++ b/test/utils/test_db.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import asyncio
from unittest.mock import AsyncMock, MagicMock
diff --git a/test/utils/test_doris_user_pool_manager.py
b/test/utils/test_doris_user_pool_manager.py
index f453892..801dde2 100644
--- a/test/utils/test_doris_user_pool_manager.py
+++ b/test/utils/test_doris_user_pool_manager.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
from types import SimpleNamespace
from unittest.mock import AsyncMock
diff --git a/test/utils/test_schema_extractor_doris_oauth_metadata_errors.py
b/test/utils/test_schema_extractor_doris_oauth_metadata_errors.py
index 82e25fa..1159945 100644
--- a/test/utils/test_schema_extractor_doris_oauth_metadata_errors.py
+++ b/test/utils/test_schema_extractor_doris_oauth_metadata_errors.py
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
import pytest
from doris_mcp_server.utils.db import DorisUserPoolMissingError, QueryResult
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]