| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- 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
|