• 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

  • 相关阅读:
    快速幂
    快速幂
    快速排序的分治求解方法
    快速排序的分治求解方法
    合并排序的分治求解方法
    合并排序的分治求解方法
    重写ListView解决ListView内部ViewPaper滑动事件冲突问题
    HDU 4970(杭电多校#9 1011题)Killing Monsters(瞎搞)
    Java 反射机制[Field反射]
    【公告】博客数据异常已所有恢复
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/10396394.html
Copyright © 2020-2023  润新知