Browse Source

Merge remote-tracking branch 'origin/master' into dev/v4.3.0

Zaiming Shi 5 years atrás
parent
commit
0336cca600
11 changed files with 371 additions and 5 deletions
  1. 119 0
      .github/workflows/.gitlint
  2. 11 0
      .github/workflows/elvis_lint.yaml
  3. 34 0
      .github/workflows/run_gitlint.yaml
  4. 1 0
      .gitignore
  5. 38 0
      CONTRIBUTING.md
  6. 1 1
      README-CN.md
  7. 98 0
      README-JP.md
  8. 2 2
      README.md
  9. 33 0
      elvis-check.sh
  10. 31 0
      elvis.config
  11. 3 2
      etc/emqx.conf

+ 119 - 0
.github/workflows/.gitlint

@@ -0,0 +1,119 @@
+# Edit this file as you like.
+#
+# All these sections are optional. Each section with the exception of [general] represents
+# one rule and each key in it is an option for that specific rule.
+#
+# Rules and sections can be referenced by their full name or by id. For example
+# section "[body-max-line-length]" could also be written as "[B1]". Full section names are
+# used in here for clarity.
+#
+[general]
+# Ignore certain rules, this example uses both full name and id
+ignore=title-trailing-punctuation, T1, T2, T3, T4, T5, T6, T8, B1, B2, B3, B4, B5, B6, B7, B8
+
+# verbosity should be a value between 1 and 3, the commandline -v flags take precedence over this
+# verbosity = 2
+
+# By default gitlint will ignore merge, revert, fixup and squash commits.
+# ignore-merge-commits=true
+# ignore-revert-commits=true
+# ignore-fixup-commits=true
+# ignore-squash-commits=true
+
+# Ignore any data send to gitlint via stdin
+# ignore-stdin=true
+
+# Fetch additional meta-data from the local repository when manually passing a
+# commit message to gitlint via stdin or --commit-msg. Disabled by default.
+# staged=true
+
+# Enable debug mode (prints more output). Disabled by default.
+# debug=true
+
+# Enable community contributed rules
+# See http://jorisroovers.github.io/gitlint/contrib_rules for details
+# contrib=contrib-title-conventional-commits,CC1
+
+# Set the extra-path where gitlint will search for user defined rules
+# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
+# extra-path=examples/
+
+# This is an example of how to configure the "title-max-length" rule and
+# set the line-length it enforces to 80
+# [title-max-length]
+# line-length=50
+
+# Conversely, you can also enforce minimal length of a title with the
+# "title-min-length" rule:
+# [title-min-length]
+# min-length=5
+
+# [title-must-not-contain-word]
+# Comma-separated list of words that should not occur in the title. Matching is case
+# insensitive. It's fine if the keyword occurs as part of a larger word (so "WIPING"
+# will not cause a violation, but "WIP: my title" will.
+# words=wip
+
+[title-match-regex]
+# python-style regex that the commit-msg title must match
+# Note that the regex can contradict with other rules if not used correctly
+# (e.g. title-must-not-contain-word).
+regex=^(feat|fix|docs|style|refactor|test|chore|perf)\(.+\): .+
+
+# [body-max-line-length]
+# line-length=72
+
+# [body-min-length]
+# min-length=5
+
+# [body-is-missing]
+# Whether to ignore this rule on merge commits (which typically only have a title)
+# default = True
+# ignore-merge-commits=false
+
+# [body-changed-file-mention]
+# List of files that need to be explicitly mentioned in the body when they are changed
+# This is useful for when developers often erroneously edit certain files or git submodules.
+# By specifying this rule, developers can only change the file when they explicitly reference
+# it in the commit message.
+# files=gitlint/rules.py,README.md
+
+# [body-match-regex]
+# python-style regex that the commit-msg body must match.
+# E.g. body must end in My-Commit-Tag: foo
+# regex=My-Commit-Tag: foo$
+
+# [author-valid-email]
+# python-style regex that the commit author email address must match.
+# For example, use the following regex if you only want to allow email addresses from foo.com
+# regex=[^@]+@foo.com
+
+[ignore-by-title]
+# Ignore certain rules for commits of which the title matches a regex
+# E.g. Match commit titles that start with "Release"
+# regex=^Release(.*)
+
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+[ignore-by-body]
+# Ignore certain rules for commits of which the body has a line that matches a regex
+# E.g. Match bodies that have a line that that contain "release"
+# regex=(.*)release(.*)
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# [ignore-body-lines]
+# Ignore certain lines in a commit body that match a regex.
+# E.g. Ignore all lines that start with 'Co-Authored-By'
+# regex=^Co-Authored-By
+
+# This is a contrib rule - a community contributed rule. These are disabled by default.
+# You need to explicitly enable them one-by-one by adding them to the "contrib" option
+# under [general] section above.
+# [contrib-title-conventional-commits]
+# Specify allowed commit types. For details see: https://www.conventionalcommits.org/
+# types = bugfix,user-story,epic

