From e16947664887d49bb6311363acdc3ab8ff321a14 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 6 Feb 2025 21:38:59 +0100 Subject: [PATCH 1/3] Fix url enconding --- index.json | 42 ++++++++++++++++----------------- src/common.ts | 2 +- src/ghw_reprocess_all_images.ts | 20 +++++++++++----- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/index.json b/index.json index c5e04920..6707ed83 100644 --- a/index.json +++ b/index.json @@ -229,7 +229,7 @@ "fileName": "ED - HA - VOC Sensor-SSIG 4.0.1.zigbee", "fileVersion": 262145, "fileSize": 194471, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Develco/ED - HA - VOC Sensor-SSIG 4.0.1.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Develco/ED%20-%20HA%20-%20VOC%20Sensor-SSIG%204.0.1.zigbee", "imageType": 800, "manufacturerCode": 4117, "sha512": "d6779d7e0879c86d8a7479f352d187cb854cc8586b57245dc96f6c202ccf455a19acb5d360b9ae62510e5b7ae2ea67a95841ff822a5a3a69199d5841dbcf2dbe", @@ -420,7 +420,7 @@ "fileName": "ZB21S3_HZC_Dimmer1_EcoDim-Zigbee 3.0_1.01_20230908.ota", "fileVersion": 4, "fileSize": 286646, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/EcoDim/ZB21S3_HZC_Dimmer1_EcoDim-Zigbee 3.0_1.01_20230908.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/EcoDim/ZB21S3_HZC_Dimmer1_EcoDim-Zigbee%203.0_1.01_20230908.ota", "imageType": 1000, "manufacturerCode": 4714, "sha512": "9b7835e32ef5af35385710332838099c5dce99a398ae04a1a769d67935fb0752ca4da58892f13bc842cbf8f9ae20516142fe9b66eff3e8ebef6577a71a1d9b0b", @@ -442,7 +442,7 @@ "fileName": "GL-B-007P_V17_OTAV7_20210305_100%.ota", "fileVersion": 7, "fileSize": 291702, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-B-007P_V17_OTAV7_20210305_100%.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-B-007P_V17_OTAV7_20210305_100%25.ota", "imageType": 0, "manufacturerCode": 4687, "sha512": "8c3431b4d60d31e3ac16468601b64b3f8da0c2cf122c638a654b71543de901bfaf2e3afe5a0a8084d20d32478ad61738c86f33a2548211ea8f2367900fb1b620", @@ -496,7 +496,7 @@ "fileName": "GL-D-005P_V11076801_OTAV12_20211108_60%.ota", "fileVersion": 18, "fileSize": 291826, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-D-005P_V11076801_OTAV12_20211108_60%.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-D-005P_V11076801_OTAV12_20211108_60%25.ota", "imageType": 0, "manufacturerCode": 4687, "sha512": "966bbc8a44693eb5a91c4cf64bf59b91d291335d223cec1ffc65a6d7b3fe339be4e70b90908aea0bc0a6f7ea4ff130898b4492e0818d7f05220582097a543f9d", @@ -537,7 +537,7 @@ "fileName": "GL-FL-005P_V14_OTAV4_20210119_100%.ota", "fileVersion": 4, "fileSize": 291546, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-FL-005P_V14_OTAV4_20210119_100%.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-FL-005P_V14_OTAV4_20210119_100%25.ota", "imageType": 0, "manufacturerCode": 4687, "sha512": "35815df1ef7ec3f492076f118c77bf21a846ea68c07766f574eeb67d34cb00cee8e374edabfba47c1b66763c222c1ce2133a06cae8bece483b0be9d90f54a2b8", @@ -548,7 +548,7 @@ "fileName": "GL-FL-006P_V14_OTAV4_20210119_100%.ota", "fileVersion": 4, "fileSize": 291546, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-FL-006P_V14_OTAV4_20210119_100%.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-FL-006P_V14_OTAV4_20210119_100%25.ota", "imageType": 0, "manufacturerCode": 4687, "sha512": "fec3c2e153d30a3a01193b0b7a96e3ef2e6613d1de58e5ee01d6d66baf7d2d4e8c1bd94b3aece0effc94145e8b5b783f192ff752a9ae640044b895faabbbcd63", @@ -580,7 +580,7 @@ "fileName": "GL-S-007P_V15_A1_OTAV5_20210201_90%.ota", "fileVersion": 5, "fileSize": 291622, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-S-007P_V15_A1_OTAV5_20210201_90%.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Gledopto/GL-S-007P_V15_A1_OTAV5_20210201_90%25.ota", "imageType": 0, "manufacturerCode": 4687, "sha512": "ce512a11f0d4e603edd3a93686cf5d666ee447bee1d24a6e06ce544e2ebf941a4a4e3fcc737cdf8c65821f8e008366b269d9a221fb55cfa54065380442c5f432", @@ -1901,7 +1901,7 @@ "fileName": "1166-0128-24031511-upgradeMe-RS 226.zigbee", "fileVersion": 604181777, "fileSize": 262013, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0128-24031511-upgradeMe-RS 226.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0128-24031511-upgradeMe-RS%20226.zigbee", "imageType": 296, "manufacturerCode": 4454, "sha512": "8d239c44c73d403c15448d5c7e4c15d1b25463bbb4681fdfd184cdb6e5f72b4797d71b746097b14ce0e09b631a9e6a4b4d103caa1175ccd257b9193fe7261120", @@ -1911,7 +1911,7 @@ "fileName": "1166-0129-24031511-upgradeMe-RS 227 T.zigbee", "fileVersion": 604181777, "fileSize": 268720, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0129-24031511-upgradeMe-RS 227 T.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0129-24031511-upgradeMe-RS%20227%20T.zigbee", "imageType": 297, "manufacturerCode": 4454, "sha512": "c7365c9576886a4fc4ddb6e1256d7dcb75f788ec92631e5cb13b8ae317b876954988632010fbe6604a5d1fd5f25936f61387dd6dda20ca61eb5848999278b964", @@ -1921,7 +1921,7 @@ "fileName": "1166-012A-24031511-upgradeMe-RB 245.zigbee", "fileVersion": 604181777, "fileSize": 262013, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012A-24031511-upgradeMe-RB 245.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012A-24031511-upgradeMe-RB%20245.zigbee", "imageType": 298, "manufacturerCode": 4454, "sha512": "a6606afeb0ce56b20d7aa839d40ec079851fa6b39a80a65707d4dbd900fb2ac2582db40b5dc519c473fc51d1e630bb81aded66545283b77f2ac5e91699771cac", @@ -1931,7 +1931,7 @@ "fileName": "1166-012B-24031511-upgradeMe-RB 249 T.zigbee", "fileVersion": 604181777, "fileSize": 268720, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012B-24031511-upgradeMe-RB 249 T.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012B-24031511-upgradeMe-RB%20249%20T.zigbee", "imageType": 299, "manufacturerCode": 4454, "sha512": "d3c86737e3a9de6102c013b00b69ea37c551debb898c25f5ce67bfdab4c52b8acca5932e34953d06087dd078d77d83d5d8654c695af6a18440fc2acea0c07f5f", @@ -1941,7 +1941,7 @@ "fileName": "1166-012C-24031511-upgradeMe-RB 251 C.zigbee", "fileVersion": 604181777, "fileSize": 318314, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012C-24031511-upgradeMe-RB 251 C.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012C-24031511-upgradeMe-RB%20251%20C.zigbee", "imageType": 300, "manufacturerCode": 4454, "sha512": "7be7ca7b54e3f404f164f0ae22386e6180f30a72334909648240a45490002b291e4031a6604d3ed7b894a1105a49f6d088df4a085f434a8b1be512a8552a995d", @@ -1951,7 +1951,7 @@ "fileName": "1166-012D-24031511-upgradeMe-RB 266.zigbee", "fileVersion": 604181777, "fileSize": 262013, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012D-24031511-upgradeMe-RB 266.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012D-24031511-upgradeMe-RB%20266.zigbee", "imageType": 301, "manufacturerCode": 4454, "sha512": "317a109be00c0f7b96e7bdb1d60eab57d68149e3a9da78b7fe21db165d22165fef389b8eb4c0463abe27d5e9680a48975a72687900f5baa5e2df5db16eda1348", @@ -1961,7 +1961,7 @@ "fileName": "1166-012E-24031511-upgradeMe-RB 279 T.zigbee", "fileVersion": 604181777, "fileSize": 268720, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012E-24031511-upgradeMe-RB 279 T.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012E-24031511-upgradeMe-RB%20279%20T.zigbee", "imageType": 302, "manufacturerCode": 4454, "sha512": "96c85aab44c85dfaecf0e5728b87de5920aa6d1030e18831cbfd737b5e0772937f55f0e7da1c5356ef6e6756f7c4cffbfc7d0ba095e63d053bde2535a450b72d", @@ -1971,7 +1971,7 @@ "fileName": "1166-012F-24021511-upgradeMe -RB 286 C.zigbee", "fileVersion": 604116241, "fileSize": 302698, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012F-24021511-upgradeMe -RB 286 C.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-012F-24021511-upgradeMe%20-RB%20286%20C.zigbee", "imageType": 303, "manufacturerCode": 4454, "sha512": "3195366686f563306fa7fd9d41656498fb6d15e085d4f691d8464f6de074c1042ed33a6706deea6d9dd001ef535f74cd8dceae1deec38194ab1e3d92a596a11f", @@ -1981,7 +1981,7 @@ "fileName": "1166-0130-22151511-upgradeMe RS 232 C 20230714.ota", "fileVersion": 571806993, "fileSize": 319518, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0130-22151511-upgradeMe RS 232 C 20230714.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0130-22151511-upgradeMe%20%20RS%20232%20C%2020230714.ota", "imageType": 304, "manufacturerCode": 4454, "sha512": "cfe7aab8c926345f38aa817a6ac652519cd891eeba8162e680b98dc91e6025ff150a04e618c8abc5528110965d1bf036f324619269d33bb97a535ce766b71a5f", @@ -1991,7 +1991,7 @@ "fileName": "1166-0131-24081511-upgradeMe RB 255 C 20230714.ota", "fileVersion": 604509457, "fileSize": 319414, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0131-24081511-upgradeMe RB 255 C 20230714.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-0131-24081511-upgradeMe%20%20RB%20255%20C%2020230714.ota", "imageType": 305, "manufacturerCode": 4454, "sha512": "0d1374689790b7d92eecc068303f87ef0d5df1aadddb0a498c9dca73db9313b2239be14b4b63420660da8512a692909cce64b6ff74769fa62bc4fef610c9c366", @@ -2081,7 +2081,7 @@ "fileName": "1166-022D-24031511-upgradeMe-BY 266.zigbee", "fileVersion": 604181777, "fileSize": 262013, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-022D-24031511-upgradeMe-BY 266.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-022D-24031511-upgradeMe-BY%20266.zigbee", "imageType": 557, "manufacturerCode": 4454, "sha512": "e3a75926cd6e19441dac4aec5a6c81aba32c0fc09fb74481cb1140e4284954497167ae2a897346d53b5cd14bb80bb52b6f14bf7356d5de300b1868f62b6ca8e7", @@ -2091,7 +2091,7 @@ "fileName": "1166-022F-24021511-upgradeMe BY 286 C.zigbee", "fileVersion": 604116241, "fileSize": 302698, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-022F-24021511-upgradeMe BY 286 C.zigbee", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Innr/1166-022F-24021511-upgradeMe%20BY%20286%20C.zigbee", "imageType": 559, "manufacturerCode": 4454, "sha512": "a6fdd9ab0f770665e126920143da7c0f66ef5d9fed5f2b76f030c4d21a51ae02d881ca31aa6cb80730246311f8bbaac2f9196b7840ac8bc99a6f22db738e9a00", @@ -5163,7 +5163,7 @@ "fileName": "NAMRON_AS_4512737(6001) V22.ota", "fileVersion": 22, "fileSize": 245148, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Namron/NAMRON_AS_4512737(6001) V22.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Namron/NAMRON_AS_4512737(6001)%20V22.ota", "imageType": 6001, "manufacturerCode": 4644, "sha512": "ce40cfc670692384590fc58b84fd9b0d1a6f7b1fa28c6a34ea46fd404b536135151e0fa70bef5ff0c1eeca3fe0d27174806fd1b4863e5bc10afaeca49e0b14f0", @@ -5174,7 +5174,7 @@ "fileName": "NAMRON_AS_4512738(6002) V22.ota", "fileVersion": 22, "fileSize": 245148, - "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Namron/NAMRON_AS_4512738(6002) V22.ota", + "url": "https://github.com/Koenkk/zigbee-OTA/raw/master/images/Namron/NAMRON_AS_4512738(6002)%20V22.ota", "imageType": 6002, "manufacturerCode": 4644, "sha512": "c6eb11b68bbbacee5ee8dc483a93d07db60003a8345fdd512e05603b9ab1b3dd06f692e01a3be71f3411fdd43a3446198fc7dc806c9b80cab3c86226a41941a7", diff --git a/src/common.ts b/src/common.ts index a084d20d..09d8d77f 100644 --- a/src/common.ts +++ b/src/common.ts @@ -78,7 +78,7 @@ export function getOutDir(folderName: string, basePath: string = BASE_IMAGES_DIR } export function getRepoFirmwareFileUrl(folderName: string, fileName: string, basePath: string = BASE_IMAGES_DIR): string { - return BASE_REPO_URL + path.posix.join(REPO_BRANCH, basePath, folderName, fileName); + return BASE_REPO_URL + path.posix.join(REPO_BRANCH, basePath, folderName, encodeURIComponent(fileName)); } export function writeManifest(fileName: string, firmwareList: RepoImageMeta[]): void { diff --git a/src/ghw_reprocess_all_images.ts b/src/ghw_reprocess_all_images.ts index 3e1def77..1867855d 100644 --- a/src/ghw_reprocess_all_images.ts +++ b/src/ghw_reprocess_all_images.ts @@ -101,8 +101,7 @@ async function download3rdParties( continue; } - // reverse add.js logic - const fileName = unescape(meta.url.split('/').pop()!); + const fileName = decodeURIComponent(meta.url.split('/').pop()!); const outDirName = outDirFinder(meta); if (outDirName) { @@ -245,12 +244,10 @@ function checkImagesAgainstManifests(github: Octokit, core: typeof CoreApi, cont for (const fileName of readdirSync(subfolderPath)) { const firmwareFilePath = path.join(subfolderPath, fileName); - const fileRelUrl = path.posix.join(imagesDir, subfolderName, fileName); - // previous add.js used escape() for url property - const escFileRelUrl = escape(fileRelUrl); + const fileRelUrl = path.posix.join(imagesDir, subfolderName, encodeURIComponent(fileName)); // take local images only const inManifest = manifest.filter( - (m) => m.url.startsWith(BASE_REPO_URL + REPO_BRANCH) && (m.url.endsWith(fileRelUrl) || m.url.endsWith(escFileRelUrl)), + (m) => m.url.startsWith(BASE_REPO_URL + REPO_BRANCH) && m.url.endsWith(fileRelUrl), ); if (inManifest.length === 0) { @@ -396,3 +393,14 @@ export async function reProcessAllImages( checkImagesAgainstManifests(github, core, context, removeNotInManifest); } + + +// To run locally uncomment below and run with `npx tsx src/ghw_reprocess_all_images.ts` +// const core = { +// info: (msg) => console.log(msg), +// warning: (msg) => console.log(msg), +// error: (msg) => console.error(msg), +// startGroup: () => {}, +// endGroup: () => {}, +// } +// checkImagesAgainstManifests(null, core, null, false); \ No newline at end of file From 4acc16a7567186e212ae55b5c5be4ed79a26d980 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 6 Feb 2025 21:40:13 +0100 Subject: [PATCH 2/3] newline --- src/ghw_reprocess_all_images.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ghw_reprocess_all_images.ts b/src/ghw_reprocess_all_images.ts index 1867855d..140bb99c 100644 --- a/src/ghw_reprocess_all_images.ts +++ b/src/ghw_reprocess_all_images.ts @@ -403,4 +403,4 @@ export async function reProcessAllImages( // startGroup: () => {}, // endGroup: () => {}, // } -// checkImagesAgainstManifests(null, core, null, false); \ No newline at end of file +// checkImagesAgainstManifests(null, core, null, false); From 93c7252f2e5492ab545a413831f3e3247f1ba3b1 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Fri, 7 Feb 2025 20:43:02 +0100 Subject: [PATCH 3/3] Fix lint and tests --- package.json | 1 + src/ghw_reprocess_all_images.ts | 5 +---- tests/ghw_reprocess_all_images.test.ts | 7 +++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index a7fd5bc6..24d7d98e 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "format:check": "prettier --check .", "eslint": "eslint . --max-warnings=0", "test": "jest test --config=./tests/jest.config.ts --silent --runInBand", + "test:watch": "jest test --watch --config=./tests/jest.config.ts --silent --runInBand", "coverage": "jest test --config=./tests/jest.config.ts --silent --runInBand --coverage" }, "keywords": [ diff --git a/src/ghw_reprocess_all_images.ts b/src/ghw_reprocess_all_images.ts index 140bb99c..e2f95ffc 100644 --- a/src/ghw_reprocess_all_images.ts +++ b/src/ghw_reprocess_all_images.ts @@ -246,9 +246,7 @@ function checkImagesAgainstManifests(github: Octokit, core: typeof CoreApi, cont const firmwareFilePath = path.join(subfolderPath, fileName); const fileRelUrl = path.posix.join(imagesDir, subfolderName, encodeURIComponent(fileName)); // take local images only - const inManifest = manifest.filter( - (m) => m.url.startsWith(BASE_REPO_URL + REPO_BRANCH) && m.url.endsWith(fileRelUrl), - ); + const inManifest = manifest.filter((m) => m.url.startsWith(BASE_REPO_URL + REPO_BRANCH) && m.url.endsWith(fileRelUrl)); if (inManifest.length === 0) { core.warning(`Not found in base manifest: ${firmwareFilePath}.`); @@ -394,7 +392,6 @@ export async function reProcessAllImages( checkImagesAgainstManifests(github, core, context, removeNotInManifest); } - // To run locally uncomment below and run with `npx tsx src/ghw_reprocess_all_images.ts` // const core = { // info: (msg) => console.log(msg), diff --git a/tests/ghw_reprocess_all_images.test.ts b/tests/ghw_reprocess_all_images.test.ts index 823b9708..54406fb8 100644 --- a/tests/ghw_reprocess_all_images.test.ts +++ b/tests/ghw_reprocess_all_images.test.ts @@ -366,13 +366,12 @@ describe('Github Workflow: Re-Process All Images', () => { const fileName = oldMetas.url.split('/').pop()!; const newName = fileName.replace('.ota', `(%1).ota`); const baseUrl = oldMetas.url.replace(fileName, ''); - oldMetas.url = baseUrl + escape(newName); + oldMetas.url = baseUrl + encodeURIComponent(newName); setManifest(common.BASE_INDEX_MANIFEST_FILENAME, [oldMetas]); const imagePath = useImage(IMAGE_V14_1, BASE_IMAGES_TEST_DIR_PATH); const baseName = path.basename(imagePath.filename); const renamedPath = imagePath.filename.replace(baseName, newName); renameSync(imagePath.filename, renamedPath); - console.log(newName, oldMetas.url, renamedPath); // @ts-expect-error mocked as needed await reProcessAllImages(github, core, context, true, true); @@ -384,7 +383,7 @@ describe('Github Workflow: Re-Process All Images', () => { const outManifestMetas = withExtraMetas( IMAGE_V14_1_METAS, // @ts-expect-error override - {fileName: newName, url: `${baseUrl}${newName}`}, + {fileName: newName, url: `${baseUrl}${encodeURIComponent(newName)}`}, ); delete outManifestMetas.originalUrl; expect(writeManifestSpy).toHaveBeenNthCalledWith(2, common.BASE_INDEX_MANIFEST_FILENAME, [outManifestMetas]); @@ -752,7 +751,7 @@ describe('Github Workflow: Re-Process All Images', () => { const fileName = oldMetas.url.split('/').pop()!; const newName = fileName.replace('.ota', `(%1).ota`); const baseUrl = oldMetas.url.replace(fileName, ''); - oldMetas.url = baseUrl + escape(newName); + oldMetas.url = baseUrl + encodeURIComponent(newName); // @ts-expect-error old metas setManifest(common.BASE_INDEX_MANIFEST_FILENAME, [oldMetas]); // link back to existing image from fetch