From e93bb121cd2e075bdc64834afef7ae8e7da8498d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 10 Mar 2023 18:52:41 +0000 Subject: [PATCH] [Dev] enable `opensearch snapshot` for Darwin (#3537) (#3583) Enable the downloading of Darwin for running the command `yarn opensearch snapshot`. Darwin is not officially supported but snapshots are being built here: https://build.ci.opensearch.org/job/distribution-build-opensearch/ Issue resolved: https://github.com/opensearch-project/OpenSearch-Dashboards/issues/2944 Signed-off-by: Kawika Avilla Co-authored-by: Josh Romero (cherry picked from commit 81a5fadca1b5417c204b94c94a7b6e3196be95dd) Signed-off-by: github-actions[bot] # Conflicts: # CHANGELOG.md Co-authored-by: github-actions[bot] (cherry picked from commit 974889ab7f9e40016df3ec90bac1a839d5e89f9c) Signed-off-by: github-actions[bot] --- DEVELOPER_GUIDE.md | 6 +-- packages/osd-opensearch/src/artifact.js | 5 ++- packages/osd-opensearch/src/artifact.test.js | 42 ++++++++++++++++++-- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index b7e5e83123bb..ef394df98507 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -110,7 +110,7 @@ $ yarn osd clean OpenSearch Dashboards requires a running version of OpenSearch to connect to. In a separate terminal you can run the latest snapshot built using: -_(Linux and Windows only - for MacOS, you'll need to [run OpenSearch from a tarball](#alternative---run-opensearch-from-tarball) instead)_ +_(Linux, Windows, Darwin (MacOS) only - for others, you'll need to [run OpenSearch from a tarball](#alternative---run-opensearch-from-tarball) instead)_ ```bash $ yarn opensearch snapshot ``` @@ -184,7 +184,7 @@ By default, the snapshot command will run [a minimal distribution of OpenSearch] If you would like to run OpenSearch with a particular plugin installed on the cluster snapshot, pass the `--P` flag after `yarn opensearch snapshot`. You can use the flag multiple times to install multiple plugins. The argument value can be a URL to the plugin's zip file, maven coordinates of the plugin, or a local zip file path (use `file://` followed by the absolute or relative path, in that case). For example: -_(Linux and Windows only - for MacOS, you'll need to [run OpenSearch from a tarball](#alternative---run-opensearch-from-tarball) instead)_ +_(Linux, Windows, Darwin (MacOS) only - for others, you'll need to [run OpenSearch from a tarball](#alternative---run-opensearch-from-tarball) instead)_ ```bash $ yarn opensearch snapshot --P https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-test-plugin/2.4.0.0/opensearch-test-plugin-2.4.0.0.zip ``` @@ -214,7 +214,7 @@ $ yarn opensearch snapshot --version 2.2.0 -E cluster.name=test -E path.data=/tm ### Alternative - Run OpenSearch from tarball -OpenSearch does not yet create artifacts for MacOS, so you'll need to download, install, and run the tarball instead. (You'll also need Java installed and the `JAVA_HOME` environmental variable set - see [OpenSearch developer guide](https://github.com/opensearch-project/OpenSearch/blob/main/DEVELOPER_GUIDE.md#install-prerequisites) for details). +If you would like to run OpenSearch from the tarball, you'll need to download the minimal distribution, install it, and then run the executable. (You'll also need Java installed and the `JAVA_HOME` environmental variable set - see [OpenSearch developer guide](https://github.com/opensearch-project/OpenSearch/blob/main/DEVELOPER_GUIDE.md#install-prerequisites) for details). 1. Download the latest minimal distribution of OpenSearch from [the downloads page](https://opensearch.org/downloads.html#minimal). Note the version and replace in commands below. 2. Unzip the `tar.gz` file: `tar -xvf opensearch--linux-x64.tar.gz` diff --git a/packages/osd-opensearch/src/artifact.js b/packages/osd-opensearch/src/artifact.js index 428621c99d24..367925b03a72 100644 --- a/packages/osd-opensearch/src/artifact.js +++ b/packages/osd-opensearch/src/artifact.js @@ -39,6 +39,7 @@ const { createHash } = require('crypto'); const path = require('path'); const asyncPipeline = promisify(pipeline); +const SUPPORTED_PLATFORMS = ['linux', 'windows', 'darwin']; const DAILY_SNAPSHOTS_BASE_URL = 'https://artifacts.opensearch.org/snapshots/core/opensearch'; // TODO: [RENAMEME] currently do not have an existing replacement // issue: https://github.com/opensearch-project/OpenSearch-Dashboards/issues/475 @@ -184,8 +185,8 @@ async function getArtifactSpecForSnapshotFromUrl(urlVersion, log) { const arch = process.arch === 'arm64' ? 'arm64' : 'x64'; const extension = process.platform === 'win32' ? 'zip' : 'tar.gz'; - if (platform !== 'linux' && platform !== 'windows') { - throw createCliError(`Snapshots are only available for Linux and Windows`); + if (!SUPPORTED_PLATFORMS.includes(platform)) { + throw createCliError(`Snapshots are only available for Linux, Windows, and Darwin`); } const latestUrl = `${DAILY_SNAPSHOTS_BASE_URL}/${desiredVersion}-SNAPSHOT`; diff --git a/packages/osd-opensearch/src/artifact.test.js b/packages/osd-opensearch/src/artifact.test.js index 10da798b8533..2a2f9a8a3649 100644 --- a/packages/osd-opensearch/src/artifact.test.js +++ b/packages/osd-opensearch/src/artifact.test.js @@ -164,17 +164,17 @@ describe('Artifact', () => { }); }); - it('should throw when on a non-Linux or non-Windows platform', async () => { + it('should throw when on a non-Linux, non-Windows, non-Darwin platform', async () => { Object.defineProperties(process, { platform: { - value: 'darwin', + value: 'android', }, arch: { value: ORIGINAL_ARCHITECTURE, }, }); await expect(Artifact.getSnapshot('default', 'INVALID_PLATFORM', log)).rejects.toThrow( - 'Snapshots are only available for Linux' + 'Snapshots are only available for Linux, Windows, and Darwin' ); }); @@ -190,6 +190,42 @@ describe('Artifact', () => { mockFetch(MOCKS.multipleArch[0]); artifactTest(); }); + + it('should not throw when on a Linux platform', async () => { + Object.defineProperties(process, { + platform: { + value: 'linux', + }, + arch: { + value: 'x64', + }, + }); + artifactTest(); + }); + + it('should not throw when on a Windows platform', async () => { + Object.defineProperties(process, { + platform: { + value: 'win32', + }, + arch: { + value: 'x64', + }, + }); + artifactTest(); + }); + + it('should not throw when on a Darwin platform', async () => { + Object.defineProperties(process, { + platform: { + value: 'darwin', + }, + arch: { + value: 'x64', + }, + }); + artifactTest(); + }); }); describe('with custom snapshot manifest URL', () => {