Sfoglia il codice sorgente

Merge pull request #55 from DarkFlippers/master

Sync
DerSkythe 2 anni fa
parent
commit
4523b46ae8

+ 21 - 0
.github/release.yml

@@ -0,0 +1,21 @@
+changelog:
+  exclude:
+    labels:
+      - ignore-for-release
+  categories:
+    - title: Breaking Changes 🛠
+      labels:
+        - breaking-change
+    - title: Exciting New Features 🎉
+      labels:
+        - enhancement
+    - title: Bug fixes🧑‍🔧 🐞
+      labels:
+        - bug
+    - title: Doc improvements 📚
+      labels:
+        - docs
+        - documentation
+    - title: Other Changes
+      labels:
+        - "*"

+ 240 - 0
.github/workflows/build-with-firmware.yml

@@ -0,0 +1,240 @@
+name: "Build with Firmware"
+run-name: "Build ${{ inputs.DEPLOY_TARGET }} triggered by ${{ github.EVENT_NAME }} (@${{ github.ACTOR }})"
+
+on:
+  workflow_dispatch:
+    inputs:
+      version:
+        description: "Enter version to build or left empty for the NEXT version"
+        required: false
+        type: string
+#  push:
+#    paths:
+#      - .github/workflows/build-with-firmware.yml
+
+permissions:
+  contents: write
+  packages: write
+
+#concurrency:
+#  group: firmware-build-${{ vars.FIRMWARE_VERSION }}-${{ vars.RELEASE_VERSION }}
+#  cancel-in-progress: false
+
+jobs:
+  build-and-upload:
+    runs-on: ubuntu-latest
+    env:
+      REPO_SELF: ${{ vars.REPO_SELF }}
+      APP_PATH: "applications_user/subbrute"
+      RELATIVE_PATH: "applications/external/subbrute"
+      PREV_TAG: ""
+      APP_NAME: ""
+      ZIP_NAME: ""
+      ZIP_TAG: ""
+      TGZ_NAME: ""
+      TGZ_TAG: ""
+      SHA: ""
+      FW_VERSION: ""
+      RELEASE_VERSION: ""
+    strategy:
+      fail-fast: false
+      matrix:
+        firmware: [unlshd, official]
+        include:
+          - firmware: unlshd
+            url: ${{ vars.REPO_UNLEASHED }}
+            version: ${{ vars.FIRMWARE_VERSION }}
+            src-included: 0
+          - firmware: official
+            url: ${{ vars.REPO_OFFICIAL }}
+            version: official
+            src-included: 0
+    steps:
+      - name: Copy Firmware Files
+        uses: actions/checkout@v3
+        with:
+          repository: ${{ matrix.url }}
+          clean: true
+          submodules: true
+          ref: dev
+
+      - name: Copy Repo Files
+        if: ${{ matrix.src-included == 0 }}
+        uses: actions/checkout@v3
+        with:
+          repository: ${{ vars.REPO_SELF }}
+          clean: true
+          submodules: true
+          path: ${{ env.APP_PATH }}
+
+      #    - name: Restore FBT
+      #      id: cache-restore
+      #      if: ${{ success() }}
+      #      uses: actions/cache/restore@v3
+      #      with:
+      #        path: |
+      #          build/**
+      #          debug/**
+      #        # An explicit key for restoring and saving the cache
+      #        key: 'fbt=${{ env.FIRMWARE_VERSION }}'
+      #
+      - name: Remove other apps
+        shell: pwsh
+        # rm to remove problem FAP which includes non-existent files
+        run: |
+          Remove-Item -Force -Recurse ./applications/debug -ErrorAction SilentlyContinue
+          Remove-Item -Force -Recurse ./applications/examples -ErrorAction SilentlyContinue
+          Remove-Item -Force -Recurse ${{ env.RELATIVE_PATH }} -ErrorAction SilentlyContinue
+
+      - name: Get SHA of our application and release version
+        shell: pwsh
+        env:
+          GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
+          INPUT_VERSION: ${{ inputs.version }}
+        run: |
+          Write-Output "::notice title=${{ matrix.firmware }} Input Version Number::v${{ inputs.version }}"
+          $fwInfo = ((gh release view --json tagName,url -R ${{ matrix.url }}) | ConvertFrom-Json)
+          cd '${{ env.APP_PATH }}'
+          $sha = (git rev-parse --verify HEAD)
+          
+          $releaseVersion = ''
+          $latestTag = ((gh release view --json tagName,url -R ${{ vars.REPO_SELF }}) | ConvertFrom-Json ).tagName
+
+          if ( [string]::IsNullOrWhitespace($env:INPUT_VERSION) ) {            
+            Write-Output "::notice title=${{ matrix.firmware }} Latest tag::$latestTag"
+            
+            $lastIndex = $latestTag.LastIndexOf('.')
+            
+            $minorValue = $latestTag.Substring($latestTag.LastIndexOf('.') + 1)
+            $minorValue = [Convert]::ToInt32($minorValue) + 1
+            $newTag = $latestTag.Substring(0, $lastIndex)
+            
+            $releaseVersion = ('{0}.{1}' -f $newTag, $minorValue)
+          } else {
+            $releaseVersion = "$env:INPUT_VERSION"
+          }
+          
+          if ( $releaseVersion.StartsWith('v') ) {
+            $releaseVersion = $releaseVersion.Substring(1)
+          }
+          
+          Write-Output "::notice title=${{ matrix.firmware }} PREV_TAG::$latestTag"
+          Write-Output "::notice title=${{ matrix.firmware }} RELEASE_VERSION::$releaseVersion"
+          Write-Output "::notice title=${{ matrix.firmware }} SHA::$sha"
+          Write-Output ('::notice title=${{ matrix.firmware }} FW_VERSION::{0}' -f $fwInfo.tagName)
+          
+          Write-Output ('RELEASE_VERSION={0}' -f $releaseVersion) >> $env:GITHUB_ENV
+          Write-Output ('SHA={0}' -f $sha) >> $env:GITHUB_ENV
+          Write-Output ('FW_VERSION={0}' -f $fwInfo.tagName) >> $env:GITHUB_ENV
+          Write-Output ('PREV_TAG={0}' -f $latestTag) >> $env:GITHUB_ENV
+
+      - name: Build Firmware
+        shell: bash
+        if: ${{ success() }}
+        env:
+          FBT_NO_SYNC: 0
+          DIST_SUFFIX: ${{ matrix.version }}
+          WORKFLOW_BRANCH_OR_TAG: release-cfw
+        run: |
+          ./fbt COMPACT=1 DEBUG=0 FBT_NO_SYNC=0
+
+      - name: Build FAPs
+        shell: bash
+        if: ${{ success() }}
+        env:
+          FBT_NO_SYNC: 0
+          DIST_SUFFIX: ${{ matrix.version }}
+          WORKFLOW_BRANCH_OR_TAG: release-cfw
+          # rm to remove problem FAP which includes non-existent files
+        run: |
+          ./fbt COMPACT=1 DEBUG=0 FBT_NO_SYNC=0 fap_dist
+
+      #    - name: Save FBT
+      #      id: cache-save
+      #      if: ${{ success() }}
+      #      uses: actions/cache/save@v3
+      #      with:
+      #        path: |
+      #          build/**
+      #          debug/**
+      #        # An explicit key for restoring and saving the cache
+      #        key: ${{ steps.cache-restore.outputs.cache-primary-key }}
+
+      - name: Create assets
+        if: ${{ success() }}
+        shell: pwsh
+        env:
+          APP_NAME: "subghz_bruteforcer_${{ env.RELEASE_VERSION }}"
+        run: |
+          function Format-Bytes {
+            param(
+                  [int]$number
+              )
+              $sizes = 'KB', 'MB', 'GB', 'TB', 'PB'
+              for ($x = 0; $x -lt $sizes.count; $x++) {
+                  if ($number -lt [int64]"1$($sizes[$x])") {
+                      if ($x -eq 0) {
+                          return "$number B"
+                      }
+                      else {
+                          $formattedNumber = $number / [int64]"1$($sizes[$x-1])"
+                          $formattedNumber = "{0:N2}" -f $formattedNumber
+                          return "$formattedNumber $($sizes[$x-1])"
+                      }
+                  }
+              }
+          }
+          $appName = $env:APP_NAME
+          if ( '${{ matrix.firmware }}' -eq 'unlshd' ) {
+            $appName = ('{0}_${{ env.FW_VERSION }}' -f $appName)
+          } else {
+            $appName = ('{0}_${{ matrix.firmware}}-${{ env.FW_VERSION }}' -f $appName)
+          }
+          $zipName = ('{0}.zip' -f $appName)
+          $tgzName = ('{0}.tgz' -f $appName)
+          $fapName = 'subghz_bruteforcer.fap'
+          $dstFap = "./$fapName"
+          $appDir = "dist/f7-C/apps/Sub-GHz"
+
+          if (!(Test-Path -Path "$appDir/$fapName" -PathType Leaf)) {
+              Write-Error '::error title=Files not found::Cannot find files in location'
+              exit 1
+          }
+
+          $size = (Get-Item -Path "$appDir/$fapName" | Get-ItemPropertyValue -Name Length)
+          Write-Output ('Filesize: {0}' -f (Format-Bytes $size))
+          Copy-Item -Force -Verbose -Path "$appDir/$fapName" -Destination $dstFap
+
+          zip -r -qq $zipName $dstFap
+          tar zcf $tgzName $dstFap
+
+          if ( !(Test-Path -Path $zipName -PathType Leaf) -or !(Test-Path -Path $tgzName -PathType Leaf) ) {
+              Write-Error '::error title=Files not found::Cannot find files in location'
+              exit 1
+          }
+
+          $zipSize = Format-Bytes (Get-Item -Path $zipName).Length
+          $tgzSize = Format-Bytes (Get-Item -Path $tgzName ).Length
+
+          Write-Output ('ZIP_NAME={0}' -f $zipName) >> $env:GITHUB_ENV
+          Write-Output ('TGZ_NAME={0}' -f $tgzName ) >> $env:GITHUB_ENV
+          Write-Output ('ZIP_TAG={0} ({1})' -f $zipName, $zipSize) >> $env:GITHUB_ENV
+          Write-Output ('TGZ_TAG={0} ({1})' -f $tgzName , $tgzSize) >> $env:GITHUB_ENV
+
+      - name: Upload assets
+        if: ${{ success() && env.ZIP_NAME != '' }}
+        shell: pwsh
+        env:
+          GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
+        run: |
+          $mime = "Accept: application/vnd.github+json"
+          $api = "X-GitHub-Api-Version: 2022-11-28"
+          $json = (gh api -H $mime -H $api /repos/${{ github.REPOSITORY }}/releases) | ConvertFrom-Json
+          $tagExists = ($json.GetEnumerator() | Where-Object { $_.tag_name -eq 'v${{ env.RELEASE_VERSION }}' }) -ne $null
+          if ( $tagExists -eq $false ) {
+            gh api --method POST -H $mime -H $api /repos/${{ github.REPOSITORY }}/releases -f tag_name='v${{ env.RELEASE_VERSION }}' -f target_commitish='${{ env.SHA }}' -f name='v${{ env.RELEASE_VERSION }}' -F draft=false -F prerelease=false -F generate_release_notes=true
+          }          
+          gh release upload 'v${{ env.RELEASE_VERSION }}' '${{ env.ZIP_NAME }}#${{ env.ZIP_TAG }}' '${{ env.TGZ_NAME }}#${{ env.TGZ_TAG }}' --clobber -R ${{ env.REPO_SELF }}
+          gh release edit 'v${{ env.RELEASE_VERSION }}' --draft=false -R ${{ env.REPO_SELF }}
+
+#EOF

