Skip to content

Commit

Permalink
add: script files for easy download (#762)
Browse files Browse the repository at this point in the history
  • Loading branch information
Eshanatnight authored Apr 23, 2024
1 parent 09b9e40 commit 994be5a
Show file tree
Hide file tree
Showing 3 changed files with 241 additions and 23 deletions.
27 changes: 4 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,35 +64,16 @@ curl --location --request POST 'http://localhost:8000/api/v1/ingest' \

You can download and run the Parseable binary on your laptop.

- Linux
- Linux or MacOS

```bash
wget https://github.com/parseablehq/parseable/releases/download/v0.9.0/Parseable_x86_64-unknown-linux-gnu -O parseable
chmod +x parseable
./parseable local-store
```

- MacOS (Apple Silicon)

```bash
wget https://github.com/parseablehq/parseable/releases/download/v0.9.0/Parseable_aarch64-apple-darwin -O parseable
chmod +x parseable
./parseable local-store
```

- MacOS (Intel)

```bash
wget https://github.com/parseablehq/parseable/releases/download/v0.9.0/Parseable_x86_64-apple-darwin -O parseable
chmod +x parseable
./parseable local-store
curl https://raw.githubusercontent.com/parseablehq/parseable/main/scripts/download.sh | bash
```

- Windows

```bash
Invoke-WebRequest -Uri "https://github.com/parseablehq/parseable/releases/download/v0.9.0/Parseable_x86_64-pc-windows-msvc.exe" -OutFile "C:\parseable.exe"
C:\parseable.exe local-store
```pwsh
powershell -c "irm https://raw.githubusercontent.com/parseablehq/parseable/main/scripts/download.ps1 | iex"
```

Once this runs successfully, you'll see dashboard at [http://localhost:8000 ↗︎](http://localhost:8000). You can login to the dashboard default credentials `admin`, `admin`.
Expand Down
155 changes: 155 additions & 0 deletions scripts/download.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#!/usr/bin/env pwsh

<# only supports windows,
# `SUPPORTED_OS` array contains the supported linux and darwin for filtering only
# `SUPPORTED_ARCH` array contains the supported architectures but only x86_64/amd64 are
# available for now. both amd64 and x86_64 are there cause windows does report either
# of them when querying for the architecture.
#>
[System.String[]]$SUPPORTED_ARCH = @("x86_64", "arm64", "amd64")
[System.String[]]$SUPPORTED_OS = @("linux", "darwin", "win32nt")

# Associate binaries with CPU architectures and operating systems
[System.Collections.Hashtable]$BINARIES = @{
"x86_64-linux" = "Parseable_x86_64-unknown-linux-gnu"
"arm64-linux" = "Parseable_aarch64-unknown-linux-gnu"
"x86_64-darwin" = "Parseable_x86_64-apple-darwin"
"arm64-darwin" = "Parseable_aarch64-apple-darwin"
"amd64-win32nt" = "Parseable_x86_64-pc-windows-msvc.exe"
}

# util functions
function Get-Env {
param([String] $Key)

$RegisterKey = Get-Item -Path 'HKCU:'
$EnvRegisterKey = $RegisterKey.OpenSubKey('Environment')
$EnvRegisterKey.GetValue($Key, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
}

# These three environment functions are roughly copied from https://github.com/prefix-dev/pixi/pull/692
# They are used instead of `SetEnvironmentVariable` because of unwanted variable expansions.
function Publish-Env {
if (-not ("Win32.NativeMethods" -as [Type])) {
<# dllimport should not be needed but still#>
Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [IntPtr] 0xffff
$WM_SETTINGCHANGE = 0x1a
$result = [UIntPtr]::Zero
[Win32.NativeMethods]::SendMessageTimeout($HWND_BROADCAST,
$WM_SETTINGCHANGE,
[UIntPtr]::Zero,
"Environment",
2,
5000,
[ref] $result
) | Out-Null
}
function Write-Env {
param([String]$Key, [String]$Value)

[Microsoft.Win32.RegistryKey]$RegisterKey = Get-Item -Path 'HKCU:'


[Microsoft.Win32.RegistryKey]$EnvRegisterKey = $RegisterKey.OpenSubKey('Environment', $true)
if ($null -eq $Value) {
$EnvRegisterKey.DeleteValue($Key)
}
else {
$RegistryValueKind = if ($Value.Contains('%')) {
[Microsoft.Win32.RegistryValueKind]::ExpandString
}
elseif ($EnvRegisterKey.GetValue($Key)) {
$EnvRegisterKey.GetValueKind($Key)
}
else {
[Microsoft.Win32.RegistryValueKind]::String
}
$EnvRegisterKey.SetValue($Key, $Value, $RegistryValueKind)
}

Publish-Env
}

function Get-Env {
param([String] $Key)

[Microsoft.Win32.RegistryKey]$RegisterKey = Get-Item -Path 'HKCU:'
[Microsoft.Win32.RegistryKey]$EnvRegisterKey = $RegisterKey.OpenSubKey('Environment')
$EnvRegisterKey.GetValue($Key, $null, [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
}

# Get the system's CPU architecture and operating system
[String]$CPU_ARCH = [System.Environment]::GetEnvironmentVariable("PROCESSOR_ARCHITECTURE").ToLower()
[String]$OS = [System.Environment]::OSVersion.Platform.ToString().ToLower()
[String]$INSTALLDIR = "${HOME}\.parseable\bin"
[String]$BIN = "${INSTALLDIR}\parseable.exe"

function Install-Parseable {
Write-Output "OS: $OS"
Write-Output "CPU arch: $CPU_ARCH"

# Check if the CPU architecture is supported
if ($SUPPORTED_ARCH -notcontains $CPU_ARCH) {
Write-Error "Unsupported CPU architecture ($CPU_ARCH)."
exit 1
}
# Check if the OS is supported
if ($SUPPORTED_OS -notcontains $OS) {
Write-Error "Unsupported operating system ($OS)."
exit 1
}

Write-Output "Checking for existing installation..."
if (Test-Path $BIN) {
Write-Error "Parseable is already installed. Run 'parseable --version' to check the version."
Write-Error "Consider removing the existing installation"
exit 1
}

Write-Output "No existing installation found"

Write-Output "Fetching latest release..."
# Get the latest release information using GitHub API
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/parseablehq/parseable/releases/latest"
# Loop through binaries in the release and find the appropriate one
foreach ($arch_os in "$CPU_ARCH-$OS") {
$binary_name = $BINARIES[$arch_os]
$download_url = ($release.assets | Where-Object { $_.name -like "*$binary_name*" }).browser_download_url
if ($download_url) {
break
}
}

mkdir -Force $INSTALLDIR

Write-Output "Downloading Parseable Server..."
# Download the binary using Invoke-WebRequest
Invoke-WebRequest -Uri $download_url -OutFile $BIN

# Make the binary executable (for Unix-like systems)
if ($OS -eq "linux" -or $OS -eq "darwin") {
Set-ItemProperty -Path $BIN -Name IsReadOnly -Value $false
Set-ItemProperty -Path $BIN -Name IsExecutable -Value $true
}

Write-Output "Adding Parseable to PATH..."
# Only try adding to path if there isn't already a bun.exe in the path
$Path = (Get-Env -Key "Path") -split ';'
if ($Path -notcontains $INSTALLDIR) {
$Path += $INSTALLDIR
Write-Env -Key 'Path' -Value ($Path -join ';')
$env:PATH = $Path;
}
}

Install-Parseable

Write-Output "Parseable was downloaded successfully! at $INSTALLDIR"
Write-Output "To get started, restart your terminal/editor, then type `"parseable`"`n"
82 changes: 82 additions & 0 deletions scripts/download.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#!/bin/zsh

# supported CPU architectures and operating systems
SUPPORTED_ARCH=("x86_64" "arm64")
SUPPORTED_OS=("linux" "darwin")
# Associate binaries with CPU architectures and operating systems
declare -A BINARIES=(
["x86_64-linux"]="Parseable_x86_64-unknown-linux-gnu"
["arm64-linux"]="Parseable_aarch64-unknown-linux-gnu"
["x86_64-darwin"]="Parseable_x86_64-apple-darwin"
["arm64-darwin"]="Parseable_aarch64-apple-darwin"
)
# Get the system's CPU architecture and operating system
CPU_ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')

printf "Detected CPU architecture: %s\n" "$CPU_ARCH"
printf "Detected operating system: %s\n" "$OS"

SHELL_NAME=$(basename $SHELL)
RC_FILE=".${SHELL_NAME}rc"
RC_FILE_PATH="${HOME}/${RC_FILE}"
INSTALL_DIR="${HOME}/.parseable"
BIN_DIR="${INSTALL_DIR}/bin"
BIN_NAME="${BIN_DIR}/parseable"

# Check if the CPU architecture is supported
if ! echo "${SUPPORTED_ARCH[@]}" | grep -q "\\b${CPU_ARCH}\\b"; then
echo "Error: Unsupported CPU architecture (${CPU_ARCH})."
exit 1
fi
# Check if the OS is supported
if ! echo "${SUPPORTED_OS[@]}" | grep -q "\\b${OS}\\b"; then
echo "Error: Unsupported operating system (${OS})."
exit 1
fi
# Get the latest release information using GitHub API
release=$(curl -s "https://api.github.com/repos/parseablehq/parseable/releases/latest")

printf "Fetching release information for parseable...\n"

# Loop through binaries in the release and find the appropriate one
for arch_os in "${CPU_ARCH}-${OS}"; do
binary_name="${BINARIES[$arch_os]}"
download_url=$(echo "$release" | grep -o "\"browser_download_url\":\s*\"[^\"]*${binary_name}\"" | cut -d '"' -f 4)
if [ -n "$download_url" ]; then
break
fi
done

printf "Checking for existing installation...\n"
if [[ -d ${INSTALL_DIR} ]]; then
printf "A Previous version of parseable already exists. Run 'parseable --version' to check the version."
printf "or consider removing that before Installing"
exit 1

else
printf "No Previous installation found\n"
printf "Installing parseable...\n"
mkdir -p ${BIN_DIR}
fi


# Download the binary using curl or wget
if command -v curl &>/dev/null; then
curl -L -o "${BIN_NAME}" "$download_url" 2&>> /dev/null
elif command -v wget &>/dev/null; then
wget -O "${BIN_NAME}" "$download_url" 2&>> /dev/null
else
echo "Error: Neither curl nor wget found. Please install either curl or wget."
exit 1
fi

printf "Parseable Server was successfully installed at: ${BIN_NAME}\n"

chmod +x "${BIN_NAME}"

printf "Adding parseable to the path\n"
PATH_STR="export PATH=${BIN_DIR}"':$PATH'
echo ${PATH_STR} >> ${RC_FILE_PATH}

echo "parseable was added to the path. Please refresh the environment by sourcing the ${RC_PATH}"

0 comments on commit 994be5a

Please sign in to comment.