Skip to content

Commit 77b6dcc

Browse files
kyleconroyclaude
andauthored
Add GitHub Actions CI workflow for Go (#3)
* Add GitHub Actions workflow for Go build and test Runs `make parser` to generate the yacc-derived parser sources, then `go build ./...` and `go test ./...` on push and pull_request. * Run Go workflow on all pull requests * Fix Makefile paths after parser sources moved into parser/ The .y grammars and generated .go files now live in parser/, so update the parser, generate, fmt, and clean targets to point at the new locations. The %arser.go pattern rule didn't compose cleanly with a directory prefix, so it's split into explicit parser/parser.go and parser/hintparser.go rules. genkeyword is built into parser/ so the //go:generate ./genkeyword directive in parser/generate.go resolves. * Fail CI when committed parser sources are out of date Regenerate parser.go and hintparser.go from the .y grammars on every run, then `git diff --exit-code` against the working tree. If the committed files don't match a fresh `make parser`, the job fails with a hint to rerun and commit. --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent ccc4cc5 commit 77b6dcc

2 files changed

Lines changed: 50 additions & 11 deletions

File tree

.github/workflows/go.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Go
2+
3+
on:
4+
push:
5+
branches: [main, master]
6+
pull_request:
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v4
13+
14+
- name: Set up Go
15+
uses: actions/setup-go@v5
16+
with:
17+
go-version: '1.25'
18+
19+
- name: Regenerate parser
20+
run: |
21+
rm -f parser/parser.go parser/hintparser.go
22+
make parser
23+
24+
- name: Verify parser is up to date
25+
run: |
26+
if ! git diff --exit-code -- parser/parser.go parser/hintparser.go; then
27+
echo "::error::Generated parser files are out of date. Run 'make parser' and commit the result."
28+
exit 1
29+
fi
30+
31+
- name: Build
32+
run: go build ./...
33+
34+
- name: Test
35+
run: go test ./...

Makefile

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,36 @@ all: fmt parser generate
55
test: fmt parser
66
sh test.sh
77

8-
parser: parser.go hintparser.go
8+
parser: parser/parser.go parser/hintparser.go
99

1010
genkeyword: generate_keyword/genkeyword.go
11-
go build -C generate_keyword -o ../genkeyword
11+
go build -C generate_keyword -o ../parser/genkeyword
1212

13-
generate: genkeyword parser.y
14-
go generate
13+
generate: genkeyword parser/parser.y
14+
go generate ./parser/...
1515

16-
%arser.go: prefix = $(@:parser.go=)
17-
%arser.go: %arser.y bin/goyacc
18-
@echo "bin/goyacc -o $@ -p yy$(prefix) -t $(prefix)Parser $<"
19-
@bin/goyacc -o $@ -p yy$(prefix) -t $(prefix)Parser $< || ( rm -f $@ && echo 'Please check y.output for more information' && exit 1 )
16+
parser/parser.go: parser/parser.y bin/goyacc
17+
@echo "bin/goyacc -o $@ -p yy -t Parser $<"
18+
@bin/goyacc -o $@ -p yy -t Parser $< || ( rm -f $@ && echo 'Please check y.output for more information' && exit 1 )
2019
@rm -f y.output
2120

22-
%arser_golden.y: %arser.y
21+
parser/hintparser.go: parser/hintparser.y bin/goyacc
22+
@echo "bin/goyacc -o $@ -p yyhint -t hintParser $<"
23+
@bin/goyacc -o $@ -p yyhint -t hintParser $< || ( rm -f $@ && echo 'Please check y.output for more information' && exit 1 )
24+
@rm -f y.output
25+
26+
parser/%arser_golden.y: parser/%arser.y
2327
@bin/goyacc -fmt -fmtout $@ $<
2428
@(git diff --no-index --exit-code $< $@ && rm $@) || (mv $@ $< && >&2 echo "formatted $<" && exit 1)
2529

2630
bin/goyacc: goyacc/main.go goyacc/format_yacc.go
2731
GO111MODULE=on go build -o bin/goyacc goyacc/main.go goyacc/format_yacc.go
2832

29-
fmt: bin/goyacc parser_golden.y hintparser_golden.y
33+
fmt: bin/goyacc parser/parser_golden.y parser/hintparser_golden.y
3034
@echo "gofmt (simplify)"
3135
@gofmt -s -l -w . 2>&1 | awk '{print} END{if(NR>0) {exit 1}}'
3236

3337
clean:
3438
go clean -i ./...
3539
rm -rf *.out
36-
rm -f parser.go hintparser.go
40+
rm -f parser/parser.go parser/hintparser.go parser/genkeyword

0 commit comments

Comments
 (0)