diff --git a/mkdocs-automate.exe b/mkdocs-automate.exe new file mode 100644 index 0000000..be54e50 Binary files /dev/null and b/mkdocs-automate.exe differ diff --git a/mkdocs-automate.ps1 b/mkdocs-automate.ps1 new file mode 100644 index 0000000..fcace18 --- /dev/null +++ b/mkdocs-automate.ps1 @@ -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() \ No newline at end of file