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 按照指引进群 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -如果您觉得[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 按照指引进群 ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -如果您觉得[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