diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e38211dda..058f081f7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -275,6 +275,8 @@ jobs: - build-type-determination - select-targets env: + # https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/ + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true # Location of artifacts generated by build. BUILD_ARTIFACTS_PATH: electron-app/dist/build-artifacts # to skip passing signing credentials to electron-builder diff --git a/arduino-ide-extension/src/browser/arduino-preferences.ts b/arduino-ide-extension/src/browser/arduino-preferences.ts index bc9cdb099..c7e1698a5 100644 --- a/arduino-ide-extension/src/browser/arduino-preferences.ts +++ b/arduino-ide-extension/src/browser/arduino-preferences.ts @@ -228,6 +228,14 @@ const properties: ArduinoPreferenceSchemaProperties = { ), default: 'https://api2.arduino.cc/create', }, + 'arduino.cloud.sharedSpaceID': { + type: 'string', + description: nls.localize( + 'arduino/preferences/cloud.sharedSpaceId', + 'The ID of the Arduino Cloud shared space to load the sketchbook from. If empty, your private space is selected.' + ), + default: '', + }, 'arduino.auth.clientID': { type: 'string', description: nls.localize( @@ -329,6 +337,7 @@ export interface ArduinoConfiguration { 'arduino.cloud.push.warn': boolean; 'arduino.cloud.pushpublic.warn': boolean; 'arduino.cloud.sketchSyncEndpoint': string; + 'arduino.cloud.sharedSpaceID': string; 'arduino.auth.clientID': string; 'arduino.auth.domain': string; 'arduino.auth.audience': string; diff --git a/arduino-ide-extension/src/browser/create/create-api.ts b/arduino-ide-extension/src/browser/create/create-api.ts index 7f4cfed22..db777b35a 100644 --- a/arduino-ide-extension/src/browser/create/create-api.ts +++ b/arduino-ide-extension/src/browser/create/create-api.ts @@ -509,11 +509,19 @@ export class CreateApi { private async headers(): Promise> { const token = await this.token(); - return { + const headers: Record = { 'content-type': 'application/json', accept: 'application/json', authorization: `Bearer ${token}`, }; + + const sharedSpaceID = + this.arduinoPreferences['arduino.cloud.sharedSpaceID']; + if (sharedSpaceID) { + headers['x-organization'] = sharedSpaceID; + } + + return headers; } private domain(apiVersion = 'v2'): string { diff --git a/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-tree-model.ts b/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-tree-model.ts index df1d52964..89a013547 100644 --- a/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-tree-model.ts +++ b/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-tree-model.ts @@ -127,6 +127,9 @@ export class SketchbookTreeModel extends FileTreeModel { if (preferenceName === 'arduino.sketchbook.showAllFiles') { this.updateRoot(); } + if (preferenceName === 'arduino.cloud.sharedSpaceID') { + this.updateRoot(); + } }) ); diff --git a/arduino-ide-extension/src/test/node/boards-service-impl.slow-test.ts b/arduino-ide-extension/src/test/node/boards-service-impl.slow-test.ts index aa893a34f..f5b29a5bf 100644 --- a/arduino-ide-extension/src/test/node/boards-service-impl.slow-test.ts +++ b/arduino-ide-extension/src/test/node/boards-service-impl.slow-test.ts @@ -113,13 +113,13 @@ describe('boards-service-impl', () => { expect(result.length).greaterThan(1); const lastIndex = result.length - 1; const last = result[lastIndex]; - expect(last.id).to.be.equal('arduino:mbed'); + expect(last.id).to.be.equal('Microsoft:win10'); expect(last.deprecated).to.be.true; - const windowsIoTCoreIndex = result.findIndex( - (platform) => platform.id === 'Microsoft:win10' + const arduinoMbedCoreIndex = result.findIndex( + (platform) => platform.id === 'arduino:mbed' ); - expect(windowsIoTCoreIndex).to.be.greaterThanOrEqual(0); - expect(windowsIoTCoreIndex).to.be.lessThan(lastIndex); + expect(arduinoMbedCoreIndex).to.be.greaterThanOrEqual(0); + expect(arduinoMbedCoreIndex).to.be.lessThan(lastIndex); const first = result[0]; expect(typeof first.deprecated).to.be.equal('boolean'); expect(first.deprecated).to.be.false; diff --git a/i18n/en.json b/i18n/en.json index c83d280c1..22babc740 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -368,6 +368,7 @@ "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", + "cloud.sharedSpaceId": "The ID of the Arduino Cloud shared space to load the sketchbook from. If empty, your private space is selected.", "cloud.sketchSyncEndpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", "compile": "compile", "compile.experimental": "True if the IDE should handle multiple compiler errors. False by default",