This is an automated email from the ASF dual-hosted git repository.

shown pushed a commit to branch 0903-yuluo/add-infra
in repository https://gitbox.apache.org/repos/asf/hertzbeat-collector-go.git

commit 7f1b1378be7f77aee1d25abfd87d23af61305529
Author: yuluo-yx <[email protected]>
AuthorDate: Wed Sep 3 22:12:41 2025 +0800

    feat: add infra
    
    Signed-off-by: yuluo-yx <[email protected]>
---
 .github/ISSUE_TEMPLATE/bug_report.yml              |  93 +++++++
 .github/ISSUE_TEMPLATE/config.yml                  |  37 +++
 .github/ISSUE_TEMPLATE/feature_request.yml         |  74 +++++
 .github/ISSUE_TEMPLATE/question.yml                |  50 ++++
 .github/ISSUE_TEMPLATE/task.yml                    |  57 ++++
 .github/PULL_REQUEST_TEMPLATED.md                  |  14 +
 .github/dependbot.yml                              |  46 ++++
 .github/workflows/build-and-test.yml               |  17 ++
 .github/workflows/invalid-issue-check.yml          |  54 ++++
 .github/workflows/license-check.yml                |  49 ++++
 .github/workflows/lint-pr-title.yml                |  94 +++++++
 .github/workflows/linter.yml                       |  51 ++++
 .github/workflows/pull-request-robot.yml           |  48 ++++
 .github/workflows/secret-check.yml                 |  48 ++++
 .gitignore                                         |   3 +-
 CODE_OF_CONDUCT.md                                 |  76 ++++++
 CONTRIBUTING.md                                    | 300 +++++++++++++++++++++
 Dockerfile                                         |  17 ++
 Makefile                                           |  81 +++---
 NOTICE                                             |   5 +
 README-CN.md                                       |   0
 SECURITY.md                                        |  22 ++
 cmd/collector/hertzbeat-collector.yaml             |  17 ++
 cmd/collector/main.go                              |  17 ++
 examples/main_simulation.go                        |  17 ++
 pkg/banner/embed.go                                |  17 ++
 pkg/collector/basic/abstract_collect.go            |  17 ++
 pkg/collector/basic/database/jdbc_collector.go     |  17 ++
 .../basic/database/jdbc_collector_test.go          |  17 ++
 pkg/collector/bootstrap.go                         |  17 ++
 pkg/collector/collect_service.go                   |  17 ++
 .../collect/metrics/hertzbeat_metrics_collector.go |  17 ++
 .../common/collect/strategy/strategy_factory.go    |  17 ++
 pkg/collector/common/dispatcher/entrance/client.go |  17 ++
 .../dispatcher/entrance/collect_job_service.go     |  17 ++
 .../entrance/collect_job_service_test.go           |  17 ++
 .../common/dispatcher/entrance/collect_server.go   |  17 ++
 pkg/collector/common/dispatcher/entrance/config.go |  17 ++
 .../common/dispatcher/entrance/processors.go       |  17 ++
 pkg/collector/common/job/job_server.go             |  17 ++
 pkg/collector/common/transport/transport.go        |  17 ++
 pkg/collector/config/config.go                     |  17 ++
 pkg/collector/config/config_test.go                |  17 ++
 pkg/collector/server/server.go                     |  17 ++
 pkg/collector/server/server_test.go                |  17 ++
 pkg/constants/const.go                             |  17 ++
 pkg/logger/logger.go                               |  17 ++
 pkg/logger/logger_test.go                          |  17 ++
 pkg/types/config_types.go                          |  17 ++
 pkg/types/job/job_types.go                         |  17 ++
 pkg/types/job/protocol/common_request_protocol.go  |  17 ++
 pkg/types/job/protocol/consul_sd_protocol.go       |  17 ++
 pkg/types/job/protocol/ssh_protocol.go             |  17 ++
 pkg/types/job/protocol/zookeeper_sd_protocol.go    |  17 ++
 pkg/types/logging_types.go                         |  17 ++
 tools/ci-config/labeler.yml                        |  65 +++++
 tools/github-actions/setup-deps/action.yml         |  47 ++++
 tools/linter/codespell/.codespell.ignorewords      |   0
 tools/linter/codespell/.codespell.skip             |   2 +
 tools/linter/license/.licenserc.yaml               |  73 +++++
 .../linter/markdownlint/markdown_lint_config.yaml  |  61 +++++
 tools/linter/yamllint/.yamllint                    |  75 ++++++
 tools/make/common.mk                               |  53 ++++
 Makefile => tools/make/golang.mk                   |  19 +-
 tools/make/linter.mk                               |  94 +++++++
 tools/make/tools.mk                                |  69 +++++
 tools/scripts/new-line-check.py                    | 126 +++++++++
 67 files changed, 2422 insertions(+), 59 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml 
