|
|
@@ -0,0 +1,220 @@
|
|
|
+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: [unpublished]
|
|
|
+ push:
|
|
|
+ paths:
|
|
|
+ - .github/workflows/build-with-firmware.yml
|
|
|
+
|
|
|
+permissions:
|
|
|
+ contents: write
|
|
|
+ packages: write
|
|
|
+
|
|
|
+jobs:
|
|
|
+ build-and-upload:
|
|
|
+ # runs-on: [self-hosted, linux]
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+ concurrency:
|
|
|
+ group: firmware-build-${{ vars.FIRMWARE_VERSION }}-${{ vars.RELEASE_VERSION }}
|
|
|
+ cancel-in-progress: false
|
|
|
+ env:
|
|
|
+ REPO_SELF: ${{ vars.REPO_SELF }}
|
|
|
+ IGNORED_PATH: "applications_user/subbrute"
|
|
|
+ RELATIVE_PATH: "applications/external/subbrute"
|
|
|
+ CURRENT_VERSION: ${{ vars.RELEASE_VERSION }}
|
|
|
+ strategy:
|
|
|
+ fail-fast: false
|
|
|
+ matrix:
|
|
|
+ firmware: [unlshd, official]
|
|
|
+ include:
|
|
|
+ - firmware: unlshd
|
|
|
+ url: ${{ vars.REPO_UNLEASHED }}
|
|
|
+ version: ${{ vars.FIRMWARE_VERSION }}
|
|
|
+ src-included: 1
|
|
|
+ - firmware: official
|
|
|
+ url: ${{ vars.REPO_OFFICIAL }}
|
|
|
+ version: "official"
|
|
|
+ exclude:
|
|
|
+ - os: official
|
|
|
+ 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 Repo 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.IGNORED_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.RELATIVE_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.IGNORED_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: 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 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"
|
|
|
+
|
|
|
+ if (!(Test-Path -Path "dist/f7-C/apps/Sub-GHz/$FapNamme" -PathType Leaf)) {
|
|
|
+ Write-Error '::error title=Files not found::Cannot find files in location'
|
|
|
+ exit 1
|
|
|
+ }
|
|
|
+
|
|
|
+ $Size = (Get-Item -Path "dist/f7-C/apps/Sub-GHz/$FapNamme" | Get-ItemPropertyValue -Name Length)
|
|
|
+ Write-Output ('Filesize: {0}' -f (Format-Bytes $Size))
|
|
|
+ Copy-Item -Force -Path "dist/f7-C/apps/Sub-GHz/$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: Create assets
|
|
|
+ if: ${{ success() && env.ZIP_NAME != '' }}
|
|
|
+ env:
|
|
|
+ GITHUB_TOKEN: ${{ secrets.FLIPPER_TOKEN }}
|
|
|
+ run: |
|
|
|
+ gh release upload 'v${{ env.RELEASE_VERSION }}' --clobber \
|
|
|
+ '${{ env.ZIP_NAME }}#${{ env.ZIP_TAG }}' '${{ env.TGZ_NAME }}#${{ env.TGZ_TAG }}' -R ${{ env.REPO_SELF }}
|
|
|
+ gh release edit 'v${{ env.RELEASE_VERSION }}' --draft=false -R ${{ env.REPO_SELF }}
|
|
|
+
|
|
|
+#EOF
|