check-version.ps1 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. ########################################
  2. Set-StrictMode -Version 3.0 #
  3. $ErrorActionPreference = "Stop" #
  4. ########################################
  5. [string]$FirmwareVersion = $args[0]
  6. [string]$ReleaseVersion = $args[1]
  7. [string]$RepoSelf = $args[2]
  8. [string]$RepoUnleashed = $args[3]
  9. ################################################################################################################################
  10. function CleanInput
  11. {
  12. param(
  13. [string]
  14. $DurtyString
  15. )
  16. return $DurtyString -replace ('[^a-zA-Z\d_\-\,\.\t\n\r\:\;]', '')
  17. }
  18. ################################################################################################################################
  19. $Output = @{
  20. ReleaseVersion = ''
  21. CurrentTag = ''
  22. RemoteTagInfo = ''
  23. ReleaseType = ''
  24. }
  25. $Release = @(`
  26. (CleanInput `
  27. (gh release list -L 1 --repo $RepoUnleashed)`
  28. ) -split "`t")
  29. $FirmwareVersionNumber = 0
  30. $StoredFirmwareVersionNumber = 0
  31. $LatestFirmware = $Release[2]
  32. if ($Release[2] -match '\-(\d+)$')
  33. {
  34. $FirmwareVersionNumber = [int]($Matches[1])
  35. }
  36. else
  37. {
  38. Write-Error ('::error title=Invalid firmware number::Error during execution this tags {0}' -f $FirmwareVersionNumber)
  39. exit 1
  40. }
  41. if ($FirmwareVersion -match '\-(\d+)$')
  42. {
  43. $StoredFirmwareVersionNumber = [int]($Matches[1])
  44. }
  45. else
  46. {
  47. Write-Error ('::error title=Invalid STORED firmware number::Error during execution this version {0}' -f $FirmwareVersion)
  48. exit 1
  49. }
  50. $Delta = ( [DateTime]::Now - [DateTime]::Parse($Release[3]))
  51. Write-Host "FirmwareVersionNumber: $FirmwareVersionNumber, Delta: $Delta"
  52. #exit 0
  53. $NewVersionFw = $false
  54. Write-Host ('Latest firmware {0}' -f $FirmwareVersionNumber)
  55. $Output.RemoteTagInfo = Write-Host ('[{0}]({1}/releases/tag/{2})' `
  56. -f $LatestFirmware, $RepoUnleashed, $LatestFirmware)
  57. if (($FirmwareVersionNumber -gt $StoredFirmwareVersionNumber) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
  58. {
  59. $Output.RemoteTagInfo = $LatestFirmware
  60. $NewVersionFw = $true
  61. }
  62. elseif ($FirmwareVersionNumber -lt $StoredFirmwareVersionNumber)
  63. {
  64. Write-Error ('::error title=Invalid check of stored::Version in repo: {0}, but we think it is {1}' `
  65. -f $FirmwareVersionNumber, $StoredFirmwareVersionNumber)
  66. exit 1
  67. }
  68. $LastPublished = (gh api -H "Accept: application/vnd.github+json" `
  69. -H "X-GitHub-Api-Version: 2022-11-28" "/repos/$( $RepoSelf )/releases?per_page=1" `
  70. | ConvertFrom-Json).published_at
  71. $Delta = ([DateTime]::Now - $LastPublished)
  72. $Release = (gh api -H "Accept: application/vnd.github+json" `
  73. -H "X-GitHub-Api-Version: 2022-11-28" "/repos/$( $RepoSelf )/tags?per_page=1" `
  74. | ConvertFrom-Json).name
  75. Write-Host ('Release {0}' -f $Release) -ForegroundColor Gray -BackgroundColor Blue
  76. $LatestTag = $Release.Substring(1)
  77. $CurrentVersion = [version]::Parse($ReleaseVersion)
  78. $ParsedRepoVersion = [version]::Parse($LatestTag)
  79. Write-Host ('Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion) `
  80. -ForegroundColor Gray -BackgroundColor Blue
  81. Write-Debug ('::debug Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion)
  82. if (($CurrentVersion -lt $ParsedRepoVersion) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
  83. {
  84. $Tag = ('{0}.{1}.{2}' -f $ParsedRepoVersion.Major, $ParsedRepoVersion.Minor, $ParsedRepoVersion.Build)
  85. $Output.ReleaseVersion = $Tag
  86. $Output.ReleaseType = 2
  87. Write-Host ('::warning title=New release!::Release {0}' -f $Tag)
  88. }
  89. elseif ( $NewVersionFw )
  90. {
  91. $Tag = ('{0}.{1}.{2}' -f $CurrentVersion.Major, $CurrentVersion.Minor, ($CurrentVersion.Build + 1))
  92. $Output.ReleaseVersion = $Tag
  93. $Output.ReleaseType = 1
  94. Write-Host ('::warning title=Firmware was changed!::New version is {0}, need to create release {1}' -f $LatestFirmware, $Tag)
  95. }
  96. elseif ( ($Delta -gt [TimeSpan]::FromMinutes(10)) -and ($CurrentVersion -gt $ParsedRepoVersion))
  97. {
  98. Write-Host ('::warning title=Invalid version!::Version in settings: {0}, but repo version is {1}. Going to change variable' `
  99. -f $CurrentVersion, $ParsedRepoVersion)
  100. $Output.ReleaseVersion = $ParsedRepoVersion
  101. $Output.ReleaseType = 3
  102. }
  103. else
  104. {
  105. # none to release
  106. Write-Host 'No new versions, sorry'
  107. }
  108. $Output.CurrentTag = $LatestTag
  109. $Output