goreleaser 方便的go 二进制包分发工具

goreleaser 可以帮助我们进行go 二进制包的快速,简单分发,我们可以用来创建一个github release 以及发布到homwbrew formula 。

安装

mac 系统,实际根据自己的系统选择,我使用brew 安装

brew install goreleaser

使用

  • 创建go mod
go mod init github.com/dalongrong/gorelease-app
  • 添加简单代码
main.go
package main

import (
 "fmt"
)

func main() {
 fmt.Println("demoapp")
}
  • 添加git 支持同时添加tag
git init
git add --all
git commit -m  "init project"
git remote add origin https://github.com/rongfengliang/gorelease-app.git
git tag v1.0.0
git push -u origin master
git push -u origin v1.0.0
  • 添加goreleaser 支持
goreleaser init
  • 测试构建
goreleaser --snapshot --skip-publish --rm-dist

效果

 goreleaser release --skip-publish --rm-dist

   • releasing using goreleaser 0.101.0...
   • loading config file file=.goreleaser.yml
   • RUNNING BEFORE HOOKS
      • running go mod download
      • running go generate ./...
   • GETTING AND VALIDATING GIT STATE
      • releasing v1.0.1, commit 101af58d04813fabb32567c4b4aab7925783a6fc
   • PARSING TAG      
   • SETTING DEFAULTS 
      • LOADING ENVIRONMENT VARIABLES
      • SNAPSHOTING      
      • GITHUB RELEASES  
      • PROJECT NAME     
      • ARCHIVES         
      • BUILDING BINARIES
      • LINUX PACKAGES WITH NFPM
      • SNAPCRAFT PACKAGES
      • CALCULATING CHECKSUMS
      • SIGNING ARTIFACTS
      • DOCKER IMAGES    
      • ARTIFACTORY      
      • S3               
      • HOMEBREW TAP FORMULA
      • SCOOP MANIFEST   
   • SNAPSHOTING      
      • pipe skipped error=not a snapshot
   • CHECKING ./DIST  
      • --rm-dist is set, cleaning it up
   • WRITING EFFECTIVE CONFIG FILE
      • writing config=dist/config.yaml
   • GENERATING CHANGELOG
      • writing changelog=dist/CHANGELOG.md
   • LOADING ENVIRONMENT VARIABLES
      • pipe skipped error=publishing is disabled
   • BUILDING BINARIES
      • building binary=dist/windows_386/gorelease-app.exe
      • building binary=dist/linux_386/gorelease-app
      • building binary=dist/linux_amd64/gorelease-app
      • building binary=dist/darwin_amd64/gorelease-app
      • building binary=dist/darwin_386/gorelease-app
      • building binary=dist/windows_amd64/gorelease-app.exe
   • ARCHIVES         
      • creating archive=dist/gorelease-app_1.0.1_Windows_x86_64.tar.gz
      • creating archive=dist/gorelease-app_1.0.1_Linux_i386.tar.gz
      • creating archive=dist/gorelease-app_1.0.1_Darwin_i386.tar.gz
      • creating archive=dist/gorelease-app_1.0.1_Darwin_x86_64.tar.gz
      • creating archive=dist/gorelease-app_1.0.1_Linux_x86_64.tar.gz
      • creating archive=dist/gorelease-app_1.0.1_Windows_i386.tar.gz
   • LINUX PACKAGES WITH NFPM
      • pipe skipped error=no output formats configured
   • SNAPCRAFT PACKAGES
      • pipe skipped error=no summary nor description were provided
   • CALCULATING CHECKSUMS
      • checksumming file=gorelease-app_1.0.1_Darwin_x86_64.tar.gz
      • checksumming file=gorelease-app_1.0.1_Windows_i386.tar.gz
      • checksumming file=gorelease-app_1.0.1_Darwin_i386.tar.gz
      • checksumming file=gorelease-app_1.0.1_Linux_x86_64.tar.gz
      • checksumming file=gorelease-app_1.0.1_Linux_i386.tar.gz
      • checksumming file=gorelease-app_1.0.1_Windows_x86_64.tar.gz
   • SIGNING ARTIFACTS
      • pipe skipped error=artifact signing is disabled
   • DOCKER IMAGES    
      • pipe skipped error=docker section is not configured
   • PUBLISHING       
      • pipe skipped error=publishing is disabled
   • release succeeded after 5.73s
  • 效果

.goreleaser.yml 文件说明

默认是没有windows 配置的,以下为修改支持windows的

# This is an example goreleaser.yaml file with some sane defaults.
# Make sure to check the documentation at http://goreleaser.com
before:
  hooks:
    # you may remove this if you don't use vgo
    - go mod download
    # you may remove this if you don't need go generate
    - go generate ./...
builds:
- env:
  - CGO_ENABLED=0
  goos:
    - linux
    - darwin
    - windows
archive:
  replacements:
    darwin: Darwin
    linux: Linux
    windows: Windows
    386: i386
    amd64: x86_64
checksum:
  name_template: 'checksums.txt'
snapshot:
  name_template: "{{ .Tag }}-next"
changelog:
  sort: asc
  filters:
    exclude:
    - '^docs:'
    - '^test:'

goreleaser 的功能还是很强大的,同时支持github 的release,同时我们也可以配置docker

参考资料

https://goreleaser.com/
https://github.com/goreleaser/goreleaser
https://github.com/rongfengliang/gorelease-app

原文地址:https://www.cnblogs.com/rongfengliang/p/10396394.html