+ 11 - 0
.github/workflows/elvis_lint.yaml

@@ -0,0 +1,11 @@
+name: Elvis Linter
+
+on: [pull_request]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v1
+      - run: |
+          ./elvis-check.sh $GITHUB_BASE_REF

+ 34 - 0
.github/workflows/run_gitlint.yaml

@@ -0,0 +1,34 @@
+name: Run gitlint
+
+on: [pull_request]
+
+jobs:
+  run_gitlint:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout source code
+        uses: actions/checkout@master
+      - name: Install gitlint
+        run: |
+          sudo apt-get update
+          sudo apt install gitlint
+      - name: Run gitlint
+        run: |
+          pr_number=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')
+          messages=$(curl "https://api.github.com/repos/${GITHUB_REPOSITORY}/pulls/${pr_number}/commits")
+          len=$(echo $messages | jq length)
+          result=true
+          for i in $( seq 0 $(($len - 1)) ); do
+            message=$(echo $messages | jq -r .[$i].commit.message)
+            echo commit message: $message
+            status=0
+            echo $message | gitlint -C ./.github/workflows/.gitlint || status=$?
+            if [ $status -ne 0 ]; then
+              result=false
+            fi
+          done
+          if ! ${result} ; then
+            echo "Some of the commit messages are not structured as The Conventional Commits specification. Please check CONTRIBUTING.md for our process on PR."
+            exit 1
+          fi
+          echo "success"

+ 1 - 0
.gitignore

@@ -39,3 +39,4 @@ rebar.lock
 .stamp
 tmp/
 _packages
+elvis

+ 38 - 0
CONTRIBUTING.md

@@ -0,0 +1,38 @@
+# Contributing
+
+You are welcome to submit any bugs, issues and feature requests on this repository.
+
+## Pull Request Process
+
+1. Update the README.md with details of changes to the interface.
+
+2. Ensure that each of the commit messages are in the following style:
+
+   Format: `<type>(<scope>): <subject>`
+
+   Type:
+
+   - `feat`: (new feature for the user, not a new feature for build script)
+   - `fix`: (bug fix for the user, not a fix to a build script)
+   - `docs`: (changes to the documentation)
+   - `style`: (formatting, missing semi colons, etc; no production code change)
+   - `refactor`: (refactoring production code, eg. renaming a variable)
+   - `test`: (adding missing tests, refactoring tests; no production code change)
+   - `chore`: (updating grunt tasks etc; no production code change)
+   - `perf`: (performance improvements)
+
+   **Example**
+
+   ```
+   feat(build): deterministic compile option
+   ^--^ ^---^   ^--------------------------^
+   |    |       |
+   |    |       +-> Summary in present tense.
+   |    |
+   |    |
+   |    +-------> Scope of the change.
+   |
+   +-------> Type: chore, docs, feat, fix, perf, refactor, style, or test.
+   ```
+
+   [Reference](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)

+ 1 - 1
README-CN.md

