Compare commits
215 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b934dfc1b | ||
|
|
f9a6c74a23 | ||
|
|
f199beafb2 | ||
|
|
d1832d5e90 | ||
|
|
ad66d3b3c6 | ||
|
|
c0be669a30 | ||
|
|
5dbe1cf0bc | ||
|
|
8a3142da04 | ||
|
|
b0dc8a3940 | ||
|
|
f711b3f929 | ||
|
|
9524a5ef74 | ||
|
|
e487bcd2f8 | ||
|
|
880e7bb1a8 | ||
|
|
fa2d516017 | ||
|
|
e8c6e70a5f | ||
|
|
333f45d2c6 | ||
|
|
4fc6f3b245 | ||
|
|
a3e07586ee | ||
|
|
9fd8d30b6f | ||
|
|
81e490117a | ||
|
|
176c3618b1 | ||
|
|
dba34f25fe | ||
|
|
6ceb71e327 | ||
|
|
60c96b97c6 | ||
|
|
ff41b65077 | ||
|
|
fe637da8fc | ||
|
|
baf661d47d | ||
|
|
384e950ab3 | ||
|
|
0d991e6960 | ||
|
|
d874fcd5cb | ||
|
|
5a58004bbb | ||
|
|
4b5f829375 | ||
|
|
357fbfe63b | ||
|
|
45e78fbdc2 | ||
|
|
bf262efed5 | ||
|
|
12f898f0ff | ||
|
|
c29941aefb | ||
|
|
06b8b9bf1e | ||
|
|
3991db4b36 | ||
|
|
279a33dc8c | ||
|
|
948dafc434 | ||
|
|
27a8f29a68 | ||
|
|
7081d76e7b | ||
|
|
60baf2a608 | ||
|
|
1ac1f0b441 | ||
|
|
406cb8b711 | ||
|
|
dc3d56523a | ||
|
|
e4830a6ebc | ||
|
|
2d8f262dd4 | ||
|
|
96d97af4e6 | ||
|
|
16b976478c | ||
|
|
9cedac9adf | ||
|
|
508dbe4984 | ||
|
|
b7f406d43b | ||
|
|
849aa0f784 | ||
|
|
df78ba8e09 | ||
|
|
31e47e97bd | ||
|
|
085c8008db | ||
|
|
376319cbc8 | ||
|
|
728320b713 | ||
|
|
b55677673f | ||
|
|
c41fe8e4e4 | ||
|
|
9b9dce3676 | ||
|
|
e52e30c56d | ||
|
|
b698126c36 | ||
|
|
f141a67788 | ||
|
|
dec00feb7b | ||
|
|
61744b8d01 | ||
|
|
119c7fe5f1 | ||
|
|
e9984f8b4c | ||
|
|
a38a62fe79 | ||
|
|
e2e4dcc2f8 | ||
|
|
ea5fe0ec86 | ||
|
|
8a08fd5da9 | ||
|
|
13a0a92f0d | ||
|
|
48eb15c79c | ||
|
|
8ee66c3e9b | ||
|
|
e18056ba78 | ||
|
|
b60ba76551 | ||
|
|
5670397c3b | ||
|
|
6ff3f821b2 | ||
|
|
8bc7723faa | ||
|
|
09f3dc74bc | ||
|
|
0d7f305da1 | ||
|
|
c7bf3d3066 | ||
|
|
579e3b5f26 | ||
|
|
a74bcbaeb6 | ||
|
|
3c1d59f152 | ||
|
|
ec218060ac | ||
|
|
303c266eba | ||
|
|
f3904dc5a4 | ||
|
|
04c780f48a | ||
|
|
8d0faae820 | ||
|
|
a50fb2ac5e | ||
|
|
fd0dd34a03 | ||
|
|
3ab17e596b | ||
|
|
33a7478b0a | ||
|
|
747e81fe1e | ||
|
|
cfde6350a6 | ||
|
|
5c52bb7621 | ||
|
|
e40349350d | ||
|
|
a0f6a23062 | ||
|
|
3481252ef7 | ||
|
|
14a180975a | ||
|
|
bb9b52ad3e | ||
|
|
7e86f634ba | ||
|
|
55b463248c | ||
|
|
09148b2d6e | ||
|
|
3d9efa98d4 | ||
|
|
ae9038da36 | ||
|
|
8fb679e098 | ||
|
|
af891bdd4a | ||
|
|
f6d6a626ea | ||
|
|
bf236f5e15 | ||
|
|
2fc2486b91 | ||
|
|
7a6720384f | ||
|
|
be0aa536ba | ||
|
|
df6b81274b | ||
|
|
f785ce1f91 | ||
|
|
0c592ff84a | ||
|
|
8bcd76636e | ||
|
|
86c9b0077c | ||
|
|
e28446de49 | ||
|
|
52434f77a3 | ||
|
|
3e5d499b44 | ||
|
|
577a4ba5a5 | ||
|
|
996b15e204 | ||
|
|
fc15d5ccce | ||
|
|
1edc74acff | ||
|
|
c5fd214f80 | ||
|
|
e82001aaa6 | ||
|
|
e682e02bca | ||
|
|
ae95d75d2e | ||
|
|
84cc3816c4 | ||
|
|
94bb1ad354 | ||
|
|
be4dec77da | ||
|
|
287defdfc5 | ||
|
|
cb6cf95714 | ||
|
|
f82484d447 | ||
|
|
e64de44b73 | ||
|
|
d3c0618699 | ||
|
|
b501d47943 | ||
|
|
d21e5bd56e | ||
|
|
1ad81aaf1f | ||
|
|
5435679420 | ||
|
|
d294b5e256 | ||
|
|
bc77681e65 | ||
|
|
460f573446 | ||
|
|
215466e2d6 | ||
|
|
625eb0a4a5 | ||
|
|
5f582abfe0 | ||
|
|
5c58faa3f5 | ||
|
|
28d9b21483 | ||
|
|
0d35596d96 | ||
|
|
631e532245 | ||
|
|
b29c0d3fb5 | ||
|
|
e74aa2d042 | ||
|
|
e1ff6da6cd | ||
|
|
c02d8beed9 | ||
|
|
f2a8485176 | ||
|
|
dc6da827fa | ||
|
|
3f164ef30d | ||
|
|
afa46b0855 | ||
|
|
e69875954b | ||
|
|
57689a1e0f | ||
|
|
f8c8e63adf | ||
|
|
d4aeee64fa | ||
|
|
661b4b181a | ||
|
|
bb81e86495 | ||
|
|
3cdcd644fe | ||
|
|
fffacfbe26 | ||
|
|
1d5ca45675 | ||
|
|
983537996c | ||
|
|
3e04b73c1e | ||
|
|
830daa8b51 | ||
|
|
543402f64a | ||
|
|
24e7bda854 | ||
|
|
8042f94570 | ||
|
|
bb650c4e87 | ||
|
|
208ea6fbb0 | ||
|
|
a426762605 | ||
|
|
2ee2e8f4ba | ||
|
|
cc285ab05e | ||
|
|
06ad32109d | ||
|
|
5a0f7e20ba | ||
|
|
cf6a1a7301 | ||
|
|
3a70d3b7f6 | ||
|
|
1060f7b037 | ||
|
|
5352e4eb63 | ||
|
|
b0b20392a5 | ||
|
|
14777a7585 | ||
|
|
a5fa342ffa | ||
|
|
90eb608f08 | ||
|
|
be02738c4a | ||
|
|
dad1b0622b | ||
|
|
cb227dafd1 | ||
|
|
f3603e3c04 | ||
|
|
eb74bcd41b | ||
|
|
7b730dd08a | ||
|
|
ce74a35066 | ||
|
|
55692ee82f | ||
|
|
20deb6458a | ||
|
|
cca004a42d | ||
|
|
6c60c96d7c | ||
|
|
b3f1db8f9e | ||
|
|
badf87fe67 | ||
|
|
dc622321b9 | ||
|
|
fd29e190b7 | ||
|
|
3db456da98 | ||
|
|
44d7b5b1ce | ||
|
|
97e0a3026f | ||
|
|
3773428a21 | ||
|
|
b629ae18f2 | ||
|
|
073c87f37d | ||
|
|
0bc3828fd9 |
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
@ -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
@ -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
@ -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
@ -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
@ -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/dark_theme_banner.png
vendored
|
Before Width: | Height: | Size: 48 KiB |
BIN
.github/assets/latest-firmware-template.png
vendored
|
Before Width: | Height: | Size: 19 KiB |
BIN
.github/assets/light_theme_banner.png
vendored
|
Before Width: | Height: | Size: 44 KiB |
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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
|
||||
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_0.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_1.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_2.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_3.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_4.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_5.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Boxing_128x64/frame_6.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,32 +0,0 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 9
|
||||
Active frames: 7
|
||||
Frames order: 0 1 2 1 3 1 2 3 1 4 5 6 5 6 5 4
|
||||
Active cycles: 1
|
||||
Frame rate: 2
|
||||
Duration: 3600
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 2
|
||||
|
||||
Slot: 0
|
||||
X: 78
|
||||
Y: 16
|
||||
Text: F*&K!!!
|
||||
AlignH: Left
|
||||
AlignV: Bottom
|
||||
StartFrame: 2
|
||||
EndFrame: 4
|
||||
|
||||
Slot: 1
|
||||
X: 78
|
||||
Y: 16
|
||||
Text: What ya\nlookin at?!
|
||||
AlignH: Left
|
||||
AlignV: Center
|
||||
StartFrame: 10
|
||||
EndFrame: 15
|
||||
BIN
assets/dolphin/external/L1_Cry_128x64/frame_0.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_1.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_2.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_3.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_4.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_5.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_6.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
assets/dolphin/external/L1_Cry_128x64/frame_7.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
41
assets/dolphin/external/L1_Cry_128x64/meta.txt
vendored
@ -1,41 +0,0 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 8
|
||||
Active frames: 4
|
||||
Frames order: 0 1 2 3 4 2 3 4 5 6 7 6
|
||||
Active cycles: 2
|
||||
Frame rate: 2
|
||||
Duration: 3600
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 2
|
||||
|
||||
Slot: 0
|
||||
X: 22
|
||||
Y: 40
|
||||
Text: I miss you
|
||||
AlignH: Right
|
||||
AlignV: Bottom
|
||||
StartFrame: 9
|
||||
EndFrame: 11
|
||||
|
||||
Slot: 0
|
||||
X: 17
|
||||
Y: 40
|
||||
Text: my friend...
|
||||
AlignH: Right
|
||||
AlignV: Bottom
|
||||
StartFrame: 12
|
||||
EndFrame: 15
|
||||
|
||||
Slot: 1
|
||||
X: 2
|
||||
Y: 29
|
||||
Text: Why are you\nalways away?
|
||||
AlignH: Right
|
||||
AlignV: Bottom
|
||||
StartFrame: 9
|
||||
EndFrame: 15
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,14 +0,0 @@
|
||||
Filetype: Flipper Animation
|
||||
Version: 1
|
||||
|
||||
Width: 128
|
||||
Height: 64
|
||||
Passive frames: 8
|
||||
Active frames: 11
|
||||
Frames order: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
||||
Active cycles: 1
|
||||
Frame rate: 2
|
||||
Duration: 3600
|
||||
Active cooldown: 7
|
||||
|
||||
Bubble slots: 0
|
||||
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_0.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_1.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_10.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_11.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_12.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_13.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_14.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_15.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_16.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_17.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_18.png
vendored
|
Before Width: | Height: | Size: 828 B |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_19.png
vendored
|
Before Width: | Height: | Size: 817 B |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_2.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_20.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_21.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_22.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_23.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_24.png
vendored
|
Before Width: | Height: | Size: 1.7 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_25.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_26.png
vendored
|
Before Width: | Height: | Size: 1.7 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_27.png
vendored
|
Before Width: | Height: | Size: 1.7 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_28.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_29.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_3.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_30.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_31.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_32.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_33.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_34.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_35.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_36.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_37.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_38.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_39.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_4.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_40.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_41.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_42.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_43.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_44.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_45.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_46.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_47.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
assets/dolphin/external/L1_Kaiju_128x64/frame_5.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |