diff --git a/src/api.js b/src/api.js index 1c726c8..59aaa34 100644 --- a/src/api.js +++ b/src/api.js @@ -95,22 +95,35 @@ const getBucketFiles = async (folderName) => { return true; } if (!oldItems.find((key) => key === item.key)) { + // mark tar + sidecars old oldItems.push(item.key); oldItems.push(item.key + ".sha256"); oldItems.push(item.key + ".sig"); + // windows companion (_setup.exe) + sidecars if (parts[3] === "windows") { const setup_key = item.key.substring(0, item.key.length - ext.length) + "_setup.exe"; - - const setup_item = ret.find((item) => item.key == setup_key); + const setup_item = ret.find((i) => i.key == setup_key); if (setup_item) { oldItems.push(setup_key); oldItems.push(setup_key + ".sha256"); oldItems.push(setup_key + ".sig"); } } + + // darwin companion (.dmg) + sidecars <-- NEW + if (parts[3] === "darwin") { + const dmg_key = + item.key.substring(0, item.key.length - ext.length) + ".dmg"; + const dmg_item = ret.find((i) => i.key == dmg_key); + if (dmg_item) { + oldItems.push(dmg_key); + oldItems.push(dmg_key + ".sha256"); + oldItems.push(dmg_key + ".sig"); + } + } } return false; } @@ -119,16 +132,21 @@ const getBucketFiles = async (folderName) => { const totalCount = filteredItems.length * 3; const setup_items = []; + const dmg_items = []; // <-- NEW let setup_offset = 0; + for (let i = 0; i < totalCount && i < filteredItems.length; i += 3) { const parts = filteredItems[i].name.split("_"); + + // add tar sidecars let item = ret.filter( - (item) => item.name === filteredItems[i].name + ".sha256", + (it) => it.name === filteredItems[i].name + ".sha256", ); filteredItems.splice(i + 1, 0, ...item); - item = ret.filter((item) => item.name === filteredItems[i].name + ".sig"); + item = ret.filter((it) => it.name === filteredItems[i].name + ".sig"); filteredItems.splice(i + 2, 0, ...item); + // windows companion block (setup.exe + sidecars) if (parts[3] === "windows") { const setup_key = filteredItems[i].key.substring( @@ -136,14 +154,10 @@ const getBucketFiles = async (folderName) => { filteredItems[i].key.length - ext.length, ) + "_setup.exe"; - const setup_item = ret.find((item) => item.key == setup_key); + const setup_item = ret.find((it) => it.key == setup_key); if (setup_item) { - const setup_item2 = ret.find( - (item) => item.key == setup_key + ".sha256", - ); - const setup_item3 = ret.find( - (item) => item.key == setup_key + ".sig", - ); + const setup_item2 = ret.find((it) => it.key == setup_key + ".sha256"); + const setup_item3 = ret.find((it) => it.key == setup_key + ".sig"); setup_items.push([ { idx: i + 3 + setup_offset }, setup_item, @@ -153,6 +167,37 @@ const getBucketFiles = async (folderName) => { setup_offset += 3; } } + + // darwin companion block (.dmg + sidecars) <-- NEW (mirrors setup flow) + if (parts[3] === "darwin") { + const dmg_key = + filteredItems[i].key.substring( + 0, + filteredItems[i].key.length - ext.length, + ) + ".dmg"; + + const dmg_item = ret.find((it) => it.key == dmg_key); + if (dmg_item) { + const dmg_item2 = ret.find((it) => it.key == dmg_key + ".sha256"); + const dmg_item3 = ret.find((it) => it.key == dmg_key + ".sig"); + dmg_items.push([ + { idx: i + 3 + setup_offset }, + dmg_item, + dmg_item2, + dmg_item3, + ]); + setup_offset += 3; + } + } + } + + // Insert darwin DMG blocks first, then Windows setup blocks (order doesn't matter across platforms) + if (dmg_items.length > 0) { + dmg_items.forEach((items) => { + filteredItems.splice(items[0].idx, 0, items[1]); + filteredItems.splice(items[0].idx + 1, 0, items[2]); + filteredItems.splice(items[0].idx + 2, 0, items[3]); + }); } if (setup_items.length > 0) {