b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..096397f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,93 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🐛 Bug Report
+description: Problems and issues with code of Spring AI Alibaba 🤔.
+title: "[BUG] "
+labels: ["needs-triage", "kind/bug"]
+body:
+  - type: checkboxes
+    attributes:
+      label: Is there an existing issue for this?
+      description: Please search to see if an issue already exists for the bug 
you encountered.
+      options:
+        - label: I have searched the existing issues
+          required: true
+  - type: textarea
+    attributes:
+      label: Current Behavior
+      description: A concise description of what you're experiencing.
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Expected Behavior
+      description: A concise description of what you expected to happen.
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Steps To Reproduce
+      description: Steps to reproduce the behavior.
+      placeholder: |
+        1. In this environment...
+        2. With this config...
+        3. Run '...'
+        4. See error...
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Environment
+      description: |
+        examples:
+          - **Spring AI Alibaba(s)**: 1.0.0.2?
+      value: "Spring AI Alibaba version(s):"
+      render: markdown
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Debug logs
+      description: |
+        Add your debug logs here.
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Anything else?
+      description: |
+        Links? References? Anything that will give us more context about the 
issue you are encountering!
+
+          Tip: You can attach images or log files by clicking this area to 
highlight it and then dragging files in.
+    validations:
+      required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml 
b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..b59e74d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,37 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+#
+blank_issues_enabled: false
+contact_links:
+  - name: Community Support
+    url: https://github.com/alibaba/spring-ai-alibaba/discussions
+    about: Please ask and answer questions here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml 
b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000..b52dba6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,74 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🚀 Feature Request
+description: I have a suggestion (and may want to implement it 🙂)!
+title: "[Feature] "
+labels: ["needs-triage"]
+body:
+  - type: textarea
+    attributes:
+      label: Feature Request
+      description: >
+        Tip: Have you checked the docs https://java2ai.com, GitHub issues 
whether someone else has already reported your issue? Maybe the feature already 
exists?
+
+      placeholder: >
+        A concise description of what you're experiencing.
+
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Is your feature request related to a problem? Please describe
+      description: A clear and concise description of what the problem is. Ex. 
I have an issue when [...]
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Describe the solution you'd like
+      description: A clear and concise description of what you want to happen. 
Add any considered drawbacks.
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Describe alternatives you've considered
+      description: A clear and concise description of any alternative 
solutions or features you've considered.
+    validations:
+      required: false
+  - type: textarea
+    attributes:
+      label: Additional context
+    validations:
+      required: false
+  - type: markdown
+    attributes:
+      value: "Please read the [Contribution 
Guideline](https://java2ai.com/docs/developer/contributor-guide/new-contributor-guide_dev)
 before submitting the PR"
diff --git a/.github/ISSUE_TEMPLATE/question.yml 
b/.github/ISSUE_TEMPLATE/question.yml
new file mode 100644
index 0000000..de51c79
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/question.yml
@@ -0,0 +1,50 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🤔 Question
+description: Usage question that isn't answered in docs or discussion
+title: "[Question] "
+labels: ["needs-triage", "kind/question"]
+body:
+  - type: textarea
+    attributes:
+      label: Question
+      placeholder: >
+        your question here;
+
+    validations:
+      required: true
+  - type: markdown
+    attributes:
+      value: |
+        Please pay attention on issues you submitted, because we maybe need 
more details.
+        If no response anymore and we cannot reproduce it on current 
information, we will **close it**.
diff --git a/.github/ISSUE_TEMPLATE/task.yml b/.github/ISSUE_TEMPLATE/task.yml
new file mode 100644
index 0000000..52c8e2b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/task.yml
@@ -0,0 +1,57 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🚀 Task
+description: Used to create tasks for the community.
+title: "[Task] "
+labels: ["needs-triage", "kind/task"]
+body:
+  - type: textarea
+    attributes:
+      label: Description
+      placeholder: A clear and concise description of Task
+    validations:
+      required: true
+  - type: textarea
+    attributes:
+      label: Task List
+      placeholder: |
+        -[ ] Task1...
+        -[ ] Task2...
+        -[ ] Task3...
+        -[ ] Task4...
+    validations:
+      required: false
+  - type: markdown
+    attributes:
+      value: |
+        Please read the [Contribution 
Guideline](https://java2ai.com/docs/developer/contributor-guide/new-contributor-guide_dev)
 before submitting the PR.
diff --git a/.github/PULL_REQUEST_TEMPLATED.md 
b/.github/PULL_REQUEST_TEMPLATED.md
new file mode 100644
index 0000000..79f21ec
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATED.md
@@ -0,0 +1,14 @@
+## What's changed?
+
+<!-- Describe Your PR Here -->
+
+
+## Checklist
+
+- [ ]  I have read the [Contributing 
Guide](https://hertzbeat.apache.org/docs/community/code_style_and_quality_guide)
+- [ ]  I have written the necessary doc or comment.
+- [ ]  I have added the necessary unit tests and all cases have passed.
+
+## Add or update API
+
+- [ ] I have added the necessary 
[tests](https://github.com/apache/hertzbeat/tree/master/e2e) and all cases have 
passed.
diff --git a/.github/dependbot.yml b/.github/dependbot.yml
new file mode 100644
index 0000000..0560002
--- /dev/null
+++ b/.github/dependbot.yml
@@ -0,0 +1,46 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+#
+version: 2
+updates:
+  - package-ecosystem: "gomod"
+    directory: "/"
+    open-pull-requests-limit: 5
+    # Ignore major version updates
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-major"]
+    schedule:
+      interval: "weekly"
+      day: "monday"
+      time: "03:00"
+      timezone: "US/Eastern"
diff --git a/.github/workflows/build-and-test.yml 
b/.github/workflows/build-and-test.yml
new file mode 100644
index 0000000..2456923
--- /dev/null
+++ b/.github/workflows/build-and-test.yml
@@ -0,0 +1,17 @@
+# 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.
+
diff --git a/.github/workflows/invalid-issue-check.yml 
b/.github/workflows/invalid-issue-check.yml
new file mode 100644
index 0000000..694786c
--- /dev/null
+++ b/.github/workflows/invalid-issue-check.yml
@@ -0,0 +1,54 @@
+# 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.
+
+# Copyright 2024-2026 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: "Close Invalid Issue"
+on:
+  schedule:
+    - cron: "0 0,8,16 * * *"
+permissions:
+  contents: read
+jobs:
+  stale:
+    permissions:
+      issues: write
+    runs-on: ubuntu-latest
+    env:
+      ACTIONS_STEP_DEBUG: true
+    steps:
+      - name: Close Stale Issues
+        uses: actions/stale@v6
+        with:
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
+          stale-issue-message: "This issue has been marked as invalid 
question, please give more information by following the `issue` template. The 
issue will be closed in 1 days if no further activity occurs."
+          stale-issue-label: "stale"
+          days-before-stale: 0
+          days-before-close: 1
+          remove-stale-when-updated: true
+          only-labels: "invalid issue"
diff --git a/.github/workflows/license-check.yml 
b/.github/workflows/license-check.yml
new file mode 100644
index 0000000..c929d7d
--- /dev/null
+++ b/.github/workflows/license-check.yml
@@ -0,0 +1,49 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🗒️ License Check
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    branches:
+      - main
+jobs:
+  license-check:
+    if: (github.repository == 'alibaba/spring-ai-alibaba')
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+      - uses: ./tools/github-actions/setup-deps
+      - run: make tools
+      - run: make licenses-check
diff --git a/.github/workflows/lint-pr-title.yml 
b/.github/workflows/lint-pr-title.yml
new file mode 100644
index 0000000..a70c850
--- /dev/null
+++ b/.github/workflows/lint-pr-title.yml
@@ -0,0 +1,94 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🤔 Lint PR
+on:
+  pull_request_target:
+    types:
+      - opened
+      - edited
+      - reopened
+jobs:
+  main:
+    name: Validate PR title
+    runs-on: ubuntu-latest
+    permissions:
+      pull-requests: read
+    steps:
+      - uses: amannn/action-semantic-pull-request@v5
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          types: |
+            fix
+            feat
+            refactor
+            docs
+            chore
+            perf
+            infra
+            revert
+            release
+            test
+            style
+          scopes: |
+            core
+            vector-stores
+            document-readers
+            document-parsers
+            deepresearch
+            docs
+            memories
+            tool-calls
+            graph
+            jmanus
+            mcp
+            prompt
+            studio
+            autoconf
+            ci
+            nl2sql
+            community
+          # e.g. feat(core): add new feature
+          # if false: feat: add new feature
+          requireScope: true
+          disallowScopes: |
+            [A-Z]+
+          subjectPattern: ^(?![A-Z]).+$
+          subjectPatternError: |
+            The subject "{subject}" found in the pull request title "{title}"
+            didn't match the configured pattern. Please ensure that the subject
+            doesn't start with an uppercase character.
+          # if true, the PR title must match the commit message
+          validateSingleCommit: false
+          # if true, the PR title must match the single commit message
+          validateSingleCommitMatchesPrTitle: false
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
new file mode 100644
index 0000000..4800abc
--- /dev/null
+++ b/.github/workflows/linter.yml
@@ -0,0 +1,51 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 👀 Linter
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    branches:
+      - main
+permissions:
+  contents: read
+jobs:
+  linter:
+    if: (github.repository == 'alibaba/spring-ai-alibaba')
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+      - uses: ./tools/github-actions/setup-deps
+      - run: make tools
+      - run: make lint
diff --git a/.github/workflows/pull-request-robot.yml 
b/.github/workflows/pull-request-robot.yml
new file mode 100644
index 0000000..803b2fd
--- /dev/null
+++ b/.github/workflows/pull-request-robot.yml
@@ -0,0 +1,48 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🚀 Pull Request Robot
+on:
+  - pull_request_target
+jobs:
+  labeler:
+    permissions:
+      contents: read
+      pull-requests: write
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+      - uses: actions/labeler@v5
+        with:
+          repo-token: "${{secrets.GITHUB_TOKEN}}"
+          configuration-path: tools/ci-config/labeler.yml
+          sync-labels: true
diff --git a/.github/workflows/secret-check.yml 
b/.github/workflows/secret-check.yml
new file mode 100644
index 0000000..202d5aa
--- /dev/null
+++ b/.github/workflows/secret-check.yml
@@ -0,0 +1,48 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: 🗝️ Secrets Check
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    branches:
+      - main
+jobs:
+  secret-check:
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+      - uses: ./tools/github-actions/setup-deps
+      - run: make tools
+      - run: make secrets-check
diff --git a/.gitignore b/.gitignore
index 987a170..f11a8e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,13 +21,14 @@ tools/vagrant/.vagrant/
 *~
 # python artifacts
 *.pyc
+**/*.venv
 
 # lint
 lintconfig.gen.json
 
 *.orig
 
-bin/*
+**/bin/*
 
 LICENSES.txt
 
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..6fa9a12
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, 
body
+size, disability, ethnicity, sex characteristics, gender identity and 
expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+  advances
+* Trolling, insulting/derogatory comments and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as physical or electronic
+  address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues and other contributions
+that are not aligned to this Code of Conduct or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account or acting as an appointed
+representative at an online or offline event. Representation of a project may 
be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing or otherwise unacceptable behavior may be
+reported by contacting the project team at [email protected]. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate for the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an 
incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], 
version 1.4,
+available at 
<https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+<https://www.contributor-covenant.org/faq>
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..0468fd4
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,300 @@
+## Contributor Guide [中文贡献者指南](#贡献者指南)
+
+> We are committed to maintaining a happy community that helps each other, 
welcome every contributor to join us!
+
+### Kinds of Contributions
+
+> In the HertzBeat community, there are many ways to contribute:
+
+- 💻**Code**: Can help the community complete some tasks, write new features or 
fix some bugs;
+
+- ⚠️**Test**: Can come to participate in the writing of test code, including 
unit testing, integration testing, e2e testing;
+
+- 📖**Docs**: Can write or Documentation improved to help users better 
understand and use HertzBeat;
+
+- 📝**Blog**: You can write articles about HertzBeat to help the community 
better promote;
+
+- 🤔**Discussion**: You can participate in the discussion of new features of 
HertzBeat and integrate your ideas with HertzBeat;
+
+- 💡**Preach**: Can help publicize or promote the HertzBeat community, speak in 
meetup or summit;
+
+- 💬**Suggestion**: You can also make some suggestions to the project or 
community to promote the healthy development of the community;
+
+More see [Contribution Types](https://allcontributors.org/docs/en/emoji-key)
+
+Even small corrections to typos are very welcome :)
+
+### Getting HertzBeat up and running
+
+> To get HertzBeat code running on your development tools, and able to debug 
with breakpoints.
+> This is a front-end and back-end separation project. To start the local 
code, the back-end [manager](manager) and the front-end [web-app](web-app) must 
be started separately.
+
+
+#### Backend start
+
+1. Requires `maven3+`, `java17` and `lombok` environments
+
+2. (Optional) Modify the configuration file: 
`manager/src/main/resources/application.yml`
+
+3. Execute under the project root directory: `mvn clean install -DskipTests`
+
+4. Add VM Options: 
`--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`
+
+5. Start `springboot manager` service: 
`manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java`
+
+#### Frontend start
+
+1. Need `Node Yarn` Environment, Make sure `Node.js >= 18`
+
+2. Cd to the `web-app` directory: `cd web-app`
+
+3. Install yarn if not existed `npm install -g yarn`
+
+4. Install Dependencies: `yarn install` or `yarn install 
--registry=https://registry.npmmirror.com` in `web-app`
+
+5. Install angular-cli globally: `yarn global add @angular/cli@15` or `yarn 
global add @angular/cli@15 --registry=https://registry.npmmirror.com`
+
+6. After the local backend is started, start the local frontend in the web-app 
directory: `ng serve --open`
+
+7. Browser access to localhost:4200 to start, default account/password is 
*admin/hertzbeat*
+
+
+### Find tasks
+
+Find the issue you are interested in! On our GitHub repo issue list, we often 
publish some issues with the label good first issue or status: volunteer wanted.
+These issues welcome the help of contributors. Among them, good first issues 
tend to have low thresholds and are suitable for novices.
+
+Of course, if you have a good idea, you can also propose it directly on GitHub 
Discussion or contact with community.
+
+### Submit Pull Request
+
+1. First you need to fork your target [hertzbeat 
repository](https://github.com/apache/hertzbeat).
+2. Then download the code locally with git command:
+    ```shell
+    git clone [email protected]:${YOUR_USERNAME}/hertzbeat.git #Recommended  
+    ```
+3. After the download is complete, please refer to the getting started guide 
or README file of the target repository to initialize the project.
+4. Then, you can refer to the following command to submit the code:
+    ```shell
+    git checkout -b a-feature-branch #Recommended  
+    ```
+5. Submit the coed as a commit, the commit message format specification 
required: [module name or type name]feature or bugfix or doc: custom message.
+    ```shell
+    git add <modified file/path> 
+    git commit -m '[docs]feature: necessary instructions' #Recommended 
+    ```
+6. Push to the remote repository
+    ```shell
+    git push origin a-feature-branch   
+    ```
+7. Then you can initiate a new PR (Pull Request) on GitHub.
+
+Please note that the title of the PR needs to conform to our spec, and write 
the necessary description in the PR to facilitate code review by Committers and 
other contributors.
+
+### Wait for the code to be merged
+
+After submitting the PR, the Committee or the community's friends will review 
the code you submitted (Code Review), and will propose some modification 
suggestions or conduct some discussions. Please pay attention to your PR in 
time.
+
+If subsequent changes are required, there is no need to initiate a new PR. 
After submitting a commit on the original branch and pushing it to the remote 
repository, the PR will be automatically updated.
+
+In addition, our project has a relatively standardized and strict CI 
inspection process. After submitting PR, CI will be triggered. Please pay 
attention to whether it passes the CI inspection.
+
+Finally, the Committers can merge the PR into the master branch.
+
+### After the code is merged
+
+After the code has been merged, you can delete the development branch on both 
the local and remote repositories:
+
+```shell
+git branch -d a-dev-branch
+git push origin --delete a-dev-branch
+```
+
+On the master/main branch, you can do the following to sync the upstream 
repository:
+
+```shell
+git remote add upstream https://github.com/apache/hertzbeat.git #Bind the 
remote warehouse, if it has been executed, it does not need to be executed again
+git checkout master 
+git pull upstream master
+```
+
+### HertzBeat Improvement Proposal (HIP)
+If you have major new features(e.g., support metrics push gateway, support 
logs monitoring), you need to write a design document known as a HertzBeat 
Improvement Proposal (HIP). Before starting to write a HIP, make sure you 
follow the process [here](https://github.com/apache/hertzbeat/tree/master/hip).
+
+### How to become a Committer?
+
+With the above steps, you are a contributor to HertzBeat. Repeat the previous 
steps to stay active in the community, keep at, you can become a Committer!
+
+### Join Discussion
+
+[Join the Mailing 
Lists](https://lists.apache.org/[email protected]) : Mail to 
`[email protected]` to subscribe mailing lists.
+
+Add WeChat account `ahertzbeat` to pull you into the WeChat group.
+
+## 🥐 Architecture
+
+- 
**[manager](https://github.com/apache/hertzbeat/tree/master/hertzbeat-manager)**
 Provide monitoring management, system management basic services.
+> Provides monitoring management, monitoring configuration management, system 
user management, etc.
+- **[collector](https://github.com/apache/hertzbeat/tree/master/collector)** 
Provide metrics data collection services.
+> Use common protocols to remotely collect and obtain peer-to-peer metrics 
data.
+- **[warehouse](https://github.com/apache/hertzbeat/tree/master/warehouse)** 
Provide monitoring data warehousing services.
+> Metrics data management, data query, calculation and statistics.
+- 
**[alerter](https://github.com/apache/hertzbeat/tree/master/hertzbeat-alerter)**
 Provide alert service.
+> Alarm calculation trigger, monitoring status linkage, alarm configuration, 
and alarm notification.
+- **[web-app](https://github.com/apache/hertzbeat/tree/master/web-app)** 
Provide web ui.
+> Angular Web UI.
+
+![hertzBeat](home/static/img/docs/hertzbeat-arch.png)
+
+<br>  
+
+------
+
+<br>
+
+## 贡献者指南
+
+> 非常欢迎参与项目贡献,我们致力于维护一个互相帮助的快乐社区。
+
+### 贡献方式
+
+> 在 HertzBeat 社区,贡献方式有很多:
+
+- 💻**代码**:可以帮助社区完成一些任务、编写新的feature或者是修复一些bug;
+
+- ⚠️**测试**:可以来参与测试代码的编写,包括了单元测试、集成测试、e2e测试;
+
+- 📖**文档**:可以编写或完善文档,来帮助用户更好地了解和使用 HertzBeat;
+
+- 📝**博客**:可以撰写 HertzBeat 的相关文章,来帮助社区更好地推广;
+
+- 🤔**讨论**:可以参与 HertzBeat 新的feature的讨论,将您的想法跟 HertzBeat 融合;
+
+- 💡**布道**:可以帮助宣传或推广 HertzBeat 社区,在 meetup 或 summit 中演讲;
+
+- 💬**建议**:也可以对项目或者社区提出一些建议,促进社区的良性发展;
+
+更多贡献方式参见 [Contribution Types](https://allcontributors.org/docs/en/emoji-key)
+
+即便是小到错别字的修正我们也都非常欢迎 :)
+
+### 让 HertzBeat 运行起来
+
+> 让 HertzBeat 的代码在您的开发工具上运行起来,并且能够断点调试。   
+> 此为前后端分离项目,本地代码启动需将后端[manager](manager)和前端[web-app](web-app)分别启动生效。
+
+#### 后端启动
+
+1. 需要 `maven3+`, `java17` 和 `lombok` 环境
+
+2. (可选)修改配置文件配置信息-`manager/src/main/resources/application.yml`
+
+3. 在项目根目录运行编译: `mvn clean install -DskipTests`
+
+4. 在 `jvm` 加入参数 
`--add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED`
+
+5. 启动`springboot manager`服务 
`manager/src/main/java/org/apache/hertzbeat/hertzbeat-manager/Manager.java`
+
+
+#### 前端启动
+
+1. 需要 `nodejs yarn` 环境, Make sure `Node.js >= 18`
+
+2. 进入 `web-app` 目录: `cd web-app`
+
+3. 安装yarn: `npm install -g yarn`
+
+4. 在前端工程目录 `web-app` 下执行: `yarn install` or `yarn install 
--registry=https://registry.npmmirror.com` in `web-app`
+
+5. 全局安装 `angular-cli`: `yarn global add @angular/cli@15` or `yarn global add 
@angular/cli@15 --registry=https://registry.npmmirror.com`
+
+6. 待本地后端启动后,在web-app目录下启动本地前端 `ng serve --open`
+
+7. 浏览器访问 localhost:4200 即可开始,默认账号密码 *admin/hertzbeat*
+
+### 寻找任务
+
+寻找您感兴趣的Issue!在我们的GitHub仓库和邮件列表中,我们经常会发布一些带有 good first issue 或者 status: 
volunteer wanted 标签的issue,这些issue都欢迎贡献者的帮助。
+其中good first issue往往门槛较低、适合新手。
+
+当然,如果您有好的想法,也可以直接在GitHub Discussion 中提出或者联系社区。
+
+### 提交 Pull Request
+
+1. 首先您需要 Fork 目标仓库 [hertzbeat repository](https://github.com/apache/hertzbeat).
+2. 然后 用git命令 将代码下载到本地:
+    ```shell
+    git clone [email protected]:${YOUR_USERNAME}/hertzbeat.git #Recommended  
+    ```
+3. 下载完成后,请参考目标仓库的入门指南或者 README 文件对项目进行初始化。
+4. 接着,您可以参考如下命令进行代码的提交, 切换新的分支, 进行开发:
+    ```shell
+    git checkout -b a-feature-branch #Recommended  
+    ```
+5. 提交 commit , commit 描述信息需要符合约定格式: [module name or type name]feature or 
bugfix or doc: custom message.
+    ```shell
+    git add <modified file/path> 
+    git commit -m '[docs]feature: necessary instructions' #Recommended 
+    ```
+6. 推送到远程仓库
+    ```shell
+    git push origin a-feature-branch   
+    ```
+7. 然后您就可以在 GitHub 上发起新的 PR (Pull Request)。
+
+请注意 PR 的标题需要符合我们的规范,并且在 PR 中写上必要的说明,来方便 Committer 和其他贡献者进行代码审查。
+
+### 等待PR代码被合并
+
+在提交了 PR 后,Committer 或者社区的小伙伴们会对您提交的代码进行审查(Code 
Review),会提出一些修改建议,或者是进行一些讨论,请及时关注您的PR。
+
+若后续需要改动,不需要发起一个新的 PR,在原有的分支上提交 commit 并推送到远程仓库后,PR会自动更新。
+
+另外,我们的项目有比较规范和严格的 CI 检查流程,在提交 PR 之后会触发 CI,请注意是否通过 CI 检查。
+
+最后,Committer 可以将 PR 合并入 master 主分支。
+
+### 代码被合并后
+
+在代码被合并后,您就可以在本地和远程仓库删除这个开发分支了:
+
+```shell
+git branch -d a-dev-branch
+git push origin --delete a-dev-branch
+```
+
+在主分支上,您可以执行以下操作来同步上游仓库:
+
+```shell
+git remote add upstream https://github.com/apache/hertzbeat.git #Bind the 
remote warehouse, if it has been executed, it does not need to be executed again
+git checkout master 
+git pull upstream master
+```
+
+### HertzBeat 改进提案 (HIP)
+如果您有重大的新特性(例如,支持指标推送网关,日志监控等),您需要编写一个被称为 HertzBeat 改进提案(HertzBeat Improvement 
Proposal,HIP)的设计文档。在开始编写 HIP 
之前,请确保您遵循了[这里](https://github.com/apache/hertzbeat/tree/master/hip)的流程。
+
+### 如何成为Committer?
+
+通过上述步骤,您就是 HertzBeat 的贡献者了。重复前面的步骤,在社区中保持活跃,坚持下去,您就能成为 Committer!
+
+### 加入讨论交流
+
+[Join the Mailing 
Lists](https://lists.apache.org/[email protected]) : Mail to 
`[email protected]` to subscribe mailing lists.
+
+Add WeChat account `ahertzbeat` to pull you into the WeChat group.
+
+### 模块
+
+- 
**[manager](https://github.com/apache/hertzbeat/tree/master/hertzbeat-manager)**
 提供监控管理,系统管理基础服务
+> 提供对监控的管理,监控应用配置的管理,系统用户租户后台管理等。
+- **[collector](https://github.com/apache/hertzbeat/tree/master/collector)** 
提供监控数据采集服务
+> 使用通用协议远程采集获取对端指标数据。
+- **[warehouse](https://github.com/apache/hertzbeat/tree/master/warehouse)** 
提供监控数据仓储服务
+> 采集指标结果数据管理,数据落盘,查询,计算统计。
+- 
**[alerter](https://github.com/apache/hertzbeat/tree/master/hertzbeat-alerter)**
 提供告警服务
+> 告警计算触发,任务状态联动,告警配置,告警通知。
+- **[web-app](https://github.com/apache/hertzbeat/tree/master/web-app)** 
提供可视化控制台页面
+> 监控告警系统可视化控制台前端
+
+![hertzBeat](home/static/img/docs/hertzbeat-arch.png)     
diff --git a/Dockerfile b/Dockerfile
index f19bab6..ef9b9ed 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1 +1,18 @@
+# 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 golang:1.24-alpine
diff --git a/Makefile b/Makefile
index 795a6a2..84f9d7b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,28 @@
+# 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
 #
-# 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
 #
-#     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.
+
+#
+# Copyright 2024-2026 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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,
@@ -15,47 +31,14 @@
 # limitations under the License.
 #
 
-.PHONY:
-fmt:
-       go fmt ./...
-
-.PHONY:
-lint:
-       golangci-lint run
-
-.PHONY:
-vet:
-       go vet ./...
-
-.PHONY:
-dev:
-       go run ./cmd/main.go
-
-.PHONY: build
-# build
-build:
-       @version=$$(cat VERSION); \
-       mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o 
./bin/ ./...
-
-.PHONY:
-test:
-       go test -v ./...
+_run:
+       @$(MAKE) --warn-undefined-variables \
+               -f tools/make/common.mk \
+               -f tools/make/golang.mk \
+               -f tools/make/linter.mk \
+               -f tools/make/tools.mk \
+               $(MAKECMDGOALS)
 
-.PHONY: init
-# init env
-init:
-       go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
-       go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
-       go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
-       go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest
+.PHONY: _run
 
-.PHONY: api
-# generate api proto
-api: API_PROTO_FILES := $(wildcard api/*.proto)
-api:
-       protoc --proto_path=./api \
-              --go_out=paths=source_relative:./api \
-              --go-http_out=paths=source_relative:./api \
-              --go-grpc_out=paths=source_relative:./api \
-              --openapi_out=fq_schema_naming=true,default_response=false:. \
-              $(API_PROTO_FILES)
+$(if $(MAKECMDGOALS),$(MAKECMDGOALS): %: _run)
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..37d0c72
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,5 @@
+Apache HertzBeat™
+Copyright 2024-2025 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/README-CN.md b/README-CN.md
new file mode 100644
index 0000000..e69de29
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..4bc058e
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,22 @@
+# Security Policy
+
+Apache HertzBeat™ follows the [ASF vulnerability handling 
process](https://apache.org/security/#vulnerability-handling)
+
+## Supported Versions
+
+| Version           | Supported          |
+|-------------------|--------------------|
+| Latest Version    | :white_check_mark: |
+| Any Other Version | :x:                |
+
+## Reporting a Vulnerability
+
+Please do not file GitHub issues for security vulnerabilities as they are 
public!
+
+To report a new vulnerability you have discovered please follow the [ASF 
vulnerability reporting 
process](https://apache.org/security/#reporting-a-vulnerability).
+
+## Extra Information
+
+- [Apache HertzBeat™ Security 
Model](https://hertzbeat.apache.org/docs/help/security_model)
+- [ASF Security](https://www.apache.org/security/)
+- [Apache HertzBeat™ Document](https://hertzbeat.apache.org/docs/)
diff --git a/cmd/collector/hertzbeat-collector.yaml 
b/cmd/collector/hertzbeat-collector.yaml
index 77c1b1e..3cae1f6 100644
--- a/cmd/collector/hertzbeat-collector.yaml
+++ b/cmd/collector/hertzbeat-collector.yaml
@@ -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.
+
 collector:
   info:
     name: hertzbeat-collector-go
diff --git a/cmd/collector/main.go b/cmd/collector/main.go
index 6481cb4..cea5661 100644
--- a/cmd/collector/main.go
+++ b/cmd/collector/main.go
@@ -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.
+
 package main
 
 import (
diff --git a/examples/main_simulation.go b/examples/main_simulation.go
index 2756b22..4924876 100644
--- a/examples/main_simulation.go
+++ b/examples/main_simulation.go
@@ -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.
+
 package main
 
 import (
diff --git a/pkg/banner/embed.go b/pkg/banner/embed.go
index cf4c31e..82b8727 100644
--- a/pkg/banner/embed.go
+++ b/pkg/banner/embed.go
@@ -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.
+
 package banner
 
 import (
diff --git a/pkg/collector/basic/abstract_collect.go 
b/pkg/collector/basic/abstract_collect.go
index dce5f25..593b55d 100644
--- a/pkg/collector/basic/abstract_collect.go
+++ b/pkg/collector/basic/abstract_collect.go
@@ -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.
+
 package basic
 
 import (
diff --git a/pkg/collector/basic/database/jdbc_collector.go 
b/pkg/collector/basic/database/jdbc_collector.go
index 620a3ce..924ca18 100644
--- a/pkg/collector/basic/database/jdbc_collector.go
+++ b/pkg/collector/basic/database/jdbc_collector.go
@@ -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.
+
 package database
 
 import (
diff --git a/pkg/collector/basic/database/jdbc_collector_test.go 
b/pkg/collector/basic/database/jdbc_collector_test.go
index 2a8c454..3dc761d 100644
--- a/pkg/collector/basic/database/jdbc_collector_test.go
+++ b/pkg/collector/basic/database/jdbc_collector_test.go
@@ -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.
+
 package database
 
 import (
diff --git a/pkg/collector/bootstrap.go b/pkg/collector/bootstrap.go
index 024b0a9..2e02be1 100644
--- a/pkg/collector/bootstrap.go
+++ b/pkg/collector/bootstrap.go
@@ -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.
+
 package collector
 
 import (
diff --git a/pkg/collector/collect_service.go b/pkg/collector/collect_service.go
index 9862b03..7714e56 100644
--- a/pkg/collector/collect_service.go
+++ b/pkg/collector/collect_service.go
@@ -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.
+
 package collector
 
 import (
diff --git 
a/pkg/collector/common/collect/metrics/hertzbeat_metrics_collector.go 
b/pkg/collector/common/collect/metrics/hertzbeat_metrics_collector.go
index 793c1f9..5415d0d 100644
--- a/pkg/collector/common/collect/metrics/hertzbeat_metrics_collector.go
+++ b/pkg/collector/common/collect/metrics/hertzbeat_metrics_collector.go
@@ -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.
+
 package metrics
 
 import (
diff --git a/pkg/collector/common/collect/strategy/strategy_factory.go 
b/pkg/collector/common/collect/strategy/strategy_factory.go
index ae1aa87..17e4874 100644
--- a/pkg/collector/common/collect/strategy/strategy_factory.go
+++ b/pkg/collector/common/collect/strategy/strategy_factory.go
@@ -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.
+
 package strategy
 
 import (
diff --git a/pkg/collector/common/dispatcher/entrance/client.go 
b/pkg/collector/common/dispatcher/entrance/client.go
index 5672658..b62113c 100644
--- a/pkg/collector/common/dispatcher/entrance/client.go
+++ b/pkg/collector/common/dispatcher/entrance/client.go
@@ -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.
+
 package entrance
 
 import (
diff --git a/pkg/collector/common/dispatcher/entrance/collect_job_service.go 
b/pkg/collector/common/dispatcher/entrance/collect_job_service.go
index 12ae600..a3b536d 100644
--- a/pkg/collector/common/dispatcher/entrance/collect_job_service.go
+++ b/pkg/collector/common/dispatcher/entrance/collect_job_service.go
@@ -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.
+
 package entrance
 
 import (
diff --git 
a/pkg/collector/common/dispatcher/entrance/collect_job_service_test.go 
b/pkg/collector/common/dispatcher/entrance/collect_job_service_test.go
index f5a031e..10d8d51 100644
--- a/pkg/collector/common/dispatcher/entrance/collect_job_service_test.go
+++ b/pkg/collector/common/dispatcher/entrance/collect_job_service_test.go
@@ -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.
+
 package entrance
 
 import (
diff --git a/pkg/collector/common/dispatcher/entrance/collect_server.go 
b/pkg/collector/common/dispatcher/entrance/collect_server.go
index 8e66e87..263040e 100644
--- a/pkg/collector/common/dispatcher/entrance/collect_server.go
+++ b/pkg/collector/common/dispatcher/entrance/collect_server.go
@@ -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.
+
 package entrance
 
 import (
diff --git a/pkg/collector/common/dispatcher/entrance/config.go 
b/pkg/collector/common/dispatcher/entrance/config.go
index df4c8c3..8fc64ab 100644
--- a/pkg/collector/common/dispatcher/entrance/config.go
+++ b/pkg/collector/common/dispatcher/entrance/config.go
@@ -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.
+
 package entrance
 
 import (
diff --git a/pkg/collector/common/dispatcher/entrance/processors.go 
b/pkg/collector/common/dispatcher/entrance/processors.go
index 06b0c90..e202740 100644
--- a/pkg/collector/common/dispatcher/entrance/processors.go
+++ b/pkg/collector/common/dispatcher/entrance/processors.go
@@ -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.
+
 package entrance
 
 import (
diff --git a/pkg/collector/common/job/job_server.go 
b/pkg/collector/common/job/job_server.go
index 8a63e54..1fe3669 100644
--- a/pkg/collector/common/job/job_server.go
+++ b/pkg/collector/common/job/job_server.go
@@ -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.
+
 package job
 
 import (
diff --git a/pkg/collector/common/transport/transport.go 
b/pkg/collector/common/transport/transport.go
index 8040073..3a8778e 100644
--- a/pkg/collector/common/transport/transport.go
+++ b/pkg/collector/common/transport/transport.go
@@ -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.
+
 package transport
 
 import (
diff --git a/pkg/collector/config/config.go b/pkg/collector/config/config.go
index 7b1270d..540ad78 100644
--- a/pkg/collector/config/config.go
+++ b/pkg/collector/config/config.go
@@ -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.
+
 package config
 
 import (
diff --git a/pkg/collector/config/config_test.go 
b/pkg/collector/config/config_test.go
index b16fc79..9058421 100644
--- a/pkg/collector/config/config_test.go
+++ b/pkg/collector/config/config_test.go
@@ -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.
+
 package config
 
 import (
diff --git a/pkg/collector/server/server.go b/pkg/collector/server/server.go
index d1f0de7..53af10c 100644
--- a/pkg/collector/server/server.go
+++ b/pkg/collector/server/server.go
@@ -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.
+
 package server
 
 import (
diff --git a/pkg/collector/server/server_test.go 
b/pkg/collector/server/server_test.go
index abb4e43..8840f1c 100644
--- a/pkg/collector/server/server_test.go
+++ b/pkg/collector/server/server_test.go
@@ -1 +1,18 @@
+// 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.
+
 package server
diff --git a/pkg/constants/const.go b/pkg/constants/const.go
index 8497882..94f87d8 100644
--- a/pkg/constants/const.go
+++ b/pkg/constants/const.go
@@ -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.
+
 package constants
 
 // System constants
diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go
index 43d0bd4..bd2bf93 100644
--- a/pkg/logger/logger.go
+++ b/pkg/logger/logger.go
@@ -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.
+
 package logger
 
 import (
diff --git a/pkg/logger/logger_test.go b/pkg/logger/logger_test.go
index a57a242..c1389c9 100644
--- a/pkg/logger/logger_test.go
+++ b/pkg/logger/logger_test.go
@@ -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.
+
 package logger
 
 import (
diff --git a/pkg/types/config_types.go b/pkg/types/config_types.go
index de0adf3..4c7b2b9 100644
--- a/pkg/types/config_types.go
+++ b/pkg/types/config_types.go
@@ -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.
+
 package types
 
 type CollectorConfig struct {
diff --git a/pkg/types/job/job_types.go b/pkg/types/job/job_types.go
index 50ee83d..9f1df89 100644
--- a/pkg/types/job/job_types.go
+++ b/pkg/types/job/job_types.go
@@ -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.
+
 package job
 
 // hertzbeat Collect Job related types
diff --git a/pkg/types/job/protocol/common_request_protocol.go 
b/pkg/types/job/protocol/common_request_protocol.go
index 6c00a23..8129a77 100644
--- a/pkg/types/job/protocol/common_request_protocol.go
+++ b/pkg/types/job/protocol/common_request_protocol.go
@@ -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.
+
 package protocol
 
 import (
diff --git a/pkg/types/job/protocol/consul_sd_protocol.go 
b/pkg/types/job/protocol/consul_sd_protocol.go
index b901404..6090c9f 100644
--- a/pkg/types/job/protocol/consul_sd_protocol.go
+++ b/pkg/types/job/protocol/consul_sd_protocol.go
@@ -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.
+
 package protocol
 
 import "hertzbeat.apache.org/hertzbeat-collector-go/pkg/logger"
diff --git a/pkg/types/job/protocol/ssh_protocol.go 
b/pkg/types/job/protocol/ssh_protocol.go
index b627549..1a1f108 100644
--- a/pkg/types/job/protocol/ssh_protocol.go
+++ b/pkg/types/job/protocol/ssh_protocol.go
@@ -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.
+
 package protocol
 
 type SshProtocol struct {
diff --git a/pkg/types/job/protocol/zookeeper_sd_protocol.go 
b/pkg/types/job/protocol/zookeeper_sd_protocol.go
index 3e3cef2..ab5db4d 100644
--- a/pkg/types/job/protocol/zookeeper_sd_protocol.go
+++ b/pkg/types/job/protocol/zookeeper_sd_protocol.go
@@ -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.
+
 package protocol
 
 import (
diff --git a/pkg/types/logging_types.go b/pkg/types/logging_types.go
index a549586..1ee1da9 100644
--- a/pkg/types/logging_types.go
+++ b/pkg/types/logging_types.go
@@ -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.
+
 package types
 
 // hertzbeat logging related types
diff --git a/tools/ci-config/labeler.yml b/tools/ci-config/labeler.yml
new file mode 100644
index 0000000..70d8102
--- /dev/null
+++ b/tools/ci-config/labeler.yml
@@ -0,0 +1,65 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+#
+"area/infra":
+  - changed-files:
+      - any-glob-to-any-file:
+          - ".github/**/*"
+          - "tools/**/*"
+          - ".asf.yaml"
+          - ".gitignore"
+          - "SECURITY.md"
+          - "CODE_OF_CONDUCT.md"
+          - "CONTRIBUTING.md"
+          - "CONTRIBUTING-zh.md"
+          - "GOVERNANCE.md"
+
+"area/docs":
+  - changed-files:
+      - any-glob-to-any-file:
+          - "docs/**/*"
+          - "**/README.md"
+          - "**/README-CN.md"
+          - "**/README-ja.md"
+          - "SECURITY.md"
+
+"area/core":
+  - changed-files:
+      - any-glob-to-any-file:
+          - "cmd/**/*"
+          - "pkg/**/*"
+          - "api/**/*"
+
+"area/example":
+  - changed-files:
+      - any-glob-to-any-file:
+          - "examples/**/*"
diff --git a/tools/github-actions/setup-deps/action.yml 
b/tools/github-actions/setup-deps/action.yml
new file mode 100644
index 0000000..03b6e84
--- /dev/null
+++ b/tools/github-actions/setup-deps/action.yml
@@ -0,0 +1,47 @@
+# 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.
+
+#
+# Copyright 2024-2026 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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: setup-deps
+description: Install host system dependencies
+runs:
+  using: composite
+  steps:
+    - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.0.1
+      with:
+        go-version: '1.24'
+    - uses: actions/setup-python@v5
+      with:
+        python-version: '3.13'
+    - uses: actions/setup-node@v4
+      with:
+        node-version: '22'
diff --git a/tools/linter/codespell/.codespell.ignorewords 
b/tools/linter/codespell/.codespell.ignorewords
new file mode 100644
index 0000000..e69de29
diff --git a/tools/linter/codespell/.codespell.skip 
b/tools/linter/codespell/.codespell.skip
new file mode 100644
index 0000000..63ac784
--- /dev/null
+++ b/tools/linter/codespell/.codespell.skip
@@ -0,0 +1,2 @@
+.git
+.idea
diff --git a/tools/linter/license/.licenserc.yaml 
b/tools/linter/license/.licenserc.yaml
new file mode 100644
index 0000000..69e249a
--- /dev/null
+++ b/tools/linter/license/.licenserc.yaml
@@ -0,0 +1,73 @@
+#
+# 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:
+    - '**/*.keep'
+    - '**/*.md'
+    - '**/*.json'
+    - '**/*.iml'
+    - '**/*.ini'
+    - '**/*.svg'
+    - '**/*.png'
+    - '**/*.MD'
+    - '**/*.ftl'
+    - '**/*.tpl'
+    - '**/*.pl'
+    - '**/*.dict'
+    - '**/*.awk'
+    - "**/*.lock"
+    - '**/*.crt'
+    - '**/*.pem'
+    - '**/*.js'
+    - '**/*.txt'
+    - '.gitattributes'
+    - '**/.gitignore'
+    - '**/.gitkeep'
+    - 'LICENSE'
+    - 'NOTICE'
+    - 'DISCLAIMER'
+    - '**/LICENSE'
+    - '**/NOTICE'
+    - '.all-contributorsrc'
+    - '.gitpod.Dockerfile'
+    - '.gitpod.yml'
+    - '.helmignore'
+    - 'go.mod'
+    - 'go.sum'
+    - 'tools/linter/license/.licenserc.yaml'
+    - 'tools/linter/codespell/.codespell.ignorewords'
+    - 'tools/linter/codespell/.codespell.skip'
+    - 'tools/linter/yamllint/.yamllint'
+    - '.go-version'
+    - 'VERSION'
+
+  comment: on-failure
+
+  language:
+    Go:
+      extensions:
+        - ".go"
+      comment_style_id: SlashAsterisk
+
+dependency:
+  files:
+    - go.mod
diff --git a/tools/linter/markdownlint/markdown_lint_config.yaml 
b/tools/linter/markdownlint/markdown_lint_config.yaml
new file mode 100644
index 0000000..07dc324
--- /dev/null
+++ b/tools/linter/markdownlint/markdown_lint_config.yaml
@@ -0,0 +1,61 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+#
+
+# MD009/no-trailing-spaces Trailing spaces
+MD009: false
+# MD013 Line length
+MD013: false
+# MD014 Dollar signs used before commands without showing output
+MD014: false
+# MD024 Multiple headings with the same content
+MD024: false
+# MD026/no-trailing-punctuation Trailing punctuation in heading
+MD026: false
+# MD029/ol-prefix Ordered list item prefix
+MD029: false
+# MD033/no-inline-html
+MD033: false
+# MD034/no-bare-urls
+MD034: false
+# MD040/fenced-code-language
+MD040: false
+# MD041/first-line-heading/first-line-h1 First line in file should be a top 
level heading
+MD041: false
+# MD036/emphasis used instead of a header
+MD036: false
+# MD051/first-heading-h1-first
+MD051: false
+# MD056/table-column-count Table
+MD056: false
+# MD055/table-pipe-style
+MD055: false
diff --git a/tools/linter/yamllint/.yamllint b/tools/linter/yamllint/.yamllint
new file mode 100644
index 0000000..6b25ddb
--- /dev/null
+++ b/tools/linter/yamllint/.yamllint
@@ -0,0 +1,75 @@
+#
+# Copyright 2024-2026 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+#
+
+---
+
+ignore: |
+  # This directory fails checks since many files
+  # are templated. Instead, we run the linter
+  # after running `make generate-manifests` which creates
+  # the Install YAML in bin/
+  **/node_modules/**
+  **/build/**
+  **/docker/**
+
+rules:
+  braces:
+    min-spaces-inside: 0
+    max-spaces-inside: 0
+    min-spaces-inside-empty: -1
+    max-spaces-inside-empty: -1
+  brackets:
+    min-spaces-inside: 0
+    max-spaces-inside: 1
+    min-spaces-inside-empty: -1
+    max-spaces-inside-empty: -1
+  colons:
+    max-spaces-before: 0
+    max-spaces-after: 1
+  commas:
+    max-spaces-before: 1
+    min-spaces-after: 1
+    max-spaces-after: 1
+  comments:
+    level: warning
+    require-starting-space: true
+    min-spaces-from-content: 1
+  comments-indentation:
+    level: warning
+  document-end: disable
+  document-start: disable
+  empty-lines:
+    max: 2
+    max-start: 0
+    max-end: 1
+  empty-values:
+    forbid-in-block-mappings: false
+    forbid-in-flow-mappings: true
+  hyphens:
+    max-spaces-after: 1
+  indentation:
+    spaces: 2
+    indent-sequences: consistent  # be consistent: don't mix indentation 
styles in one file.
+    check-multi-line-strings: false
+  key-duplicates: enable
+  key-ordering: disable
+  new-line-at-end-of-file: enable
+  new-lines:
+    type: unix
+  trailing-spaces: enable
+  truthy:
+    check-keys: false   # GitHub Actions uses "on:" as a key
+    level: warning
diff --git a/tools/make/common.mk b/tools/make/common.mk
new file mode 100644
index 0000000..27927be
--- /dev/null
+++ b/tools/make/common.mk
@@ -0,0 +1,53 @@
+# 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.
+
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+
+SHELL:=/bin/bash
+
+DATETIME = $(shell date +"%Y%m%d%H%M%S")
+
+# Log the running target
+LOG_TARGET = echo -e "\033[0;32m==================> Running $@ ============> 
... \033[0m"
+
+# Log debugging info
+define log
+echo -e "\033[36m==================>$1\033[0m"
+endef
+
+# Log error info
+define errorLog
+echo -e "\033[0;31m==================>$1\033[0m"
+endef
+
+.PHONY: help
+help:
+       @echo -e "\033[1;3;34m Apache Hertzbeat Collector Go Impl.\033[0m\n"
+       @echo -e "Usage:\n  make \033[36m<Target>\033[0m 
\033[36m<Option>\033[0m\n\nTargets:"
+       @awk 'BEGIN {FS = ":.*##"; printf ""} /^[a-zA-Z_0-9-]+:.*?##/ { printf 
"  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf 
"\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
diff --git a/Makefile b/tools/make/golang.mk
similarity index 88%
copy from Makefile
copy to tools/make/golang.mk
index 795a6a2..2c9a681 100644
--- a/Makefile
+++ b/tools/make/golang.mk
@@ -15,35 +15,36 @@
 # limitations under the License.
 #
 
+##@ Golang
+
 .PHONY:
-fmt:
+fmt: ## Golang fmt
        go fmt ./...
 
 .PHONY:
-lint:
+lint: ## Golang lint check
        golangci-lint run
 
 .PHONY:
-vet:
+vet: ## Golang vet
        go vet ./...
 
 .PHONY:
-dev:
+dev: ## Golang dev, run main by run.
        go run ./cmd/main.go
 
 .PHONY: build
 # build
-build:
+build: ## Golang build
        @version=$$(cat VERSION); \
        mkdir -p bin/ && go build -ldflags "-X main.Version=$(VERSION)" -o 
./bin/ ./...
 
 .PHONY:
-test:
+test: run all unit test
        go test -v ./...
 
 .PHONY: init
-# init env
-init:
+init: ## install base tools
        go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
        go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
        go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest
@@ -52,7 +53,7 @@ init:
 .PHONY: api
 # generate api proto
 api: API_PROTO_FILES := $(wildcard api/*.proto)
-api:
+api: ## compile api proto files
        protoc --proto_path=./api \
               --go_out=paths=source_relative:./api \
               --go-http_out=paths=source_relative:./api \
diff --git a/tools/make/linter.mk b/tools/make/linter.mk
new file mode 100644
index 0000000..159101b
--- /dev/null
+++ b/tools/make/linter.mk
@@ -0,0 +1,94 @@
+# 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.
+
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+
+##@ Linter
+
+.PHONY: lint
+lint: ## Check files
+lint: markdown-lint-checkt yaml-lint code-spell newline-check
+
+.PHONY: codespell
+codespell: CODESPELL_SKIP := $(shell cat 
tools/linter/codespell/.codespell.skip | tr \\n ',')
+codespell: ## Check the code-spell
+       @$(LOG_TARGET)
+       codespell --version
+       codespell --skip "$(CODESPELL_SKIP)" --ignore-words 
./tools/linter/codespell/.codespell.ignorewords
+
+.PHONY: yaml-lint
+yaml-lint: ## Check the yaml lint
+       @$(LOG_TARGET)
+       yamllint --version
+       yamllint -c ./tools/linter/yamllint/.yamllint .
+
+.PHONY: yaml-lint-fix
+yaml-lint-fix: ## Yaml lint fix
+       @$(LOG_TARGET)
+       yamlfmt -version
+       yamlfmt .
+
+.PHONY: licenses-fix
+licenses-fix: ## Fix the licenses
+       @$(LOG_TARGET)
+       license-eye --version
+       license-eye -c ./tools/linter/license/.licenserc.yaml header fix
+
+.PHONY: licenses-check
+licenses-check: ## Check the licenses
+       @$(LOG_TARGET)
+       license-eye --version
+       license-eye -c ./tools/linter/license/.licenserc.yaml header check
+
+.PHONY: markdown-lint-check
+markdown-lint: ## Check the markdown files.
+       @$(LOG_TARGET)
+       markdownlint --version
+       markdownlint --config 
./tools/linter/markdownlint/markdown_lint_config.yaml .
+
+.PHONY: markdown-lint-fix
+markdown-lint-fix: ## Fix the markdown files style.
+       @$(LOG_TARGET)
+       markdownlint --version
+       markdownlint --config 
./tools/linter/markdownlint/markdown_lint_config.yaml --fix .
+
+.PHONY: newline-check
+newline-check: ## Check the newline
+       @$(LOG_TARGET)
+       python tools/scripts/new-line-check.py check
+
+.PHONY: newline-fix
+newline-fix: ## Fix the newline
+       @$(LOG_TARGET)
+       python tools/scripts/new-line-check.py fix
+
+.PHONY: secrets-check
+secrets-check: ## Check the secrets
+       @$(LOG_TARGET)
+       gitleaks dir -v .
diff --git a/tools/make/tools.mk b/tools/make/tools.mk
new file mode 100644
index 0000000..54831f7
--- /dev/null
+++ b/tools/make/tools.mk
@@ -0,0 +1,69 @@
+# 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.
+
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+#     https://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.
+
+##@ Tools
+
+.PHONY: tools
+
+MVND_VERSION := 2.0.0-rc-3
+
+tools: ## Install ci tools
+
+       @$(LOG_TARGET)
+       go version
+       python --version
+       node --version
+       npm --version
+
+       @echo "Installing markdownlint-cli"
+       npm install markdownlint-cli --global
+
+       @echo "Installing licenses-eyes"
+       go install 
github.com/apache/skywalking-eyes/cmd/[email protected]
+
+       @echo "Installing codespell"
+       pip install codespell
+
+       @echo "Installing yamllint"
+       pip install yamllint==1.35.1
+
+       @echo "Installing yamlfmt"
+       go install github.com/google/yamlfmt/cmd/yamlfmt@latest
+
+       @echo "Installing gitleaks"
+       mkdir -p tools/bin && \
+       cd tools/bin && \
+       git clone https://github.com/gitleaks/gitleaks && \
+       cd gitleaks && \
+       make build && \
+       chmod +x gitleaks && \
+       cp gitleaks /usr/local/bin && \
+       cd .. && rm -rf gitleaks
diff --git a/tools/scripts/new-line-check.py b/tools/scripts/new-line-check.py
new file mode 100644
index 0000000..1474a2e
--- /dev/null
+++ b/tools/scripts/new-line-check.py
@@ -0,0 +1,126 @@
+# 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.
+
+#
+# Copyright 2024-2025 the original author or authors.
+#
+# Licensed 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
+#
+# https://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 os
+import sys
+
+# Ignored project folders
+ignore_dirs = [
+    "node_modules",
+    ".idea",
+    ".git",
+    ".vscode",
+    "target",
+    "static",
+    "static_legacy",
+    "frontend",
+    ".husky",
+    "docs",
+    "docker"
+]
+
+# A list of ignored suffix files
+ignore_suffix = [
+    ".png", ".jpg", ".jpeg", ".gif", ".svg", ".ico",
+    ".webp", ".pdf", ".word", ".docx", ".doc", ".ppt",
+    ".xlsx", ".xls", ".exe", "chromedriver", ".pptx", ".jar",
+    ".wav", ".bib", ".cmd", "mvnw", ".bin", ".pcm", ".flac", ".ttf",
+    ".mp4", ".PPT", ".jif", ".zip", ".tar", ".gz", ".rar", ".7z",
+    ".tar.gz", ".tar.bz2", ".tar.xz", ".tgz", ".tbz2", ".txz",
+    ".txt"
+]
+
+# Check if the incoming file ends with a blank line
+def check_file(path):
+    try:
+        with open(path, 'rb') as f:
+            f.seek(0, os.SEEK_END)
+            size = f.tell()
+            if size == 0:
+                return None
+            f.seek(-1, os.SEEK_END)
+            if f.read(1) != b'\n':
+                return path
+    except OSError as e:
+        print(f"Cannot check file: {path}: {e}")
+    return None
+
+# Accept a list, check if each file ends with a blank line, and if not, write 
a new line at the end of the file
+def add_newline(file):
+    print("Fixing: " + file)
+    with open(file, 'a') as f:
+        f.write('\n')
+
+# Gets all the files in the current directory and returns a list of files
+def get_files():
+    files_to_check = []
+    for root, dirs, files in os.walk('.'):
+        # Ignore the specified directory
+        dirs[:] = [d for d in dirs if d not in ignore_dirs]
+        for file in files:
+            if not any(file.endswith(suffix) for suffix in ignore_suffix):
+                files_to_check.append(os.path.join(root, file))
+    return files_to_check
+
+# Run the checks
+def run(check_only=False):
+    files = get_files()
+    files_to_fix = []
+
+    for file in files:
+        result = check_file(file)
+        if result:
+            files_to_fix.append(result)
+
+    if files_to_fix:
+        print("The following files are missing a blank line:")
+        for file in files_to_fix:
+            print(file)
+        if check_only:
+            print("Error: Some files do not end with a blank line.")
+            sys.exit(1)  # Exit with an error code
+        else:
+            for file in files_to_fix:
+                add_newline(file)
+                print(f"Added a line break at the end of {file}.")
+    else:
+        print("All files have ended with a blank line.")
+
+if __name__ == "__main__":
+    mode = sys.argv[1] if len(sys.argv) > 1 else 'check'
+    if mode == 'check':
+        run(check_only=True)
+    elif mode == 'fix':
+        run(check_only=False)
+    else:
+        print("Invalid mode. Please use 'check' or 'fix'.")


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to