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]

Reply via email to