TxdDocker.psm1
if (-not (Test-Path env:TXD_DOCKER_ROOT)) { if($isLinux){ $env:TXD_DOCKER_ROOT = '/docker/laravel_docker' }else{ $env:TXD_DOCKER_ROOT = 'C:\docker\laravel_docker' } } function Get-DockerEnv{ $env = ($env:TXD_DOCKER_ROOT+'\.env') $envExists = Test-Path ($env) -PathType Leaf if(!$envExists){ Write-Error ".env file not found!"; } $ini = [PSCustomObject]@{}; foreach($line in Get-Content $env) { $withoutComments = $line.Split("#") $parts = $withoutComments[0].Split("=") if($parts.Count -gt 1){ Add-member -InputObject $ini -NotePropertyName $parts[0] -NotePropertyValue ($parts[1] -replace "\\", "/") } } if(-not (Get-Member -Name 'WEBSITE_DOMAIN' -InputObject $ini)){ Add-member -InputObject $ini -NotePropertyName "WEBSITE_DOMAIN" -NotePropertyValue "dev.jsmservice.eu" } return $ini } $projectName = (Get-DockerEnv).COMPOSE_PROJECT_NAME if (-not (Test-Path env:TXD_CONTAINER_NAME)) { $env:TXD_CONTAINER_NAME = 'php-dev' } if (-not (Test-Path env:TXD_HOST_FOLDER_PATH)) { $env:TXD_HOST_FOLDER_PATH = "\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\${projectName}_sites\_data" } function Read-YesNo{ param($question, [switch]$defaultToYes) $sample = " (y/N)" if($defaultToYes){ $sample =" (Y/n)" } do { $answer = Read-Host ($question+$sample) } until ("y","n","Y","N","" -ccontains $answer) if("y","Y" -ccontains $answer){ return $true } if($defaultToYes -and ($answer -eq "")){ return $true } return $false } function Open-DockerDev{ param( $path ) $dockerEnv = Get-DockerEnv if(("" -eq ("{0}" -f $path).Trim())){ $devPath = "/root" }else{ $devPath = (Join-Path $dockerEnv.WEBSITE_LOCAL_PATH $path) -replace "\\", "/" } $containerName = ((Format-Hex -InputObject $env:TXD_CONTAINER_NAME).Bytes |ForEach-Object ToString X2) -join "" invoke-expression "code --remote=attached-container+$containerName $devPath" } function Open-DockerDevShell{ param( $path ) $dockerEnv = Get-DockerEnv $devPath = (Join-Path $dockerEnv.WEBSITE_LOCAL_PATH $path) -replace "\\", "/" $shell = $dockerEnv.DEFAULT_SHELL invoke-expression "docker exec -it -w $devPath php-dev $shell" } function Open-DockerHostFolder{ param( $path ) $fullPath = join-path $env:TXD_HOST_FOLDER_PATH $path invoke-expression "start $fullPath" } function Open-DockerGitEye{ invoke-expression "docker run --rm -it -v txd_giteye_homedir:/root -v txd_docker_sites:/var/www --name txddocker_giteye txddocker/giteye" } $dockerdev_block = { param($commandName,$parameterName, $wordToComplete) $subfolder = "" $matchingWord = $wordToComplete if($wordToComplete.Length -eq 0){ $subfolder = "" }else{ if($wordToComplete -match '(.*)\/(.*)'){ $subfolder = $Matches.1 $matchingWord = $Matches.2 } } $fullpath = (join-path $env:TXD_HOST_FOLDER_PATH $subfolder) $list = Get-ChildItem -directory $fullpath | ForEach-Object {$_.Name} if($matchingWord.Length -gt 0 ){ $list = $list | Select-String -Pattern $matchingWord } $list | Sort-Object | ForEach-Object { if($subfolder.Length -eq 0){ $fullParam = (Join-path $_ "/") -replace "\\", "/" }else{ $fullParam = (Join-path $subfolder $_ "/") -replace "\\", "/" } New-Object -Type System.Management.Automation.CompletionResult -ArgumentList $fullParam, $_, "ParameterValue", $fullParam } } Register-ArgumentCompleter -CommandName Open-DockerDev -ParameterName "path" -ScriptBlock $dockerdev_block Register-ArgumentCompleter -CommandName Open-DockerDevShell -ParameterName "path" -ScriptBlock $dockerdev_block Register-ArgumentCompleter -CommandName Open-DockerHostFolder -ParameterName "path" -ScriptBlock $dockerdev_block Export-ModuleMember -Function Get-DockerEnv, Open-DockerDev, Open-DockerDevShell, Open-DockerHostFolder, Open-DockerGitEye -Alias * |