+ 0 - 251
.github/workflows/build-with-firmwware.yml

@@ -1,251 +0,0 @@
-name: "Build for Firmware"
-run-name: "Build ${{ inputs.DEPLOY_TARGET }} by @${{ github.ACTOR }}"
-
-on:
-  workflow_dispatch:
-    inputs:
-      version:
-        description: "Enter version to build or left empty for current version"
-        required: false
-        type: string
-  release:
-    types: [created, prereleased]
-  push:
-    paths:
-      - .github/workflows/build-with-firmware.yml
-
-permissions:
-  contents: write
-  packages: write
-
-concurrency:
-  group: firmware-build-${{ vars.FIRMWARE_VERSION }}-${{ vars.RELEASE_VERSION }}
-  cancel-in-progress: false
-
-jobs:
-  build-and-upload:
-    runs-on: ubuntu-latest
-    env:
-      REPO_SELF: ${{ vars.REPO_SELF }}
-      OFW_PATH: "applications_user/subbrute"
-      RELATIVE_PATH: "applications/external/subbrute"
-      CURRENT_VERSION: ${{ vars.RELEASE_VERSION }}
-      RELEASE_VERSION: ${{ vars.RELEASE_VERSION }}
-      ZIP_NAME: ""
-      ZIP_TAG: ""
-      TGZ_NAME: ""
-      TGZ_TAG: ""
-    strategy:
-      fail-fast: false
-      matrix:
-        firmware: [unlshd, official]
-        include:
-          - firmware: unlshd
-            url: ${{ vars.REPO_UNLEASHED }}
-            version: ${{ vars.FIRMWARE_VERSION }}
-            src-included: 0
-          - firmware: official
-            url: ${{ vars.REPO_OFFICIAL }}
-            version: "official"
-            src-included: 0
-    steps:
-      - name: Set version
-        env:
-          INPUT_VERSION: ${{ inputs.version }}
-          CURRENT_VERSION: ${{ env.CURRENT_VERSION }}
-        shell: pwsh
-        run: |
-          $ReleaseVersion = ([string]::IsNullOrWhitespace($env:INPUT_VERSION) ? $env:CURRENT_VERSION : $env:INPUT_VERSION)
-          Write-Output ('RELEASE_VERSION={0}' -f $ReleaseVersion) >> $env:GITHUB_ENV
-
-      - name: Copy Firmware Files
-        uses: actions/checkout@v3
-        with:
-          repository: "${{ matrix.url }}"
-          clean: "true"
-          submodules: "true"
-          ref: "dev"
-
-      - name: Copy Repo Files
-        if: ${{ matrix.src-included == 0 }}
-        uses: actions/checkout@v3
-        with:
-          repository: "${{ vars.REPO_SELF }}"
-          clean: "true"
-          submodules: "true"
-          path: "${{ env.OFW_PATH }}"
-
-      - name: Print vars about state or repo if Unleashed
-        if: ${{ matrix.src-included == 1 }}
-        shell: pwsh
-        run: |
-          git log --pretty=format:'%s by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local --abbrev-commit --max-count=1
-          git submodule set-branch --branch master '${{ env.RELATIVE_PATH }}'
-          git submodule sync '${{ env.RELATIVE_PATH }}'
-          cd '${{ env.OFW_PATH }}'
-          if ( '${{ env.CURRENT_VERSION }}' -ne '${{ env.RELEASE_VERSION }}' ) {
-            Write-Output '::warning title=Different version::Current version is ${{ env.CURRENT_VERSION }} but we trying to build ${{ env.RELEASE_VERSION }}'
-            git checkout tags/v${{ env.RELEASE_VERSION }} -b tmp-build
-
-            if ( $LASTEXITCODE -ne 0 ) {
-              Write-Error '::error title=Cannot checkout to this version::Error during execution checkout to this tag ${{ env.RELEASE_VERSION }}'
-              exit 1
-            }
-          }
-
-          $Output = (git log --pretty=format:'%s by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local --abbrev-commit --max-count=1)
-
-          if ( $LASTEXITCODE -ne 0 ) {
-            Write-Error '::error title=Invalid checkout::Invalid checkout'
-            exit 1
-          }
-          Write-Output ('::notice title=Git output::{0}' -f $Output)
-
-      - name: Print vars about state or repo if Official
-        if: ${{ matrix.src-included == 0 }}
-        shell: pwsh
-        run: |
-          git log --pretty=format:'%s by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local --abbrev-commit --max-count=1
-          cd '${{ env.OFW_PATH }}'
-
-          if ( '${{ env.CURRENT_VERSION }}' -ne '${{ env.RELEASE_VERSION }}' ) {
-            Write-Output '::warning title=Different version::Current version is ${{ env.CURRENT_VERSION }} but we trying to build ${{ env.RELEASE_VERSION }}'
-            git checkout tags/v${{ env.RELEASE_VERSION }} -b tmp-build
-
-            if ( $LASTEXITCODE -ne 0 ) {
-              Write-Error '::error title=Cannot checkout to this version::Error during execution checkout to this tag ${{ env.RELEASE_VERSION }}'
-              exit 1
-            }
-          } else {
-            $Output = (git log --pretty=format:'%s by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local --abbrev-commit --max-count=1)
-
-            if ( $LASTEXITCODE -ne 0 ) {
-              Write-Error '::error title=Invalid checkout::Invalid checkout'
-              exit 1
-            }
-            Write-Output ('::notice title=Git output::{0}' -f $Output)
-          }
-
-      #    - name: Restore FBT
-      #      id: cache-restore
-      #      if: ${{ success() }}
-      #      uses: actions/cache/restore@v3
-      #      with:
-      #        path: |
-      #          build/**
-      #          debug/**
-      #        # An explicit key for restoring and saving the cache
-      #        key: 'fbt=${{ env.FIRMWARE_VERSION }}'
-      #
-      - name: Remove other apps
-        shell: pwsh
-        if: ${{ success() }}
-        # rm to remove problem FAP which includes non-existent files
-        run: |
-          Remove-Item -Force -Recurse ./applications/debug -ErrorAction SilentlyContinue
-          Remove-Item -Force -Recurse ./applications/examples -ErrorAction SilentlyContinue
-      #          New-Item -Force ./tmp -ItemType Directory -ErrorAction SilentlyContinue
-      #          Copy-Item -Force -Recurse ./applications/external/subbrute/ ./tmp/ -ErrorAction SilentlyContinue
-      #          Remove-Item -Force -Recurse ./applications/external/* -ErrorAction SilentlyContinue
-      #          Copy-Item -Force -Recurse /tmp/* ./applications/external/ -ErrorAction SilentlyContinue
-      #          Remove-Item -Force -Recurse ./tmp -ErrorAction SilentlyContinue
-
-      - name: Build Firmware
-        shell: bash
-        if: ${{ success() }}
-        env:
-          FBT_NO_SYNC: 0
-          DIST_SUFFIX: ${{ matrix.version }}
-          WORKFLOW_BRANCH_OR_TAG: release-cfw
-        run: |
-          ./fbt COMPACT=1 DEBUG=0 FBT_NO_SYNC=0
-
-      - name: Build FAPs
-        shell: bash
-        if: ${{ success() }}
-        env:
-          FBT_NO_SYNC: 0
-          DIST_SUFFIX: ${{ matrix.version }}
-          WORKFLOW_BRANCH_OR_TAG: release-cfw
-          # rm to remove problem FAP which includes non-existent files
-        run: |
-          ./fbt COMPACT=1 DEBUG=0 FBT_NO_SYNC=0 fap_dist
-
-      #    - name: Save FBT
-      #      id: cache-save
-      #      if: ${{ success() }}
-      #      uses: actions/cache/save@v3
-      #      with:
-      #        path: |
-      #          build/**
-      #          debug/**
-      #        # An explicit key for restoring and saving the cache
-      #        key: ${{ steps.cache-restore.outputs.cache-primary-key }}
-
-      - name: Create assets
-        if: ${{ success() }}
-        shell: pwsh
-        env:
-          ZIP_NAME: "subghz_bruteforcer_${{ env.RELEASE_VERSION }}_${{ matrix.firmware }}.zip"
-          TGZ_NAME: "subghz_bruteforcer_${{ env.RELEASE_VERSION }}_${{ matrix.firmware }}.tgz"
-        run: |
-          function Format-Bytes {
-            param(
-                  [int]$number
-              )
-              $sizes = 'KB', 'MB', 'GB', 'TB', 'PB'
-              for ($x = 0; $x -lt $sizes.count; $x++) {
-                  if ($number -lt [int64]"1$($sizes[$x])") {
-                      if ($x -eq 0) {
-                          return "$number B"
-                      }
-                      else {
-                          $num = $number / [int64]"1$($sizes[$x-1])"
-                          $num = "{0:N2}" -f $num
-                          return "$num $($sizes[$x-1])"
-                      }
-                  }
-              }
-          }
-          $ZipName = $env:ZIP_NAME
-          $TgzName = $env:TGZ_NAME
-          $FapNamme = 'subghz_bruteforcer.fap'
-          $DstFap = "./$FapNamme"
-          $AppDir = "dist/f7-C/apps/Sub-GHz"
-
-          if (!(Test-Path -Path "$AppDir/$FapNamme" -PathType Leaf)) {
-              Write-Error '::error title=Files not found::Cannot find files in location'
-              exit 1
-          }
-
-          $Size = (Get-Item -Path "$AppDir/$FapNamme" | Get-ItemPropertyValue -Name Length)
-          Write-Output ('Filesize: {0}' -f (Format-Bytes $Size))
-          Copy-Item -Force -Verbose -Path "$AppDir/$FapNamme" -Destination $DstFap
-
-          zip -r -qq $ZipName $DstFap
-          tar zcf $TgzName $DstFap
-
-          if ( !(Test-Path -Path $ZipName -PathType Leaf) -or !(Test-Path -Path $TgzName -PathType Leaf) ) {
-              Write-Error '::error title=Files not found::Cannot find files in location'
-              exit 1
-          }
-
-          $ZipSize = Format-Bytes (Get-Item -Path $ZipName).Length
-          $TgzSize = Format-Bytes (Get-Item -Path $TgzName ).Length
-
-          Write-Output ('ZIP_NAME={0}' -f $ZipName) >> $env:GITHUB_ENV
-          Write-Output ('TGZ_NAME={0}' -f $TgzName ) >> $env:GITHUB_ENV
-          Write-Output ('ZIP_TAG={0} ({1})' -f $ZipName, $ZipSize) >> $env:GITHUB_ENV
-          Write-Output ('TGZ_TAG={0} ({1})' -f $TgzName , $TgzSize) >> $env:GITHUB_ENV
-
-      - name: Upload assets
-        if: ${{ success() && env.ZIP_NAME != '' }}
-        env:
-          GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
-        run: |
-          gh release create v${{ env.RELEASE_VERSION }} --generate-notes --draft -R ${{ env.REPO_SELF }}
-          gh release upload 'v${{ env.RELEASE_VERSION }}' '${{ env.ZIP_NAME }}#${{ env.ZIP_TAG }}' \
-            '${{ env.TGZ_NAME }}#${{ env.TGZ_TAG }}' --clobber -R ${{ env.REPO_SELF }}
-          gh release edit 'v${{ env.RELEASE_VERSION }}' --draft=false -R ${{ env.REPO_SELF }}
-
-#EOF

+ 21 - 0
.github/workflows/stale.yml

@@ -0,0 +1,21 @@
+name: "Close stale issues and PRs"
+on:
+  schedule:
+    - cron: "* 0 * * *"
+
+jobs:
+  stale:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/stale@v8
+        with:
+          days-before-stale: -1
+          days-before-close: -1
+          stale-pr-message: "This pull request is stale because it has been open 14 days with no activity. To keep this pull request open remove stale label or comment."
+          stale-pr-label: "status:stale"
+          close-pr-message: "This pull request was closed because it has been stale for 14 days with no activity. If this pull request is important or you have more to add feel free to re-open it."
+          days-before-pr-stale: 14
+          days-before-pr-close: 14
+          exempt-issue-labels: "needs:attention,needs:triage,blocked"
+          ascending: true # https://github.com/actions/stale#ascending
+          operations-per-run: 500