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