Skip to content

Commit 807f2d2

Browse files
Merge pull request #47 from yassinebenaid/dev
Added generator tests && Dockerize the app
2 parents a1e495a + ede1de5 commit 807f2d2

File tree

5 files changed

+560
-4
lines changed

5 files changed

+560
-4
lines changed

.github/workflows/dockerize.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#
2+
name: Create and publish a Docker image
3+
4+
on:
5+
release:
6+
types: [published]
7+
8+
env:
9+
REGISTRY: ghcr.io
10+
IMAGE_NAME: ${{ github.repository }}
11+
12+
jobs:
13+
build-and-push-image:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
packages: write
18+
attestations: write
19+
id-token: write
20+
steps:
21+
- name: Checkout repository
22+
uses: actions/checkout@v4
23+
- name: Log in to the Container registry
24+
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
25+
with:
26+
registry: ${{ env.REGISTRY }}
27+
username: ${{ github.actor }}
28+
password: ${{ secrets.GITHUB_TOKEN }}
29+
30+
- name: Extract metadata (tags, labels) for Docker
31+
id: meta
32+
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
33+
with:
34+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
35+
36+
- name: Build and push Docker image
37+
id: push
38+
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
39+
with:
40+
context: .
41+
push: true
42+
tags: ${{ steps.meta.outputs.tags }}
43+
labels: ${{ steps.meta.outputs.labels }}
44+
45+
- name: Generate artifact attestation
46+
uses: actions/attest-build-provenance@v1
47+
with:
48+
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
49+
subject-digest: ${{ steps.push.outputs.digest }}
50+
push-to-registry: true

Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM golang:1.22
2+
3+
WORKDIR /bunster
4+
5+
COPY . .
6+
7+
RUN go mod download
8+
9+
RUN CGO_ENABLED=0 go build -o /usr/local/bin/bunster ./cmd/bunster
10+
11+
RUN rm -rf /bunster
12+
13+
CMD ["bash"]

generator/generator_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ import (
1313
"github.com/yassinebenaid/bunster/lexer"
1414
"github.com/yassinebenaid/bunster/parser"
1515
"github.com/yassinebenaid/bunster/pkg/dottest"
16+
"github.com/yassinebenaid/godump"
1617
)
1718

19+
var dump = (&godump.Dumper{
20+
Theme: godump.DefaultTheme,
21+
ShowPrimitiveNamedTypes: true,
22+
}).Sprintln
23+
1824
func TestGenerator(t *testing.T) {
1925
testFiles, err := filepath.Glob("./tests/*.test")
2026
if err != nil {
@@ -36,23 +42,23 @@ func TestGenerator(t *testing.T) {
3642
for i, test := range tests {
3743
script, err := parser.Parse(lexer.New([]byte(test.Input)))
3844
if err != nil {
39-
t.Fatalf("#%d: parser error.\nError: %s", i, err)
45+
t.Fatalf("\nTest: %sError: %s", dump(test.Label), dump(err.Error()))
4046
}
4147

4248
program := generator.Generate(script)
4349
formattedProgram, gofmtErr, err := gofmt(program.String())
4450
if err != nil {
45-
t.Fatalf("#%d: error when trying to format the generated program.\nError: %s.\nStderr: %s", i, err, gofmtErr)
51+
t.Fatalf("\n#%d: error when trying to format the generated program.\nError: %s.\nStderr: %s", i, err, gofmtErr)
4652
}
4753

4854
formattedTestOutput, gofmtErr, err := gofmt(test.Output)
4955
if err != nil {
50-
t.Fatalf("#%d: error when trying to format the test expected output.\nError: %s.\nStderr: %s", i, err, gofmtErr)
56+
t.Fatalf("\n#%d: error when trying to format the test expected output.\nError: %s.\nStderr: %s", i, err, gofmtErr)
5157
}
5258

5359
if formattedProgram != formattedTestOutput {
5460
t.Fatalf(
55-
"#%d: The generated program doesn't match the expected output.\n Program:\n%s",
61+
"\n#%d: The generated program doesn't match the expected output.\n Program:\n%s",
5662
i, diffStrings(formattedTestOutput, formattedProgram),
5763
)
5864
}

generator/tests/0-simple-commands.test

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,45 @@ func Main(shell *runtime.Shell) {
103103
}()
104104
}
105105
#(ENDTEST)
106+
107+
108+
#(TEST: multiline command with arguments)
109+
110+
cmd --option=value \
111+
--option='value' \
112+
--option="value" \
113+
-o
114+
115+
#(RESULT)
116+
117+
package main
118+
119+
import "bunster-build/runtime"
120+
121+
func Main(shell *runtime.Shell) {
122+
func() {
123+
var cmd_0_name = `cmd`
124+
var cmd_0_args []string
125+
cmd_0_args = append(cmd_0_args, `--option=value`)
126+
cmd_0_args = append(cmd_0_args, `--option=value`)
127+
cmd_0_args = append(cmd_0_args, `--option=value`)
128+
cmd_0_args = append(cmd_0_args, `-o`)
129+
var cmd_0 = shell.Command(cmd_0_name, cmd_0_args...)
130+
cmd_0_fdt, err := shell.CloneFDT()
131+
if err != nil {
132+
shell.HandleError("", err)
133+
return
134+
}
135+
defer cmd_0_fdt.Destroy()
136+
cmd_0.Stdin = cmd_0_fdt.Get(`0`)
137+
cmd_0.Stdout = cmd_0_fdt.Get(`1`)
138+
cmd_0.Stderr = cmd_0_fdt.Get(`2`)
139+
if err := cmd_0.Run(); err != nil {
140+
shell.HandleError(cmd_0_name, err)
141+
return
142+
}
143+
shell.ExitCode = cmd_0.ProcessState.ExitCode()
144+
145+
}()
146+
}
147+
#(ENDTEST)

0 commit comments

Comments
 (0)