diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 82b5c54..d65f219 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -2,7 +2,7 @@ name: Release
on:
create:
tags:
- - v*
+ - 'v*.*.*'
jobs:
release:
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
- uses: actions/checkout@v1
+ uses: actions/checkout@v2
- name: Validates GO releaser config
uses: docker://goreleaser/goreleaser:latest
@@ -24,14 +24,36 @@ jobs:
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- - name: Get the tag name
- run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v3
+ with:
+ images: |
+ yedf/dtm
+ tags: |
+ type=semver,pattern={{version}}
+ type=semver,pattern={{major}}.{{minor}}
+ type=semver,pattern={{major}}
+ type=sha
- - name: Publish docker
- env:
- host: 'ubuntu@en.dtm.pub'
- dest: '/home/ubuntu'
- run: |
- echo "${{secrets.DEPLOY_KEY}}" > deploy_key
- chmod 600 ./deploy_key
- ssh -i deploy_key -o StrictHostKeyChecking=no ${{env.host}} 'cd ${{env.dest}}/dtm && git pull && sudo sh helper/build-repo.sh ${{env.TAG}}'
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+
+ - name: Login to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Build and push
+ uses: docker/build-push-action@v2
+ with:
+ context: .
+ file: ./helper/Dockerfile-release
+ push: true
+ platforms: linux/amd64,linux/arm64
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
diff --git a/README-cn.md b/README-cn.md
index 517dd9a..241d125 100644
--- a/README-cn.md
+++ b/README-cn.md
@@ -119,12 +119,14 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、
### 完整示例
参考[examples/quick_start.go](./examples/quick_start.go)
+## 公众号
+您可以关注公众号:分布式事务,及时跟踪dtm的最新内容
## 交流群
请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群

