Save-Gist.ps1 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. function Save-Gist {
  2. function Expand-PoshString() {
  3. [CmdletBinding()]
  4. param ( [parameter(ValueFromPipeline = $true)] [string] $str)
  5. "@`"`n$str`n`"@" | iex
  6. }
  7. function max_version($p) {
  8. try {
  9. $n = [version]$p.NuspecVersion
  10. $r = [version]$p.RemoteVersion
  11. if ($n -gt $r) { "$n" } else { "$r" }
  12. } catch {}
  13. }
  14. function diff_version($p) {
  15. try {
  16. $n = [version]$p.NuspecVersion
  17. $r = [version]$p.RemoteVersion
  18. return ($n -ne $r)
  19. } catch { return $false }
  20. }
  21. function md_title($Title, $Level=2 ) {
  22. ""
  23. "#"*$Level + $Title
  24. }
  25. function md_code($Text) {
  26. "`n" + '```'
  27. ($Text -join "`n").Trim()
  28. '```' + "`n"
  29. }
  30. function md_table($result, $Columns, $MaxErrorLength=150)
  31. {
  32. if (!$Columns) { $Columns = 'PackageName', 'Updated', 'Pushed', 'RemoteVersion', 'NuspecVersion', 'Error' }
  33. $res = '|' + ($Columns -join '|') + "|`r`n"
  34. $res += ((1..$Columns.Length | % { '|---' }) -join '') + "|`r`n"
  35. $result | % {
  36. $o = $_ | select `
  37. @{ N='PackageName'
  38. E={'[{0}](https://chocolatey.org/packages/{0}/{1})' -f $_.PackageName, (max_version $_) }
  39. },
  40. @{ N='Updated'
  41. E={
  42. $r = "[{0}](#{1})" -f $_.Updated, $_.PackageName.ToLower()
  43. $r += if (diff_version $_) { ' 🔸' }
  44. $r
  45. }
  46. },
  47. 'Pushed', 'RemoteVersion', 'NuspecVersion',
  48. @{ N='Error'
  49. E={
  50. $err = ("$($_.Error)" -replace "`r?`n", '; ').Trim()
  51. if ($err) {
  52. if ($err.Length -gt $MaxErrorLength) { $err = $err.Substring(0,$MaxErrorLength) + ' ...' }
  53. "[{0}](#{1})" -f $err, $_.PackageName.ToLower()
  54. }
  55. }
  56. }
  57. $res += ((1..$Columns.Length | % { $col = $Columns[$_-1]; '|' + $o.$col }) -join '') + "|`r`n"
  58. }
  59. $res
  60. }
  61. "Saving results to gist"
  62. if (!(gcm gist.bat -ea 0)) { "ERROR: No gist.bat found. Install it using: 'gem install gist'"; return }
  63. $log = gc gist.md.ps1 -Raw | Expand-PoshString
  64. $log | Out-File gist.md
  65. $params = @( "--filename 'Update-AUPackages.md'")
  66. $params += if ($Info.Options.Gist_ID) { "--update " + $Info.Options.Gist_ID } else { '--anonymous' }
  67. iex -Command "`$log | gist.bat $params"
  68. if ($LastExitCode) { "ERROR: Gist update failed with exit code: '$LastExitCode'" }
  69. }