diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts
index 7b6c16409..b6a091f5d 100644
--- a/__tests__/context.test.ts
+++ b/__tests__/context.test.ts
@@ -188,9 +188,9 @@ describe('getArgs', () => {
       [
         'buildx',
         'build',
-        '--iidfile', '/tmp/.docker-build-push-jest/iidfile',
         '--tag', 'name/app:7.4',
         '--tag', 'name/app:latest',
+        '--iidfile', '/tmp/.docker-build-push-jest/iidfile',
         'https://github.com/docker/build-push-action.git#refs/heads/test-jest'
       ]
     ],
@@ -481,12 +481,12 @@ nproc=3`],
       [
         'buildx',
         'build',
+        '--ulimit', 'nofile=1024:1024',
+        '--ulimit', 'nproc=3',
         '--cgroup-parent', 'foo',
         '--file', './test/Dockerfile',
         '--iidfile', '/tmp/.docker-build-push-jest/iidfile',
         '--shm-size', '2g',
-        '--ulimit', 'nofile=1024:1024',
-        '--ulimit', 'nproc=3',
         '--metadata-file', '/tmp/.docker-build-push-jest/metadata-file',
         '.'
       ]
@@ -662,6 +662,19 @@ describe('asyncForEach', () => {
   });
 });
 
+describe('flagMap', () => {
+  it('should prepend array elements with the provided flag', async () => {
+    const testValues = ['a', 'b', 'c'];
+    const results: string[][] = context.flagMap(testValues, '--catpants');
+
+    expect(results).toEqual([
+      ['--catpants', 'a'],
+      ['--catpants', 'b'],
+      ['--catpants', 'c']
+    ]);
+  });
+});
+
 describe('setOutput', () => {
   beforeEach(() => {
     process.stdout.write = jest.fn();
diff --git a/dist/index.js b/dist/index.js
index af2cd489a..fb649460e 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -230,7 +230,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.setOutput = exports.asyncForEach = exports.getInputList = exports.getArgs = exports.getInputs = exports.tmpNameSync = exports.tmpDir = exports.defaultContext = void 0;
+exports.setOutput = exports.flagMap = exports.asyncForEach = exports.getInputList = exports.getArgs = exports.getInputs = exports.tmpNameSync = exports.tmpDir = exports.defaultContext = void 0;
 const sync_1 = __importDefault(__nccwpck_require__(8750));
 const fs = __importStar(__nccwpck_require__(5747));
 const os = __importStar(__nccwpck_require__(2087));
@@ -299,29 +299,16 @@ function getInputs(defaultContext) {
 exports.getInputs = getInputs;
 function getArgs(inputs, defaultContext, buildxVersion) {
     return __awaiter(this, void 0, void 0, function* () {
-        let args = ['buildx'];
-        args.push.apply(args, yield getBuildArgs(inputs, defaultContext, buildxVersion));
-        args.push.apply(args, yield getCommonArgs(inputs, buildxVersion));
-        args.push(inputs.context);
-        return args;
+        return ['buildx', ...(yield getBuildArgs(inputs, defaultContext, buildxVersion)), ...(yield getCommonArgs(inputs, buildxVersion)), inputs.context];
     });
 }
 exports.getArgs = getArgs;
 function getBuildArgs(inputs, defaultContext, buildxVersion) {
     return __awaiter(this, void 0, void 0, function* () {
-        let args = ['build'];
+        const args = ['build'].concat(...flagMap(inputs.buildArgs, '--build-arg'), ...flagMap(inputs.cacheFrom, '--cache-from'), ...flagMap(inputs.cacheTo, '--cache-to'), ...flagMap(inputs.labels, '--label'), ...flagMap(inputs.outputs, '--output'), ...flagMap(inputs.ssh, '--ssh'), ...flagMap(inputs.tags, '--tag'), ...flagMap(inputs.ulimit, '--ulimit'));
         if (inputs.allow.length > 0) {
             args.push('--allow', inputs.allow.join(','));
         }
-        yield exports.asyncForEach(inputs.buildArgs, (buildArg) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--build-arg', buildArg);
-        }));
-        yield exports.asyncForEach(inputs.cacheFrom, (cacheFrom) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--cache-from', cacheFrom);
-        }));
-        yield exports.asyncForEach(inputs.cacheTo, (cacheTo) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--cache-to', cacheTo);
-        }));
         if (inputs.cgroupParent) {
             args.push('--cgroup-parent', inputs.cgroupParent);
         }
@@ -331,12 +318,6 @@ function getBuildArgs(inputs, defaultContext, buildxVersion) {
         if (!buildx.isLocalOrTarExporter(inputs.outputs) && (inputs.platforms.length == 0 || buildx.satisfies(buildxVersion, '>=0.4.2'))) {
             args.push('--iidfile', yield buildx.getImageIDFile());
         }
-        yield exports.asyncForEach(inputs.labels, (label) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--label', label);
-        }));
-        yield exports.asyncForEach(inputs.outputs, (output) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--output', output);
-        }));
         if (inputs.platforms.length > 0) {
             args.push('--platform', inputs.platforms.join(','));
         }
@@ -362,18 +343,9 @@ function getBuildArgs(inputs, defaultContext, buildxVersion) {
         if (inputs.shmSize) {
             args.push('--shm-size', inputs.shmSize);
         }
-        yield exports.asyncForEach(inputs.ssh, (ssh) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--ssh', ssh);
-        }));
-        yield exports.asyncForEach(inputs.tags, (tag) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--tag', tag);
-        }));
         if (inputs.target) {
             args.push('--target', inputs.target);
         }
-        yield exports.asyncForEach(inputs.ulimit, (ulimit) => __awaiter(this, void 0, void 0, function* () {
-            args.push('--ulimit', ulimit);
-        }));
         return args;
     });
 }
@@ -437,6 +409,10 @@ const asyncForEach = (array, callback) => __awaiter(void 0, void 0, void 0, func
     }
 });
 exports.asyncForEach = asyncForEach;
+function flagMap(array, flag) {
+    return array.map(value => [flag, value]);
+}
+exports.flagMap = flagMap;
 // FIXME: Temp fix https://github.com/actions/toolkit/issues/777
 function setOutput(name, value) {
     command_1.issueCommand('set-output', { name }, value);
diff --git a/src/context.ts b/src/context.ts
index e538ac719..dfe2ca4a0 100644
--- a/src/context.ts
+++ b/src/context.ts
@@ -94,27 +94,24 @@ export async function getInputs(defaultContext: string): Promise<Inputs> {
 }
 
 export async function getArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
-  let args: Array<string> = ['buildx'];
-  args.push.apply(args, await getBuildArgs(inputs, defaultContext, buildxVersion));
-  args.push.apply(args, await getCommonArgs(inputs, buildxVersion));
-  args.push(inputs.context);
-  return args;
+  return ['buildx', ...(await getBuildArgs(inputs, defaultContext, buildxVersion)), ...(await getCommonArgs(inputs, buildxVersion)), inputs.context];
 }
 
 async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
-  let args: Array<string> = ['build'];
+  const args: Array<string> = ['build'].concat(
+    ...flagMap(inputs.buildArgs, '--build-arg'),
+    ...flagMap(inputs.cacheFrom, '--cache-from'),
+    ...flagMap(inputs.cacheTo, '--cache-to'),
+    ...flagMap(inputs.labels, '--label'),
+    ...flagMap(inputs.outputs, '--output'),
+    ...flagMap(inputs.ssh, '--ssh'),
+    ...flagMap(inputs.tags, '--tag'),
+    ...flagMap(inputs.ulimit, '--ulimit')
+  );
+
   if (inputs.allow.length > 0) {
     args.push('--allow', inputs.allow.join(','));
   }
-  await asyncForEach(inputs.buildArgs, async buildArg => {
-    args.push('--build-arg', buildArg);
-  });
-  await asyncForEach(inputs.cacheFrom, async cacheFrom => {
-    args.push('--cache-from', cacheFrom);
-  });
-  await asyncForEach(inputs.cacheTo, async cacheTo => {
-    args.push('--cache-to', cacheTo);
-  });
   if (inputs.cgroupParent) {
     args.push('--cgroup-parent', inputs.cgroupParent);
   }
@@ -124,12 +121,6 @@ async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersio
   if (!buildx.isLocalOrTarExporter(inputs.outputs) && (inputs.platforms.length == 0 || buildx.satisfies(buildxVersion, '>=0.4.2'))) {
     args.push('--iidfile', await buildx.getImageIDFile());
   }
-  await asyncForEach(inputs.labels, async label => {
-    args.push('--label', label);
-  });
-  await asyncForEach(inputs.outputs, async output => {
-    args.push('--output', output);
-  });
   if (inputs.platforms.length > 0) {
     args.push('--platform', inputs.platforms.join(','));
   }
@@ -153,18 +144,9 @@ async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersio
   if (inputs.shmSize) {
     args.push('--shm-size', inputs.shmSize);
   }
-  await asyncForEach(inputs.ssh, async ssh => {
-    args.push('--ssh', ssh);
-  });
-  await asyncForEach(inputs.tags, async tag => {
-    args.push('--tag', tag);
-  });
   if (inputs.target) {
     args.push('--target', inputs.target);
   }
-  await asyncForEach(inputs.ulimit, async ulimit => {
-    args.push('--ulimit', ulimit);
-  });
   return args;
 }
 
@@ -227,6 +209,10 @@ export const asyncForEach = async (array, callback) => {
   }
 };
 
+export function flagMap(array: string[], flag: string): string[][] {
+  return array.map(value => [flag, value]);
+}
+
 // FIXME: Temp fix https://github.com/actions/toolkit/issues/777
 export function setOutput(name: string, value: any): void {
   issueCommand('set-output', {name}, value);