This is an automated email from the ASF dual-hosted git repository. FreeOnePlus pushed a commit to branch feat/v1-22-apache-license-release-gate in repository https://gitbox.apache.org/repos/asf/doris-mcp-server.git
commit cb2b1b65a9f658be63bbda75f2a7e4dba0412442 Author: FreeOnePlus <[email protected]> AuthorDate: Sat Aug 1 04:29:22 2026 +0800 Add Apache source release license gate --- .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]
