Depmod CI流程下Go module依赖最低版本的控制

分类: 工作

背景

延续之前的 Go微服务之间模块依赖管理的思考 最后的想法,干预CI流程管控服务版本 为思路我实现了一个go项目 Depmod

介绍

解析指定的 go.mod 文件,分析项目所使用的第三方依赖并与给的配置做对比。出现违背配置的依赖时,非 0 返回码退出影响CI的通过。

depmod

使用了 golang.org/x/mod库,可以直接解析go.mod文件提取依赖的信息。代码太简单了,没啥可以说的。depmod在不符合预期时将会非0返回码退出,这将会中断流程,阻止编译成功。逼迫团队内其他成员升级/移除依赖

config

依赖的配置我选择使用外置的配置文件,我在gitlab上新建了一个repo专门给用来放置配置信息,这样配置的管理是可控的,在内网也方便使用。

{
  "mods":[
    {
      "name":"golang.org/x/mod", //依赖的路径
      "min_ver":"v0.4.3", // 最低可使用版本号
      "deprecated": true //是否弃用
    }
  ],
  "deprecates": [ //弃用依赖的列表,在列表中的无法使用,将会直接报错
    "github.com/go-redis/redis/v7"
  ]
}

使用

提供一个github-action的简单配置。

name: depmod github action 流程测试
on: [push]
jobs:
  check-mod-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
        with:
          go-version: '^1.16' # The Go version to download (if necessary) and use.
      - run: go get github.com/tangtj/depmod@master
      - run: go install github.com/tangtj/depmod@master
      # config.json 可以从其他地方弄过来
      - run: depmod -c config-pass.json -m go.mod
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2
      - run: go build cmd/main.go

上一篇: Go微服务之间模块依赖管理的思考
下一篇: Github + OSS + CDN 搭建静态博客