go项目.github actions自动打包exe发布版本

简介: 最近俩天在开发一款开源的环境变量管理工具,第一版本用的是PHP实现,但为了更多适应性的考虑,比如java的朋友、node的朋友可以使用,所以选择用Go重写 打包exe可执行文件,即可兼容所有windows环境的电脑使用

前言


最近俩天在开发一款开源的环境变量管理工具,第一版本用的是PHP实现,但为了更多适应性的考虑,比如java的朋友、node的朋友可以使用,所以选择用Go重写 打包exe可执行文件,即可兼容所有windows环境的电脑使用


switchENVhttps://github.com/xuanyanwow/switchENV


为了更方便用户,所以想在打tag的时候自动构建release 并且打包exe文件


github actions


github提供的CI/CD环境,可以编写脚本进行测试,有各大操作系统环境等


当前使用的脚本


每一步骤都写上了注释,应该不会很难看懂


name: Go
# 只有在打tag的时候执行该CI
on:
  push:
    tags:
    - v*
jobs:
  build:
    runs-on: ${{ matrix.os }}
    # 声明策略,可以遍历在多环境、不同系统内循环构建 交叉编译
    strategy:
      matrix:
        os: [ubuntu-latest]
        goarch: [amd64]
        goos: [windows]
    steps:
    - uses: actions/checkout@v3
    # 安装Go环境
    - name: Set up Go
      uses: actions/setup-go@v3
      with:
        go-version: 1.18
    # 获取当前tag的版本
    - name: Get version
      id: get_version
      run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
    # 从该tag打上一个release标签(这里会output一些参数 后面才能使用)
    - name: Create Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ steps.get_version.outputs.VERSION }}
        release_name: ${{ steps.get_version.outputs.VERSION }}
        draft: false
        prerelease: false
    # Go build exe 命令
    - name: Build exe
      run: go build -o switchENV.exe
      env:
        GOOS: ${{ matrix.goos }}
        GOARCH: ${{ matrix.goarch }}
        CGO_ENABLED: 0
    # exe文件压缩一下 减少体积
    - name: Packaging...
      run: tar czf switchENV-${{ matrix.goos }}-${{ steps.get_version.outputs.VERSION }}.tgz switchENV.exe
    # 上传到release-asset 用户就可以在release页面下载了
    - name: Uploading assets...
      id: upload-release-asset 
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }} # 这里是create_release步骤输出的参数
        asset_path: ./switchENV-${{ matrix.goos }}-${{ steps.get_version.outputs.VERSION }}.tgz
        asset_name: switchENV-${{ matrix.goos }}-${{ steps.get_version.outputs.VERSION }}.tgz
        asset_content_type: application/gzip
目录
相关文章
|
8天前
|
JSON 中间件 Go
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
本文详细介绍了如何在Go项目中集成并配置Zap日志库。首先通过`go get -u go.uber.org/zap`命令安装Zap,接着展示了`Logger`与`Sugared Logger`两种日志记录器的基本用法。随后深入探讨了Zap的高级配置,包括如何将日志输出至文件、调整时间格式、记录调用者信息以及日志分割等。最后,文章演示了如何在gin框架中集成Zap,通过自定义中间件实现了日志记录和异常恢复功能。通过这些步骤,读者可以掌握Zap在实际项目中的应用与定制方法
go语言后端开发学习(四) —— 在go项目中使用Zap日志库
|
6天前
|
存储 API 网络架构
GitHub——通过接口获取仓库下的最新版本
GitHub——通过接口获取仓库下的最新版本
8 1
|
6天前
|
JSON 缓存 监控
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
Viper 是一个强大的 Go 语言配置管理库,适用于各类应用,包括 Twelve-Factor Apps。相比仅支持 `.ini` 格式的 `go-ini`,Viper 支持更多配置格式如 JSON、TOML、YAML
go语言后端开发学习(五)——如何在项目中使用Viper来配置环境
|
11天前
|
算法 程序员 编译器
Go deadcode:查找没意义的死代码,对于维护项目挺有用!
Go deadcode:查找没意义的死代码,对于维护项目挺有用!
|
16天前
|
缓存 JavaScript 前端开发
为开源项目 go-gin-api 增加 WebSocket 模块
为开源项目 go-gin-api 增加 WebSocket 模块
24 2
|
16天前
|
Prometheus Cloud Native NoSQL
Go - 一个对新手很友好的项目(带界面)
Go - 一个对新手很友好的项目(带界面)
25 1
|
16天前
|
SQL NoSQL Go
Go - 实现项目内链路追踪(二)
Go - 实现项目内链路追踪(二)
22 1
|
2天前
|
数据采集 JSON 小程序
零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?
本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇到有错字啥还要更新版本,那有没有方法既能丰富应用内容,又不用增加成本呢?
6 0
|
5天前
|
Java 网络安全 开发工具
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
14 0
|
16天前
|
消息中间件 关系型数据库 MySQL
为开源项目 go-gin-api 增加后台任务模块
为开源项目 go-gin-api 增加后台任务模块
13 0