-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[build] create powershell file for creating Windows dev environment
- Loading branch information
1 parent
a2ff220
commit 3792243
Showing
1 changed file
with
165 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# 1. Open PowerShell as an Administrator | ||
# 2. Change directory to where you want Selenium repo to be cloned to | ||
# 3. Execute: `Set-ExecutionPolicy Bypass -Scope Process -Force` | ||
# 4. Run this script in the PowerShell terminal | ||
|
||
Function Install-ChocoPackage { | ||
param ( | ||
[string]$PackageName, | ||
[string]$ExecutableName, | ||
[string]$AdditionalParams = "" | ||
) | ||
|
||
Write-Host "Checking installation of $PackageName" | ||
if (-Not (Get-Command $ExecutableName -ErrorAction SilentlyContinue)) { | ||
Write-Host "Installing $PackageName..." | ||
choco install $PackageName -y $AdditionalParams | ||
refreshenv -Path ... | ||
} else { | ||
Write-Host "$PackageName is already installed." | ||
} | ||
} | ||
|
||
Function Install-JDK17 { | ||
$javacInstalled = Get-Command javac -ErrorAction SilentlyContinue | ||
$javaVersion = if ($javacInstalled) { & javac -version 2>&1 | Select-String -Pattern '"(\d+)' | ForEach-Object { $_.Matches.Groups[1].Value } } | ||
|
||
if (-Not $javacInstalled -or [int]$javaVersion -ne 17) { | ||
Install-ChocoPackage -PackageName "openjdk17" -ExecutableName "javac" | ||
} else { | ||
Write-Host "JDK 17 is already installed." | ||
} | ||
} | ||
|
||
Function Set-JavaEnvironmentVariable { | ||
$javacPath = Get-ChildItem -Path 'C:\Program Files\' -Recurse -Filter 'javac.exe' | Select-Object -First 1 -ExpandProperty DirectoryName | ||
$javaHome = Split-Path -Path $javacPath | ||
Write-Host "Set JAVA_HOME environment variable to $javaHome" | ||
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', $javaHome, [System.EnvironmentVariableTarget]::Machine) | ||
refreshenv -JAVA_HOME ... | ||
} | ||
|
||
Function Update-EnvironmentVariables { | ||
Param ([string]$VariableName, [string]$Value) | ||
$currentValue = [Environment]::GetEnvironmentVariable($VariableName, [EnvironmentVariableTarget]::User) | ||
if (-not $currentValue -or $currentValue -ne $Value) { | ||
Write-Host "Setting $VariableName to $Value" | ||
[Environment]::SetEnvironmentVariable($VariableName, $Value, [System.EnvironmentVariableTarget]::User) | ||
refreshenv -$VariableName ... | ||
} else { | ||
Write-Host "$VariableName is already set to $currentValue" | ||
} | ||
} | ||
|
||
Function Clone-Repository { | ||
param ( | ||
[string]$RepoUrl | ||
) | ||
$cloneChoice = Read-Host "Do you want to clone the repository at $RepoUrl (Y/N)" | ||
if ($cloneChoice -eq 'Y' -or $cloneChoice -eq 'y') { | ||
Write-Host "Cloning the repository from $RepoUrl into the current directory" | ||
$cloneOptions = "" | ||
$depthChoice = Read-Host -Prompt "Do you want [C]omplete or [S]hallow clone?" | ||
if ($depthChoice -ne 'C' -and $depthChoice -ne 'c') { | ||
$cloneOptions = "--depth=1" | ||
} | ||
|
||
$gitPath = "C:\Program Files\Git\bin\git.exe" | ||
Write-Host "$gitPath clone $RepoUrl $cloneOptions" | ||
& $gitPath clone $RepoUrl $cloneOptions | ||
} | ||
} | ||
|
||
Function Install-IntelliJ { | ||
Install-ChocoPackage -PackageName "intellijidea-community" -ExecutableName "idea64" | ||
|
||
$ideaPath = Get-ChildItem -Path "C:\Program Files\JetBrains" -Filter idea64.exe -Recurse -ErrorAction SilentlyContinue -Force | Select-Object -First 1 -ExpandProperty FullName | ||
& $ideaPath installPlugins "com.google.idea.bazel.ijwb" | ||
& $ideaPath installPlugins "google-java-format" | ||
|
||
Write-Host "Setting up Java Format IntelliJ plugin" | ||
|
||
$ideaDirectory = Split-Path -Path $ideaPath -Parent | ||
$intelliJInstallationFolder = Split-Path -Path $ideaDirectory -Parent | ||
$fullVersion = (Split-Path -Path $intelliJInstallationFolder -Leaf) -replace "IntelliJ IDEA Community Edition ", "" | ||
$intelliJVersionName = "IdeaIC" + (($fullVersion -split '\.')[0,1] -join '.') | ||
$ideaDataPath = Join-Path -Path $env:APPDATA -ChildPath "JetBrains\$intelliJVersionName" | ||
|
||
if (-not (Test-Path -Path $ideaDataPath)) { | ||
New-Item -ItemType Directory -Path $ideaDataPath -Force | Out-Null | ||
} | ||
|
||
$vmOptionsFilePath = Join-Path -Path $ideaDataPath -ChildPath "idea64.exe.vmoptions" | ||
if (-not (Test-Path -Path $vmOptionsFilePath)) { | ||
New-Item -ItemType File -Path $vmOptionsFilePath | Out-Null | ||
} | ||
$linesToAdd = @( | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED", | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", | ||
"--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" | ||
) | ||
Add-Content -Path $vmOptionsFilePath -Value $linesToAdd | ||
} | ||
|
||
Write-Host "Set Execution Policy for future processes; (Ignore Warning)" | ||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned | ||
|
||
Write-Host "Enable Developer Mode" | ||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1" | ||
|
||
Write-Host "Install Chocolatey if not already installed" | ||
if (-Not (Get-Command choco -ErrorAction SilentlyContinue)) { | ||
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 | ||
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) | ||
} | ||
|
||
Install-JDK17 | ||
Set-JavaEnvironmentVariable | ||
Install-ChocoPackage -PackageName "git" -ExecutableName "git" | ||
Install-ChocoPackage -PackageName "bazelisk" -ExecutableName "bazel" | ||
Install-ChocoPackage -PackageName "msys2" -ExecutableName "C:\tools\msys64\usr\bin\bash.exe" -AdditionalParams "--params '/InstallDir=C:\tools\msys64'" | ||
Update-EnvironmentVariables -VariableName "PATH" -Value "C:\tools\msys64\usr\bin" | ||
Update-EnvironmentVariables -VariableName "BAZEL_SH" -Value "C:\tools\msys64\usr\bin\bash.exe" | ||
Install-ChocoPackage -PackageName "visualstudio2022community" -ExecutableName "devenv" | ||
|
||
Start-Process "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" | ||
Read-Host -Prompt "Install C++ in Visual Studio then Press Enter to continue" | ||
|
||
$bazelVcPath = "C:\Program Files\Microsoft Visual Studio\2022\Community\VC" | ||
Update-EnvironmentVariables -VariableName "BAZEL_VC" -Value $bazelVcPath | ||
|
||
$vcToolsPath = Get-ChildItem -Path "$bazelVcPath\Tools\MSVC" | Sort-Object Name -Descending | Select-Object -First 1 | ||
$vcToolsVersion = $vcToolsPath.Name | ||
Update-EnvironmentVariables -VariableName "BAZEL_VC_FULL_VERSION" -Value $vcToolsVersion | ||
|
||
Clone-Repository -RepoUrl "https://github.com/SeleniumHQ/selenium.git" | ||
|
||
$longPathSupport = Read-Host "Do you want to change settings to better manage long file paths (recommended) (Y/N)" | ||
if ($longPathSupport -eq 'Y' -or $longPathSupport -eq 'y') | ||
{ | ||
Write-Host "Enable UNC Path support" | ||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor" /t REG_DWORD /f /v "DisableUNCCheck" /d "1" | ||
|
||
Write-Host "Enable Long Path support" | ||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /t REG_DWORD /f /v "LongPathsEnabled" /d "1" | ||
|
||
Write-Host "Enable creating short name versions of long file paths" | ||
fsutil 8dot3name set 0 | ||
|
||
Write-Host "Set bazel output to C:/tmp instead of nested inside project directory" | ||
Set-Content -Path ".bazelrc.windows.local" -Value "startup --output_user_root=C:/tmp" -Encoding UTF8 | ||
} | ||
|
||
$intelliJChoice = Read-Host "Do you want to install and setup IntelliJ (Y/N)" | ||
if ($intelliJChoice -eq 'Y' -or $intelliJChoice -eq 'y') | ||
{ | ||
Install-IntelliJ | ||
} | ||
|
||
$restartChoice = Read-Host "Do you want to restart the computer now? (Y/N)" | ||
if ($restartChoice -eq 'Y' -or $restartChoice -eq 'y') { | ||
Restart-Computer | ||
} |