Golang项目在github创建release后自动生成二进制文件的方法

目录
  • 希望达到的效果
  • 实现方式

希望达到的效果

工具类的Golang项目需要编译成二进制文件后在命令行中运行,所以希望在github里面创建一个新的release后能自动编译成针对各个平台的二进制文件,如下图所示:

实现方式

借助 GoReleaser 这款工具配合 github actions 可以很方便实现这种效果,下面讲解下具体实现方法。

首先需要在 Golang 项目的根目录创建 GoReleaser 配置文件 .goreleaser.yaml,内容如下:

# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com
before:
  hooks:
    # You may remove this if you don't use go modules.
    - go mod tidy
    # you may remove this if you don't need go generate
    - go generate ./...
builds:
  - env:
      - CGO_ENABLED=0
    goos:
      - linux
      - windows
      - darwin

archives:
  - format: tar.gz
    # this name template makes the OS and Arch compatible with the results of uname.
    name_template: >-
      {{ .ProjectName }}_
      {{- title .Os }}_
      {{- if eq .Arch "amd64" }}x86_64
      {{- else if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
      {{- if .Arm }}v{{ .Arm }}{{ end }}
    # use zip for windows archives
    format_overrides:
    - goos: windows
      format: zip
checksum:
  name_template: 'checksums.txt'
snapshot:
  name_template: "{{ incpatch .Version }}-next"
changelog:
  sort: asc
  filters:
    exclude:
      - '^docs:'
      - '^test:'

# The lines beneath this are called `modelines`. See `:help modeline`
# Feel free to remove those if you don't want/use them.
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
# vim: set ts=2 sw=2 tw=0 fo=cnqoj

然后创建 github actions 配置文件, 在Golang项目的根目录创建 .github 文件夹,在这个文件夹里面创建 workflows 文件夹,在 workflows 文件夹里面创建 release.yaml 文件,内容如下:

name: goreleaser

on:
  push:
    # run only against tags
    tags:
      - '*'

permissions:
  contents: write
  # packages: write
  # issues: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - run: git fetch --force --tags
      - uses: actions/setup-go@v3
        with:
          go-version: '>=1.20.2'
          cache: true
      # More assembly might be required: Docker logins, GPG, etc. It all depends
      # on your needs.
      - uses: goreleaser/goreleaser-action@v4
        with:
          # either 'goreleaser' (default) or 'goreleaser-pro':
          distribution: goreleaser
          version: latest
          args: release --clean
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # Your GoReleaser Pro key, if you are using the 'goreleaser-pro'
          # distribution:
          # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}

这个文件的内容不需要做任何修改,提交代码并将代码 push 到 github 后,在 github 的 release 页面新建一个 release 后,在 Actions 页面就可以看到有一个workflow在运行:

等这个 workflow 运行完成以后,在 release 的 Assets 里面就会出现针对各个平台的二进制文件。

到此这篇关于Golang项目在github创建release后如何自动生成二进制文件的文章就介绍到这了,更多相关go自动生成二进制文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 减少 golang 二进制文件大小操作

    环境: $ go version go version go1.11.2 linux/amd64 $ gcc --version gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 一. Go VS C 二进制 hello.go package main import "fmt" func main() { fmt.Println("hello world") } hello.c #include <stdi

  • Golang如何交叉编译各个平台的二进制文件详解

    Golang交叉编译平台的二进制文件 熟悉golang的人都知道,golang交叉编译很简单的,只要设置几个环境变量就可以了 # mac上编译linux和windows二进制 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build # linux上编译mac和windows二进制 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go

  • golang 如何删除二进制文件中的源码路径信息

    方法 go v1.13 go build 新增 -trimpath参数,不用以前那么麻烦了. ➜ awesomeProject CGO_ENABLED=0 go build -v -a -ldflags="-w -s" -trimpath \ -o ./hello_word hello_word.go ➜ awesomeProject strings hello_word|grep src ➜ awesomeProject #之前 ➜ awesomeProject go tool ob

  • Go打包二进制文件的实现

    背景 众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来. 操作 需求:打包部署到centos7 笔者打包环境:mac os 方法:进入main.go所在目录,输入如下命令,当前目录便会生成main的可执行文件 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go Windows平台打包到Linux执行不一样,需要输入如下命令 set CGO_ENABLED=0 set GOOS

  • Golang二进制文件混淆保护操作

    Go实在是太棒了.一处编译,处处运行,没有依赖,毫无麻烦! 不过麻烦的事情来了.我们写一个程序,就是想在别人的电脑上运行的.然而,Go语言的默认机制,会泄漏我们的一些信息,虽然不多,但也有点尴尬. 本文结合网上的一些常用方法,总结出一套通用的简单易行的保护措施. 减少 golang 二进制文件大小 1.删除调试符号 默认情况下go编译出的程序在运行出错时会输出自己在哪个线程哪个文件哪个函数哪行出的错,就像这样, 图片来源StackOverflow DWARF信息对于小黑客们可是如获至宝,这些关键

  • Golang项目在github创建release后自动生成二进制文件的方法

    目录 希望达到的效果 实现方式 希望达到的效果 工具类的Golang项目需要编译成二进制文件后在命令行中运行,所以希望在github里面创建一个新的release后能自动编译成针对各个平台的二进制文件,如下图所示: 实现方式 借助 GoReleaser 这款工具配合 github actions 可以很方便实现这种效果,下面讲解下具体实现方法. 首先需要在 Golang 项目的根目录创建 GoReleaser 配置文件 .goreleaser.yaml,内容如下: # This is an ex

  • iOS Xcode创建文件时自动生成的注释方法

    之前换了电脑,发现用xcode新建文件生成的注释变成了我不想要的效果(如下图) 一.修改系统默认注释 下面分别描述一下"创建者"."创建时间"."机构名称"以及"类名前缀"如何编辑. 1.编辑创建者: 进入路径:系统偏好设置/用户与群组/右击当前用户进入"高级选项" 编辑"全名"为需要的名称,如图: 2.编辑"创建时间"格式: 进入路径:系统偏好设置/日期与时间/打开

  • 在vue项目创建的后初始化首次使用stylus安装方法分享

    项目创建报错: This dependency was not found: * !!vue-style-loader!css-loader?{"minimize":false,"sourceMap":false}!../../node_modules/vue-loader/lib/style-compiler/index?{"vue":true,"id":"data-v-1d57e5ea","s

  • Vue 项目运行完成后自动打开浏览器的方法汇总

    目录 方法一:package.json(适用于vue3) 方法二:vue.config.js 方法三:插件+webpack 方法一:package.json(适用于vue3) 在文件中找到scripts–serve,在后面添加 --open 方法二:vue.config.js 该方法适用于 有vue.config.js的项目 找到vue.config.js文件,找到devServer,添加下面代码 open : true 方法三:插件+webpack 该方法存在局限性,仅适用于当前只运行一个项目

  • jQuery实现数秒后自动提交form的方法

    本文实例讲述了jqury实现数秒后自动提交form的方法.分享给大家供大家参考.具体如下: 很多下载网站都设置了此代码,下载按钮数秒,数完后,可以点击提交 制作很简单: 1. js部分代码如下: <script language='javascript'> <!-- $(document).ready(function(){ // #formDownload ajaxForm $('#formDownload').ajaxForm({ target:'#formDownloadWindo

  • c#中实现退出程序后自动重新启动程序的方法

    实例如下: //触发退出程序事件 private void button1_Click(object sender, EventArgs e) { Application.ExitThread(); Thread thtmp = new Thread(new ParameterizedThreadStart(run)); object appName = Application.ExecutablePath; Thread.Sleep(1); thtmp.Start(appName); } pr

  • Java线程监听,意外退出线程后自动重启的实现方法

    Java线程监听,意外退出线程后自动重启 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博数量,然后将其保存起来,2分钟之后再次爬行,再取 其微博数量,与2分钟前保存的微博数量比较,如果数量增加,说明该好友在此2分钟之内发布微博,如果数量减少,则是删除微博.最后将爬行结果发送到指定手机上,作为通知! 今天看微博时发现自己关注的朋友发布了微博,然而自己手机却没有收到报警消息,查看爬行日志发现,在凌晨6点钟时,公司网络曾经断网,导致网络堵 塞,程序在爬行的时

  • php实现根据url自动生成缩略图的方法

    本文实例讲述了php实现根据url自动生成缩略图的方法,是非常实用的功能.分享给大家供大家参考.具体方法如下: 原理:设置apache rewrite ,当图片不存在时,调用php创建图片. 例如: 原图路径为:http://localhost/upload/news/2013/07/21/1.jpg 缩略图路径为:http://localhost/supload/news/2013/07/21/1.jpg 当访问 http://localhost/supload/news/2013/07/21

  • 使用python脚本自动生成K8S-YAML的方法示例

    1.生成 servie.yaml 1.1.yaml转json service模板yaml apiVersion: v1 kind: Service metadata: name: ${jarName} labels: name: ${jarName} version: v1 spec: ports: - port: ${port} targetPort: ${port} selector: name: ${jarName} 转成json的结构 { "apiVersion": "

  • Java自动生成编号的方法步骤

    在新增数据时,往往需要自动生成编号.下面就以我的编号来说. 我的编号格式为:SR+日期(8位)+编号(3位). 其中,日期为系统当前的日期.首先获取系统当前日期,然后根据日期格式将date类型转换成String类型即可. SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");//设置日期格式 String date = f.format(new Date(System.currentTimeMillis())); 后三位编号根据数据

随机推荐