Private/Configure-AzureDevOps.ps1



function Install-DevOps {

    $message = "Connecting to Azure DevOps Organisation"
    
    if ($adoOrg -eq "") {
        do {
            Write-Host "Enter the <NAME> of your Azure DevOps Organisation only the NAME - not the full path!"
            $adoOrg = Read-Host -Prompt "Depending on your instance, either dev.azure.com/<NAME> or <NAME>.visualstudio.com"
        }until ($adoOrg -ne "")   
        
    }

    $global:projectFile.ADOOrgName = $adoOrg
    $global:projectFile | ConvertTo-Json | Set-Content ("$global:projectLocation\$global:gitRepo.json") 

    $msg = "You will now be redirected to a Browser to Login to your Azure DevOps Organisation"
    $title = "Setting up Azure DevOps"

    do {
        $sel = Invoke-Menu -MenuTitle "----$msg ------" -MenuOptions "Continue", "Quit"
        
    } until ($sel -ge 0)

    if ($sel -eq 1) {
        Write-Host "Exiting setup"
        return
    }

    $azSubs = az login --allow-no-subscriptions

    Write-Host ""
    [console]::ForegroundColor = "White"
    if ($adoProject -ne "") {
        $azproj = az devops project show --organization https://dev.azure.com/$adoOrg --project $adoProject | ConvertFrom-Json
        [console]::ForegroundColor = "White"
    }
    
    if ($adoProject -eq "" -or !$azproj.url) {
        $msg = "Select existing or Create a new Azure DevOps Project"
        $title = "Setting up Azure DevOps"

        do {
            $sel = Invoke-Menu -MenuTitle "----$msg ------" -MenuOptions "Select", "Create", "Quit"
            
        } until ($sel -ge 0)

        if ($sel -eq 2) {
            return
        }

        if ($sel -eq 1) {
            if ($adoProject -eq "") {
                do {
                    $adoProject = Read-Host -Prompt "Please enter the Name of the Project you wish to Create"
                }until ($adoProject -ne "")   
            }
            $global:projectFile.ADOProject = $adoProject            
        
            $message = "Creating DevOps Project $adoProject"
            Write-Host $message
            try {
                az devops project create --name $adoProject --organization=https://dev.azure.com/$adoOrg --process Scrum
                $adoCreate = $true
            }
            catch {
                $global:projectFile.ADOConfigured = "Error"
            }
                
        }
        else {
            $selection = az devops project list --organization=https://dev.azure.com/$adoOrg --query '[value][].{Name:name}' --output json | Out-String | ConvertFrom-Json
            $options = $selection | ForEach-Object { "$($_.Name)" }
            do {
                $sel = Invoke-Menu -MenuTitle "---- Select the Project you wish to Use ------" -MenuOptions $options
                $adoProject = $selection[$sel].Name 
            } until ($adoProject -ne "")
            $global:projectFile.ADOProject = $adoProject  
            az devops configure --defaults organization=https://dev.azure.com/$adoOrg project=$adoProject
        }
        $global:projectFile | ConvertTo-Json | Set-Content ("$global:projectLocation\$global:gitRepo.json") 
    }

    if (($adoRepo -eq $adoProject) -and $adoCreate) {
        az devops configure --defaults organization=https://dev.azure.com/$adoOrg project=$adoProject
        $repo = az repos show --repository $adoRepo | Out-String | ConvertFrom-Json
    }
    else {
        Write-Host ""

        #Check for blank repo
        if ($adoRepo -eq "") {
            do {
                $adoRepo = Read-Host -Prompt "Please enter a Name for the Git Repository you wish to Create"
            }until ($adoRepo -ne "")
        }

        $message = "Creating Git Repo $adoRepo"
        Write-Host $message

        az devops configure --defaults organization=https://dev.azure.com/$adoOrg project=$adoProject
        
        $repo = az repos create --name $adoRepo --project $adoProject --organization=https://dev.azure.com/$adoOrg | Out-String | ConvertFrom-Json
        if (!$repo.WebUrl) {
            $global:projectFile.ADOConfigured = "Error"
            $global:projectFile.gitRepo = ""
            $global:projectFile | ConvertTo-Json | Set-Content ("$global:projectLocation\$global:gitRepo.json") 
            Throw "Error"
        }
        else {
            $global:projectFile.gitRepo = $adoRepo
        }
    }

    git remote remove origin
    git remote add origin $repo.webUrl

    git add -A
    git commit -m "Initial Commit"
    git push --set-upstream origin master

    az repos show --repository $repo.id --open

    pause
}

function Invoke-AzureDevOps {
    $adoOrg = $global:projectFile.ADOOrgName
    $adoProject = $global:projectFile.ADOProject
    $adoRepo = $global:projectFile.gitRepo.Replace(' ', '')

    try {
        if ($adoProject -eq "" -or $adoRepo -eq "" -or $adoOrg -eq "") {
            Install-DevOps
            $global:projectFile.ADOConfigured = "True"
            $global:projectFile | ConvertTo-Json | Set-Content ("$global:projectLocation\$global:gitRepo.json")             
        }
        else {
            Write-Host Azure DevOps is already configured
            pause
        }
    }
    catch {
        $global:projectFile.ADOConfigured = "Error"
        $global:projectFile | ConvertTo-Json | Set-Content ("$global:projectLocation\$global:gitRepo.json") 
        pause
    } 
}