diff --git a/scripts/datajure.ps1 b/scripts/datajure.ps1 new file mode 100644 index 0000000..e44cb43 --- /dev/null +++ b/scripts/datajure.ps1 @@ -0,0 +1,123 @@ +$ErrorActionPreference = "Stop" + +function Write-Help { + Write-Output "Downloads the latest release of Datajure REPL if it is not found." + Write-Output "Runs the Datajure REPL + starts an nREPL server with an .nrepl-port file." + Write-Output "Usage:" + Write-Output "`tdatajure [] [--force-download] [--proxy ] [--help]" + Write-Output "The optional input file should be a Datajure source file (.dtj suffix)." +} + +$ScriptPath = $false +$ForceDownload = $false +$UseProxy = $false +$HttpsProxy = $false +for ($i = 0; $i -lt $args.count;) { + $Key = $args[$i] + switch -Wildcard ($Key) { + "*.dtj" { + $ScriptPath = $Key + $i++ + } + "--force-download" { + $ForceDownload = $true + $i++ + } + "--proxy" { + $UseProxy = $true + $i++ + if ($i -ge $args.count) { + Write-Output "Missing proxy server address!" + Write-Help + Exit 1 + } + HttpsProxy = $aegs[$i] + $i++ + } + "--help" { + Write-Help + Exit 0 + } + Default { + Write-Output "Unrecognised option!" + Write-Help + Exit 1 + } + } +} + +function Get-LatestRelease($RepoName) { + if ($UseProxy) { + (Invoke-WebRequest "https://api.github.com/repos/$RepoName/releases/latest" -Proxy "$HttpsProxy").Content | ConvertFrom-Json | Select-Object -expand "tag_name" + } else { + (Invoke-WebRequest "https://api.github.com/repos/$RepoName/releases/latest").Content | ConvertFrom-Json | Select-Object -expand "tag_name" + } +} + +$RepoName = "clojure-finance/datajure" +$Version = get-LatestRelease($RepoName) +$OriginalDir = Get-Location | Foreach-Object { $_.Path } +$DatajureDir = "$HOME\.datajure" +$DownloadDir = "$DatajureDir\downloads" +$UberjarDownloadUrl = "https://github.com/$RepoName/releases/download/$Version/datajure-$Version-standalone.jar" +$WinutilsDownloadUrl = "https://github.com/cdarlint/winutils/raw/master/hadoop-3.3.5/bin/winutils.exe" +$UberjarName = "datajure.jar" +$WinutilsName = "winutils.exe" +$JvmOpts = @( + "-Dhadoop.home.dir=$DatajureDir" + "--add-opens=java.base/java.nio=ALL-UNNAMED" + "--add-opens=java.base/java.net=ALL-UNNAMED" + "--add-opens=java.base/java.lang=ALL-UNNAMED" + "--add-opens=java.base/java.util=ALL-UNNAMED" + "--add-opens=java.base/java.util.concurrent=ALL-UNNAMED" + "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED" +) -join " " + +if (!(Test-Path $DatajureDir -PathType Container)) { + New-Item $DatajureDir -ItemType Directory +} +Set-Location -Path $DatajureDir +# download uberjar +if (!(Test-Path $UberjarName -PathType Leaf) -or $ForceDownload) { + if (!(Test-Path $DownloadDir -PathType Container)) { + New-Item $DownloadDir -ItemType Directory + } + Set-Location -Path $DownloadDir + if ($UseProxy) { + Write-Output "Downloading $UberjarDownloadUrl to $DownloadDir via proxy server $HttpsProxy ..." + Invoke-WebRequest -OutFile $UberjarName -Uri $UberjarDownloadUrl -Proxy "$HttpsProxy" + } else { + Write-Output "Downloading $UberjarDownloadUrl to $DownloadDir ..." + Invoke-WebRequest -OutFile $UberjarName -Uri $UberjarDownloadUrl + } + Write-Output "Moving $DownloadDir\$UberjarName to $DatajureDir\$UberjarName" + Move-Item -Path "$UberjarName" -Destination "$DatajureDir\$UberjarName" + Write-Output "Successfully downloaded Datajure REPL uberjar in $DatajureDir\$UberjarName" +} +# download winutils +if (!(Test-Path "bin\$WinutilsName" -PathType Leaf) -or $ForceDownload) { + if (!(Test-Path $DownloadDir -PathType Container)) { + New-Item $DownloadDir -ItemType Directory + } + Set-Location -Path $DownloadDir + if ($UseProxy) { + Write-Output "Downloading $WinutilsDownloadUrl to $DownloadDir via proxy server $HttpsProxy ..." + Invoke-WebRequest -OutFile $WinutilsName -Uri $WinutilsDownloadUrl -Proxy "$HttpsProxy" + } else { + Write-Output "Downloading $WinutilsDownloadUrl to $DownloadDir ..." + Invoke-WebRequest -OutFile $WinutilsName -Uri $WinutilsDownloadUrl + } + if (!(Test-Path "$DatajureDir\bin" -PathType Container)) { + New-Item "$DatajureDir\bin" -ItemType Directory + } + Write-Output "Moving $DownloadDir\$WinutilsName to $DatajureDir\bin\$WinutilsName" + Move-Item -Path "$WinutilsName" -Destination "$DatajureDir\bin\$WinutilsName" + Write-Output "Successfully downloaded Hadoop Windows Utilities in $DatajureDir\bin\$WinutilsName" +} + +Set-Location -Path $OriginalDir +if (!$ScriptPath) { + cmd.exe /c "java $JvmOpts -jar $DatajureDir\$UberjarName" +} else { + cmd.exe /c "java $JvmOpts -jar $DatajureDir\$UberjarName $ScriptPath" +} \ No newline at end of file