goreleaser-action icon indicating copy to clipboard operation
goreleaser-action copied to clipboard

YAML parse error when .goreleaser.yml contains anchor

Open at-wat opened this issue 1 year ago • 3 comments

Reproduction of the issue: https://github.com/at-wat/goreleaser-repro-action-anchor/pull/1

When .goreleaser.yml contains YAML anchor like,

&shared:
  build: &build_base
    env:
      - CGO_ENABLED=0

project_name: test
builds:
  - <<: *build_base

goreleaser/goreleaser-action fails with an error:

...
  • release succeeded after 14s
Error: end of the stream or a document separator is expected (6:1)

 3 |     env:
 4 |       - CGO_ENABLED=0
 5 | 
 6 | project_name: test
-----^
 7 | builds:
 8 |   - <<: *build_base

GoReleaser does support YAML anchor, but goreleaser-action seems parsing .goreleaser.yml by different yaml library which doesn't support anchor.

Workaround

Use goreleaser-action with install-only: true option, and run goreleaser command in different step.

      - name: Install GoReleaser
        uses: goreleaser/goreleaser-action@v4
        with:
          version: latest
          install-only: true
      - name: Run GoReleaser
        run: goreleaser release

at-wat avatar Feb 21 '23 08:02 at-wat

hmmm, likely

export async function getDistPath(yamlfile: string): Promise<string> {

@crazy-max we are already using the latest js-yaml, should we try to switch to another lib?

caarlos0 avatar Feb 21 '23 12:02 caarlos0

Argh yeah this is one of the caveats when using this lib: https://github.com/nodeca/js-yaml#caveats

Will take a look.

crazy-max avatar Feb 21 '23 12:02 crazy-max

Looks like we could switch to https://eemeli.org/yaml/#parsing-yaml

crazy-max avatar Feb 21 '23 12:02 crazy-max