@@ -9,7 +9,7 @@
 
 [![最棒的物联网 MQTT 开源团队期待您的加入](https://www.emqx.io/static/img/github_readme_cn_bg.png)](https://www.emqx.io/cn/careers)
 
-[English](./README.md) | 简体中文
+[English](./README.md) | 简体中文 | [日本語](./README-JP.md)
 
 *EMQ X* 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序,可处理千万级别的并发客户端。
 

+ 98 - 0
README-JP.md

@@ -0,0 +1,98 @@
+# EMQ X Broker
+
+[![GitHub Release](https://img.shields.io/github/release/emqx/emqx?color=brightgreen)](https://github.com/emqx/emqx/releases)
+[![Build Status](https://travis-ci.org/emqx/emqx.svg)](https://travis-ci.org/emqx/emqx)
+[![Coverage Status](https://coveralls.io/repos/github/emqx/emqx/badge.svg)](https://coveralls.io/github/emqx/emqx)
+[![Docker Pulls](https://img.shields.io/docker/pulls/emqx/emqx)](https://hub.docker.com/r/emqx/emqx)
+[![Slack Invite](<https://slack-invite.emqx.io/badge.svg>)](https://slack-invite.emqx.io)
+[![Twitter](https://img.shields.io/badge/Twitter-EMQ%20X-1DA1F2?logo=twitter)](https://twitter.com/emqtt)
+
+[![The best IoT MQTT open source team looks forward to your joining](https://www.emqx.io/static/img/github_readme_en_bg.png)](https://www.emqx.io/careers)
+
+[English](./README.md) | [简体中文](./README-CN.md) | 日本語
+
+*EMQ X* ブローカーは、数千万のクライアントを同時に処理できるIoT、M2M、モバイルアプリケーション向けの、完全なオープンソース、高拡張性、高可用性、分散型MQTTメッセージングブローカーです。
+
+バージョン3.0以降、*EMQ X* ブローカーはMQTTV5.0プロトコル仕様を完全にサポートし、MQTT V3.1およびV3.1.1と下位互換性があります。MQTT-SN、CoAP、LwM2M、WebSocket、STOMPなどの通信プロトコルをサポートしています。 1つのクラスター上で1,000万以上の同時MQTT接続に拡張することができます。
+
+- 新機能の一覧については、[EMQ Xリリースノート](https://github.com/emqx/emqx/releases)を参照してください。
+- 詳細はこちら[EMQ X公式ウェブサイト](https://www.emqx.io/)をご覧ください。
+
+## インストール
+
+*EMQ X* ブローカーはクロスプラットフォームで、Linux、Unix、macOS、Windowsをサポートしています。これは、*EMQ X* ブローカーをx86_64アーキテクチャサーバー、またはRaspberryPiなどのARMデバイスにデプロイできることを意味します。
+
+#### EMQ X Dockerイメージによるインストール
+
+```
+docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx
+```
+
+#### バイナリパッケージによるインストール
+
+対応するオペレーティングシステムのバイナリソフトウェアパッケージは、[EMQ Xのダウンロード](https://www.emqx.io/downloads)ページから取得できます。
+
+- [シングルノードインストール](https://docs.emqx.io/broker/latest/en/getting-started/installation.html)
+- [マルチノードインストール](https://docs.emqx.io/broker/latest/en/advanced/cluster.html)
+
+## ソースからビルド
+
+バージョン3.0以降、*EMQ X* ブローカーをビルドするには Erlang/OTP R21+ が必要です。
+
+```
+git clone https://github.com/emqx/emqx-rel.git
+
+cd emqx-rel && make
+
+cd _rel/emqx && ./bin/emqx console
+```
+
+## クイックスタート
+
+```
+# Start emqx
+./bin/emqx start
+
+# Check Status
+./bin/emqx_ctl status
+
+# Stop emqx
+./bin/emqx stop
+```
+
+*EMQ X* ブローカーを起動したら、ブラウザで http://localhost:18083 にアクセスしてダッシュボードを表示できます。
+
+## FAQ
+
+よくある質問については、[EMQ X FAQ](https://docs.emqx.io/broker/latest/en/faq/faq.html)にアクセスしてください。
+
+## ロードマップ
+
+[EMQ X Roadmap uses Github milestones](https://github.com/emqx/emqx/milestones)からプロジェクトの進捗状況を追跡できます。
+
+## コミュニティ、ディスカッション、貢献、サポート
+
+次のチャネルを通じて、EMQコミュニティおよび開発者に連絡できます。
+
+- [Slack](https://slack-invite.emqx.io/)
+- [Twitter](https://twitter.com/emqtt)
+- [Facebook](https://www.facebook.com/emqxmqtt)
+- [Reddit](https://www.reddit.com/r/emqx/)
+- [Forum](https://groups.google.com/d/forum/emqtt)
+- [Blog](https://medium.com/@emqtt)
+
+バグ、問題、機能のリクエストは、[emqx/emqx](https://github.com/emqx/emqx/issues)に送信してください。
+
+## MQTT仕様
+
+次のリンクから、MQTTプロトコルについて学習および確認できます。
+
+[MQTT Version 3.1.1](https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html)
+
+[MQTT Version 5.0](https://docs.oasis-open.org/mqtt/mqtt/v5.0/cs02/mqtt-v5.0-cs02.html)
+
+[MQTT SN](http://mqtt.org/new/wp-content/uploads/2009/06/MQTT-SN_spec_v1.2.pdf)
+
+## License
+
+Apache License 2.0, see [LICENSE](https://github.com/emqx/MQTTX/blob/master/LICENSE).

+ 2 - 2
README.md

@@ -9,7 +9,7 @@
 
 [![The best IoT MQTT open source team looks forward to your joining](https://www.emqx.io/static/img/github_readme_en_bg.png)](https://www.emqx.io/careers)
 
-English | [简体中文](./README-CN.md)
+English | [简体中文](./README-CN.md) | [日本語](./README-JP.md)
 
 *EMQ X* broker is a fully open source, highly scalable, highly available distributed MQTT messaging broker for IoT, M2M and Mobile applications that can handle tens of millions of concurrent clients.
 
@@ -32,7 +32,7 @@ docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p
 
 Get the binary package of the corresponding OS from [EMQ X Download](https://www.emqx.io/downloads) page.
 
-- [Single Node Install](https://docs.emqx.io/broker/latest/en/getting-started/installation.html)
+- [Single Node Install](https://docs.emqx.io/broker/latest/en/getting-started/install.html)
 - [Multi Node Install](https://docs.emqx.io/broker/latest/en/advanced/cluster.html)
 
 

+ 33 - 0
elvis-check.sh

@@ -0,0 +1,33 @@
+#!/bin/bash
+
+set -euo pipefail
+
+ELVIS_VERSION='1.0.0-emqx-1'
+
+base=${GITHUB_BASE_REF:-$1}
+elvis_version="${2:-$ELVIS_VERSION}"
+
+echo "elvis -v: $elvis_version"
+echo "git diff base: $base"
+
+if [ ! -f ./elvis ] || [ "$(./elvis -v | grep -oE '[1-9]+\.[0-9]+\.[0-9]+\-emqx-[0-9]+')" != "$elvis_version" ]; then
+    curl  -fLO "https://github.com/emqx/elvis/releases/download/$elvis_version/elvis"
+    chmod +x ./elvis
+fi
+
+git fetch origin "$base"
+
+git_diff() {
+    git diff --name-only origin/"$base"...HEAD
+}
+
+bad_file_count=0
+for n in $(git_diff); do
+    if ! ./elvis rock "$n"; then
+        bad_file_count=$(( bad_file_count + 1))
+    fi
+done
+if [ $bad_file_count -gt 0 ]; then
+    echo "elvis: $bad_file_count errors"
+    exit 1
+fi

+ 31 - 0
elvis.config

@@ -0,0 +1,31 @@
+[
+ {
+   elvis,
+   [
+    {config,
+     [
+      {dirs => ["apps"],
+        filter => "*.erl",
+        ruleset => erl_files,
+#        rules => [
+#            {elvis_style, max_module_length, #{}},
+#            {elvis_style, no_common_caveats_call, #{}}
+#          ]
+       },
+      {dirs => ["."],
+        filter => "Makefile",
+        ruleset => makefiles
+       },
+      {dirs => ["."],
+        filter => "rebar.config",
+        ruleset => rebar_config
+       },
+      {dirs => ["."],
+        filter => "elvis.config",
+        ruleset => elvis_config
+       }
+     ]
+    }
+   ]
+ }
+].

+ 3 - 2
etc/emqx.conf

@@ -1324,10 +1324,11 @@ listener.ssl.external.access.1 = allow all
 ## Value: Duration
 listener.ssl.external.handshake_timeout = 15s
 
-## Maximum number of non-self-issued intermediate certificates that can follow the peer certificate in a valid certification path.
+## Maximum number of non-self-issued intermediate certificates that
+## can follow the peer certificate in a valid certification path.
 ##
 ## Value: Number
-#listener.ssl.external.depth = 10
+## listener.ssl.external.depth = 10
 
 ## String containing the user's password. Only used if the private keyfile
 ## is password-protected.