version-check.yml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. name: "Version check for NEW release"
  2. run-name: " Version check for NEW release ${{ inputs.DEPLOY_TARGET }} by @${{ github.ACTOR }}"
  3. on:
  4. workflow_dispatch:
  5. push:
  6. branches:
  7. - master
  8. schedule:
  9. - cron: "*/30 * * * *"
  10. permissions:
  11. contents: write
  12. jobs:
  13. pull-request:
  14. concurrency:
  15. group: check-for-new-versions
  16. cancel-in-progress: false
  17. runs-on: ubuntu-latest
  18. env:
  19. REPO_UNLEASHED: ${{ vars.REPO_UNLEASHED }}
  20. RELEASE_VERSION: ${{ vars.RELEASE_VERSION }}
  21. FIRMWARE_VERSION: ${{ vars.FIRMWARE_VERSION }}
  22. REPO_SELF: ${{ vars.REPO_SELF }}
  23. CHECKOUT_DIR: "firmware"
  24. steps:
  25. - name: Copy Repo Files
  26. uses: actions/checkout@v3
  27. with:
  28. repository: "${{ env.REPO_SELF }}"
  29. path: "${{ env.CHECKOUT_DIR }}"
  30. clean: "true"
  31. submodules: "true"
  32. token: ${{ secrets.FLIPPER_TOKEN }}
  33. - name: Check firmware release
  34. shell: pwsh
  35. env:
  36. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  37. run: |
  38. $Output = (.github/check-version.ps1)
  39. Write-Output("RELEASE_VERSION=$Output.ReleaseVersion") >> $env:GITHUB_ENV
  40. Write-Output("CURRENT_TAG=$Output.CurrentTag") >> $env:GITHUB_ENV
  41. Write-Output("REMOTE_TAG_INFO=$Output.RemoteTagInfo") >> $env:GITHUB_ENV
  42. Write-Output("RELEASE_TYPE=$Output.ReleaseType") >> $env:GITHUB_ENV
  43. # function CleanInput
  44. # {
  45. # param(
  46. # [string]
  47. # $DurtyString
  48. # )
  49. # return $DurtyString -replace ('[^a-zA-Z\d_\-\,\.\t\n\r\:\;]', '')
  50. # }
  51. # $Release = @(`
  52. # (CleanInput `
  53. # (gh release list -L 1 --repo '${{ env.REPO_UNLEASHED }}')`
  54. # ) -split "`t")
  55. # $FirmwareVersionNumber = 0
  56. # $StoredFirmwareVersionNumber = 0
  57. # if ($Release[2] -match '\-(\d+)$')
  58. # {
  59. # $FirmwareVersionNumber = [int]($Matches[1])
  60. # }
  61. # else
  62. # {
  63. # Write-Error ('::error title=Invalid firmware number::Error during execution this tags {0}' -f $FirmwareVersionNumber)
  64. # exit 1
  65. # }
  66. # if ('${{ env.FIRMWARE_VERSION }}' -match '\-(\d+)$')
  67. # {
  68. # $StoredFirmwareVersionNumber = [int]($Matches[1])
  69. # }
  70. # else
  71. # {
  72. # Write-Error ('::error title=Invalid STORED firmware number::Error during execution this version {0}' -f '${{ env.FIRMWARE_VERSION }}')
  73. # exit 1
  74. # }
  75. # $LatestFirmware = CleanInput ((CleanInput (gh release list -L 1 --repo '${{ env.REPO_SELF }}') -replace '\t', ';') | `
  76. # ConvertFrom-Csv -Delimiter ';' -Header name, flag, tag).tag
  77. # $Delta = ( [DateTime]::Now - [DateTime]::Parse($Release[3]) )
  78. # $NewVersionFw = $false
  79. # Write-Host ('Latest firmware {0}' -f $LatestFirmware) -ForegroundColor Gray -BackgroundColor Magenta
  80. # Write-Debug ('::debug LatestFirmware {0}' -f $LatestFirmware)
  81. # Write-Output ('REMOTE_TAG_INFO=[{0}]({1}/releases/tag/{2})' -f $LatestFirmware, '${{ env.REPO_UNLEASHED }}', $LatestFirmware) >> $env:GITHUB_ENV
  82. # if (($FirmwareVersionNumber -gt $StoredFirmwareVersionNumber) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
  83. # {
  84. # Write-Debug ('::debug LatestFirmware {0}' -f $LatestFirmware)
  85. # Write-Output ('FIRMWARE_VERSION={0}' -f $LatestFirmware) >> $env:GITHUB_ENV
  86. # $NewVersionFw = $true
  87. # }
  88. # elseif ($FirmwareVersionNumber -lt $StoredFirmwareVersionNumber)
  89. # {
  90. # Write-Error ('::error title=Invalid check of stored::Version in repo: {0}, but we think it is {1}' -f $FirmwareVersionNumber, $StoredFirmwareVersionNumber)
  91. # exit 1
  92. # }
  93. # $LastPublished = (gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" '/repos/${{ vars.REPO_SELF }}/releases?per_page=1' | ConvertFrom-Json).published_at
  94. # $Delta = ([DateTime]::Now - $LastPublished)
  95. # $Release = (gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" '/repos/${{ vars.REPO_SELF }}/tags?per_page=1' | ConvertFrom-Json).name
  96. # Write-Host ('Release {0}' -f $Release) -ForegroundColor Gray -BackgroundColor Magenta
  97. # $LatestTag = $Release.Substring(1)
  98. # $CurrentVersion = [version]::Parse('${{ env.RELEASE_VERSION }}')
  99. # $ParsedRepoVersion = [version]::Parse($LatestTag)
  100. # Write-Host ('Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion) -ForegroundColor Gray -BackgroundColor Magenta
  101. # Write-Debug ('::debug Current tag:Repos tag {0}, {1}' -f $CurrentVersion, $ParsedRepoVersion)
  102. # if (($CurrentVersion -lt $ParsedRepoVersion) -and ( $Delta -gt [TimeSpan]::FromMinutes(10)))
  103. # {
  104. # $Tag = ('{0}.{1}.{2}' -f $ParsedRepoVersion.Major, $ParsedRepoVersion.Minor, $ParsedRepoVersion.Build)
  105. # Write-Output ('RELEASE_VERSION={0}' -f $Tag) >> $env:GITHUB_ENV
  106. # Write-Output ('RELEASE_TYPE=2' -f $Tag) >> $env:GITHUB_ENV
  107. # Write-Output ('::warning title=New release!::Release {0}' -f $Tag)
  108. # }
  109. # elseif ( $NewVersionFw )
  110. # {
  111. # $Tag = ('{0}.{1}.{2}' -f $CurrentVersion.Major, $CurrentVersion.Minor, ($CurrentVersion.Build + 1))
  112. # Write-Output ('RELEASE_VERSION={0}' -f $Tag) >> $env:GITHUB_ENV
  113. # Write-Output ('RELEASE_TYPE=1' -f $Tag) >> $env:GITHUB_ENV
  114. # Write-Output ('::warning title=Firmware was changed!::New version is {0}, creating release {1}' -f $LatestFirmware, $Tag)
  115. # }
  116. # elseif ( ($Delta -gt [TimeSpan]::FromMinutes(10)) -and ($CurrentVersion -gt $ParsedRepoVersion))
  117. # {
  118. # Write-Output ('::warning title=Invalid version!::Version in settings: {0}, but repo version is {1}. Going to change variable' -f $CurrentVersion, $ParsedRepoVersion)
  119. # Write-Output ('RELEASE_VERSION={0}' -f $ParsedRepoVersion) >> $env:GITHUB_ENV
  120. # Write-Output ('RELEASE_TYPE=3' -f $Tag) >> $env:GITHUB_ENV
  121. # }
  122. # else
  123. # {
  124. # # none to release
  125. # Write-Host 'No new versions, sorry'
  126. # }
  127. # Write-Output ('CURRENT_TAG={0}' -f $LatestTag) >> $env:GITHUB_ENV
  128. - name: Update Firmware variable and create UPDATE release if necessary
  129. if: ${{ success() && env.RELEASE_TYPE == 1 }}
  130. env:
  131. GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
  132. OWNER: ${{ github.repository_owner }}
  133. run: |
  134. gh release create 'v${{ env.RELEASE_VERSION }}' --latest --draft \
  135. --notes 'Rebuild with new version of firmware.\n\nSee: [CHANGELOG](${{ env.FIRMWARE_VERSION }}/blob/dev/CHANGELOG.md)\n${{ env.REMOTE_TAG_INFO}}' \
  136. --title 'Minor update v${{ env.RELEASE_VERSION }}' --verify-tag -R '${{ env.REPO_SELF }}'
  137. gh variable set FIRMWARE_VERSION -b '${{ env.FIRMWARE_VERSION }}' -R '${{ env.REPO_SELF }}'
  138. gh variable set RELEASE_VERSION -b '${{ env.RELEASE_VERSION }}' -R '${{ env.REPO_SELF }}'
  139. - name: Update release variable and create NEW release if necessary
  140. if: ${{ success() && env.RELEASE_TYPE == 2 }}
  141. env:
  142. GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
  143. OWNER: ${{ github.repository_owner }}
  144. run: |
  145. gh release create 'v${{ env.RELEASE_VERSION }}' --notes-start-tag 'v${{ env.CURRENT_TAG }}' --generate-notes --draft --latest \
  146. --notes 'New version is rolling out!' --verify-tag --title 'Release v${{ env.RELEASE_VERSION }}' -R '${{ env.REPO_SELF }}'
  147. gh variable set FIRMWARE_VERSION -b '${{ env.FIRMWARE_VERSION }}' -R '${{ env.REPO_SELF }}'
  148. gh variable set RELEASE_VERSION -b '${{ env.RELEASE_VERSION }}' -R '${{ env.REPO_SELF }}'
  149. - name: Current settings in repo invalid. Changing
  150. if: ${{ success() && env.RELEASE_TYPE > 2 }}
  151. env:
  152. GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
  153. OWNER: ${{ github.repository_owner }}
  154. run: |
  155. gh variable set RELEASE_VERSION -b ${{ env.RELEASE_VERSION }} -R ${{ env.REPO_SELF }}
  156. # EOF