-如果您觉得[dtm](https://github.com/yedf/dtm)不错,或者对您有帮助,请赏颗星吧!
+欢迎使用[dtm](https://github.com/yedf/dtm),或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们
## 谁在使用
diff --git a/README.md b/README.md
index 94bf4ca..241d125 100644
--- a/README.md
+++ b/README.md
@@ -40,9 +40,9 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、
## 与其他框架对比
-目前开源的分布式事务框架,暂未看到非Java语言有成熟的框架。而Java语言的较多,有阿里的SEATA、华为的ServiceComb-Pack,京东的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata应用最为广泛。
+目前开源的分布式事务框架,Java的框架较多,有大厂开源的SEATA、ServiceComb-Pack,shardingsphere,以及个人开源的himly,tcc-transaction,ByteTCC等等,其中以Seata的应用最为广泛。
-下面是dtm和seata的主要特性对比:
+非Java语言类的,暂未看到除dtm之外的成熟框架,因此这里仅将DTM和Java中最成熟的Seata对比:
| 特性| DTM | SEATA |备注|
|:-----:|:----:|:----:|:----:|
@@ -119,12 +119,14 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、
### 完整示例
参考[examples/quick_start.go](./examples/quick_start.go)
+## 公众号
+您可以关注公众号:分布式事务,及时跟踪dtm的最新内容
## 交流群
请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群

-如果您觉得[dtm](https://github.com/yedf/dtm)不错,或者对您有帮助,请赏颗星吧!
+欢迎使用[dtm](https://github.com/yedf/dtm),或者通过dtm学习实践分布式事务相关知识,欢迎star支持我们
## 谁在使用
diff --git a/app/main.go b/app/main.go
index aaa89ed..0e344b0 100644
--- a/app/main.go
+++ b/app/main.go
@@ -11,7 +11,6 @@ import (
"os"
"strings"
- "github.com/yedf/dtm/bench"
"github.com/yedf/dtm/common"
"github.com/yedf/dtm/dtmcli"
"github.com/yedf/dtm/dtmcli/dtmimp"
@@ -66,8 +65,6 @@ func main() {
// quick_start 比较独立,单独作为一个例子运行,方便新人上手
examples.QsStartSvr()
examples.QsFireRequest()
- case "bench":
- bench.StartSvr()
case "dev", "dtmsvr":
default:
// 下面是各类的例子
diff --git a/bench/http.go b/bench/http.go
index 1d1bd4a..4308658 100644
--- a/bench/http.go
+++ b/bench/http.go
@@ -4,7 +4,7 @@
* license that can be found in the LICENSE file.
*/
-package bench
+package main
import (
"database/sql"
diff --git a/bench/main.go b/bench/main.go
new file mode 100644
index 0000000..f5bfefd
--- /dev/null
+++ b/bench/main.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+ "fmt"
+ "github.com/yedf/dtm/common"
+ "github.com/yedf/dtm/dtmcli"
+ "github.com/yedf/dtm/dtmcli/dtmimp"
+ "github.com/yedf/dtm/dtmsvr"
+ "github.com/yedf/dtm/examples"
+ "os"
+)
+
+var hint = `To start the bench server, you need to specify the parameters:
+
+Available commands:
+ http start bench server
+`
+
+func main() {
+ if len(os.Args) <= 1 {
+ fmt.Printf(hint)
+ return
+ }
+ dtmimp.Logf("starting dtm....")
+ if os.Args[1] == "http" {
+ fmt.Println("start bench server")
+ common.MustLoadConfig()
+ dtmcli.SetCurrentDBType(common.DtmConfig.DB["driver"])
+ common.WaitDBUp()
+ dtmsvr.PopulateDB(true)
+ examples.PopulateDB(true)
+ dtmsvr.StartSvr() // 启动dtmsvr的api服务
+ go dtmsvr.CronExpiredTrans(-1) // 启动dtmsvr的定时过期查询
+ StartSvr()
+ select {}
+ } else {
+ fmt.Printf(hint)
+ }
+}
diff --git a/common/db.go b/common/db.go
index 7592458..bf6c02e 100644
--- a/common/db.go
+++ b/common/db.go
@@ -144,7 +144,7 @@ func WaitDBUp() {
defer func() {
sdb.Close()
}()
- for _, err := dtmimp.DBExec(sdb, "select 1"); err != nil; { // wait for mysql to start
+ for _, err = dtmimp.DBExec(sdb, "select 1"); err != nil; { // wait for mysql to start
time.Sleep(3 * time.Second)
_, err = dtmimp.DBExec(sdb, "select 1")
}
diff --git a/dtmcli/dtmimp/utils.go b/dtmcli/dtmimp/utils.go
index f42ac72..26686ab 100644
--- a/dtmcli/dtmimp/utils.go
+++ b/dtmcli/dtmimp/utils.go
@@ -147,7 +147,7 @@ func Logf(fmt string, args ...interface{}) {
// LogRedf 采用红色打印错误类信息
func LogRedf(fmt string, args ...interface{}) {
- logger.Errorf(fmt, args)
+ logger.Errorf(fmt, args...)
}
// FatalExitFunc Fatal退出函数,测试时被替换
diff --git a/helper/Dockerfile-release b/helper/Dockerfile-release
index db911a7..b922185 100644
--- a/helper/Dockerfile-release
+++ b/helper/Dockerfile-release
@@ -1,11 +1,14 @@
-FROM golang:1.16.6-alpine3.14 as builder
+# syntax=docker/dockerfile:1
+FROM --platform=$TARGETPLATFORM golang:1.16.6-alpine3.14 as builder
+ARG TARGETARCH
+ARG TARGETOS
WORKDIR /app/dtm
# RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
EXPOSE 8080
COPY . .
-RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" app/main.go && apk add upx && upx main
+RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="-s -w" app/main.go
-FROM alpine:3.14 as runner
+FROM --platform=$TARGETPLATFORM alpine:3.14
COPY --from=builder /app/dtm/main /app/dtm/
ENV IS_DOCKER=1
WORKDIR /app/dtm
diff --git a/helper/build-repo.sh b/helper/build-repo.sh
deleted file mode 100755
index 9182cb5..0000000
--- a/helper/build-repo.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-set -x
-if [ x$1 == x ]; then
- echo please specify version
- exit 1
-fi
-
-docker build -f helper/Dockerfile-release -t yedf/dtm:latest . && docker push yedf/dtm:latest
-docker tag yedf/dtm:latest yedf/dtm:$1 && docker push yedf/dtm:$1
\ No newline at end of file