From 049b186a0edd28744922e7e007d2813b352e7b18 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Thu, 28 Mar 2024 13:19:44 +0800 Subject: [PATCH] fix: sync cypress linux-arm64 binary (#662) closes https://github.com/cnpm/cnpmjs.org/issues/1560 ## Summary by CodeRabbit - **New Features** - Added support for the `linux-arm64` platform in Cypress binary handling. - **Tests** - Updated tests to include assertions for the newly supported `linux-arm64` platform. - **Chores** - Updated Node.js version to 21 in workflow configuration for improved job execution. --- .github/workflows/nodejs.yml | 2 +- app/common/adapter/binary/CypressBinary.ts | 15 ++++++++++++- .../adapter/binary/CypressBinary.test.ts | 21 +++++++++++++------ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 1bb56d14..c40d936c 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -32,7 +32,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [16, 18, 20] + node-version: [16, 18, 20, 21] os: [ubuntu-latest] steps: diff --git a/app/common/adapter/binary/CypressBinary.ts b/app/common/adapter/binary/CypressBinary.ts index 92f85c38..bc54f14f 100644 --- a/app/common/adapter/binary/CypressBinary.ts +++ b/app/common/adapter/binary/CypressBinary.ts @@ -42,8 +42,21 @@ export class CypressBinary extends AbstractBinary { // "https://cdn.cypress.io/desktop/9.2.0/darwin-arm64/cypress.zip" // "https://cdn.cypress.io/desktop/9.2.0/darwin-x64/cypress.zip" // "https://cdn.cypress.io/desktop/9.2.0/linux-x64/cypress.zip" + // "https://cdn.cypress.io/desktop/9.2.0/linux-arm64/cypress.zip" // "https://cdn.cypress.io/desktop/9.2.0/win32-x64/cypress.zip" - const platforms = [ 'darwin-x64', 'darwin-arm64', 'linux-x64', 'win32-x64' ]; + // https://github.com/cypress-io/cypress/blob/develop/scripts/binary/index.js#L146 + // const systems = [ + // { platform: 'linux', arch: 'x64' }, + // { platform: 'linux', arch: 'arm64' }, + // { platform: 'darwin', arch: 'x64' }, + // { platform: 'darwin', arch: 'arm64' }, + // { platform: 'win32', arch: 'x64' }, + // ] + const platforms = [ + 'darwin-x64', 'darwin-arm64', + 'linux-x64', 'linux-arm64', + 'win32-x64', + ]; for (const platform of platforms) { this.dirItems[subDir].push({ name: `${platform}/`, diff --git a/test/common/adapter/binary/CypressBinary.test.ts b/test/common/adapter/binary/CypressBinary.test.ts index c0254c82..b151f417 100644 --- a/test/common/adapter/binary/CypressBinary.test.ts +++ b/test/common/adapter/binary/CypressBinary.test.ts @@ -1,4 +1,4 @@ -import assert from 'assert'; +import assert from 'node:assert'; import { app } from 'egg-mock/bootstrap'; import { CypressBinary } from '../../../../app/common/adapter/binary/CypressBinary'; import { TestUtil } from '../../../../test/TestUtil'; @@ -8,6 +8,7 @@ describe('test/common/adapter/binary/CypressBinary.test.ts', () => { beforeEach(async () => { binary = await app.getEggObject(CypressBinary); }); + describe('fetch()', () => { it('should fetch root: / work', async () => { app.mockHttpclient('https://registry.npmjs.com/cypress', 'GET', { @@ -44,11 +45,12 @@ describe('test/common/adapter/binary/CypressBinary.test.ts', () => { }); let result = await binary.fetch('/4.0.0/'); assert(result); - assert(result.items.length === 4); - assert(result.items[0].name === 'darwin-x64/'); - assert(result.items[1].name === 'darwin-arm64/'); - assert(result.items[2].name === 'linux-x64/'); - assert(result.items[3].name === 'win32-x64/'); + assert.equal(result.items.length, 5); + assert.equal(result.items[0].name, 'darwin-x64/'); + assert.equal(result.items[1].name, 'darwin-arm64/'); + assert.equal(result.items[2].name, 'linux-x64/'); + assert.equal(result.items[3].name, 'linux-arm64/'); + assert.equal(result.items[4].name, 'win32-x64/'); assert(result.items[0].isDir); result = await binary.fetch('/4.0.0/darwin-x64/'); @@ -72,6 +74,13 @@ describe('test/common/adapter/binary/CypressBinary.test.ts', () => { assert(result.items[0].url === 'https://cdn.cypress.io/desktop/4.0.0/linux-x64/cypress.zip'); assert(!result.items[0].isDir); + result = await binary.fetch('/4.0.0/linux-arm64/'); + assert(result); + assert(result.items.length === 1); + assert(result.items[0].name === 'cypress.zip'); + assert(result.items[0].url === 'https://cdn.cypress.io/desktop/4.0.0/linux-arm64/cypress.zip'); + assert(!result.items[0].isDir); + result = await binary.fetch('/4.0.0/win32-x64/'); assert(result); assert(result.items.length === 1);