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

 
 
 
 

goreleaser 方便的go 二进制包分发工具的更多相关文章

  1. Python包管理工具小结

    此文已由作者张耕源授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 作为一名接触Python有一段时间的初学者,越来越体会到Python的方便之处,它使人能更 多的关注业务本身 ...

  2. k8s包管理工具helm - 介绍和安装

    目录 1.Kubernetes 应用部署的挑战 2.Helm 是什么 3.Helm 组件及相关术语 4.Helm 工作原理 5.Helm 安装 5.1 客户端安装 5.2 安装服务端 Tiller 5 ...

  3. FreeBSD的新一代包管理工具Pkg 1.3.0 发布

    Pkg 是 FreeBSD 下一代的打包管理工具,用来替代原来的 pkg_info/pkg_create/pkg_add 工具,可以本地打包,也提供远程打包,主要是为了方便远程二进制包升级. Pkg ...

  4. 新一代开源Android渠道包生成工具Walle

    本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...

  5. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  6. Python打包分发工具setuptools

    作为Python标准的打包及分发工具,setuptools可以说相当地简单易用.它会随着Python一起安装在你的机器上.你只需写一个简短的setup.py安装文件,就可以将你的Python应用打包 ...

  7. [sersync] github镜像 二进制包

    这几天在搞数据的本地备份和远程备份的事情,用到了sersync这个国产的同步工具,可是发现他托管在google code,需要fanqiang才能下载, 于是就弄了一个github的镜像,顺便把64位 ...

  8. kubernetes实践之一:kubernetes二进制包安装

    kubernetes二进制部署 1.环境规划 软件 版本 Linux操作系统 CentOS Linux release 7.6.1810 (Core) Kubernetes 1.9 Docker 18 ...

  9. Linux RPM、YUM、APT包管理工具

    ⒈rpm包的管理 1)介绍 rpm是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件,RPM是RedHat Package Manager(RedH ...

随机推荐

  1. jdk8-lanbda方法引用和构造引用

    1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...

  2. Domination(概率DP)

    Domination 题目链接:https://odzkskevi.qnssl.com/9713ae1d3ff2cc043442f25e9a86814c?v=1531624384 Edward is ...

  3. leetcode第40题:组合总和II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ...

  4. synchronized(六)

    package com.bjsxt.base.sync006;/** * 锁对象的改变问题 * @author alienware * */public class ChangeLock { priv ...

  5. Android:DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs

     Android studio DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs 一.报错信息 DELETE_FAILED_INTERN ...

  6. Day12作业及默写

    1.整理今天的博客,写课上代码,整理流程图. 2.用列表推导式做下列小题 li=['alex','wusir','abds','meet','ab'] a. 过滤掉长度小于3的字符串列表,并将剩下的转 ...

  7. windows下利用nodejs压缩.min文件

    利用nodejs中的npm工具,压缩文件,必须在node环境下 压缩js文件 1.在全局中安装uglify-js模块 npm install uglify-js -g 2.可以直接使用uglifyjs ...

  8. G++ C++之区别

    1.遇到精度用C++ 2.G++内存超限,C++过了 其他都用G++

  9. 2016 多校联赛7 Joint Stacks (优先队列)

    A stack is a data structure in which all insertions and deletions of entries are made at one end, ca ...

  10. react native 之 获取键盘高度

    多说不如多撸: /** * Created by shaotingzhou on 2017/2/23. *//** * Sample React Native App * https://github ...