goreleaser 用于合并到母版和剪切发布的单独流程

问题描述

GoReleaser 和 GitHub 操作当前在推送标签时配置如下:

# github action
name: Release

on:
  push:
    tags:
      - '*'

env:
  REF: ${{ github.event.inputs.tag || github.ref }}

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Login to dockerhub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v2
        with:
          version: latest
          args: release --rm-dist
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# .goreleaser.yaml snippet
dockers:
  - image_templates:
    - "foo/bar:latest"
    - "foo/bar:v{{ .Major }}"
    - "foo/bar:v{{ .Major }}.{{ .Minor }}"
    - "foo/bar:{{ .Tag }}"

目前的设置有一个缺点,我必须等到我们剪掉一个版本才能玩最新的。这也意味着 latest 与 GitHub 中的 Master 分支不同步。我想构建和发布最新版本——可能每天多次——只要我的自动化测试成功,我就合并到 master 分支。

我希望 goreleaser 在不同的场景中构建一个发布。

  1. 每当我将拉取请求合并到 master 时,构建并推送最新的
  2. 每当我标记一个版本时,构建和推送 semver 标记

实现这一点的合乎逻辑的方法是简单地使用 2 个 github 操作,它们将在不同的 .goreleaser.yml 文件上运行。但是问题是我找不到覆盖 goreleaser.yaml 的方法

解决方法

你可以用

覆盖goreleaser配置文件
args: release --rm-dist -f path_to_goreleaser.yml

尽管如果当前提交不是标签,goreleaser 将拒绝发布任何内容。也许您需要做的是在每次提交时进行某种自动标记并针对该标记运行 goreleaser,仅使用 go 模板解决图像模板等问题。

它可能会非常笨拙,但我认为它可能会奏效。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...