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 |