added ps1 script to automate dev side mkdocs

This commit is contained in:
drifty
2025-01-22 16:28:58 +05:30
parent c78313a7f4
commit 50796aff5e
2 changed files with 152 additions and 0 deletions

BIN
mkdocs-automate.exe Normal file

Binary file not shown.

152
mkdocs-automate.ps1 Normal file
View File

@@ -0,0 +1,152 @@
Add-Type -AssemblyName System.Windows.Forms
# Set the verbose preference to display verbose messages
$VerbosePreference = 'Continue'
# Create the form
$form = New-Object System.Windows.Forms.Form
$form.Text = "drifty's mkdocs automation"
$form.Width = 340
$form.Height = 320 # Increased height for new controls
# Initialize variables for mkdocs path and running processes
$script:mkdocsPath = $null
$script:RunningProcesses = @()
# Add controls for mkdocs.exe selection
$label = New-Object System.Windows.Forms.Label
$label.Text = "mkdocs.exe path:"
$label.Top = 10
$label.Left = 10
$label.Width = 100
$textBoxMkdocsPath = New-Object System.Windows.Forms.TextBox
$textBoxMkdocsPath.Top = 40
$textBoxMkdocsPath.Left = 10
$textBoxMkdocsPath.Width = 200
$buttonBrowse = New-Object System.Windows.Forms.Button
$buttonBrowse.Text = "Browse"
$buttonBrowse.Top = 40
$buttonBrowse.Left = 220
$buttonBrowse.Width = 80
$buttonBrowse.Add_Click({
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.Filter = "Executable files (*.exe)|*.exe"
$openFileDialog.Title = "Select mkdocs.exe"
if ($openFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$textBoxMkdocsPath.Text = $openFileDialog.FileName
$script:mkdocsPath = $openFileDialog.FileName
}
})
# Create buttons
$button1 = New-Object System.Windows.Forms.Button
$button1.Text = "Serve"
$button1.Width = 120
$button1.Height = 40
$button1.Top = 80
$button1.Left = [math]::Round(($form.ClientSize.Width - $button1.Width) / 2)
$button2 = New-Object System.Windows.Forms.Button
$button2.Text = "Build & Push"
$button2.Width = 120
$button2.Height = 40
$button2.Top = 125
$button2.Left = [math]::Round(($form.ClientSize.Width - $button2.Width) / 2)
$buttonStopProcesses = New-Object System.Windows.Forms.Button
$buttonStopProcesses.Text = "Stop Processes"
$buttonStopProcesses.Width = 120
$buttonStopProcesses.Height = 40
$buttonStopProcesses.Top = 170
$buttonStopProcesses.Left = [math]::Round(($form.ClientSize.Width - $buttonStopProcesses.Width) / 2)
$buttonExit = New-Object System.Windows.Forms.Button
$buttonExit.Text = "Exit"
$buttonExit.Width = 120
$buttonExit.Height = 40
$buttonExit.Top = 215
$buttonExit.Left = [math]::Round(($form.ClientSize.Width - $buttonExit.Width) / 2)
# Add functions
function Run-Commands1 {
if (-not $script:mkdocsPath) {
[System.Windows.Forms.MessageBox]::Show("Please select mkdocs.exe first.", "Error", "OK", "Error")
return
}
$mkdocsDir = Split-Path $script:mkdocsPath -Parent
Write-Verbose "Changing directory to $mkdocsDir"
Set-Location $mkdocsDir
Write-Verbose "Opening http://127.0.0.1:8000"
Start-Process "http://127.0.0.1:8000" -WindowStyle Hidden
Write-Verbose "Starting MkDocs server"
$process = Start-Process $script:mkdocsPath -ArgumentList "serve" -WindowStyle Hidden -PassThru
$script:RunningProcesses += $process.Id
}
function Run-Commands2 {
if (-not $script:mkdocsPath) {
[System.Windows.Forms.MessageBox]::Show("Please select mkdocs.exe first.", "Error", "OK", "Error")
return
}
$mkdocsDir = Split-Path $script:mkdocsPath -Parent
Write-Verbose "Changing directory to $mkdocsDir"
Set-Location $mkdocsDir
Write-Verbose "Building MkDocs project"
Start-Process $script:mkdocsPath -ArgumentList "build" -WindowStyle Hidden -Wait
Write-Verbose "Copying docs folder"
Start-Process xcopy.exe -ArgumentList '/s /e /y "docs" "C:\Main\repos\materialmkdocs\docs"' -WindowStyle Hidden -Wait
Write-Verbose "Copying site folder"
Start-Process xcopy.exe -ArgumentList '/s /e /y "site" "C:\Main\repos\materialmkdocs\site"' -WindowStyle Hidden -Wait
Write-Verbose "Copying mkdocs.yml"
Start-Process xcopy.exe -ArgumentList '/s /e /y "mkdocs.yml" "C:\Main\repos\materialmkdocs\mkdocs.yml"' -WindowStyle Hidden -Wait
Set-Location "C:\Main\repos\materialmkdocs"
Write-Verbose "Committing changes"
Start-Process git -ArgumentList 'commit', '-a', '-m', "$([datetime]::Now.ToString('yyyy-MM-dd HH:mm:ss'))", '--verbose' -WindowStyle Hidden -Wait
Write-Verbose "Pushing changes"
Start-Process git -ArgumentList 'push' -WindowStyle Hidden -Wait
}
function Stop-RunningProcesses {
Write-Verbose "Stopping all processes"
$script:RunningProcesses | ForEach-Object {
try { Stop-Process -Id $_ -Force -ErrorAction Stop }
catch { Write-Verbose "Process $_ already stopped" }
}
$script:RunningProcesses = @()
Get-Process "mkdocs" -ErrorAction SilentlyContinue | Stop-Process -Force
}
# Add event handlers
$button1.Add_Click({ Run-Commands1 })
$button2.Add_Click({ Run-Commands2 })
$buttonStopProcesses.Add_Click({ Stop-RunningProcesses })
$buttonExit.Add_Click({ $form.Close() })
$form.Add_FormClosing({ Stop-RunningProcesses })
# Add controls to form
$form.Controls.AddRange(@(
$label,
$textBoxMkdocsPath,
$buttonBrowse,
$button1,
$button2,
$buttonStopProcesses,
$buttonExit
))
# Show the form
$form.ShowDialog()