Handle push without buildx
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									f0ffce7351
								
							
						
					
					
						commit
						ea0c8ed90e
					
				
							
								
								
									
										63
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										63
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -1015,10 +1015,12 @@ function run() {
 | 
			
		||||
            }
 | 
			
		||||
            const inputs = yield context_helper_1.loadInputs();
 | 
			
		||||
            let buildArgs = [];
 | 
			
		||||
            const buildxEnabled = yield context_helper_1.mustBuildx(inputs);
 | 
			
		||||
            // Check buildx
 | 
			
		||||
            if (yield context_helper_1.mustBuildx(inputs)) {
 | 
			
		||||
            if (buildxEnabled) {
 | 
			
		||||
                if (yield !buildx.isAvailable()) {
 | 
			
		||||
                    throw new Error(`Buildx is required but not available`);
 | 
			
		||||
                    core.setFailed(`Buildx is required but not available`);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                core.info(`🚀 Buildx will be used to build your image`);
 | 
			
		||||
                buildArgs.push('buildx', 'build');
 | 
			
		||||
@ -1026,6 +1028,7 @@ function run() {
 | 
			
		||||
            else {
 | 
			
		||||
                buildArgs.push('build');
 | 
			
		||||
            }
 | 
			
		||||
            // Global options
 | 
			
		||||
            if (inputs.file) {
 | 
			
		||||
                buildArgs.push('--file', inputs.file);
 | 
			
		||||
            }
 | 
			
		||||
@ -1047,31 +1050,45 @@ function run() {
 | 
			
		||||
            if (inputs.noCache) {
 | 
			
		||||
                buildArgs.push('--no-cache');
 | 
			
		||||
            }
 | 
			
		||||
            if (inputs.builder) {
 | 
			
		||||
                core.info(`📌 Using build instance ${inputs.builder}`);
 | 
			
		||||
                yield buildx.use(inputs.builder);
 | 
			
		||||
            // Buildx options
 | 
			
		||||
            if (buildxEnabled) {
 | 
			
		||||
                if (inputs.builder) {
 | 
			
		||||
                    core.info(`📌 Using build instance ${inputs.builder}`);
 | 
			
		||||
                    yield buildx.use(inputs.builder);
 | 
			
		||||
                }
 | 
			
		||||
                if (inputs.platforms) {
 | 
			
		||||
                    buildArgs.push('--platform', inputs.platforms);
 | 
			
		||||
                }
 | 
			
		||||
                if (inputs.load) {
 | 
			
		||||
                    buildArgs.push('--load');
 | 
			
		||||
                }
 | 
			
		||||
                if (inputs.push) {
 | 
			
		||||
                    buildArgs.push('--push');
 | 
			
		||||
                }
 | 
			
		||||
                yield asyncForEach(inputs.outputs, (output) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                    buildArgs.push('--output', output);
 | 
			
		||||
                }));
 | 
			
		||||
                yield asyncForEach(inputs.cacheFrom, (cacheFrom) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                    buildArgs.push('--cache-from', cacheFrom);
 | 
			
		||||
                }));
 | 
			
		||||
                yield asyncForEach(inputs.cacheTo, (cacheTo) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                    buildArgs.push('--cache-from', cacheTo);
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
            if (inputs.platforms) {
 | 
			
		||||
                buildArgs.push('--platform', inputs.platforms);
 | 
			
		||||
            }
 | 
			
		||||
            if (inputs.load) {
 | 
			
		||||
                buildArgs.push('--load');
 | 
			
		||||
            }
 | 
			
		||||
            if (inputs.push) {
 | 
			
		||||
                buildArgs.push('--push');
 | 
			
		||||
            }
 | 
			
		||||
            yield asyncForEach(inputs.outputs, (output) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                buildArgs.push('--output', output);
 | 
			
		||||
            }));
 | 
			
		||||
            yield asyncForEach(inputs.cacheFrom, (cacheFrom) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                buildArgs.push('--cache-from', cacheFrom);
 | 
			
		||||
            }));
 | 
			
		||||
            yield asyncForEach(inputs.cacheTo, (cacheTo) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                buildArgs.push('--cache-from', cacheTo);
 | 
			
		||||
            }));
 | 
			
		||||
            buildArgs.push(inputs.context);
 | 
			
		||||
            core.info(`🏃 Starting build...`);
 | 
			
		||||
            yield exec.exec('docker', buildArgs);
 | 
			
		||||
            if (!buildxEnabled && inputs.push) {
 | 
			
		||||
                let pushRepos = [];
 | 
			
		||||
                yield asyncForEach(inputs.tags, (tag) => __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
                    const repo = tag.split(':', -1)[0];
 | 
			
		||||
                    if (!pushRepos.includes(repo)) {
 | 
			
		||||
                        pushRepos.push(repo);
 | 
			
		||||
                        core.info(`⬆️ Pushing ${repo}...`);
 | 
			
		||||
                        yield exec.exec('docker', ['push', repo]);
 | 
			
		||||
                    }
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (error) {
 | 
			
		||||
            core.setFailed(error.message);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										67
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								src/main.ts
									
									
									
									
									
								
							@ -13,11 +13,13 @@ async function run(): Promise<void> {
 | 
			
		||||
 | 
			
		||||
    const inputs: Inputs = await loadInputs();
 | 
			
		||||
    let buildArgs: Array<string> = [];
 | 
			
		||||
    const buildxEnabled = await mustBuildx(inputs);
 | 
			
		||||
 | 
			
		||||
    // Check buildx
 | 
			
		||||
    if (await mustBuildx(inputs)) {
 | 
			
		||||
    if (buildxEnabled) {
 | 
			
		||||
      if (await !buildx.isAvailable()) {
 | 
			
		||||
        throw new Error(`Buildx is required but not available`);
 | 
			
		||||
        core.setFailed(`Buildx is required but not available`);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      core.info(`🚀 Buildx will be used to build your image`);
 | 
			
		||||
      buildArgs.push('buildx', 'build');
 | 
			
		||||
@ -25,6 +27,7 @@ async function run(): Promise<void> {
 | 
			
		||||
      buildArgs.push('build');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Global options
 | 
			
		||||
    if (inputs.file) {
 | 
			
		||||
      buildArgs.push('--file', inputs.file);
 | 
			
		||||
    }
 | 
			
		||||
@ -46,32 +49,50 @@ async function run(): Promise<void> {
 | 
			
		||||
    if (inputs.noCache) {
 | 
			
		||||
      buildArgs.push('--no-cache');
 | 
			
		||||
    }
 | 
			
		||||
    if (inputs.builder) {
 | 
			
		||||
      core.info(`📌 Using build instance ${inputs.builder}`);
 | 
			
		||||
      await buildx.use(inputs.builder);
 | 
			
		||||
 | 
			
		||||
    // Buildx options
 | 
			
		||||
    if (buildxEnabled) {
 | 
			
		||||
      if (inputs.builder) {
 | 
			
		||||
        core.info(`📌 Using build instance ${inputs.builder}`);
 | 
			
		||||
        await buildx.use(inputs.builder);
 | 
			
		||||
      }
 | 
			
		||||
      if (inputs.platforms) {
 | 
			
		||||
        buildArgs.push('--platform', inputs.platforms);
 | 
			
		||||
      }
 | 
			
		||||
      if (inputs.load) {
 | 
			
		||||
        buildArgs.push('--load');
 | 
			
		||||
      }
 | 
			
		||||
      if (inputs.push) {
 | 
			
		||||
        buildArgs.push('--push');
 | 
			
		||||
      }
 | 
			
		||||
      await asyncForEach(inputs.outputs, async output => {
 | 
			
		||||
        buildArgs.push('--output', output);
 | 
			
		||||
      });
 | 
			
		||||
      await asyncForEach(inputs.cacheFrom, async cacheFrom => {
 | 
			
		||||
        buildArgs.push('--cache-from', cacheFrom);
 | 
			
		||||
      });
 | 
			
		||||
      await asyncForEach(inputs.cacheTo, async cacheTo => {
 | 
			
		||||
        buildArgs.push('--cache-from', cacheTo);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    if (inputs.platforms) {
 | 
			
		||||
      buildArgs.push('--platform', inputs.platforms);
 | 
			
		||||
    }
 | 
			
		||||
    if (inputs.load) {
 | 
			
		||||
      buildArgs.push('--load');
 | 
			
		||||
    }
 | 
			
		||||
    if (inputs.push) {
 | 
			
		||||
      buildArgs.push('--push');
 | 
			
		||||
    }
 | 
			
		||||
    await asyncForEach(inputs.outputs, async output => {
 | 
			
		||||
      buildArgs.push('--output', output);
 | 
			
		||||
    });
 | 
			
		||||
    await asyncForEach(inputs.cacheFrom, async cacheFrom => {
 | 
			
		||||
      buildArgs.push('--cache-from', cacheFrom);
 | 
			
		||||
    });
 | 
			
		||||
    await asyncForEach(inputs.cacheTo, async cacheTo => {
 | 
			
		||||
      buildArgs.push('--cache-from', cacheTo);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    buildArgs.push(inputs.context);
 | 
			
		||||
 | 
			
		||||
    core.info(`🏃 Starting build...`);
 | 
			
		||||
    await exec.exec('docker', buildArgs);
 | 
			
		||||
 | 
			
		||||
    if (!buildxEnabled && inputs.push) {
 | 
			
		||||
      let pushRepos: Array<string> = [];
 | 
			
		||||
      await asyncForEach(inputs.tags, async tag => {
 | 
			
		||||
        const repo = tag.split(':', -1)[0];
 | 
			
		||||
        if (!pushRepos.includes(repo)) {
 | 
			
		||||
          pushRepos.push(repo);
 | 
			
		||||
 | 
			
		||||
          core.info(`⬆️ Pushing ${repo}...`);
 | 
			
		||||
          await exec.exec('docker', ['push', repo]);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
  } catch (error) {
 | 
			
		||||
    core.setFailed(error.message);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user