Skip to content

Commit c36941f

Browse files
authored
Merge pull request moby#3620 from tonistiigi/sourcemap-lang
2 parents 016938b + 1553c2a commit c36941f

File tree

10 files changed

+238
-173
lines changed

10 files changed

+238
-173
lines changed

client/client_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5805,8 +5805,8 @@ func testSourceMap(t *testing.T, sb integration.Sandbox) {
58055805
require.NoError(t, err)
58065806
defer c.Close()
58075807

5808-
sm1 := llb.NewSourceMap(nil, "foo", []byte("data1"))
5809-
sm2 := llb.NewSourceMap(nil, "bar", []byte("data2"))
5808+
sm1 := llb.NewSourceMap(nil, "foo", "", []byte("data1"))
5809+
sm2 := llb.NewSourceMap(nil, "bar", "", []byte("data2"))
58105810

58115811
st := llb.Scratch().Run(
58125812
llb.Shlex("not-exist"),
@@ -5860,7 +5860,7 @@ func testSourceMapFromRef(t *testing.T, sb integration.Sandbox) {
58605860

58615861
srcState := llb.Scratch().File(
58625862
llb.Mkfile("foo", 0600, []byte("data")))
5863-
sm := llb.NewSourceMap(&srcState, "bar", []byte("bardata"))
5863+
sm := llb.NewSourceMap(&srcState, "bar", "mylang", []byte("bardata"))
58645864

58655865
frontend := func(ctx context.Context, c gateway.Client) (*gateway.Result, error) {
58665866
st := llb.Scratch().File(
@@ -5911,6 +5911,7 @@ func testSourceMapFromRef(t *testing.T, sb integration.Sandbox) {
59115911
require.Equal(t, 1, len(srcs))
59125912

59135913
require.Equal(t, "bar", srcs[0].Info.Filename)
5914+
require.Equal(t, "mylang", srcs[0].Info.Language)
59145915
require.Equal(t, []byte("bardata"), srcs[0].Info.Data)
59155916
require.NotNil(t, srcs[0].Info.Definition)
59165917

client/llb/definition.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func NewDefinitionOp(def *pb.Definition) (*DefinitionOp, error) {
7070
state := NewState(op)
7171
st = &state
7272
}
73-
sourceMaps[i] = NewSourceMap(st, info.Filename, info.Data)
73+
sourceMaps[i] = NewSourceMap(st, info.Filename, info.Language, info.Data)
7474
}
7575

7676
for dgst, locs := range def.Source.Locations {

client/llb/sourcemap.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ type SourceMap struct {
2121
State *State
2222
Definition *Definition
2323
Filename string
24-
Data []byte
24+
// Language should use names defined in https://github.com/github/linguist/blob/v7.24.1/lib/linguist/languages.yml
25+
Language string
26+
Data []byte
2527
}
2628

27-
func NewSourceMap(st *State, filename string, dt []byte) *SourceMap {
29+
func NewSourceMap(st *State, filename string, lang string, dt []byte) *SourceMap {
2830
return &SourceMap{
2931
State: st,
3032
Filename: filename,
33+
Language: lang,
3134
Data: dt,
3235
}
3336
}
@@ -92,6 +95,7 @@ func (smc *sourceMapCollector) Marshal(ctx context.Context, co ...ConstraintsOpt
9295
info := &pb.SourceInfo{
9396
Data: m.Data,
9497
Filename: m.Filename,
98+
Language: m.Language,
9599
}
96100

97101
if def != nil {

client/llb/state_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ func TestFormattingPatterns(t *testing.T) {
5858
func TestStateSourceMapMarshal(t *testing.T) {
5959
t.Parallel()
6060

61-
sm1 := NewSourceMap(nil, "foo", []byte("data1"))
62-
sm2 := NewSourceMap(nil, "bar", []byte("data2"))
61+
sm1 := NewSourceMap(nil, "foo", "lang1", []byte("data1"))
62+
sm2 := NewSourceMap(nil, "bar", "lang2", []byte("data2"))
6363

6464
s := Image(
6565
"myimage",
@@ -78,10 +78,12 @@ func TestStateSourceMapMarshal(t *testing.T) {
7878
require.Equal(t, 1, len(def.Source.Locations))
7979

8080
require.Equal(t, "foo", def.Source.Infos[0].Filename)
81+
require.Equal(t, "lang1", def.Source.Infos[0].Language)
8182
require.Equal(t, []byte("data1"), def.Source.Infos[0].Data)
8283
require.Nil(t, def.Source.Infos[0].Definition)
8384

8485
require.Equal(t, "bar", def.Source.Infos[1].Filename)
86+
require.Equal(t, "lang2", def.Source.Infos[1].Language)
8587
require.Equal(t, []byte("data2"), def.Source.Infos[1].Data)
8688
require.Nil(t, def.Source.Infos[1].Definition)
8789

frontend/dockerfile/builder/build.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func Build(ctx context.Context, c client.Client) (_ *client.Result, err error) {
4141
return nil, capsError
4242
}
4343

44-
src, err := bc.ReadEntrypoint(ctx)
44+
src, err := bc.ReadEntrypoint(ctx, "Dockerfile")
4545
if err != nil {
4646
return nil, err
4747
}
@@ -254,6 +254,7 @@ func wrapSource(err error, sm *llb.SourceMap, ranges []parser.Range) error {
254254
Info: &pb.SourceInfo{
255255
Data: sm.Data,
256256
Filename: sm.Filename,
257+
Language: sm.Language,
257258
Definition: sm.Definition.ToPB(),
258259
},
259260
Ranges: make([]*pb.Range, 0, len(ranges)),

frontend/dockerfile/errors_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ env bar=baz`,
9797
require.Equal(t, 1, len(srcs))
9898

9999
require.Equal(t, "Dockerfile", srcs[0].Info.Filename)
100+
require.Equal(t, "Dockerfile", srcs[0].Info.Language)
100101
require.Equal(t, tc.dockerfile, string(srcs[0].Info.Data))
101102
require.Equal(t, len(tc.errorLine), len(srcs[0].Ranges))
102103
require.NotNil(t, srcs[0].Info.Definition)

frontend/dockerui/config.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ func (bc *Client) buildContext(ctx context.Context) (*buildContext, error) {
294294
return bctx.(*buildContext), nil
295295
}
296296

297-
func (bc *Client) ReadEntrypoint(ctx context.Context, opts ...llb.LocalOption) (*Source, error) {
297+
func (bc *Client) ReadEntrypoint(ctx context.Context, lang string, opts ...llb.LocalOption) (*Source, error) {
298298
bctx, err := bc.buildContext(ctx)
299299
if err != nil {
300300
return nil, err
@@ -369,7 +369,7 @@ func (bc *Client) ReadEntrypoint(ctx context.Context, opts ...llb.LocalOption) (
369369
return nil, errors.Wrapf(err, "failed to read dockerfile")
370370
}
371371
}
372-
smap := llb.NewSourceMap(src, bctx.filename, dt)
372+
smap := llb.NewSourceMap(src, bctx.filename, lang, dt)
373373
smap.Definition = def
374374

375375
dt, err = ref.ReadFile(ctx, client.ReadRequest{
@@ -389,6 +389,7 @@ func (bc *Client) ReadEntrypoint(ctx context.Context, opts ...llb.LocalOption) (
389389
opts.SourceInfo = &pb.SourceInfo{
390390
Data: smap.Data,
391391
Filename: smap.Filename,
392+
Language: smap.Language,
392393
Definition: smap.Definition.ToPB(),
393394
}
394395
}

solver/llbsolver/provenance/buildconfig.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type Source struct {
2828

2929
type SourceInfo struct {
3030
Filename string `json:"filename,omitempty"`
31+
Language string `json:"language,omitempty"`
3132
Data []byte `json:"data,omitempty"`
3233
Definition []BuildStep `json:"llbDefinition,omitempty"`
3334
DigestMapping map[digest.Digest]string `json:"digestMapping,omitempty"`
@@ -65,6 +66,7 @@ func AddBuildConfig(ctx context.Context, p *ProvenancePredicate, rp solver.Resul
6566
s := SourceInfo{
6667
Filename: si.Filename,
6768
Data: si.Data,
69+
Language: si.Language,
6870
Definition: steps,
6971
DigestMapping: digestMap(indexes),
7072
}

0 commit comments

Comments
 (0)