| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- ########################################
- Set-StrictMode -Version 3.0 #
- $ErrorActionPreference = "Stop" #
- ########################################
- [string]$FirmwareVersion = $args[0]
- [string]$ReleaseVersion = $args[1]
- [string]$RepoSelf = $args[2]
- [string]$RepoUnleashed = $args[3]
- [bool]$ForGithubActions = $true
- ################################################################################################################################
- function CleanInput
- {
- param(
- [string]
- $DurtyString
- )
- return $DurtyString -replace ('[^a-zA-Z\d_\-\,\.\t\n\r\:\;]', '')
- }
- ################################################################################################################################
- $Output = @{
- RELEASE_VERSION = $ReleaseVersion
- CURRENT_TAG = $FirmwareVersion
- REMOTE_TAG_INFO = $FirmwareVersion
- RELEASE_TYPE = 0
- }
- $Release = @(`
- (CleanInput `
- (gh release list -L 1 --repo $RepoUnleashed)`
- ) -split "`t")
- $FirmwareVersionNumber = 0
- $StoredFirmwareVersionNumber = 0
- $LatestFirmware = $Release[2]
- if ($Release[2] -match '\-(\d+)$')
- {
- $FirmwareVersionNumber = [int]($Matches[1])
- }
- else
- {
- Write-Error ('::error title=Invalid firmware number::Error during execution this tags {0}' -f $FirmwareVersionNumber)
- exit 1
- }
- if ($FirmwareVersion -match '\-(\d+)$')
- {
- $StoredFirmwareVersionNumber = [int]($Matches[1])
- }
- else
- {
- Write-Error ('::error title=Invalid STORED firmware number::Error during execution this version {0}' -f $FirmwareVersion)
- exit 1
- }
- $Delta = ( [DateTime]::Now - [DateTime]::Parse($Release[3]))
- Write-Host "FirmwareVersionNumber: $FirmwareVersionNumber, Delta: $Delta"
- #exit 0
- $NewVersionFw = $false
- Write-Host ('Latest firmware {0}' -f $FirmwareVersionNumber)
- $Output.REMOTE_TAG_INFO = Write-Host ('[{0}]({1}/releases/tag/{2})' `
- -f $LatestFirmware, $RepoUnleashed, $LatestFirmware)
- if (($FirmwareVersionNumber -gt $StoredFirmwareVersionNumber) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
- {
- $Output.REMOTE_TAG_INFO = $LatestFirmware
- $NewVersionFw = $true
- }
- elseif ($FirmwareVersionNumber -lt $StoredFirmwareVersionNumber)
- {
- Write-Error ('::error title=Invalid check of stored::Version in repo: {0}, but we think it is {1}' `
- -f $FirmwareVersionNumber, $StoredFirmwareVersionNumber)
- exit 1
- }
- $PublishDates = (gh api -H "Accept: application/vnd.github+json" `
- -H "X-GitHub-Api-Version: 2022-11-28" "/repos/$( $RepoSelf )/releases?per_page=1" `
- | ConvertFrom-Json | Select-Object published_at, created_at)
- $LastPublished = ($null -eq $PublishDates.published_at ? $PublishDates.created_at : $PublishDates.published_at)
- $Delta = ([DateTime]::Now - $LastPublished)
- $Release = (gh api -H "Accept: application/vnd.github+json" `
- -H "X-GitHub-Api-Version: 2022-11-28" "/repos/$( $RepoSelf )/tags?per_page=1" `
- | ConvertFrom-Json).name
- Write-Host ('Release {0}' -f $Release) -ForegroundColor Gray -BackgroundColor Blue
- $LatestTag = $Release.Substring(1)
- $CurrentVersion = [version]::Parse($ReleaseVersion)
- $ParsedRepoVersion = [version]::Parse($LatestTag)
- Write-Host ('Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion) `
- -ForegroundColor Gray -BackgroundColor Blue
- Write-Debug ('::debug Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion)
- if (($CurrentVersion -lt $ParsedRepoVersion) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
- {
- $Tag = ('{0}.{1}.{2}' -f $ParsedRepoVersion.Major, $ParsedRepoVersion.Minor, $ParsedRepoVersion.Build)
- $Output.RELEASE_VERSION = $Tag
- $Output.RELEASE_TYPE = 2
- Write-Host ('::warning title=New release!::Release {0}' -f $Tag)
- }
- elseif ( $NewVersionFw )
- {
- $Tag = ('{0}.{1}.{2}' -f $CurrentVersion.Major, $CurrentVersion.Minor, ($CurrentVersion.Build + 1))
- $Output.RELEASE_VERSION = $Tag
- $Output.RELEASE_TYPE = 1
- Write-Host ('::warning title=Firmware was changed!::New version is {0}, need to create release {1}' -f $LatestFirmware, $Tag)
- }
- elseif ( ($Delta -gt [TimeSpan]::FromMinutes(10)) -and ($CurrentVersion -gt $ParsedRepoVersion))
- {
- Write-Host ('::warning title=Invalid version!::Version in settings: {0}, but repo version is {1}. Going to change variable' `
- -f $CurrentVersion, $ParsedRepoVersion)
- $Output.RELEASE_VERSION = $ParsedRepoVersion
- $Output.RELEASE_TYPE = 3
- }
- else
- {
- # none to release
- Write-Host 'No new versions, sorry'
- }
- $Output.CURRENT_TAG = $LatestTag
- if($ForGithubActions) {
- $Plain = New-Object -TypeName "System.Text.StringBuilder";
- $Output.GetEnumerator() | ForEach-Object {
- [void]$Plain.Append($_.Key)
- [void]$Plain.Append('=')
- [void]$Plain.AppendLine($_.Value)
- }
- Write-Output $Plain.ToString()
- } else {
- $Output
- }
|