ci: only run gorelease check on latest versions of Go

Also tidy up use of go generate to declare a go:generate directive that
runs go generate for the .github/workflows package (that is otherwise
not found by ./... from the root).

Change-Id: I6cae310b78f9cc17f84942298c53000c7dea7812
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6221
Reviewed-by: Paul Jolly <paul@myitcv.org.uk>
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c25a349..4a281b5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -29,14 +29,13 @@
         restore-keys: ${{ runner.os }}-${{ matrix.go-version }}-go-
     - name: Generate
       if: matrix.go-version == '1.14.3' && matrix.os != 'windows-latest'
-      run: |-
-        go generate ./...
-        go generate ./.github/workflows
+      run: go generate ./...
     - name: Test
       run: go test ./...
     - name: Test with -race
       run: go test -race ./...
     - name: gorelease check
+      if: matrix.go-version == '1.14.3' || matrix.go-version == '1.13.x'
       run: go run golang.org/x/exp/cmd/gorelease
     - name: Check that git is clean post generate and tests
       run: test -z "$(git status --porcelain)" || (git status; git diff; false)
diff --git a/.github/workflows/test_dispatch.yml b/.github/workflows/test_dispatch.yml
index 857ecc1..de3525e 100644
--- a/.github/workflows/test_dispatch.yml
+++ b/.github/workflows/test_dispatch.yml
@@ -34,14 +34,13 @@
         restore-keys: ${{ runner.os }}-${{ matrix.go-version }}-go-
     - name: Generate
       if: matrix.go-version == '1.14.3' && matrix.os != 'windows-latest'
-      run: |-
-        go generate ./...
-        go generate ./.github/workflows
+      run: go generate ./...
     - name: Test
       run: go test ./...
     - name: Test with -race
       run: go test -race ./...
     - name: gorelease check
+      if: matrix.go-version == '1.14.3' || matrix.go-version == '1.13.x'
       run: go run golang.org/x/exp/cmd/gorelease
     - name: Check that git is clean post generate and tests
       run: test -z "$(git status --porcelain)" || (git status; git diff; false)
diff --git a/gen.go b/gen.go
new file mode 100644
index 0000000..cf14afe
--- /dev/null
+++ b/gen.go
@@ -0,0 +1,3 @@
+package cue
+
+//go:generate go generate ./.github/workflows
diff --git a/internal/ci/workflows.cue b/internal/ci/workflows.cue
index 35d3d20..edf99d7 100644
--- a/internal/ci/workflows.cue
+++ b/internal/ci/workflows.cue
@@ -32,11 +32,13 @@
 #job:  (json.#Workflow.jobs & {x: _}).x
 #step: ((#job & {steps:           _}).steps & [_])[0]
 
+#latestGo: "1.14.3"
+
 #testStrategy: {
 	"fail-fast": false
 	matrix: {
 		// Use a stable version of 1.14.x for go generate
-		"go-version": ["1.12.x", "1.13.x", "1.14.3"]
+		"go-version": ["1.12.x", "1.13.x", #latestGo]
 		os: ["ubuntu-latest", "macos-latest", "windows-latest"]
 	}
 }
@@ -67,13 +69,10 @@
 
 #goGenerate: #step & {
 	name: "Generate"
-	run: """
-				go generate ./...
-				go generate ./.github/workflows
-				"""
+	run:  "go generate ./..."
 	// The Go version corresponds to the precise 1.14.x version specified in
 	// the matrix. Skip windows for now until we work out why re-gen is flaky
-	if: "matrix.go-version == '1.14.3' && matrix.os != 'windows-latest'"
+	if: "matrix.go-version == '\(#latestGo)' && matrix.os != 'windows-latest'"
 }
 
 #goTest: #step & {
@@ -89,6 +88,9 @@
 #goReleaseCheck: #step & {
 	name: "gorelease check"
 	run:  "go run golang.org/x/exp/cmd/gorelease"
+	// Only run on 1.13.x and latest Go for now. Bug with Go 1.12.x means
+	// this check fails
+	if: "matrix.go-version == '\(#latestGo)' || matrix.go-version == '1.13.x'"
 }
 
 #checkGitClean: #step & {