@@ -22,6 +22,9 @@ import * as rimraf from 'rimraf';
2222
2323import { Context } from '../../src/context.js' ;
2424import { Build } from '../../src/buildx/build.js' ;
25+ import { Buildx } from '../../src/buildx/buildx.js' ;
26+
27+ import { GitContextFormat } from '../../src/types/buildx/build.js' ;
2528
2629const fixturesDir = path . join ( __dirname , '..' , '.fixtures' ) ;
2730const tmpDir = fs . mkdtempSync ( path . join ( process . env . TEMP || os . tmpdir ( ) , 'buildx-build-' ) ) ;
@@ -41,6 +44,66 @@ afterEach(() => {
4144 rimraf . sync ( tmpDir ) ;
4245} ) ;
4346
47+ describe ( 'gitContext' , ( ) => {
48+ const originalEnv = process . env ;
49+ beforeEach ( ( ) => {
50+ vi . resetModules ( ) ;
51+ process . env = {
52+ ...originalEnv ,
53+ DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF : '' ,
54+ BUILDX_SEND_GIT_QUERY_AS_INPUT : ''
55+ } ;
56+ } ) ;
57+ afterEach ( ( ) => {
58+ process . env = originalEnv ;
59+ } ) ;
60+
61+ type GitContextTestCase = {
62+ ref : string ;
63+ format : GitContextFormat | undefined ;
64+ prHeadRef : boolean ;
65+ sendGitQueryAsInput : boolean ;
66+ buildxQuerySupport : boolean ;
67+ } ;
68+
69+ // prettier-ignore
70+ const gitContextCases : [ GitContextTestCase , string ] [ ] = [
71+ // no format set (defaults to fragment)
72+ [ { ref : 'refs/heads/master' , format : undefined , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
73+ [ { ref : 'master' , format : undefined , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
74+ [ { ref : 'refs/pull/15/merge' , format : undefined , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#refs/pull/15/merge' ] ,
75+ [ { ref : 'refs/tags/v1.0.0' , format : undefined , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
76+ [ { ref : 'refs/pull/15/merge' , format : undefined , prHeadRef : true , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#refs/pull/15/head' ] ,
77+ // no format set (defaults to query only when client-side query resolution is enabled and supported)
78+ [ { ref : 'refs/heads/master' , format : undefined , prHeadRef : false , sendGitQueryAsInput : true , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
79+ [ { ref : 'refs/pull/15/merge' , format : undefined , prHeadRef : false , sendGitQueryAsInput : true , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/merge&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
80+ [ { ref : 'refs/pull/15/merge' , format : undefined , prHeadRef : true , sendGitQueryAsInput : true , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/head&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
81+ [ { ref : 'refs/heads/master' , format : undefined , prHeadRef : false , sendGitQueryAsInput : true , buildxQuerySupport : false } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
82+ // query format
83+ [ { ref : 'refs/heads/master' , format : 'query' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
84+ [ { ref : 'master' , format : 'query' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/heads/master&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
85+ [ { ref : 'refs/pull/15/merge' , format : 'query' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/merge&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
86+ [ { ref : 'refs/tags/v1.0.0' , format : 'query' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/tags/v1.0.0&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
87+ [ { ref : 'refs/pull/15/merge' , format : 'query' , prHeadRef : true , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git?ref=refs/pull/15/head&checksum=860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
88+ // fragment format
89+ [ { ref : 'refs/heads/master' , format : 'fragment' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
90+ [ { ref : 'master' , format : 'fragment' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
91+ [ { ref : 'refs/pull/15/merge' , format : 'fragment' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#refs/pull/15/merge' ] ,
92+ [ { ref : 'refs/tags/v1.0.0' , format : 'fragment' , prHeadRef : false , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#860c1904a1ce19322e91ac35af1ab07466440c37' ] ,
93+ [ { ref : 'refs/pull/15/merge' , format : 'fragment' , prHeadRef : true , sendGitQueryAsInput : false , buildxQuerySupport : true } , 'https://github.com/docker/actions-toolkit.git#refs/pull/15/head' ] ,
94+ ] ;
95+
96+ test . each ( gitContextCases ) ( 'given %o should return %o' , async ( input : GitContextTestCase , expected : string ) => {
97+ const { ref, format, prHeadRef, sendGitQueryAsInput, buildxQuerySupport} = input ;
98+ process . env . DOCKER_DEFAULT_GIT_CONTEXT_PR_HEAD_REF = prHeadRef ? 'true' : '' ;
99+ process . env . BUILDX_SEND_GIT_QUERY_AS_INPUT = sendGitQueryAsInput ? 'true' : '' ;
100+ const buildx = new Buildx ( ) ;
101+ vi . spyOn ( buildx , 'versionSatisfies' ) . mockResolvedValue ( buildxQuerySupport ) ;
102+ const build = new Build ( { buildx} ) ;
103+ expect ( await build . gitContext ( ref , '860c1904a1ce19322e91ac35af1ab07466440c37' , format ) ) . toEqual ( expected ) ;
104+ } ) ;
105+ } ) ;
106+
44107describe ( 'resolveImageID' , ( ) => {
45108 it ( 'matches' , async ( ) => {
46109 const imageID = 'sha256:bfb45ab72e46908183546477a08f8867fc40cebadd00af54b071b097aed127a9' ;
0 commit comments