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  |