mirror of
				https://github.com/docker/setup-buildx-action.git
				synced 2025-11-04 14:44:20 +08:00 
			
		
		
		
	make cloud prefix optional to download buildx if driver is cloud
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									db63cee3de
								
							
						
					
					
						commit
						7199e57b35
					
				
							
								
								
									
										3
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@ -25,8 +25,9 @@ jobs:
 | 
				
			|||||||
          - ""
 | 
					          - ""
 | 
				
			||||||
          - "latest"
 | 
					          - "latest"
 | 
				
			||||||
          - "v0.4.1"
 | 
					          - "v0.4.1"
 | 
				
			||||||
 | 
					          - "cloud:latest"
 | 
				
			||||||
 | 
					          - "cloud:v0.11.2-desktop.2"
 | 
				
			||||||
          - "lab:latest"
 | 
					          - "lab:latest"
 | 
				
			||||||
          - "lab:v0.11.2-desktop.2"
 | 
					 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
        name: Checkout
 | 
					        name: Checkout
 | 
				
			||||||
 | 
				
			|||||||
@ -323,6 +323,140 @@ describe('getAppendArgs', () => {
 | 
				
			|||||||
  );
 | 
					  );
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('getVersion', () => {
 | 
				
			||||||
 | 
					  beforeEach(() => {
 | 
				
			||||||
 | 
					    process.env = Object.keys(process.env).reduce((object, key) => {
 | 
				
			||||||
 | 
					      if (!key.startsWith('INPUT_')) {
 | 
				
			||||||
 | 
					        object[key] = process.env[key];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return object;
 | 
				
			||||||
 | 
					    }, {});
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // prettier-ignore
 | 
				
			||||||
 | 
					  test.each([
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      0,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true'],
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      ''
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      1,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'latest'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true']
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'latest'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      2,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'edge'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true']
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'edge'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      3,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'v0.19.2'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true']
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'v0.19.2'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      4,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'latest'],
 | 
				
			||||||
 | 
					        ['driver', 'cloud'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true']
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'cloud:latest'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      5,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'edge'],
 | 
				
			||||||
 | 
					        ['driver', 'cloud'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true']
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'cloud:edge'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      6,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['driver', 'cloud'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true'],
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'cloud:latest'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      7,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'cloud:v0.11.2-desktop.2'],
 | 
				
			||||||
 | 
					        ['driver', 'cloud'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true'],
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'cloud:v0.11.2-desktop.2'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    [
 | 
				
			||||||
 | 
					      8,
 | 
				
			||||||
 | 
					      new Map<string, string>([
 | 
				
			||||||
 | 
					        ['version', 'cloud:v0.11.2-desktop.2'],
 | 
				
			||||||
 | 
					        // defaults
 | 
				
			||||||
 | 
					        ['install', 'false'],
 | 
				
			||||||
 | 
					        ['use', 'true'],
 | 
				
			||||||
 | 
					        ['cache-binary', 'true'],
 | 
				
			||||||
 | 
					        ['cleanup', 'true'],
 | 
				
			||||||
 | 
					      ]),
 | 
				
			||||||
 | 
					      'cloud:v0.11.2-desktop.2'
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					  ])(
 | 
				
			||||||
 | 
					    '[%d] given %p as inputs, returns version %p',
 | 
				
			||||||
 | 
					    async (num: number, inputs: Map<string, string>, expected: string) => {
 | 
				
			||||||
 | 
					      inputs.forEach((value: string, name: string) => {
 | 
				
			||||||
 | 
					        setInput(name, value);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      const inp = await context.getInputs();
 | 
				
			||||||
 | 
					      expect(context.getVersion(inp)).toEqual(expected);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// See: https://github.com/actions/toolkit/blob/master/packages/core/src/core.ts#L67
 | 
					// See: https://github.com/actions/toolkit/blob/master/packages/core/src/core.ts#L67
 | 
				
			||||||
function getInputName(name: string): string {
 | 
					function getInputName(name: string): string {
 | 
				
			||||||
  return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`;
 | 
					  return `INPUT_${name.replace(/ /g, '_').toUpperCase()}`;
 | 
				
			||||||
 | 
				
			|||||||
@ -116,3 +116,17 @@ export async function getInspectArgs(inputs: Inputs, toolkit: Toolkit): Promise<
 | 
				
			|||||||
function driverSupportsBuildkitdFlags(driver: string): boolean {
 | 
					function driverSupportsBuildkitdFlags(driver: string): boolean {
 | 
				
			||||||
  return driver == '' || driver == 'docker-container' || driver == 'docker' || driver == 'kubernetes';
 | 
					  return driver == '' || driver == 'docker-container' || driver == 'docker' || driver == 'kubernetes';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function getVersion(inputs: Inputs): string {
 | 
				
			||||||
 | 
					  const version = inputs.version;
 | 
				
			||||||
 | 
					  if (inputs.driver === 'cloud') {
 | 
				
			||||||
 | 
					    if (!version || version === 'latest') {
 | 
				
			||||||
 | 
					      return 'cloud:latest';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (version.startsWith('cloud:') || version.startsWith('lab:')) {
 | 
				
			||||||
 | 
					      return version;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return `cloud:${version}`;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return version;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ actionsToolkit.run(
 | 
				
			|||||||
  async () => {
 | 
					  async () => {
 | 
				
			||||||
    const inputs: context.Inputs = await context.getInputs();
 | 
					    const inputs: context.Inputs = await context.getInputs();
 | 
				
			||||||
    stateHelper.setCleanup(inputs.cleanup);
 | 
					    stateHelper.setCleanup(inputs.cleanup);
 | 
				
			||||||
 | 
					    const version = context.getVersion(inputs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const toolkit = new Toolkit();
 | 
					    const toolkit = new Toolkit();
 | 
				
			||||||
    const standalone = await toolkit.buildx.isStandalone();
 | 
					    const standalone = await toolkit.buildx.isStandalone();
 | 
				
			||||||
@ -37,16 +38,16 @@ actionsToolkit.run(
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let toolPath;
 | 
					    let toolPath;
 | 
				
			||||||
    if (Util.isValidRef(inputs.version)) {
 | 
					    if (Util.isValidRef(version)) {
 | 
				
			||||||
      if (standalone) {
 | 
					      if (standalone) {
 | 
				
			||||||
        throw new Error(`Cannot build from source without the Docker CLI`);
 | 
					        throw new Error(`Cannot build from source without the Docker CLI`);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      await core.group(`Build buildx from source`, async () => {
 | 
					      await core.group(`Build buildx from source`, async () => {
 | 
				
			||||||
        toolPath = await toolkit.buildxInstall.build(inputs.version, !inputs.cacheBinary);
 | 
					        toolPath = await toolkit.buildxInstall.build(version, !inputs.cacheBinary);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    } else if (!(await toolkit.buildx.isAvailable()) || inputs.version) {
 | 
					    } else if (!(await toolkit.buildx.isAvailable()) || version) {
 | 
				
			||||||
      await core.group(`Download buildx from GitHub Releases`, async () => {
 | 
					      await core.group(`Download buildx from GitHub Releases`, async () => {
 | 
				
			||||||
        toolPath = await toolkit.buildxInstall.download(inputs.version || 'latest', !inputs.cacheBinary);
 | 
					        toolPath = await toolkit.buildxInstall.download(version || 'latest', !inputs.cacheBinary);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (toolPath) {
 | 
					    if (toolPath) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user