@@ -54,6 +54,25 @@ index 9a255a011cbbfb34a337f67bcbabbbffdaf65c11..006b8eb0ee5432825cf48287c5e46077
5454 const { windows } = config.pjson.oclif;
5555 if (windows && windows.name && windows.keypath) {
5656 await signWindows(o, arch, config, windows);
57+ diff --git a/lib/commands/upload/tarballs.js b/lib/commands/upload/tarballs.js
58+ index 1ee76bdc4297e515879ebe6489ad42af632bb6f4..bea8d7379a52005806983b04526cd02030bc6edd 100644
59+ --- a/lib/commands/upload/tarballs.js
60+ +++ b/lib/commands/upload/tarballs.js
61+ @@ -76,9 +76,13 @@ class UploadTarballs extends core_1.Command {
62+ suggestions: [`Run "oclif pack --target ${target.platform}-${target.arch}" before uploading`],
63+ });
64+ }
65+ + // Buckets with Object Ownership = bucket-owner-enforced reject ACL headers.
66+ + // Only pass ACL when the CLI config explicitly sets one.
67+ + const resolvedAcl = typeof s3Config.acl === 'string' ? s3Config.acl.trim() : undefined;
68+ const S3Options = {
69+ - ACL: s3Config.acl || 'public-read',
70+ Bucket: s3Config.bucket,
71+ + // Omitting ACL avoids AccessControlListNotSupported on modern S3 buckets.
72+ + ...(resolvedAcl ? { ACL: resolvedAcl } : {}),
73+ };
74+ const uploadTarball = async (options) => {
75+ const shortKeyInputs = {
5776diff --git a/lib/tarballs/build.js b/lib/tarballs/build.js
5877index cbae61146324ef6ac0935c625b7858007ac238d1..4f3f145fc148ef9b76c61b27f99db6b7eb734b58 100644
5978--- a/lib/tarballs/build.js
0 commit comments