From 49705595613e80343d97f53bc744e0131e938390 Mon Sep 17 00:00:00 2001 From: wenliang zhu <73632785+juniaoshaonian@users.noreply.github.com> Date: Tue, 26 Sep 2023 22:50:50 +0800 Subject: [PATCH] =?UTF-8?q?ci=E6=B7=BB=E5=8A=A0=20(#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci修改 * 修改代码 * mq-sql makefile * ci部分调整 * ci修改 [ci skip] * ci修改 [ci skip] --- .CHANGELOG.md | 2 + .github/ISSUE_TEMPLATE/bug_report.md | 34 ++++ .github/ISSUE_TEMPLATE/feature_request.md | 26 +++ .github/ISSUE_TEMPLATE/question.md | 22 +++ .github/pre-commit | 31 ++++ .github/pre-push | 50 ++++++ .github/workflows/changelog.yml | 45 +++++ .github/workflows/go-fmt.yml | 42 +++++ .github/workflows/go.yml | 40 +++++ .github/workflows/golangci-lint.yml | 61 +++++++ .github/workflows/integration_test.yml | 34 ++++ .github/workflows/license.yml | 28 +++ .github/workflows/stale.yml | 33 ++++ .gitignore | 1 + LICENSE | 201 ---------------------- Makefile | 38 ++++ go.mod | 3 + helloword_test.go | 7 + script/fmt.sh | 6 + script/integrate_test.sh | 23 +++ script/integration_test_compose.yml | 30 ++++ script/mysql/mq.sql | 2 + script/setup.sh | 40 +++++ 23 files changed, 598 insertions(+), 201 deletions(-) create mode 100644 .CHANGELOG.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100755 .github/pre-commit create mode 100644 .github/pre-push create mode 100644 .github/workflows/changelog.yml create mode 100644 .github/workflows/go-fmt.yml create mode 100644 .github/workflows/go.yml create mode 100644 .github/workflows/golangci-lint.yml create mode 100644 .github/workflows/integration_test.yml create mode 100644 .github/workflows/license.yml create mode 100644 .github/workflows/stale.yml delete mode 100644 LICENSE create mode 100644 Makefile create mode 100644 go.mod create mode 100644 helloword_test.go create mode 100644 script/fmt.sh create mode 100644 script/integrate_test.sh create mode 100644 script/integration_test_compose.yml create mode 100644 script/mysql/mq.sql create mode 100644 script/setup.sh diff --git a/.CHANGELOG.md b/.CHANGELOG.md new file mode 100644 index 0000000..44df6f1 --- /dev/null +++ b/.CHANGELOG.md @@ -0,0 +1,2 @@ +- [mq-sql: ci添加](https://github.com/ecodeclub/mq-sql/pull/2) + diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..b8d17c6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**仅限中文** + +在提之前请先查找[已有 issues](https://github.com/ecodeclub/eorm/issues),避免重复上报。 + +并且确保自己已经: +- [ ] 阅读过文档 +- [ ] 阅读过注释 +- [ ] 阅读过例子 + +### 问题简要描述 + +### 复现步骤 +> 如果涉及到数据库表,你必须提供模型定义和表结构定义 + +### 错误日志或者截图 + +### 你期望的结果 + +### 你排查的结果,或者你觉得可行的修复方案 +> 可选。我们希望你能够尽量先排查问题,帮助我们减轻维护负担。这对于你个人能力提升同样是有帮助的。 + +### 你使用的是 mq-sql 哪个版本? + +### 你设置的的 Go 环境? +> 上传 `go env` 的结果 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..ddc4f44 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,26 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: feature +assignees: '' + +--- + +**仅限中文** + +### 使用场景 + +### 行业分析 +> 如果你知道有框架提供了类似功能,可以在这里描述,并且给出文档或者例子 + +### 可行方案 +> 如果你有设计思路或者解决方案,请在这里提供。你可以提供多个方案,并且给出自己的选择 + +### 其它 +> 任何你觉得有利于解决问题的补充说明 + +### 你使用的是 mq-sql 哪个版本? + +### 你设置的的 Go 环境? +> 上传 `go env` 的结果 diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..9a94e8d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,22 @@ +--- +name: Question +about: Want to ask some questions +title: '' +labels: question +--- + +**仅限中文** + +在提之前请先查找[已有 issues](https://github.com/ecodeclub/eorm/issues),避免重复上报。 + +并且确保自己已经: +- [ ] 阅读过文档 +- [ ] 阅读过注释 +- [ ] 阅读过例子 + +### 你的问题 + +### 你使用的是 mq-sql 哪个版本? + +### 你设置的的 Go 环境? +> 上传 `go env` 的结果 diff --git a/.github/pre-commit b/.github/pre-commit new file mode 100755 index 0000000..cee85c5 --- /dev/null +++ b/.github/pre-commit @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2021 ecodeclub +# +# 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 +# +# 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. +# +# To use, store as .git/hooks/pre-commit inside your repository and make sure +# it has execute permissions. +# +# This script does not handle file names that contain spaces. + +# Pre-commit configuration + +RESULT=$(make check) +printf "执行检查中...\n" + +if [ -n "$RESULT" ]; then + echo >&2 "[ERROR]: 有文件发生变更,请将变更文件添加到本次提交中" + exit 1 +fi + +exit 0 diff --git a/.github/pre-push b/.github/pre-push new file mode 100644 index 0000000..0208db7 --- /dev/null +++ b/.github/pre-push @@ -0,0 +1,50 @@ +#!/bin/sh +# Copyright 2021 ecodeclub +# +# 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 +# +# 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. +# git test pre-push hook +# +# To use, store as .git/hooks/pre-push inside your repository and make sure +# it has execute permissions. +# +# This script does not handle file names that contain spaces. + +# Pre-push configuration +remote=$1 +url=$2 +echo >&2 "Try pushing $2 to $1" + +TEST="go test ./... -race -cover -failfast" +LINTER="golangci-lint run" + +# Run test and return if failed +printf "Running go test..." +$TEST +RESULT=$? +if [ $RESULT -ne 0 ]; then + echo >&2 "$TEST" + echo >&2 "Check code to pass test." + exit 1 +fi + +# Run linter and return if failed +printf "Running go linter..." +$LINTER +RESULT=$? +if [ $RESULT -ne 0 ]; then + echo >&2 "$LINTER" + echo >&2 "Check code to pass linter." + exit 1 +fi + +exit 0 \ No newline at end of file diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000..5d2f067 --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,45 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: changelog + +on: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + branches: + - dev + - main + +jobs: + changelog: + runs-on: ubuntu-latest + if: "!contains(github.event.pull_request.labels.*.name, 'Skip Changelog')" + + steps: + - uses: actions/checkout@v2 + + - name: Check for CHANGELOG changes + run: | + # Only the latest commit of the feature branch is available + # automatically. To diff with the base branch, we need to + # fetch that too (and we only need its latest commit). + git fetch origin ${{ github.base_ref }} --depth=1 + if [[ $(git diff --name-only FETCH_HEAD | grep CHANGELOG) ]] + then + echo "A CHANGELOG was modified. Looks good!" + else + echo "No CHANGELOG was modified." + echo "Please add a CHANGELOG entry, or add the \"Skip Changelog\" label if not required." + false + fi \ No newline at end of file diff --git a/.github/workflows/go-fmt.yml b/.github/workflows/go-fmt.yml new file mode 100644 index 0000000..69fea98 --- /dev/null +++ b/.github/workflows/go-fmt.yml @@ -0,0 +1,42 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Format Go code + +on: + push: + branches: [ main, dev] + pull_request: + branches: [ main, dev] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: ">=1.18.0" + + - name: Install goimports + run: go install golang.org/x/tools/cmd/goimports@latest + + - name: Check + run: | + make check + if [ -n "$(git status --porcelain)" ]; then + echo >&2 "错误: 请在本地运行命令'make check'后再提交." + exit 1 + fi \ No newline at end of file diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..a443303 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,40 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Go + +on: + push: + branches: [ main, dev] + pull_request: + branches: [ main, dev] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.18 + + - name: Build + run: go build -v ./... + + - name: Test + run: go test -race -coverprofile=cover.out -v ./... + + - name: Post Coverage + uses: codecov/codecov-action@v2 \ No newline at end of file diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 0000000..4d8f64a --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,61 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: golangci-lint +on: + push: + tags: + - v* + branches: + - master + - main + - dev + pull_request: +permissions: + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + # pull-requests: read +jobs: + golangci: + name: lint + runs-on: ubuntu-latest + steps: + - uses: actions/setup-go@v3 + with: + go-version: '1.18' + - uses: actions/checkout@v3 + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version + version: latest + + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + args: --timeout=10m # --issues-exit-code=0 + + # Optional: show only new issues if it's a pull request. The default value is `false`. + only-new-issues: true + + # Optional: if set to true then the all caching functionality will be complete disabled, + # takes precedence over all other caching options. + # skip-cache: true + + # Optional: if set to true then the action don't cache or restore ~/go/pkg. + # skip-pkg-cache: true + + # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. + # skip-build-cache: true \ No newline at end of file diff --git a/.github/workflows/integration_test.yml b/.github/workflows/integration_test.yml new file mode 100644 index 0000000..5588ed9 --- /dev/null +++ b/.github/workflows/integration_test.yml @@ -0,0 +1,34 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Integration Test + +on: + push: + branches: [ main, dev] + pull_request: + branches: [ main, dev] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.18 + + - name: Test + run: sudo sh ./script/integrate_test.sh \ No newline at end of file diff --git a/.github/workflows/license.yml b/.github/workflows/license.yml new file mode 100644 index 0000000..91fbcb8 --- /dev/null +++ b/.github/workflows/license.yml @@ -0,0 +1,28 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Check License Lines +on: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + branches: + - dev + - main +jobs: + check-license-lines: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Check License Lines + uses: kt3k/license_checker@v1.0.6 \ No newline at end of file diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..51f70a8 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,33 @@ +# Copyright 2021 ecodeclub +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Mark stale issues and pull requests + +on: + schedule: + - cron: "30 1 * * *" + +jobs: + stale: + + runs-on: ubuntu-latest + + steps: + - uses: actions/stale@v4 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: 'This issue is inactive for a long time.' + stale-pr-message: 'This PR is inactive for a long time' + stale-issue-label: 'inactive-issue' + stale-pr-label: 'inactive-pr' diff --git a/.gitignore b/.gitignore index 3b735ec..4bc60d7 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ # Go workspace file go.work +.idea \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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 - - 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/Makefile b/Makefile new file mode 100644 index 0000000..407baf4 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +# 单元测试 +.PHONY: ut +ut: + @go test -race ./... + +.PHONY: setup +setup: + @sh ./script/setup.sh + +.PHONY: lint +lint: + golangci-lint run + +.PHONY: fmt +fmt: + @sh ./script/fmt.sh + +.PHONY: tidy +tidy: + @go mod tidy -v + +.PHONY: check +check: + @$(MAKE) --no-print-directory fmt + @$(MAKE) --no-print-directory tidy + +# e2e 测试 +.PHONY: e2e +e2e: + sh ./script/integrate_test.sh + +.PHONY: e2e_up +e2e_up: + docker compose -f script/integration_test_compose.yml up -d + +.PHONY: e2e_down +e2e_down: + docker compose -f script/integration_test_compose.yml down \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7b74ad6 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module mq-sql + +go 1.21.0 diff --git a/helloword_test.go b/helloword_test.go new file mode 100644 index 0000000..25d793f --- /dev/null +++ b/helloword_test.go @@ -0,0 +1,7 @@ +package mq_sql + +import "testing" + +func TestHelloWorld(t *testing.T) { + +} diff --git a/script/fmt.sh b/script/fmt.sh new file mode 100644 index 0000000..abe9c94 --- /dev/null +++ b/script/fmt.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# shellcheck disable=SC2044 +for item in $(find . -type f -name '*.go' -not -path './.idea/*'); do + goimports -l -w "$item"; +done \ No newline at end of file diff --git a/script/integrate_test.sh b/script/integrate_test.sh new file mode 100644 index 0000000..3ee663c --- /dev/null +++ b/script/integrate_test.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# Copyright 2023 ecodeclub +# +# 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 +# +# 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. + + +set -e +docker-compose -f script/integration_test_compose.yml down +docker-compose -f script/integration_test_compose.yml up -d + +go test -race -cover ./... -tags=e2e +docker-compose -f script/integration_test_compose.yml down \ No newline at end of file diff --git a/script/integration_test_compose.yml b/script/integration_test_compose.yml new file mode 100644 index 0000000..2b7c404 --- /dev/null +++ b/script/integration_test_compose.yml @@ -0,0 +1,30 @@ +# Copyright 2023 ecodeclub +# +# 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 +# +# 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. + +services: + mysql8: + image: mysql:8.0.29 + restart: always + command: --default-authentication-plugin=mysql_native_password + environment: + MYSQL_ROOT_PASSWORD: root + healthcheck: + test: [ "CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "--password=root" ] + interval: 3s + timeout: 1s + retries: 100 + volumes: + - ./mysql/mq.sql:/docker-entrypoint-initdb.d/init.sql + ports: + - "3306:3306" \ No newline at end of file diff --git a/script/mysql/mq.sql b/script/mysql/mq.sql new file mode 100644 index 0000000..4f8ae62 --- /dev/null +++ b/script/mysql/mq.sql @@ -0,0 +1,2 @@ +CREATE DATABASE `test`; + diff --git a/script/setup.sh b/script/setup.sh new file mode 100644 index 0000000..96c7a1f --- /dev/null +++ b/script/setup.sh @@ -0,0 +1,40 @@ +# Copyright 2023 ecodeclub +# +# 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 +# +# 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. + +SOURCE_COMMIT=.github/pre-commit +TARGET_COMMIT=.git/hooks/pre-commit +SOURCE_PUSH=.github/pre-push +TARGET_PUSH=.git/hooks/pre-push + +# copy pre-commit file if not exist. +if [ ! -f $TARGET_COMMIT ]; then + echo "设置 git pre-commit hooks..." + cp $SOURCE_COMMIT $TARGET_COMMIT +fi + +# copy pre-push file if not exist. +if [ ! -f $TARGET_PUSH ]; then + echo "设置 git pre-push hooks..." + cp $SOURCE_PUSH $TARGET_PUSH +fi + +# add permission to TARGET_PUSH and TARGET_COMMIT file. +test -x $TARGET_PUSH || chmod +x $TARGET_PUSH +test -x $TARGET_COMMIT || chmod +x $TARGET_COMMIT + +echo "安装 golangci-lint..." +go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.52.2 + +echo "安装 goimports..." +go install golang.org/x/tools/cmd/goimports@latest \ No newline at end of file