removed github folder
This commit is contained in:
parent
d1832d5e90
commit
f199beafb2
68
.github/CODEOWNERS
vendored
68
.github/CODEOWNERS
vendored
@ -1,68 +0,0 @@
|
||||
# Who owns all the fish by default
|
||||
* @skotopes @DrZlo13 @hedger
|
||||
|
||||
# Apps
|
||||
/applications/debug/bt_debug_app/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/debug/accessor/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/battery_test_app/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/debug/bt_debug_app/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/debug/file_browser_test/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/lfrfid_debug/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/text_box_test/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/uart_echo/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/usb_mouse/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/debug/usb_test/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
|
||||
/applications/main/archive/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/main/bad_usb/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/main/gpio/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/main/ibutton/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
/applications/main/infrared/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
/applications/main/nfc/ @skotopes @DrZlo13 @hedger @gornekich @Astrrra
|
||||
/applications/main/subghz/ @skotopes @DrZlo13 @hedger @Skorpionm
|
||||
/applications/main/u2f/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
|
||||
/applications/services/bt/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/services/cli/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/crypto/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/desktop/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/dolphin/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/power/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/services/rpc/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
|
||||
/applications/services/bt_settings_app/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/applications/services/desktop_settings/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/dolphin_passport/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/applications/services/power_settings_app/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
|
||||
/applications/system/storage_move_to_sd/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
|
||||
/applications/debug/unit_tests/ @skotopes @DrZlo13 @hedger @nminaylov @gornekich @Astrrra @gsurkov @Skorpionm
|
||||
|
||||
/applications/examples/example_thermo/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
|
||||
# Firmware targets
|
||||
/targets/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
|
||||
# Assets
|
||||
/applications/main/infrared/resources/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
|
||||
# Documentation
|
||||
/documentation/ @skotopes @DrZlo13 @hedger @drunkbatya
|
||||
/scripts/toolchain/ @skotopes @DrZlo13 @hedger @drunkbatya
|
||||
|
||||
# Lib
|
||||
/lib/stm32wb_copro/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/lib/digital_signal/ @skotopes @DrZlo13 @hedger @gornekich
|
||||
/lib/infrared/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
/lib/lfrfid/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/lib/libusb_stm32/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/lib/mbedtls/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/lib/micro-ecc/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/lib/nanopb/ @skotopes @DrZlo13 @hedger @nminaylov
|
||||
/lib/nfc/ @skotopes @DrZlo13 @hedger @gornekich @Astrrra
|
||||
/lib/one_wire/ @skotopes @DrZlo13 @hedger @gsurkov
|
||||
/lib/subghz/ @skotopes @DrZlo13 @hedger @Skorpionm
|
||||
|
||||
# CI/CD
|
||||
/.github/workflows/ @skotopes @DrZlo13 @hedger @drunkbatya
|
||||
46
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
46
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
@ -1,46 +0,0 @@
|
||||
name: Bug report
|
||||
description: File a bug reports regarding the firmware.
|
||||
labels: ['bug']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue, this template is meant for any issues related to the Flipper Zero firmware.
|
||||
If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one)
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe the bug.
|
||||
description: "A clear and concise description of what the bug is."
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: repro
|
||||
attributes:
|
||||
label: Reproduction
|
||||
description: "How can this bug be reproduced?"
|
||||
placeholder: |
|
||||
1. Switch on...
|
||||
2. Press button '....'
|
||||
3. Wait for the moon phase
|
||||
4. It burns
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: target
|
||||
attributes:
|
||||
label: Target
|
||||
description: Specify the target
|
||||
# Target seems to be largely ignored by outside sources.
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Logs
|
||||
description: Attach your debug logs here
|
||||
render: Text
|
||||
# Avoid rendering as Markdown here.
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
21
.github/ISSUE_TEMPLATE/02_enhancements.yml
vendored
21
.github/ISSUE_TEMPLATE/02_enhancements.yml
vendored
@ -1,21 +0,0 @@
|
||||
name: Enhancements
|
||||
description: Suggest improvements for any existing functionality within the firmware.
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue. This template is meant for feature requests and improvements to already existing functionality.
|
||||
If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one)
|
||||
- type: textarea
|
||||
id: proposal
|
||||
attributes:
|
||||
label: "Describe the enhancement you're suggesting."
|
||||
description: |
|
||||
Feel free to describe in as much detail as you wish.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
24
.github/ISSUE_TEMPLATE/03_feature_request.yml
vendored
24
.github/ISSUE_TEMPLATE/03_feature_request.yml
vendored
@ -1,24 +0,0 @@
|
||||
name: Feature Request
|
||||
description: For feature requests regarding the firmware.
|
||||
labels: ['feature request']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue, this template is meant for any feature suggestions.
|
||||
If you require help with the Flipper zero and its firmware, we ask that you join [our forum](https://forum.flipperzero.one)
|
||||
- type: textarea
|
||||
id: proposal
|
||||
attributes:
|
||||
label: "Description of the feature you're suggesting."
|
||||
description: |
|
||||
Please describe your feature request in as many details as possible.
|
||||
- Describe what it should do.
|
||||
- Note whether it is to extend existing functionality or introduce new functionality.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Need help?
|
||||
url: https://forum.flipperzero.one
|
||||
about: For any question regarding on how to use the Flipper Zero and its firmware.
|
||||
78
.github/actions/submit_sdk/action.yml
vendored
78
.github/actions/submit_sdk/action.yml
vendored
@ -1,78 +0,0 @@
|
||||
name: Submit SDK to Catalog
|
||||
author: hedger
|
||||
description: |
|
||||
This action checks if SDK exists in the catalog and if not, adds and/or publishes it.
|
||||
|
||||
inputs:
|
||||
catalog-url:
|
||||
description: The URL of the Catalog API. Must not be empty or end with a /.
|
||||
required: true
|
||||
catalog-api-token:
|
||||
description: The token to use to authenticate with the Catalog API. Must not be empty.
|
||||
required: true
|
||||
firmware-api:
|
||||
description: Fimware's API version, major.minor
|
||||
required: true
|
||||
firmware-target:
|
||||
description: Firmware's target, e.g. f7/f18
|
||||
required: true
|
||||
firmware-version:
|
||||
description: Firmware's version, e.g. 0.13.37-rc3, or 0.13.37
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Check inputs
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -z "${{ inputs.catalog-url }}" ] ; then
|
||||
echo "Invalid catalog-url: ${{ inputs.catalog-url }}"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${{ inputs.catalog-api-token }}" ] ; then
|
||||
echo "Invalid catalog-api-token: ${{ inputs.catalog-api-token }}"
|
||||
exit 1
|
||||
fi
|
||||
if ! echo "${{ inputs.firmware-api }}" | grep -q "^[0-9]\+\.[0-9]\+$" ; then
|
||||
echo "Invalid firmware-api: ${{ inputs.firmware-api }}"
|
||||
exit 1
|
||||
fi
|
||||
if ! echo "${{ inputs.firmware-target }}" | grep -q "^f[0-9]\+$" ; then
|
||||
echo "Invalid firmware-target: ${{ inputs.firmware-target }}"
|
||||
exit 1
|
||||
fi
|
||||
if ! echo "${{ inputs.firmware-version }}" | grep -q "^[0-9]\+\.[0-9]\+\.[0-9]\+\(-rc\)\?\([0-9]\+\)\?$" ; then
|
||||
echo "Invalid firmware-version: ${{ inputs.firmware-version }}"
|
||||
exit 1
|
||||
fi
|
||||
- name: Submit SDK
|
||||
shell: bash
|
||||
run: |
|
||||
curl -sX 'GET' \
|
||||
'${{ inputs.catalog-url }}/api/v0/0/sdk?length=500' \
|
||||
-H 'Accept: application/json' > sdk_versions.json
|
||||
if jq -r -e ".[] | select((.api == \"${{ inputs.firmware-api }}\") and .target == \"${{ inputs.firmware-target }}\")" sdk_versions.json > found_sdk.json ; then
|
||||
echo "API version ${{ inputs.firmware-api }} already exists in catalog"
|
||||
if [ $(jq -r -e ".released_at" found_sdk.json) != "null" ] ; then
|
||||
echo "API version is already released"
|
||||
exit 0
|
||||
fi
|
||||
if ! echo "${{ inputs.firmware-version }}" | grep -q -- "-rc" ; then
|
||||
SDK_ID=$(jq -r ._id found_sdk.json)
|
||||
echo "Marking SDK $SDK_ID as released"
|
||||
curl -X 'POST' \
|
||||
"${{ inputs.catalog-url }}/api/v0/0/sdk/${SDK_ID}/release" \
|
||||
-H 'Accept: application/json' \
|
||||
-H 'Authorization: Bearer ${{ inputs.catalog-api-token }}' \
|
||||
-d ''
|
||||
fi
|
||||
else
|
||||
echo "API version ${{ inputs.firmware-api }} doesn't exist in catalog, adding"
|
||||
curl -X 'POST' \
|
||||
'${{ inputs.catalog-url }}/api/v0/0/sdk' \
|
||||
-H 'Accept: application/json' \
|
||||
-H 'Authorization: Bearer ${{ inputs.catalog-api-token }}' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"name\": \"${{ inputs.firmware-version }}\", \"target\": \"${{ inputs.firmware-target }}\", \"api\": \"${{ inputs.firmware-api }}\"}"
|
||||
fi
|
||||
BIN
.github/assets/Born2bSportyV2.ttf
vendored
BIN
.github/assets/Born2bSportyV2.ttf
vendored
Binary file not shown.
BIN
.github/assets/dark_theme_banner.png
vendored
BIN
.github/assets/dark_theme_banner.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 48 KiB |
BIN
.github/assets/latest-firmware-template.png
vendored
BIN
.github/assets/latest-firmware-template.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
BIN
.github/assets/light_theme_banner.png
vendored
BIN
.github/assets/light_theme_banner.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 44 KiB |
13
.github/pull_request_template.md
vendored
13
.github/pull_request_template.md
vendored
@ -1,13 +0,0 @@
|
||||
# What's new
|
||||
|
||||
- [ Describe changes here ]
|
||||
|
||||
# Verification
|
||||
|
||||
- [ Describe how to verify changes ]
|
||||
|
||||
# Checklist (For Reviewer)
|
||||
|
||||
- [ ] PR has description of feature/bug or link to Confluence/Jira task
|
||||
- [ ] Description contains actions to verify feature/bugfix
|
||||
- [ ] I've built this code, uploaded it to the device and verified feature/bugfix
|
||||
170
.github/workflows/build.yml
vendored
170
.github/workflows/build.yml
vendored
@ -1,170 +0,0 @@
|
||||
name: 'Build'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
tags:
|
||||
- '*'
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
DEFAULT_TARGET: f7
|
||||
FBT_TOOLCHAIN_PATH: /runner/_work
|
||||
FBT_GIT_SUBMODULE_SHALLOW: 1
|
||||
|
||||
jobs:
|
||||
main:
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [f7, f18]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout code'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get commit details'
|
||||
id: names
|
||||
run: |
|
||||
BUILD_TYPE='DEBUG=1 COMPACT=0'
|
||||
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
|
||||
TYPE="pull"
|
||||
elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
|
||||
TYPE="tag"
|
||||
BUILD_TYPE='DEBUG=0 COMPACT=1'
|
||||
else
|
||||
TYPE="other"
|
||||
fi
|
||||
python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
|
||||
echo "event_type=$TYPE" >> $GITHUB_OUTPUT
|
||||
echo "FBT_BUILD_TYPE=$BUILD_TYPE" >> $GITHUB_ENV
|
||||
echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV
|
||||
echo "TARGET_HW=$(echo "${{ matrix.target }}" | sed 's/f//')" >> $GITHUB_ENV
|
||||
|
||||
- name: 'Check API versions for consistency between targets'
|
||||
run: |
|
||||
set -e
|
||||
N_API_HEADER_SIGNATURES=`ls -1 targets/f*/api_symbols.csv | xargs -I {} sh -c "head -n2 {} | md5sum" | sort -u | wc -l`
|
||||
if [ $N_API_HEADER_SIGNATURES != 1 ] ; then
|
||||
echo API versions aren\'t matching for available targets. Please update!
|
||||
echo API versions are:
|
||||
head -n2 targets/f*/api_symbols.csv
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: 'Build the firmware and apps'
|
||||
id: build-fw
|
||||
run: |
|
||||
./fbt TARGET_HW=$TARGET_HW $FBT_BUILD_TYPE copro_dist updater_package fap_dist
|
||||
echo "firmware_api=$(./fbt TARGET_HW=$TARGET_HW get_apiversion)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 'Check for uncommitted changes'
|
||||
run: |
|
||||
git diff --exit-code
|
||||
|
||||
- name: 'Copy build output'
|
||||
run: |
|
||||
set -e
|
||||
rm -rf artifacts map_analyser_files || true
|
||||
mkdir artifacts map_analyser_files
|
||||
cp dist/${TARGET}-*/* artifacts/ || true
|
||||
tar czpf "artifacts/flipper-z-${TARGET}-resources-${SUFFIX}.tgz" \
|
||||
-C build/latest resources
|
||||
tar czpf "artifacts/flipper-z-${TARGET}-debugapps-${SUFFIX}.tgz" \
|
||||
-C dist/${TARGET}-*/apps/Debug .
|
||||
tar czpf "artifacts/flipper-z-${TARGET}-appsymbols-${SUFFIX}.tgz" \
|
||||
-C dist/${TARGET}-*/debug_elf .
|
||||
|
||||
- name: 'Copy universal artifacts'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET }}
|
||||
run: |
|
||||
tar czpf "artifacts/flipper-z-any-scripts-${SUFFIX}.tgz" scripts
|
||||
cp build/core2_firmware.tgz "artifacts/flipper-z-any-core2_firmware-${SUFFIX}.tgz"
|
||||
|
||||
- name: 'Upload artifacts to update server'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
run: |
|
||||
FILES=$(for ARTIFACT in $(find artifacts -maxdepth 1 -not -type d); do echo "-F files=@${ARTIFACT}"; done)
|
||||
curl --fail -L -H "Token: ${{ secrets.INDEXER_TOKEN }}" \
|
||||
-F "branch=${BRANCH_NAME}" \
|
||||
-F "version_token=${COMMIT_SHA}" \
|
||||
${FILES[@]} \
|
||||
"${{ secrets.INDEXER_URL }}"/firmware/uploadfiles
|
||||
|
||||
- name: 'Copy & analyse map analyser files'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET }}
|
||||
run: |
|
||||
cp build/${DEFAULT_TARGET}-firmware-*/firmware.elf.map map_analyser_files/firmware.elf.map
|
||||
cp build/${DEFAULT_TARGET}-firmware-*/firmware.elf map_analyser_files/firmware.elf
|
||||
cp ${{ github.event_path }} map_analyser_files/event.json
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
get_size()
|
||||
{
|
||||
SECTION="$1";
|
||||
arm-none-eabi-size \
|
||||
-A map_analyser_files/firmware.elf \
|
||||
| grep "^$SECTION" | awk '{print $2}'
|
||||
}
|
||||
export BSS_SIZE="$(get_size ".bss")"
|
||||
export TEXT_SIZE="$(get_size ".text")"
|
||||
export RODATA_SIZE="$(get_size ".rodata")"
|
||||
export DATA_SIZE="$(get_size ".data")"
|
||||
export FREE_FLASH_SIZE="$(get_size ".free_flash")"
|
||||
python3 -m pip install mariadb==1.1.6 cxxfilt==0.3.0
|
||||
python3 scripts/map_parser.py map_analyser_files/firmware.elf.map map_analyser_files/firmware.elf.map.all
|
||||
python3 scripts/map_mariadb_insert.py \
|
||||
${{ secrets.AMAP_MARIADB_USER }} \
|
||||
${{ secrets.AMAP_MARIADB_PASSWORD }} \
|
||||
${{ secrets.AMAP_MARIADB_HOST }} \
|
||||
${{ secrets.AMAP_MARIADB_PORT }} \
|
||||
${{ secrets.AMAP_MARIADB_DATABASE }} \
|
||||
map_analyser_files/firmware.elf.map.all
|
||||
|
||||
- name: 'Find previous comment'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }}
|
||||
uses: peter-evans/find-comment@v2
|
||||
id: find-comment
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-author: 'github-actions[bot]'
|
||||
body-includes: 'Compiled ${{ matrix.target }} firmware for commit'
|
||||
|
||||
- name: 'Create or update comment'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }}
|
||||
uses: peter-evans/create-or-update-comment@v3
|
||||
with:
|
||||
comment-id: ${{ steps.find-comment.outputs.comment-id }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
**Compiled ${{ matrix.target }} firmware for commit `${{steps.names.outputs.commit_sha}}`:**
|
||||
- [📦 Update package](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz)
|
||||
- [📥 DFU file](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-full-${{steps.names.outputs.suffix}}.dfu)
|
||||
- [☁️ Web/App updater](https://lab.flipper.net/?url=https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz&channel=${{steps.names.outputs.branch_name}}&version=${{steps.names.outputs.commit_sha}})
|
||||
edit-mode: replace
|
||||
|
||||
- name: 'SDK submission to staging catalog'
|
||||
if: ${{ steps.names.outputs.event_type == 'tag' && matrix.target == env.DEFAULT_TARGET }}
|
||||
uses: ./.github/actions/submit_sdk
|
||||
with:
|
||||
catalog-url: ${{ secrets.CATALOG_STAGING_URL }}
|
||||
catalog-api-token: ${{ secrets.CATALOG_STAGING_API_TOKEN }}
|
||||
firmware-api: ${{ steps.build-fw.outputs.firmware_api }}
|
||||
firmware-target: ${{ matrix.target }}
|
||||
firmware-version: ${{ steps.names.outputs.suffix }}
|
||||
|
||||
- name: 'SDK submission to prod catalog'
|
||||
if: ${{ steps.names.outputs.event_type == 'tag' && matrix.target == env.DEFAULT_TARGET }}
|
||||
uses: ./.github/actions/submit_sdk
|
||||
with:
|
||||
catalog-url: ${{ secrets.CATALOG_URL }}
|
||||
catalog-api-token: ${{ secrets.CATALOG_API_TOKEN }}
|
||||
firmware-api: ${{ steps.build-fw.outputs.firmware_api }}
|
||||
firmware-target: ${{ matrix.target }}
|
||||
firmware-version: ${{ steps.names.outputs.suffix }}
|
||||
86
.github/workflows/build_compact.yml
vendored
86
.github/workflows/build_compact.yml
vendored
@ -1,86 +0,0 @@
|
||||
name: 'Compact build'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
FBT_TOOLCHAIN_PATH: /runner/_work
|
||||
FBT_GIT_SUBMODULE_SHALLOW: 1
|
||||
|
||||
jobs:
|
||||
compact:
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: [f7, f18]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout code'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: false
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get commit details'
|
||||
run: |
|
||||
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
|
||||
TYPE="pull"
|
||||
elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
|
||||
TYPE="tag"
|
||||
else
|
||||
TYPE="other"
|
||||
fi
|
||||
python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
|
||||
|
||||
- name: 'Build the firmware'
|
||||
id: build-fw
|
||||
run: |
|
||||
set -e
|
||||
TARGET="$(echo '${{ matrix.target }}' | sed 's/f//')"; \
|
||||
./fbt TARGET_HW=$TARGET DEBUG=0 COMPACT=1 fap_dist updater_package
|
||||
echo "sdk-file=$(ls dist/${{ matrix.target }}-*/flipper-z-${{ matrix.target }}-sdk-*.zip)" >> $GITHUB_OUTPUT
|
||||
echo "hw-target-code=$TARGET" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Deploy uFBT with SDK
|
||||
uses: flipperdevices/flipperzero-ufbt-action@v0.1
|
||||
with:
|
||||
task: setup
|
||||
sdk-file: ${{ steps.build-fw.outputs.sdk-file }}
|
||||
sdk-hw-target: ${{ steps.build-fw.outputs.hw-target-code }}
|
||||
|
||||
- name: Build test app with SDK
|
||||
run: |
|
||||
mkdir testapp
|
||||
cd testapp
|
||||
ufbt create APPID=testapp
|
||||
ufbt
|
||||
|
||||
- name: Build example & external apps with uFBT
|
||||
run: |
|
||||
for appdir in 'applications/examples'; do
|
||||
for app in $(find "$appdir" -maxdepth 1 -mindepth 1 -type d); do
|
||||
pushd $app
|
||||
TARGETS_FAM=$(grep "targets" application.fam || echo "${{ matrix.target }}")
|
||||
if ! grep -q "${{ matrix.target }}" <<< $TARGETS_FAM ; then
|
||||
echo Skipping unsupported app: $app
|
||||
popd
|
||||
continue
|
||||
fi
|
||||
echo Building $app
|
||||
ufbt
|
||||
popd
|
||||
done
|
||||
done
|
||||
|
||||
## Uncomment this for a single job that will run only if all targets are built successfully
|
||||
# report-status:
|
||||
# name: Report status
|
||||
# needs: [compact]
|
||||
# if: always() && !contains(needs.*.result, 'failure')
|
||||
# runs-on: [self-hosted, FlipperZeroShell]
|
||||
# steps:
|
||||
# - run: echo "All good ✨" ;
|
||||
101
.github/workflows/lint_and_submodule_check.yml
vendored
101
.github/workflows/lint_and_submodule_check.yml
vendored
@ -1,101 +0,0 @@
|
||||
name: 'Lint sources & check submodule integrity'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
TARGETS: f7
|
||||
FBT_TOOLCHAIN_PATH: /runner/_work
|
||||
SET_GH_OUTPUT: 1
|
||||
|
||||
jobs:
|
||||
lint_sources_check_submodules:
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout code'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
ref: ${{ github.sha }}
|
||||
|
||||
- name: 'Check protobuf branch'
|
||||
run: |
|
||||
git submodule update --init;
|
||||
SUB_PATH="assets/protobuf";
|
||||
SUB_BRANCH="dev";
|
||||
SUB_COMMITS_MIN=40;
|
||||
cd "$SUB_PATH";
|
||||
SUBMODULE_HASH="$(git rev-parse HEAD)";
|
||||
BRANCHES=$(git branch -r --contains "$SUBMODULE_HASH");
|
||||
COMMITS_IN_BRANCH="$(git rev-list --count dev)";
|
||||
if [ $COMMITS_IN_BRANCH -lt $SUB_COMMITS_MIN ]; then
|
||||
echo "name=fails::error" >> $GITHUB_OUTPUT;
|
||||
echo "::error::Error: Too few commits in $SUB_BRANCH of submodule $SUB_PATH: $COMMITS_IN_BRANCH(expected $SUB_COMMITS_MIN+)";
|
||||
exit 1;
|
||||
fi
|
||||
if ! grep -q "/$SUB_BRANCH" <<< "$BRANCHES"; then
|
||||
echo "name=fails::error" >> $GITHUB_OUTPUT;
|
||||
echo "::error::Error: Submodule $SUB_PATH is not on branch $SUB_BRANCH";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
- name: 'Check for new TODOs'
|
||||
id: check_todos
|
||||
if: github.event_name == 'pull_request'
|
||||
run: |
|
||||
set +e;
|
||||
git diff --unified=0 --no-color ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -E '^\+' | grep -i -E '(TODO|HACK|FIXME|XXX)[ :]' | grep -v -- '-nofl' > lines.log;
|
||||
MISSING_TICKETS=$( grep -v -E 'FL-[0-9]+' lines.log );
|
||||
if [ -n "$MISSING_TICKETS" ]; then
|
||||
echo "Error: Missing ticket number in \`TODO\` comment(s)" >> $GITHUB_STEP_SUMMARY;
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY;
|
||||
echo "$MISSING_TICKETS" >> $GITHUB_STEP_SUMMARY;
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY;
|
||||
exit 1;
|
||||
else
|
||||
echo "No new TODOs without tickets found" >> $GITHUB_STEP_SUMMARY;
|
||||
fi
|
||||
|
||||
- name: 'Check Python code formatting'
|
||||
id: syntax_check_py
|
||||
if: always()
|
||||
run: |
|
||||
set +e;
|
||||
./fbt -s lint_py 2>&1 | tee lint-py.log;
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
# Save multiline output
|
||||
echo "errors=1" >> $GITHUB_OUTPUT;
|
||||
printf "Python Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY;
|
||||
echo "$(cat lint-py.log)" >> $GITHUB_STEP_SUMMARY;
|
||||
printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY;
|
||||
exit 1;
|
||||
else
|
||||
echo "Python Lint: all good ✨" >> $GITHUB_STEP_SUMMARY;
|
||||
fi
|
||||
|
||||
- name: 'Check C++ code formatting'
|
||||
id: syntax_check_cpp
|
||||
if: always()
|
||||
run: |
|
||||
set +e;
|
||||
./fbt -s lint 2>&1 | tee lint-cpp.log;
|
||||
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
|
||||
# Save multiline output
|
||||
echo "errors=1" >> $GITHUB_OUTPUT;
|
||||
printf "C Lint errors:\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY;
|
||||
echo "$(cat lint-cpp.log)" >> $GITHUB_STEP_SUMMARY;
|
||||
printf "\n\`\`\`\n" >> $GITHUB_STEP_SUMMARY;
|
||||
exit 1;
|
||||
else
|
||||
echo "C Lint: all good ✨" >> $GITHUB_STEP_SUMMARY;
|
||||
fi
|
||||
|
||||
- name: Report code formatting errors
|
||||
if: ( steps.syntax_check_py.outputs.errors || steps.syntax_check_cpp.outputs.errors ) && github.event.pull_request
|
||||
run: |
|
||||
echo "Code formatting errors found";
|
||||
echo "Please run './fbt format' or './fbt format_py' to fix them";
|
||||
exit 1;
|
||||
42
.github/workflows/merge_report.yml
vendored
42
.github/workflows/merge_report.yml
vendored
@ -1,42 +0,0 @@
|
||||
name: 'Check FL ticket in PR name'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
env:
|
||||
FBT_TOOLCHAIN_PATH: /runner/_work
|
||||
|
||||
jobs:
|
||||
merge_report:
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout code'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get commit details'
|
||||
run: |
|
||||
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
|
||||
TYPE="pull"
|
||||
elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
|
||||
TYPE="tag"
|
||||
else
|
||||
TYPE="other"
|
||||
fi
|
||||
python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
|
||||
|
||||
- name: 'Check ticket and report'
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
python3 -m pip install slack_sdk
|
||||
python3 scripts/merge_report_qa.py \
|
||||
${{ secrets.QA_REPORT_SLACK_TOKEN }} \
|
||||
${{ secrets.QA_REPORT_SLACK_CHANNEL }}
|
||||
|
||||
88
.github/workflows/pvs_studio.yml
vendored
88
.github/workflows/pvs_studio.yml
vendored
@ -1,88 +0,0 @@
|
||||
name: 'Static C/C++ analysis with PVS-Studio'
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
TARGETS: f7
|
||||
DEFAULT_TARGET: f7
|
||||
FBT_TOOLCHAIN_PATH: /runner/_work
|
||||
FBT_GIT_SUBMODULE_SHALLOW: 1
|
||||
|
||||
jobs:
|
||||
analyse_c_cpp:
|
||||
if: ${{ !github.event.pull_request.head.repo.fork }}
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout code'
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get commit details'
|
||||
id: names
|
||||
run: |
|
||||
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
|
||||
TYPE="pull"
|
||||
elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
|
||||
TYPE="tag"
|
||||
else
|
||||
TYPE="other"
|
||||
fi
|
||||
python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"
|
||||
|
||||
- name: 'Supply PVS credentials'
|
||||
run: |
|
||||
pvs-studio-analyzer credentials ${{ secrets.PVS_STUDIO_CREDENTIALS }}
|
||||
|
||||
- name: 'Convert PVS-Studio output to html and detect warnings'
|
||||
id: pvs-warn
|
||||
run: |
|
||||
WARNINGS=0
|
||||
./fbt COMPACT=1 PVSNOBROWSER=1 firmware_pvs || WARNINGS=1
|
||||
echo "warnings=${WARNINGS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 'Upload report'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && (steps.pvs-warn.outputs.warnings != 0) }}
|
||||
uses: prewk/s3-cp-action@v2
|
||||
with:
|
||||
aws_s3_endpoint: "${{ secrets.PVS_AWS_ENDPOINT }}"
|
||||
aws_access_key_id: "${{ secrets.PVS_AWS_ACCESS_KEY }}"
|
||||
aws_secret_access_key: "${{ secrets.PVS_AWS_SECRET_KEY }}"
|
||||
source: "./build/f7-firmware-DC/pvsreport"
|
||||
dest: "s3://${{ secrets.PVS_AWS_BUCKET }}/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/"
|
||||
flags: "--recursive --acl public-read"
|
||||
|
||||
- name: 'Find Previous Comment'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request && (steps.pvs-warn.outputs.warnings != 0) }}
|
||||
uses: peter-evans/find-comment@v2
|
||||
id: fc
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-author: 'github-actions[bot]'
|
||||
body-includes: 'PVS-Studio report for commit'
|
||||
|
||||
- name: 'Create or update comment'
|
||||
if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request && (steps.pvs-warn.outputs.warnings != 0) }}
|
||||
uses: peter-evans/create-or-update-comment@v1
|
||||
with:
|
||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
**PVS-Studio report for commit `${{steps.names.outputs.commit_sha}}`:**
|
||||
- [Report](https://pvs.flipp.dev/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/index.html)
|
||||
edit-mode: replace
|
||||
|
||||
- name: 'Raise exception'
|
||||
if: ${{ steps.pvs-warn.outputs.warnings != 0 }}
|
||||
run: |
|
||||
echo "Please fix all PVS warnings before merge"
|
||||
exit 1
|
||||
|
||||
15
.github/workflows/reindex.yml
vendored
15
.github/workflows/reindex.yml
vendored
@ -1,15 +0,0 @@
|
||||
name: 'Reindex'
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [prereleased,released]
|
||||
|
||||
jobs:
|
||||
reindex:
|
||||
name: 'Reindex updates'
|
||||
runs-on: [self-hosted, FlipperZeroShell]
|
||||
steps:
|
||||
- name: Trigger reindex
|
||||
run: |
|
||||
curl --fail -L -H "Token: ${{ secrets.INDEXER_TOKEN }}" \
|
||||
"${{ secrets.INDEXER_URL }}"/firmware/reindex
|
||||
69
.github/workflows/unit_tests.yml
vendored
69
.github/workflows/unit_tests.yml
vendored
@ -1,69 +0,0 @@
|
||||
name: 'Unit tests'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
TARGETS: f7
|
||||
DEFAULT_TARGET: f7
|
||||
FBT_TOOLCHAIN_PATH: /opt
|
||||
FBT_GIT_SUBMODULE_SHALLOW: 1
|
||||
|
||||
jobs:
|
||||
run_units_on_bench:
|
||||
runs-on: [self-hosted, FlipperZeroUnitTest]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get flipper from device manager (mock)'
|
||||
id: device
|
||||
run: |
|
||||
echo "flipper=/dev/ttyACM0" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 'Flash unit tests firmware'
|
||||
id: flashing
|
||||
if: success()
|
||||
timeout-minutes: 10
|
||||
run: |
|
||||
./fbt resources firmware_latest flash SWD_TRANSPORT_SERIAL=2A0906016415303030303032 LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
|
||||
|
||||
- name: 'Wait for flipper and format ext'
|
||||
id: format_ext
|
||||
if: steps.flashing.outcome == 'success'
|
||||
timeout-minutes: 5
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} format_ext
|
||||
|
||||
- name: 'Copy assets and unit data, reboot and wait for flipper'
|
||||
id: copy
|
||||
if: steps.format_ext.outcome == 'success'
|
||||
timeout-minutes: 7
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
rm -rf build/latest/resources/dolphin
|
||||
python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} -f send build/latest/resources /ext
|
||||
python3 scripts/power.py -p ${{steps.device.outputs.flipper}} reboot
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
|
||||
- name: 'Run units and validate results'
|
||||
id: run_units
|
||||
if: steps.copy.outcome == 'success'
|
||||
timeout-minutes: 7
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
python3 scripts/testing/units.py ${{steps.device.outputs.flipper}}
|
||||
|
||||
- name: 'Check GDB output'
|
||||
if: failure()
|
||||
run: |
|
||||
./fbt gdb_trace_all SWD_TRANSPORT_SERIAL=2A0906016415303030303032 LIB_DEBUG=1 FIRMWARE_APP_SET=unit_tests FORCE=1
|
||||
75
.github/workflows/updater_test.yml
vendored
75
.github/workflows/updater_test.yml
vendored
@ -1,75 +0,0 @@
|
||||
name: 'Updater test'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
TARGETS: f7
|
||||
DEFAULT_TARGET: f7
|
||||
FBT_TOOLCHAIN_PATH: /opt
|
||||
FBT_GIT_SUBMODULE_SHALLOW: 1
|
||||
|
||||
jobs:
|
||||
test_updater_on_bench:
|
||||
runs-on: [self-hosted, FlipperZeroUpdaterTest]
|
||||
steps:
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
submodules: false
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: 'Get flipper from device manager (mock)'
|
||||
id: device
|
||||
run: |
|
||||
echo "flipper=Rekigyn" >> $GITHUB_OUTPUT
|
||||
echo "stlink=0F020D026415303030303032" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 'Flashing target firmware'
|
||||
id: first_full_flash
|
||||
timeout-minutes: 10
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
./fbt flash_usb_full PORT=${{steps.device.outputs.flipper}} FORCE=1
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
|
||||
- name: 'Validating updater'
|
||||
id: second_full_flash
|
||||
timeout-minutes: 10
|
||||
if: success()
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
./fbt flash_usb PORT=${{steps.device.outputs.flipper}} FORCE=1
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
|
||||
- name: 'Get last release tag'
|
||||
id: release_tag
|
||||
if: failure()
|
||||
run: |
|
||||
echo "tag=$(git tag -l --sort=-version:refname | grep -v "rc\|RC" | head -1)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: 'Wipe workspace'
|
||||
run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;
|
||||
|
||||
- name: 'Checkout latest release'
|
||||
uses: actions/checkout@v4
|
||||
if: failure()
|
||||
with:
|
||||
fetch-depth: 1
|
||||
ref: ${{ steps.release_tag.outputs.tag }}
|
||||
|
||||
- name: 'Flash last release'
|
||||
if: failure()
|
||||
run: |
|
||||
./fbt flash SWD_TRANSPORT_SERIAL=${{steps.device.outputs.stlink}} FORCE=1
|
||||
|
||||
- name: 'Wait for flipper and format ext'
|
||||
if: failure()
|
||||
run: |
|
||||
source scripts/toolchain/fbtenv.sh
|
||||
python3 scripts/testing/await_flipper.py ${{steps.device.outputs.flipper}}
|
||||
python3 scripts/storage.py -p ${{steps.device.outputs.flipper}} format_ext
|
||||
Loading…
x
Reference in New Issue
Block a user