Compare commits

..

450 Commits

Author SHA1 Message Date
Jiang Jiang Jian
b4a612345b Merge branch 'bugfix/fix_beacon_eb_memory_leak_issue_v5.2' into 'release/v5.2'
fix(wifi): fix beacon eb memory leak issue(Backport v5.2)

See merge request espressif/esp-idf!27924
2023-12-20 16:53:44 +08:00
Roland Dobai
e49823f10c Merge branch 'ci/backport_master_changes_v5.2' into 'release/v5.2'
Ci/backport master changes v5.2

See merge request espressif/esp-idf!27841
2023-12-18 17:32:10 +08:00
Aditya Patwardhan
ff8a6a5bf9 Merge branch 'fix/esp32s3_soc_drom_high_addr_v5.2' into 'release/v5.2'
fix(soc): esp32s3/Fix the DROM_HIGH_ADDR (v5.2)

See merge request espressif/esp-idf!27821
2023-12-15 15:48:17 +08:00
muhaidong
608d575172 fix(wifi): fix beacon eb memory leak issue 2023-12-14 18:10:30 +08:00
Jiang Jiang Jian
41ca90905e Merge branch 'bugfix/fix_esp32h2_system_retention_restore_backup_v5.2' into 'release/v5.2'
fix(esp_hw_support): fix esp32h2 system link restore override cpu clk configuration(v5.2)

See merge request espressif/esp-idf!27810
2023-12-11 20:40:53 +08:00
Marius Vikhammer
4435437501 ci(docs): revert git strategy change for deploy docs 2023-12-11 11:34:04 +01:00
Aleksei Apaseev
8dcf3e5f80 ci: Upload report about modified files and components to s3 bucket 2023-12-11 11:15:45 +01:00
Fu Hanxi
8ce0b8bf73 ci: fix upload failed job log script 2023-12-11 11:15:08 +01:00
Chen Yudong
ceb9e42058 ci: fix fetch git diff from pipeline schedules 2023-12-11 11:14:48 +01:00
Chen Yudong
6947dd533a ci: fix fetch_from_mirror_url_if_exists 2023-12-11 11:14:43 +01:00
Aleksei Apaseev
e6a4ad3d55 ci: Move upload artifacts execution of build and target_test stages to the after script section 2023-12-11 11:13:56 +01:00
igor udot (horw)
21b06f43bf ci: added build log artifacts for linux 2023-12-11 11:12:14 +01:00
Aleksei Apaseev
911ad39808 ci: Upload artifacts of target stage jobs to s3 bucket 2023-12-11 11:12:02 +01:00
Fu Hanxi
651f60e663 ci: improve check pylint get files command 2023-12-11 11:11:39 +01:00
Jiang Jiang Jian
6a34106488 Merge branch 'contrib/github_pr_12559_v5.2' into 'release/v5.2'
fix(spi): correct macro REG_SPI_BASE(i) for all targets (GitHub PR) (v5.2)

See merge request espressif/esp-idf!27708
2023-12-11 16:01:48 +08:00
Jiang Jiang Jian
ff14e382a4 Merge branch 'bugfix/some_wifi_fixes_v5.2' into 'release/v5.2'
fix(wifi): fix some wifi issues

See merge request espressif/esp-idf!27736
2023-12-11 16:00:29 +08:00
Jiang Jiang Jian
499625be33 Merge branch 'save_twdt_to_coredump_v5.2' into 'release/v5.2'
feat(coredump): save twdt panic output to coredump elf file (v5.2)

See merge request espressif/esp-idf!27756
2023-12-11 14:51:33 +08:00
Aditya Patwardhan
ebcb490aa9 fix(soc): esp32s3/Fix the DROM_DROM_HIGH limit
Previously the DROM_HIGH_ADDR for esp32s3 was 0x3D000000, which
    convers only 16 MB of address range. But esp32s3 supports 32 MB
    external memory. So this address should be 0x3E000000
2023-12-11 12:17:12 +05:30
wuzhenghui
613c17bc2f fix(esp_hw_support): fix esp32h2 system link restore override cpu clk configuration 2023-12-11 11:24:00 +08:00
Jiang Jiang Jian
a2b96227ac Merge branch 'bugfix/fix_rtc_us_to_cycle_div_zero_in_deepsleep_v5.2' into 'release/v5.2'
fix(esp_hw_support/sleep): fix rtc_time_us_to_slowclk div zero in deepsleep process (backport v5.2)

See merge request espressif/esp-idf!27763
2023-12-11 10:57:19 +08:00
Jiang Jiang Jian
1ef5c02c37 Merge branch 'feature/reinitialize_icg_map_in_modem_module_enable_v5.2' into 'release/v5.2'
fix(esp_hw_support): re-initialize icg map in modem_clock_module_enable (backport v5.2)

See merge request espressif/esp-idf!27765
2023-12-11 10:56:45 +08:00
Anton Maklakov
aefe0722a0 Merge branch 'feature/qemu-esp-develop-8.1.3-20231206_v5.2' into 'release/v5.2'
feat(tools): update qemu to esp-develop-8.1.3-20231206 (v5.2)

See merge request espressif/esp-idf!27784
2023-12-11 10:52:09 +08:00
Anton Maklakov
96ba61f89f Merge branch 'ci/git_strategy_optimization_v5.2' into 'release/v5.2'
ci: optimize git strategy (v5.2)

See merge request espressif/esp-idf!27793
2023-12-11 10:27:36 +08:00
Ivan Grokhotkov
985cc9318a Merge branch 'feature/storage_nvs_find_key_v5.2' into 'release/v5.2'
feat(nvs_flash): Added function nvs_find_key (v5.2)

See merge request espressif/esp-idf!27806
2023-12-11 10:11:54 +08:00
Ivan Grokhotkov
8f79c54242 Merge branch 'feature/update_strorage_test_config_v5.2' into 'release/v5.2'
feat(storage): update config for app tests (v5.2)

See merge request espressif/esp-idf!27805
2023-12-11 10:11:29 +08:00
radek.tandler
6949092234 feat(nvs_flash): Added function nvs_find_key
Closes https://github.com/espressif/esp-idf/issues/12155
2023-12-09 09:12:31 +01:00
Tomáš Rohlínek
ad25a90d6a feat(storage): minimize platforms for tests 2023-12-09 09:01:21 +01:00
Tomáš Rohlínek
d5dc04693d feat(storage): add dependencies for tests 2023-12-09 09:01:21 +01:00
Tomáš Rohlínek
aca0d3ad17 feat(storage): update config for app tests 2023-12-09 09:01:21 +01:00
Roland Dobai
a36d8bc742 Merge branch 'fix/coredump_port_v5.2' into 'release/v5.2'
fix(tools/coredump): do not detect port when core file is used (v5.2)

See merge request espressif/esp-idf!27670
2023-12-08 21:29:39 +08:00
liuning
3fdbfb2069 fix(wifi): fix disconnected abnormal sleep 2023-12-08 13:08:55 +00:00
muhaidong
87cc516338 fix(wifi): fix psram enabled but initialized fail issue
Closes https://github.com/espressif/esp-idf/issues/11971
2023-12-08 13:08:55 +00:00
zhangyanjiao
c26660e504 fix(wifi/mesh): fix connection and opmoode error in mesh
1. fix the bug that station can't found AP when the authmode is WPA
2. fix wifi mode error when mesh start after station has connected to router

Closes https://github.com/espressif/esp-idf/issues/12646
2023-12-08 13:08:55 +00:00
Jiang Jiang Jian
da169340f9 Merge branch 'bugfix/fix_dhcp_server_can_not_restore_address_pool_issue_5.2' into 'release/v5.2'
fix(dhcp server):dhcp server can not restore address pool 5.2

See merge request espressif/esp-idf!27740
2023-12-08 21:05:00 +08:00
Fu Hanxi
0fe3ec63a0 ci: optimize git strategy 2023-12-08 11:00:19 +01:00
Roland Dobai
7778ab2759 Merge branch 'feat/manifest_check_v5.2' into 'release/v5.2'
feat: use esp-idf-sbom pre-commit plugin (v5.2)

See merge request espressif/esp-idf!27748
2023-12-08 16:54:23 +08:00
Ivan Grokhotkov
fdf04b3198 feat(tools): update qemu to esp-develop-8.1.3-20231206
https://github.com/espressif/qemu/releases/tag/esp-develop-8.1.3-20231206
2023-12-08 15:35:26 +07:00
wuzhenghui
debcb50fd2 fix(esp_hw_support): re-initialize icg map in modem_clock_module_enable 2023-12-08 14:18:45 +08:00
wuzhenghui
7b3c08e37a fix(esp_hw_support/sleep): fix rtc_time_us_to_slowclk div zero in deepsleep process
Closes https://github.com/espressif/esp-idf/issues/12695
2023-12-08 13:59:52 +08:00
Jiang Jiang Jian
db15c0e183 Merge branch 'fix/coexist_reg_esp32c6_set_default_value_v5.2' into 'release/v5.2'
fix(esp_coex): fix esp32c6 coex reg reset issue (backport v5.2)

See merge request espressif/esp-idf!27739
2023-12-08 11:14:58 +08:00
Marius Vikhammer
a5dc34f416 Merge branch 'refactor/soc_caps_multiple_cores_v5.2' into 'release/v5.2'
change(docs): Update multicore tags to SOC_CPU_HAS_MULTIPLE_CORES (v5.2)

See merge request espressif/esp-idf!27743
2023-12-08 10:56:26 +08:00
Erhan Kurubas
d9d388dae7 feat(coredump): save twdt panic output to coredump elf file 2023-12-07 15:21:24 +01:00
Jiang Jiang Jian
97594d2076 Merge branch 'backport/add_config_to_set_custom_mac_as_base_mac_v5_2' into 'release/v5.2'
feat(mac): Add a configuration to set custom MAC as base MAC(Backport V5.2)

See merge request espressif/esp-idf!27738
2023-12-07 21:03:51 +08:00
Jiang Jiang Jian
0a1e5846c7 Merge branch 'bugfix/fix_sm_inject_return_value_v5.2' into 'release/v5.2'
fix(nimble): Added change to return success for API execution (v5.2)

See merge request espressif/esp-idf!27725
2023-12-07 21:03:34 +08:00
Frantisek Hrbata
a6cbcb91d2 feat: use esp-idf-sbom pre-commit plugin
Currently sbom manifest is checked only in .gitmodules and
this check is done in pre-commit and also in CI. Meaning it's running
three times(pre-commit before push if user has it enabled, in CI
as there is the pre-commit run again and again with test in CI). Since
esp-idf-sbom contains a full manifest validation support and pre-commit
plugin for it, let's use it. This removes all the current sbom testing
and replaces it with a signle pre-commit plugin which validates all
manifests files(sbom.yml, idf_component.yml, .gitmodules and also
referenced manifests) in repository. Note that this checks all
manifests, not only ones which were modified. The check is reasonably
fast though, so it should not cause any problem. The reason for
validating all manifest files is that we want to make sure that the sbom
information in .gitmodules is updated too and that the hash
recorded in .gitmodules is up-to-date. Meaning submodule update
would not trigger this plugin, because no manifest was changed.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-12-07 13:22:47 +01:00
Darian Leung
3c8cccc73b change(docs): Update multicore tags to SOC_HP_CPU_HAS_MULTIPLE_CORES
Previously, documentation sections that were only meant for multicore ESP
targets would use tags that depend on CONFIG_FREERTOS_UNICORE. This is not
ideal as project configuration can be changed by the user.

This commit updates those tags to use SOC_HP_CPU_HAS_MULTIPLE_CORES which is
always defined in multicore targets regardless of project configuration.
2023-12-07 17:59:44 +08:00
Darian Leung
a7e2ea76d8 change(soc): Add SOC_HP_CPU_HAS_MULTIPLE_CORES
This commit adds a the SOC_HP_CPU_HAS_MULTIPLE_CORES convenience macro to
soc_caps.h. This is a convenience boolean cap to represent whether or not the
target has multiple cores, and is intended to be used when writing docs for
multiple targets.
2023-12-07 17:53:18 +08:00
Marius Vikhammer
8005821b09 Merge branch 'change/deprecate_legacy_xtensa_include_path_v5.2' into 'release/v5.2'
change(xtensa): Deprecate legacy include paths (v5.2)

See merge request espressif/esp-idf!27673
2023-12-07 17:27:38 +08:00
Island
1f2d548fbb Merge branch 'backport/fix_ble_menuconfig_v5.2' into 'release/v5.2'
Backport/fix ble menuconfig v5.2(backport v5.2)

See merge request espressif/esp-idf!27498
2023-12-07 16:25:30 +08:00
xueyunfei
841339c012 fix(dhcp server):dhcp server can not restore address pool 2023-12-07 15:18:45 +08:00
morris
1fb97c1718 Merge branch 'bugfix/fix_adc_continuous_do_not_rst_apb_clk_v5.2' into 'release/v5.2'
fix(adc): fix adc continuous get less results beacuse do not reset apb clk (v5.2)

See merge request espressif/esp-idf!27600
2023-12-07 15:11:26 +08:00
xiaqilin
39a383981d fix(esp_coex): fix esp32c6 coex reg reset issue 2023-12-07 15:07:06 +08:00
morris
61bd19b446 Merge branch 'bugfix/fix_adc_cali_error_after_light_sleep_wake_on_h2_v5.2' into 'release/v5.2'
adc: fix calibration error when waking up from light sleep on H2 and enable test (v5.2)

See merge request espressif/esp-idf!27602
2023-12-07 14:29:55 +08:00
morris
4e5757f1ab Merge branch 'refactor/uart_read_bytes_from_ringbuf_v5.2' into 'release/v5.2'
change(uart): improved the internal logic of uart_read_bytes (v5.2)

See merge request espressif/esp-idf!27701
2023-12-07 14:23:05 +08:00
zwx
0d4d3c103f feat(mac): Add a configuration to set custom MAC as base MAC 2023-12-07 14:14:55 +08:00
Rahul Tank
f8736aed36 fix(nimble): Added change to return success for API execution 2023-12-07 09:40:12 +05:30
Mahavir Jain
37bf8dff6b Merge branch 'fix/esp32p4-memory-layout_v5.2' into 'release/v5.2'
fix(heap): Update the heap memory layout on esp32p4 target (backport v5.2)

See merge request espressif/esp-idf!27097
2023-12-07 11:52:14 +08:00
Jiang Jiang Jian
90d69b38b2 Merge branch 'bugfix/bod_reset_c6_h2_v5.2' into 'release/v5.2'
fix(bod): Reset brownout in configuration to avoid RF cannot be enabled again(backport v5.2)

See merge request espressif/esp-idf!27722
2023-12-07 10:51:29 +08:00
Jiang Jiang Jian
f32321e6a5 Merge branch 'bugfix/authcomplete_failure_v5.2' into 'release/v5.2'
fix(nimble): Fixed authcomplete failure caused by a mismatch in the c1 value (v5.2)

See merge request espressif/esp-idf!27619
2023-12-07 10:47:52 +08:00
Jiang Jiang Jian
968b15d380 Merge branch 'fix/rng_register_prefix_discrepency_newer_targets_v5.2' into 'release/v5.2'
Fix: RNG register prefix discrepancy for ESP32C6 and ESP32H2 (v5.2)

See merge request espressif/esp-idf!27683
2023-12-07 10:46:15 +08:00
Jiang Jiang Jian
fdd8d4284f Merge branch 'bugfix/fix_uart_disabled_in_driver_cause_restart_stuck_v5.2' into 'release/v5.2'
fix(esp_system): fix uart clock disabled in driver cause esp_restart stuck (backport v5.2)

See merge request espressif/esp-idf!27693
2023-12-07 10:35:07 +08:00
Cao Sen Miao
191466d824 fix(bod): Reset brownout in configuration to avoid RF cannot be enabled again 2023-12-06 19:46:44 +08:00
Island
56563f7092 Merge branch 'bugfix/fix_some_ble_bugs_v5.2' into 'release/v5.2'
Fixed some BLE bugs (backport v5.2)

See merge request espressif/esp-idf!27694
2023-12-06 19:21:22 +08:00
wanlei
572a66b62e fix(spi): correct some signals and dummy bits docs 2023-12-06 16:05:36 +08:00
TD-er
a4bfa19ebd fix(spi): Correct REG_SPI_BASE(i) macro for all targets
The existing formula can never match these registers.

Closes https://github.com/espressif/esp-idf/pull/12559
Closes https://github.com/espressif/esp-idf/pull/12562
2023-12-06 14:44:26 +08:00
Alexey Gerenkov
a3cee541d3 Merge branch 'save_isr_ctx_to_coredump_v5.2' into 'release/v5.2'
feat(coredump): save isr context to coredump elf file (v5.2)

See merge request espressif/esp-idf!27453
2023-12-06 13:57:05 +08:00
Jiang Jiang Jian
bdb0756cdb Merge branch 'bugfix/dpp_deinit_memleak_v52' into 'release/v5.2'
Fix a memory leak in dpp deinit path(v5.2)

See merge request espressif/esp-idf!27680
2023-12-06 13:22:28 +08:00
Guillaume Souchere
66759438a9 fix(heap): Update the heap memory layout on esp32p4 target
- fix the value of SOC_ROM_STACK_START in soc.h
- Update the memory usage of ROM bootloader appendix in bootloader.ld
- Update the soc_memory_regions table to minimize the number of regions
  created after the startup stack is added back as a heap.
2023-12-06 04:48:00 +00:00
Marius Vikhammer
56a6cad52c Merge branch 'fix/esp_hw_support_remove_unused_include_dirs_v5.2' into 'release/v5.2'
fix(esp_hw_support): Removed nonexistent include directories from cmake (v5.2)

See merge request espressif/esp-idf!27606
2023-12-06 12:09:03 +08:00
Song Ruo Jing
be27966ce9 change(uart): improved the internal logic of uart_read_bytes
Ringbuffer usage becomes more efficient with the use of xRingbufferReceiveUpTo

Closes https://github.com/espressif/esp-idf/issues/12386
2023-12-06 11:39:31 +08:00
Island
e2b18f2c2c Merge branch 'bugfix/BLEQABR23-35_v5.2' into 'release/v5.2'
fix(ble_mesh): avoid ble_mesh packet collision by using random adv interval(v5.2)

See merge request espressif/esp-idf!27486
2023-12-06 11:06:47 +08:00
Jiang Jiang Jian
e19be79e4f Merge branch 'fix/usb_host_soc_caps_backport_v5.2' into 'release/v5.2'
USB host soc caps (backport v5.2)

See merge request espressif/esp-idf!27401
2023-12-06 10:55:49 +08:00
Jiang Jiang Jian
a5b9169a7e Merge branch 'contrib/github_pr_12460_v5.2' into 'release/v5.2'
fixing OTA write up to SPI_FLASH_SEC_SIZE margins (GitHub PR) (v5.2)

See merge request espressif/esp-idf!27643
2023-12-06 10:52:24 +08:00
Jiang Jiang Jian
2d8fb1604f Merge branch 'bugfix/IDFGH-11398_v5.2' into 'release/v5.2'
bugfix(ble_mesh): Fixed incorrect RPR Client unicast address was obtained(154b4fcc)(v5.2)

See merge request espressif/esp-idf!27565
2023-12-06 10:51:12 +08:00
wuzhenghui
d07bd19ba6 fix(esp_system): fix uart clock disabled in driver cause esp_restart stuck 2023-12-06 10:36:48 +08:00
chenjianhua
6139b362a0 fix(bt): Update bt lib for ESP32(fa43201)
- Fixed assert for instant passed workaround
- Fixed scan evt timeout
- Fixed random address setting when scanning
2023-12-06 10:35:55 +08:00
shangke
6a08a13e70 fix(bt/controller): Fixed some HCI commands parameter 2023-12-06 10:35:32 +08:00
chenjianhua
70c7f3725f fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(b8f0db9)
- Fixed assert when llcp instant passed
2023-12-06 10:35:21 +08:00
chenjianhua
b586575970 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(70ab55f)
- Fixed assert for instant passed workaround
- Fixed add RPA to white list
- Fixed AES encryption for RPA resolution
2023-12-06 10:35:11 +08:00
chenjianhua
7c3a604e27 fix(bt/bluedroid): Fixed add RPA to white list 2023-12-06 10:34:57 +08:00
Roman Leonov
bc2ef597a4 fix(usb/host): remove bInterval verification during pipe opening for INTR and ISOC EPs 2023-12-05 16:44:53 +01:00
Tomas Rezucha
4cf3acb594 fix(usb/host): Do not abort on string descriptor overflow
Some devices return full LANGID table, even if short LANGID table was requested.
No memory overflow occurs, because we have allocated enough memory for transfers to the
default pipe. So we can ignore the error and continue with string desc fetching.
2023-12-05 16:44:53 +01:00
Darian Leung
af4991fb39 refactor(hal/usb_dwc): Add DWC OTG configuration values
This commit adds a subset of the DWC OTG configuration values to the
'usb_dwc_ll.h' file. Only relevant configuration values have been added.

Some DWC OTG releated constants have also been moved from 'usb_dwc_hal.h'
to 'usb_dwc_ll.h' and renamed.
2023-12-05 16:44:53 +01:00
Darian Leung
e9c617fa19 refactor(soc): SOC_USB_PERIPH_NUM option
This commit refactors SOC_USB_PERIPH_NUM as follows:

- Renamed to SOC_USB_OTG_PERIPH_NUM to avoid confusion with USB Serial JTAG
- Updated to unsigned integer "1U"
- Updated some build rules to depend on SOC_USB_OTG_SUPPORTED instead
2023-12-05 16:44:46 +01:00
harshal.patil
a168fde297 fix(soc/esp32h2): Fix llperi_rng_data field discrepancy 2023-12-05 21:08:33 +05:30
harshal.patil
8558aa4414 fix(soc/esp32c6): Fix llperi_rng_data field discrepancy 2023-12-05 21:08:32 +05:30
jgujarathi
72176eee5d fix(wpa_supplicant): Move concurrent wps and dpp check to before creating task
- Move the check for checking concurrent wps and dpp check to before creating
  task rather than after.
2023-12-05 18:57:33 +05:30
jgujarathi
3da789bae6 fix(wpa_supplicant): Fix a crash in esp_wifi_wps_disable
- Fixes a crash observed in esp_wifi_wps_disable when wps process
  is ongoing, caused due to concurrency issues in cancelling timers.
2023-12-05 18:57:25 +05:30
jgujarathi
34795220d2 fix(wpa_supplicant): Add support for a dpp authentication timeout
- Adds support for a 1 second dpp authentication timeout.
2023-12-05 18:57:17 +05:30
jgujarathi
357e0e144b fix(wpa_supplicant): Restructuring DPP init method to ensure cleanup
- Restructuring DPP init function to ensure cleanup of variables in case of
  init failure
2023-12-05 18:57:09 +05:30
jgujarathi
58f1bde9ef fix(wpa_supplicant): Fix location of clearing up dpp global variables
- Fix location of cleaing up dpp global variables to ensure that there are
  no concurrency issues.
2023-12-05 18:57:02 +05:30
jgujarathi
f9c8db8f94 fix(wpa_supplicant): Fix a memory leak in dpp deinit path
- Ensures that the auth information of dpp gets freed when there is
  dpp gets deinited.
2023-12-05 18:56:52 +05:30
aditi_lonkar
6a92a3582e fix(esp_wifi):Fix WDT when esp_supp_dpp_start_listen called multiple times 2023-12-05 18:56:30 +05:30
zhangyanjiao
609d25482b fix(wifi): fix the crash issue when clear scan ap list 2023-12-05 18:54:15 +05:30
zhangyanjiao
36cbbdcf65 feat(wifi): add new api to get one scan ap record 2023-12-05 18:54:06 +05:30
Darian Leung
a75cf3effd change(xtensa): Add migration guide for depreacted include paths 2023-12-05 18:37:33 +08:00
Darian Leung
b85e6d3dd8 change(xtensa): Deprecate ".../xtensa_timer.h" include path
This commit deprecates the "freertos/xtensa_timer.h" and "xtensa/xtensa_timer.h"
include paths. Users should use "xtensa_timer.h" instead.

- Replace legacy include paths
- Removed some unnecessary includes of "xtensa_timer.h"
- Add warning to compatibility header
2023-12-05 18:04:52 +08:00
Darian Leung
555bd367e1 change(xtensa): Deprecate ".../xtensa_context.h" include path
This commit deprecates the "freertos/xtensa_context.h" and "xtensa/xtensa_context.h"
include paths. Users should use "xtensa_context.h" instead.

- Replace legacy include paths
- Removed some unnecessary includes of "xtensa_api.h"
- Add warning to compatibility header
2023-12-05 18:04:52 +08:00
Darian Leung
c2e134b775 change(xtensa): Deprecate ".../xtensa_api.h" include path
This commit deprecates the "freertos/xtensa_api.h" and "xtensa/xtensa_api.h"
include paths. Users should use "xtensa_api.h" instead.

- Replace legacy include paths
- Removed some unnecessary includes of "xtensa_api.h"
- Replaced some calls with "esp_cpu_..." equivalents
- Add warning to compatibility header
2023-12-05 18:04:52 +08:00
Darshan Dobariya
7cdddd47aa fix(nimble): Fixed authcomplete failure caused by a mismatch in the c1 value (v5.2) 2023-12-05 14:22:42 +05:30
Peter Dragun
ffd3a58ff9 fix(tools/coredump): do not detect port when core file is used
Closes https://github.com/espressif/esp-idf/issues/12673
2023-12-05 09:52:19 +01:00
Marius Vikhammer
bf816394d4 Merge branch 'bugfix/import_lib_example_url_v5.2' into 'release/v5.2'
fix(build-system/example): Removed dead URL for downloading tinyxml2 (v5.2)

See merge request espressif/esp-idf!27660
2023-12-05 15:27:19 +08:00
Marius Vikhammer
52eab870e5 fix(build-system/example): Updated dead URL for downloading tinyxml2
The import_lib example contained a fallback mirror for downloading tinyxml2 sources
but this link was dead. If this mirror was used it would cause the build to fail.
2023-12-05 12:32:22 +08:00
Jiang Jiang Jian
ffbbf0cebf Merge branch 'feature/add_fatfs_sbom_v5.2' into 'release/v5.2'
feat(storage/fatfs): add sbom file manifest for FatFs (v5.2)

See merge request espressif/esp-idf!27479
2023-12-05 12:03:17 +08:00
Tomas Rohlinek
a635d11b4a feat(storage/fatfs): add sbom file manifest for FatFs (v5.2) 2023-12-05 12:03:17 +08:00
Jiang Jiang Jian
df43d670a1 Merge branch 'change/freertos_remove_xcoreid_for_single_core_v5.2' into 'release/v5.2'
change(freertos/idf): Remove xCoreID from TCB in single-core builds (v5.2)

See merge request espressif/esp-idf!27617
2023-12-05 12:01:09 +08:00
Jiang Jiang Jian
7a3efab6a7 Merge branch 'backport/router_forwarding_flag_set_v52' into 'release/v5.2'
feat(lwip): support NA router farwording flag set(Backport v5.2)

See merge request espressif/esp-idf!27631
2023-12-05 11:59:54 +08:00
Jiang Jiang Jian
6388f3f13c Merge branch 'bugfix/nan_sd_dp_timer_fixes_v5.2' into 'release/v5.2'
Fix NAN service discovery, datapath and timer bugs (Backport v5.2)

See merge request espressif/esp-idf!27530
2023-12-05 11:29:16 +08:00
Jiang Jiang Jian
eb848eaa6b Merge branch 'bugfix/remove_rpa_rec_v5.2' into 'release/v5.2'
fix(nimble): Handled the deletion of RPA mapping.(v5.2)

See merge request espressif/esp-idf!27320
2023-12-05 11:16:12 +08:00
Jiang Jiang Jian
c7b527bd27 Merge branch 'bugfix/alarm_args_double_free_v5.2' into 'release/v5.2'
Bugfix/alarm args double free v5.2

See merge request espressif/esp-idf!27537
2023-12-05 11:14:13 +08:00
Martin Vychodil
aba5fdcdcd Merge branch 'fix/fatfsgen_construct_v5.2' into 'release/v5.2'
fix(tools): Fix fatfsgen construct dependency (v5.2)

See merge request espressif/esp-idf!27653
2023-12-05 07:29:32 +08:00
Roland Dobai
fc95a892ab fix(tools): Fix fatfsgen construct exception type and dependency
construct=2.10.70 fixed an issue
(c3866e9492)
and StringError is raised instead of UnicodeDecodeError.
2023-12-04 17:21:10 +01:00
kohait00
4c1c9373e9 fix(app_update): avoid erasing an extra sector than the actual required size
OTA update used to fail if `firmware_size == partition_size`, because the code was trying to
erase one additional sector beyond the space reserved for the firmware partition.

This commit fixes the problem and OTA update can work if the firmware
size exactly matches the allocated partition size.

Closes https://github.com/espressif/esp-idf/pull/12460
2023-12-04 18:42:44 +05:30
Island
3081c8b5ea Merge branch 'bugfix/BLEQABR23-811_v5.2' into 'release/v5.2'
bugfix(ble_mesh): Enable CONFIG_BT_NIMBLE_VS_SUPPORT when using the duplicate...(v5.2)

See merge request espressif/esp-idf!27567
2023-12-04 19:48:29 +08:00
zwx
afbbaaf417 feat(lwip): support NA router farwording flag set
* Update submodule: git log --oneline
  4a8286ab8bcf983f22421e3d4be650837b5eb277..542ba2997f6cc14fe9c3d781bf9b0d890cd70bb1
- fix router forwarding flag set (espressif/esp-lwip@542ba299)
2023-12-04 16:22:24 +08:00
Darian Leung
913550f62c fix(freertos/idf): Fix invalid xCoreID arguments in single-core
IDF FreeRTOS v10.5.1 no longer accepts out of range xCoreID arguments in
"PinnedToCore" task creation functions when building for single-core. This
commit fixes those violations through ESP-IDF.
2023-12-04 15:03:58 +08:00
Darian Leung
ee0ee4887f change(freertos/idf): Remove xCoreID TCB member for single-core
This commit does the following:

- removes the xCoreID member from the TCB when building for single-core
- xCoreID is no longer hard set to 0 when calling "PinnedToCore" task creation
functions in single-core
- Tidy up or add missing xCoreID asserts for functions that take xCoreID as an
argument:
    - Functions that set/query a variable of a particular core will call
      taskVALID_CORE_ID() to ensure ) 0 <= xCoreID < configNUMBER_OF_CORES
    - Task creation functions that accept xCoreID also call taskVALID_CORE_ID()
      but also allow tskNO_AFFINITY.
- Fix TaskStatus_t
    - Remove xCoreID from TaskStatus_t if configTASKLIST_INCLUDE_COREID is not
      defined.
    - Set xCoreID to 0 when calling vTaskGetInfo() in single-core builds
2023-12-04 15:03:55 +08:00
Darian Leung
63fee6c23a refactor(freertos/idf): Refactor yield and affinity macros
This commit refactors the following macros so that calling them no longer
requires referencing pxTCB->xCoreID.

- taskIS_YIELD_REQUIRED()
- taskIS_YIELD_REQUIRED_USING_PRIORITY()
- taskIS_AFFINITY_COMPATIBLE()
2023-12-04 14:59:37 +08:00
zhanghaipeng
633dd89d4a feat(bt/bluedroid): Support ble create sync report disable and filter duplicate 2023-12-04 14:40:58 +08:00
Mahavir Jain
c9f1d3e8be Merge branch 'fix/aes_mpi_interrupt_allocation_workflow_for_aes_gcm_v5.2' into 'release/v5.2'
fix(mbedtls/aes): fix AES interrupt allocation for AES-GCM operations (v5.2)

See merge request espressif/esp-idf!27578
2023-12-04 14:09:43 +08:00
Jakob Hasse
e3653aaa98 fix(esp_hw_support): Removed unused include directories from cmake
* Closes https://github.com/espressif/esp-idf/issues/12700
2023-12-04 12:59:51 +08:00
Marius Vikhammer
0818b1fca1 Merge branch 'feature/misc_core_build_tests_p4_v5.2' into 'release/v5.2'
ci(system): fixed and enabled misc system build tests (v5.2)

See merge request espressif/esp-idf!27476
2023-12-04 12:16:58 +08:00
gaoxu
44f266693a fix(adc): restore cali registers after light sleep wake up on H2 and enable test 2023-12-04 12:03:49 +08:00
gaoxu
35844b3d09 ci(adc): add a test that adc continuous read after restarting 2023-12-04 11:56:24 +08:00
gaoxu
ca3bcb18b0 fix(adc): fix adc continuous get less results beacuse do not reset apb clk 2023-12-04 11:56:24 +08:00
Jiang Jiang Jian
8c86ccc2c6 Merge branch 'bugfix/lwip_dns_docs_v5.2' into 'release/v5.2'
fix(lwip): Document DNS limitation in lwIP (v5.2)

See merge request espressif/esp-idf!27558
2023-12-04 11:05:15 +08:00
Jiang Jiang Jian
7ee2470603 Merge branch 'fix/esp_vfs_fat_sdcard_format_workbuf_leak_v5.2' into 'release/v5.2'
fix: esp_vfs_fat_sdcard_format workbuf memory leak (v5.2)

See merge request espressif/esp-idf!27503
2023-12-04 11:03:21 +08:00
Jiang Jiang Jian
821d82f04e Merge branch 'support/add_srp_salt_ver_gen_api_v5.2' into 'release/v5.2'
Generate Salt and verifier pair for given username and password (v5.2)

See merge request espressif/esp-idf!27360
2023-12-04 11:00:50 +08:00
Jiang Jiang Jian
4e0459f112 Merge branch 'feature/refactor_some_coexist_sections_v5.2' into 'release/v5.2'
Feature/refactor some coexist sections v5.2

See merge request espressif/esp-idf!27365
2023-12-04 10:46:16 +08:00
Shu Chen
3c43fb0707 Merge branch 'backport5.2/ot_examples_config' into 'release/v5.2'
fix(openthread): openthread examples config (backport v5.2)

See merge request espressif/esp-idf!27554
2023-12-03 17:31:52 +08:00
Abhinav Kudnar
fb4e56e9a3 fix(nimble): Handled the deletion of RPA mapping. 2023-12-01 17:54:11 +05:30
Roland Dobai
60e439db60 Merge branch 'feature/docker_git_safe_dirs_v5.2' into 'release/v5.2'
feat(docker): allow to add dirs into git's safe.directory (v5.2)

See merge request espressif/esp-idf!27557
2023-12-01 19:04:54 +08:00
harshal.patil
b94656115e fix(mbedtls/aes): fix AES interrupt allocation for AES-GCM operations 2023-12-01 16:34:49 +05:30
zhanghaipeng
068a364a6b fix(bt/bluedroid): Fix BLE SMP register log level 2023-12-01 17:05:23 +08:00
luoxu
134fd6b8d8 bugfix(ble_mesh): Enable CONFIG_BT_NIMBLE_VS_SUPPORT when using the duplicate scan feature on the NimBLE host. 2023-12-01 16:48:31 +08:00
luoxu
d3a78fef1b bugfix(ble_mesh): Fixed incorrect RPR Client unicast address was obtained(154b4fcc) 2023-12-01 16:04:09 +08:00
Mahavir Jain
3ca40da386 Merge branch 'bugfix/fix_http_client_async_mode_v5.2' into 'release/v5.2'
fix(esp_http_client): Fix esp_http_client async mode (v5.2)

See merge request espressif/esp-idf!27513
2023-12-01 15:38:16 +08:00
David Cermak
b05cfb4eb1 fix(lwip): Document DNS limitation in lwIP
* Add a note that DNS server config is global in lwIP
* Add a section about defining LWIP config macros from CMake
* Mention the DNS limitation in ESP-IDF additions to lwIP
* Update CN for lwIP DNS limitation

Co-Authored-By: Wang Ziyan <wangziyan@espressif.com>
2023-12-01 08:19:26 +01:00
Island
2110f6b037 Merge branch 'update/ble_mesh_put_lib_in_submodule_v5.2' into 'release/v5.2'
fix(ble_mesh): Put Mesh 1.1 lib files in submodule (v5.2)

See merge request espressif/esp-idf!27549
2023-12-01 15:17:17 +08:00
mofeifei
1ef33e12a4 docs: update cn trans idf-docker-image 2023-12-01 08:09:05 +01:00
Frantisek Hrbata
720985250b feat(docker): allow to add paths into git's safe.directory
With 8959555cee7e[1] ("setup_git_directory(): add an owner check for the top..")
git added an ownership check of the git directory and refuses to
run any git commands, even parsing the config file, if the git directory
is not owned by the current user. The "fatal: detected dubious ownership in repository"
is reported.

This fixes CVE-2022-24765[2], which allows to compromise user account. On a
multi-user system or e.g. on a shared file system, one user may create a "rogue"
git repository with e.g. core.fsmonitor set to an arbitrary command. Other user
may unwillingly execute this command by running e.g. git-diff or
git-status within the "rogue" git repository, which may be in one of the parent
directories. If e.g. PS1 is set to display information about a git
repository in CWD, as suggested in Git in Bash[3], the user do not need to run
any git command to trigger this, just entering some subdirectory under
this "rogue" git repository is enough, because the git command will be
started transparently through the script used in PS1. The core.fsmonitor
can be set to arbitrary command. It's purpose is to help git to identify changed files
and speed up the scanning for changed files.

rogue
├── .git     # owned by user1
└── dir1     # owned by user2
    ├── dir2 # owned by user2
    └── .git # owned by user2

user1 sets core.fsmonitor for git repository in rogue directory
$ git config --add core.fsmonitor "bash -c 'rm -rf \$HOME'"

user2 enters dir1 and runs e.g. git diff and triggers the core.fsmonitor command.

The ownership check may cause problems when running git commands in
ESP-IDF Docker container. For example user may run the container as
root, but the mounted project may be owned by a particular user.

In this case git will refuse to execute any git command within the
"/project" directory, because it's not owned by root. To overcome this,
git allows to set safe.directories, for which the ownership check is
skipped. The security check may be completely disabled by setting
safe.directories to "*". This solution was proposed in PR 12636[4], but
it would allow make it possible to exploit this vulnerability again.

This fix allows user to specify git's safe.directory in IDF_GIT_SAFE_DIR
environmental variable, which may be set during container startup.

The IDF_GIT_SAFE_DIR has same format as PATH and multiple directories can be
specified by using a ":" separator. To entirely disable this git security check
within the container, user may set IDF_GIT_SAFE_DIR='*'. This might be
heplfull in CI.

Closes https://github.com/espressif/esp-idf/pull/12636

[1] - 8959555cee
[2] - https://nvd.nist.gov/vuln/detail/cve-2022-24765
[3] - https://git-scm.com/book/en/v2/Appendix-A%3A-Git-in-Other-Environments-Git-in-Bash
[4] - https://github.com/espressif/esp-idf/pull/12636

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-12-01 08:09:05 +01:00
Rahul Tank
dc835a0918 Merge branch 'bugfix/add_legacy_adv_clear_vsc_v5.2' into 'release/v5.2'
fix(nimble): Add support for VSC to clear legacy adv memory (v5.2)

See merge request espressif/esp-idf!27470
2023-12-01 15:03:45 +08:00
Jiang Jiang Jian
264284e0de Merge branch 'doc/change_deepsleep_example_readme_v5.2' into 'release/v5.2'
Doc/change deepsleep example readme v5.2

See merge request espressif/esp-idf!27446
2023-12-01 14:01:07 +08:00
liuning
2482c4a025 feat(coex): apply struct for coex version 2023-12-01 06:00:34 +00:00
liuning
0d0265f6f3 feat(coex): rename coexist sections 2023-12-01 06:00:34 +00:00
Island
eba1baa63d Merge branch 'bugfix/ble_update_lib_20231124_v5.2' into 'release/v5.2'
ble(update):Update c2 lib to 79ed4e8a,Update h2 lib to 9a237426,Update c6 lib to 9a237426

See merge request espressif/esp-idf!27394
2023-12-01 13:58:27 +08:00
Xu Si Yu
4f33ef4e11 fix(openthread): add eventfd nums for spi interface 2023-12-01 11:59:48 +08:00
Shu Chen
0d55c89950 fix(openthread): remove invalid configs from ot examples 2023-12-01 11:59:38 +08:00
Liu Linyan
ba7b323c3e fix(ble_mesh): Use submodule for mesh 1.1 lib files 2023-12-01 10:00:37 +08:00
Liu Linyan
e58ed21fbf fix(ble_mesh): Remove the orginal mesh 1.1 lib files 2023-12-01 10:00:30 +08:00
Roland Dobai
026fb6e292 Merge branch 'fix/monitor_print_filter_v5.2' into 'release/v5.2'
fix(tools/monitor): fix PRINT_FILTER env variable usage (v5.2)

See merge request espressif/esp-idf!27417
2023-12-01 00:08:49 +08:00
morris
587b4b32f8 Merge branch 'bugfix/uart_custom_console_v5.2' into 'release/v5.2'
fix(console): enable to select UART1 port for console output (v5.2)

See merge request espressif/esp-idf!27506
2023-11-30 21:46:22 +08:00
Jin Cheng
d28751ee7f fix(bt/bluedroid): Set the alarm_arg to NULL after releasing to avoid double free in L2CAP layer 2023-11-30 19:58:38 +08:00
Jin Cheng
7a335421e1 fix(bt/bluedroid): Set the alarm_arg to NULL after releasing to avoid double free in BTC layer 2023-11-30 19:58:02 +08:00
Shyamal Khachane
9f65fa31e2 fix(esp_wifi): Fix NAN service discovery, datapath and timer bugs
1. Fix crash while cancelling NAN service
2. Avoid possible crash scenarios while forming datapath
3. Modify peer records structure thus fixing issues in datapath establishment
4. Fix timer out of bound issue causing "No timer handle" warning
5. Fix miscellaneous service discovery and datapath issues
2023-11-30 16:34:19 +05:30
Mu Hai Dong
dd295049a9 fix(wifi): free beacon eb when softap destroy 2023-11-30 16:28:37 +05:30
Shu Chen
b807b6ebf3 Merge branch 'fix/ieee802154_sleep_config_v5.2' into 'release/v5.2'
fix(ieee802154): fix ieeee802154 sleep enable configuration dependency issue (backport v5.2)

See merge request espressif/esp-idf!27467
2023-11-30 16:53:12 +08:00
Harshit Malpani
e4ecfc2133 fix(esp_http_client): Fix esp_http_client async mode
Closes https://github.com/espressif/esp-idf/issues/12358
2023-11-30 12:04:31 +05:30
Rahul Tank
99a923fa0f fix(nimble): Add support for VSC to clear legacy adv memory
Legacy adv does not have an API for clear adv memory in controller.
 Added VSC for same.
2023-11-30 09:10:06 +05:30
Rahul Tank
40d48108b1 Merge branch 'bugfix/cts_handle_invalid_year_val_v5.2' into 'release/v5.2'
fix(nimble): Handled invalid write on year value in Current Time Service (v5.2)

See merge request espressif/esp-idf!27461
2023-11-30 11:38:36 +08:00
Song Ruo Jing
55ed548cc6 fix(console): enable to select UART1 port for console output
This feature was only enabled for esp32, esp32s2, esp32s3 previously.
Now, enabling this feature for all targets.
2023-11-30 11:26:09 +08:00
zhanghaipeng
3d2daa08cc fix(bt/bluedroid): Fix bluedroid menuconfig 2023-11-30 10:42:04 +08:00
zhanghaipeng
804f939ed0 docs(bt/bluedroid): Update ble example document 2023-11-30 10:41:48 +08:00
Adam Múdry
d465ed93f6 fix: esp_vfs_fat_sdcard_format workbuf memory leak 2023-11-29 16:16:58 +01:00
Aditya Patwardhan
c90d14c979 Merge branch 'fix/cleanup_deleted_menuconfig_option_entries_v5.2' into 'release/v5.2'
fix(mbedtls): Fix menuconfig option entries (v5.2)

See merge request espressif/esp-idf!27463
2023-11-29 21:20:55 +08:00
luoxu
afab071f51 bugfix(ble_mesh): Supplementary configuration options that should be enabled. 2023-11-29 19:19:18 +08:00
Liu Linyan
d680a3949b fix(ble_mesh): Support using random adv interval for mesh packets 2023-11-29 19:19:18 +08:00
Marius Vikhammer
faf6bc933e ci(system): fixed and enabled misc system build tests 2023-11-29 16:59:15 +08:00
Martin Vychodil
6fcfe379bc Merge branch 'feature/expose_unload_partitions_v5.2' into 'release/v5.2'
refactor(esp_partition): Expose function for unloading partitions (v5.2)

See merge request espressif/esp-idf!27425
2023-11-29 16:34:26 +08:00
Martin Vychodil
e089cb3d4d Merge branch 'fix/fatfs_formatting_wrong_volume_v5.2' into 'release/v5.2'
Fix: FATFS formatting wrong partition (v5.2)

See merge request espressif/esp-idf!27372
2023-11-29 16:32:24 +08:00
xiaqilin
2555d5cb12 fix(ieee802154): fix ieeee802154 sleep enable configuration dependency issue 2023-11-29 13:44:59 +08:00
Aditya Patwardhan
c1779ff8b7 fix(mbedtls): Removed redundant menuconfig entry 2023-11-29 09:50:12 +05:30
Roshan Bangar
1437d00487 fix(nimble): Handled invalid write on year value in Current Time Service 2023-11-29 09:49:53 +05:30
Jiang Jiang Jian
1a9f3b22f4 Merge branch 'bugfix/fix_wifi_deinit_s_wifi_modem_sleep_lock_v5.2' into 'release/v5.2'
fix(wifi): fix wifi deinit s_wifi_modem_sleep_lock

See merge request espressif/esp-idf!27451
2023-11-29 12:15:59 +08:00
Erhan Kurubas
567bc462f0 feat(coredump): save isr context to coredump elf file 2023-11-28 18:19:03 +01:00
liuning
a9b1a27c9a fix(wifi): fix wifi deinit s_wifi_modem_sleep_lock 2023-11-28 20:57:02 +08:00
Lou Tianhao
09a3d068d9 docs(pm):add uart wakeup description when pd top 2023-11-28 19:39:53 +08:00
Lou Tianhao
70e83a5871 docs(pm):add gpio wakeup description when pd top 2023-11-28 19:39:53 +08:00
Lou Tianhao
e849809f4b docs(pm):change_deepsleep_example_readme 2023-11-28 19:39:53 +08:00
morris
bc38841c11 Merge branch 'bugfix/i80_lcd_tx_param_check_enhancement_v5.2' into 'release/v5.2'
fix(i80_lcd): enhance the check of a valid data phase (v5.2)

See merge request espressif/esp-idf!27427
2023-11-28 18:33:19 +08:00
Rahul Tank
f40318c6c7 Merge branch 'bugfix/fix_duplicate_exception_vsc_5.2' into 'release/v5.2'
fix(nimble): Fix the parameters in duplicate exception list vsc command(v5.2)

See merge request espressif/esp-idf!27405
2023-11-28 15:49:51 +08:00
Rahul Tank
4122499997 Merge branch 'feature/current_time_service_v5.2' into 'release/v5.2'
feat(nimble): Added Example support for Current Time Service (v5.2)

See merge request espressif/esp-idf!26975
2023-11-28 14:00:21 +08:00
Mahavir Jain
ef5acffcbb Merge branch 'fix/memory_leak_in_nvs_flash_v5.2' into 'release/v5.2'
fix(nvs_flash): Fix the memory leak in the nvs_flash test app (v5.2)

See merge request espressif/esp-idf!27422
2023-11-28 13:26:00 +08:00
morris
1f79b5045d fix(i80_lcd): enhance the check of a valid data phase
in case the user passes a (uint8_t){0x00} parameter with the perameter size
set to zero
2023-11-28 09:57:02 +08:00
Adam Múdry
74c0234f72 refactor(esp_partition): Expose function for unloading partitions
Closes https://github.com/espressif/esp-idf/issues/12625
2023-11-27 19:49:59 +01:00
harshal.patil
330f3edf11 fix(nvs_flash): Fix the memory leak in the nvs_flash test app
The leak is now reduced by allocating the AES interrupt and
loading the partitions in the test setup instead of in the tests itself.
2023-11-27 17:25:14 +05:30
Shang Zhou
63ea519cbe docs: Update CN translation for api-guides/tools/idf-monitor.rst 2023-11-27 09:32:41 +01:00
Peter Dragun
c71ee4f78a fix(tools/monitor): fix PRINT_FILTER env variable usage 2023-11-27 09:32:41 +01:00
Roland Dobai
5c74467a5d Merge branch 'fix/astyle_pyyaml_cython_v5.2' into 'release/v5.2'
fix(ci): bump astyle version to v1.0.5 in .pre-commit-config.yaml (v5.2)

See merge request espressif/esp-idf!27398
2023-11-27 16:16:46 +08:00
Rahul Tank
8150abfb67 fix(nimble): Fix the parameters in duplicate exception list vsc command 2023-11-27 08:52:27 +05:30
Rahul Tank
4bedb8372b feat(nimble): Added example support for Current Time Service 2023-11-27 08:43:00 +05:30
Rahul Tank
170055603e Merge branch 'bugfix/fix_dangling_pointer_compilation_warning_v5.2' into 'release/v5.2'
fix(nimble): Fix dangling pointer error during compilation (v5.2)

See merge request espressif/esp-idf!27160
2023-11-27 10:49:05 +08:00
Rahul Tank
634ce1e425 fix(nimble): Fix dangling pointer error during compilation 2023-11-26 12:36:26 +05:30
Frantisek Hrbata
b74bdaceee fix(ci): bump astyle version to v1.0.5 in .pre-commit-config.yaml
pyyaml have problem with newer cython(3.0), this was fixed in pyyaml
6.0.1, which requires cython<3.0. The pyyaml dependency in astyle
was fixed in v1.0.5, but the pre-commit config is still useing v1.0.2.
As a result the pre-commit hooks installation of astyle can fail
on pyyaml. Fix this by bumping the astyle version for pre-commit.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-11-24 14:32:51 +01:00
Martin Vychodil
b780287e3b Merge branch 'backport/uart_select_malloc_5.2' into 'release/v5.2'
fix(vfs): fix uart malloc when locates ISR context in IRAM(Backport 5.2)

See merge request espressif/esp-idf!27383
2023-11-24 20:49:48 +08:00
luomanruo
8a64c4c404 ble: update rom.ld file 2023-11-24 20:33:49 +08:00
luomanruo
c6c42d0b5c ble: update sdkconfig_version on ESP32C2, ESP32H2 and ESP32C6 2023-11-24 20:20:20 +08:00
luomanruo
9ead485ffd ble(fix): fix RX issue on ESP32-C2 2023-11-24 19:41:35 +08:00
luomanruo
6abe369115 ble:
Update c2 lib to 79ed4e8a
Update h2 lib to 9a237426
Update c6 lib to 9a237426
2023-11-24 19:21:13 +08:00
zwx
be96274ea3 fix(vfs): fix uart malloc when locates ISR context in IRAM 2023-11-24 16:09:14 +08:00
Jiang Jiang Jian
a9f7ea3566 Merge branch 'bugfix/ble_gap_unpair_oldest_peer_fix_v5.2' into 'release/v5.2'
fix(nimble): Fixed ble_gap_unpair_oldest_peer to prevent writing to invalid memory (v5.2)

See merge request espressif/esp-idf!27315
2023-11-24 12:24:43 +08:00
Jiang Jiang Jian
f0e1a1f35f Merge branch 'bugfix/ble_update_lib_1110_5.2' into 'release/v5.2'
Bugfix/ble update lib 1110 5.2

See merge request espressif/esp-idf!27062
2023-11-24 10:13:30 +08:00
Adam Múdry
c77b2fcd5d fix(storage): FATFS WL function formatting wrong partition
Closes https://github.com/espressif/esp-idf/issues/12542

Co-authored-by: Tony Stuart <anthonyfstuart@gmail.com>
2023-11-23 22:45:36 +01:00
Jiang Jiang Jian
8cc8a1108d Merge branch 'bugfix/authmode_incompatible_reason_code_v52' into 'release/v5.2'
Expand situations for REASON_NO_AP_FOUND_WITH_COMPATIBLE_SECURITY(v5.2)

See merge request espressif/esp-idf!27341
2023-11-23 19:40:25 +08:00
Vikram Dattu
541b665b9f feat(provisioning): Generate Salt and verifier pair for given username and password
This commit adds a new feature to generate a salt and verifier pair for a given username and
password during the provisioning process. This is useful in scenarios where the pairing pin is
randomly generated and shown via some interface such as a display or console.

- Uses the provided username and password to generate a salt and verifier pair
- Adds support for dev mode where the pin/password can still be read from flash
2023-11-23 14:25:53 +05:30
Vikram Dattu
ee65ea9fb7 refactor(esp_srp): Expose esp_srp.h and add API docs
- Also added missing `protocomm_security2` reference in `protocomm.rst`
2023-11-23 14:25:53 +05:30
Mahavir Jain
7add372f37 Merge branch 'bugfix/return_code_of_ota_finish_api_v5.2' into 'release/v5.2'
fix(esp_https_ota): fix return code of esp_https_ota_finish API (v5.2)

See merge request espressif/esp-idf!27334
2023-11-23 16:30:16 +08:00
Jiang Jiang Jian
263d186a5f Merge branch 'bugfix/fix_wifi_init_reentrant_issue_v5.2' into 'release/v5.2'
fix(wifi): fix wifi init reentrant issue

See merge request espressif/esp-idf!27176
2023-11-23 15:28:26 +08:00
Marius Vikhammer
b7ac980fbc Merge branch 'backport/add_docs_for_coex_v52' into 'release/v5.2'
feat(docs) Add RF Coexist docs for H2

See merge request espressif/esp-idf!27237
2023-11-23 13:57:40 +08:00
darshan
80f3916f0f fix(nimble): Fixed ble_gap_unpair_oldest_peer to prevent writing to invalid memory 2023-11-23 10:54:31 +05:30
liuning
7faa087670 fix(wifi): fix wifi init reentrant issue 2023-11-23 10:37:16 +08:00
Shu Chen
d0dab67955 Merge branch 'fix/esp32c6_sleep_pll_issue_v5.2' into 'release/v5.2'
fix(pm): add mac/bb power down/up prepare for fix esp32c6 pll issue (backport v5.2)

See merge request espressif/esp-idf!27313
2023-11-23 02:31:14 +08:00
Martin Vychodil
004e93764f Merge branch 'bugfix/uart_vfs_select_in_iram_v5.2' into 'release/v5.2'
fix: add UART VFS select callback in IRAM when CONFIG_UART_ISR_IN_IRAM is enabled (v5.2)

See merge request espressif/esp-idf!27297
2023-11-22 22:43:24 +08:00
Roland Dobai
f41d1b09f8 Merge branch 'contrib/github_pr_12558_v5.2' into 'release/v5.2'
Fix: esptool_py incorrectly assumed target name equals binary name (GitHub PR) (v5.2)

See merge request espressif/esp-idf!27268
2023-11-22 22:41:20 +08:00
jgujarathi
83d9e81789 fix(esp_wifi): Expand situations for REASON_NO_AP_FOUND_WITH_COMPATIBLE_SECURITY
- Fixes issue with connecting and discovering WEP APs
- Expands the reasons for trigerring a disconnect using
  REASON_NO_AP_FOUND_WITH_COMPATIBLE_SECURITY
-- SAE-PK configured as compulsory in sta config but disabled for the AP
-- SAE-H2e configured as compulsory in sta config but disabled for an AP
that has authmode as WPA3-PSK or WPA3-WPA2-PSK.
-- Open AP found but we have set password or enabled enterprise mode.
-- SAE HnP set in config and AP supports H2E only
-- WPA3-EXT-PSK AP but H2E disabled in config
2023-11-22 19:10:29 +05:30
Harshit Malpani
e202aa3b9f fix(esp_https_ota): fix return code of esp_https_ota_finish API
Closes https://github.com/espressif/esp-idf/issues/12635
2023-11-22 17:09:47 +05:30
Jiang Jiang Jian
c23973dfa7 Merge branch 'test/ctrl_acl_u_pkt_type_v5.2' into 'release/v5.2'
feat(bt/bluedroid): Added an API to specify data types for ACL-U traffic (v5.2)

See merge request espressif/esp-idf!27128
2023-11-22 17:17:22 +08:00
Jiang Jiang Jian
8495745471 Merge branch 'fix/remove_deprecated_bt_example_sdkfonfigs_v5.2' into 'release/v5.2'
ci(bt/bluedroid): remove configs that are not in effect (backport v5.2)

See merge request espressif/esp-idf!27281
2023-11-22 17:17:12 +08:00
zwx
323f128228 feat(docs): Add RF Coexist docs for H2 2023-11-22 16:58:54 +08:00
xiaqilin
6ffc6a40a7 fix(pm): add mac/bb power down/up prepare for fix esp32c6 pll issue
* switch root clk src to PLL for modem reg opt and added callback
* register power_down/power_up callback in ieee802154 driver for esp32c6
* remove software regdma opt in bt
2023-11-22 11:58:02 +08:00
Jiang Jiang Jian
c7a270f83d Merge branch 'feature/support_ext1_clear_spec_pins_v5.2' into 'release/v5.2'
fix(pm/ext1): fix c6 h2 lp_aon_ll_ext1_set_wakeup_pins func

See merge request espressif/esp-idf!27285
2023-11-22 11:35:02 +08:00
Jiang Jiang Jian
93b2c4640b Merge branch 'bugfix/coex_deprecate_config_rename_v5.2' into 'release/v5.2'
fix(esp_coex): Fix deprecated configuration options not rename to new one (Backport v5.2)

See merge request espressif/esp-idf!27091
2023-11-22 11:33:20 +08:00
Rahul Tank
ecd894a4bd Merge branch 'feature/get_whitelist_size_v5.2' into 'release/v5.2'
feat(nimble): Added API to retrieve the size of the controller's white list (v5.2)

See merge request espressif/esp-idf!26953
2023-11-22 11:15:19 +08:00
sonika.rathi
45d801d815 fix(vfs/uart): add UART VFS select callback in IRAM
UART VFS select callback is placed in IRAM when CONFIG_UART_ISR_IN_IRAM is enabled
2023-11-21 10:26:25 +01:00
Jin Cheng
15b27b1749 feat(bt/bluedroid): Added an API to specify data types for ACL-U traffic 2023-11-21 08:09:24 +00:00
Jiang Jiang Jian
26aa680b5b Merge branch 'bugfix/add_par_check_in_ag_cind_res_v5.2' into 'release/v5.2'
Bugfix/add par check in ag cind res v5.2

See merge request espressif/esp-idf!27256
2023-11-21 16:08:09 +08:00
luomanruo
b7b042f45d ble(fix): deinit crash issue 2023-11-21 15:07:37 +08:00
zwl
8f44bee739 fix(ble): fixed ble occasional rx exception issue 2023-11-21 15:06:23 +08:00
luomanruo
e785f453f4 ci(ble/bluedroid): Add notes in sdkconfig.defaults 2023-11-21 15:06:23 +08:00
luomanruo
533b82aae1 ble: update controller log module 2023-11-21 15:06:23 +08:00
luomanruo
17c72d85e4 ble: update c6 h2 lib to 5b1dfd2b, c2 lib to db4e1fb2 2023-11-21 15:06:23 +08:00
luomanruo
564e5c9429 ble(fix): Fixed the issue of not returning memory to the memory pool after deinit callout
ble(fix): Fixed the issue of not returning memory to the memory pool after deinit callout
2023-11-21 15:06:23 +08:00
darshan
fb6ba3f337 feat(nimble): Added API to retrieve the size of the controller's white list (v5.2) 2023-11-21 12:34:55 +05:30
Jiang Jiang Jian
f04854bb4a Merge branch 'docs/update_nan_docs_v5.2' into 'release/v5.2'
Fix inconsistency in NAN documentation (Backport v5.2)

See merge request espressif/esp-idf!27267
2023-11-21 11:48:31 +08:00
Lou Tianhao
d7ae1665f1 fix(pm/ext1): fix c6 h2 lp_aon_ll_ext1_set_wakeup_pins func 2023-11-21 11:31:53 +08:00
Jiang Jiang Jian
ba8afdbf81 Merge branch 'bugfix/fix_incorrect_irk_set_v5.2' into 'release/v5.2'
fix(nimble): Fixed issue of incorrect IRK being set (v5.2)

See merge request espressif/esp-idf!27249
2023-11-21 11:16:45 +08:00
Jiang Jiang Jian
feda32be06 Merge branch 'bugfix/newlib_test_correct_assertions_v5.2' into 'release/v5.2'
fix(newlib,ci): wrong floating point number handling in tests (v5.2)

See merge request espressif/esp-idf!27089
2023-11-21 11:15:50 +08:00
Jiang Jiang Jian
df7ba090f3 Merge branch 'bugfix/esp32h2_ecdsa_hardware_k_v5.2' into 'release/v5.2'
fix(esp32h2): program use_hardware_k efuse bit for ECDSA key purpose (v5.2)

See merge request espressif/esp-idf!27234
2023-11-21 11:13:37 +08:00
Jiang Jiang Jian
c73141a9c2 Merge branch 'bugfix/rmt_tx_check_owner_v5.2' into 'release/v5.2'
fix(rmt): reenable dma owner check (v5.2)

See merge request espressif/esp-idf!27260
2023-11-21 11:12:06 +08:00
gongyantao
98261d38cc ci(bt/bluedroid): remove configs that are not in effect 2023-11-21 10:09:15 +08:00
Wang Meng Yang
b1bba5fdd3 Merge branch 'bugfix/spp_deinit_crash_v5.2' into 'release/v5.2'
fix(bt/bluedroid): Fix the crash of invalid access to released resources (v5.2)

See merge request espressif/esp-idf!27250
2023-11-21 09:59:01 +08:00
Frantisek Hrbata
bb29c6e55d feat(ci): add test for custom cmake CMAKE_EXECUTABLE_SUFFIX
Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-11-20 10:48:47 +01:00
Arno Moonen
aaf398617c fix(build): fix build failure if CMAKE_EXECUTABLE_SUFFIX is set
From: Arno Moonen <arno.moonen@airios.eu>

Follows original message from Arno Moonen <arno.moonen@airios.eu>

While integrating the ESP-IDF into our existing CMake structure,
I've come across quite some hurdles. Most I've been able to fix
in our CMake files, however this one I could not.

Most of the targets created by the esptool_py component assume
that the EXECUTABLE IDF build property (which contains the name
of the CMake executable target) always equals the name of the
created binary.

This is however not always true. For instance, in our setup we use
CMAKE_EXECUTABLE_SUFFIX_C and CMAKE_EXECUTABLE_SUFFIX_CXX in our
toolchain file (both set to .elf). If we do add_executable(my_app),
the target binary file would actually be my_app.elf.

In order to fix this, I've updated it to use the TARGET_FILE generated
expression. That way we also no longer need the EXECUTABLE_DIR IDF build
property here.

I've fixed this on v5.0.1 (as that's the ESP-IDF version I'm currently
trying to integrate), but I assume it should be easy to apply the same
fix to newer versions and the master branch as well.

Note that this problem might exist in multiple places where EXECUTABLE
is being used. While going through the ESP-IDF code base, I even noticed
that a few places actually already seem to use the TARGET_FILE expression.
To be honest the property name might be somewhat confusing as well, as it
is actually the executable target.

Closes https://github.com/espressif/esp-idf/pull/12558
2023-11-20 10:48:47 +01:00
Shyamal Khachane
782eaa3c7e docs(esp_wifi): Fix inconsistency in NAN documentation 2023-11-20 15:07:45 +05:30
Jiang Jiang Jian
d4b4fe85af Merge branch 'feature/support_for_32_and_128_bit_custom_uuids_v5.2' into 'release/v5.2'
feat(bt/bluedroid): Add new APIs for 32 and 128-bit UUIDs (backport v5.2)

See merge request espressif/esp-idf!27229
2023-11-20 17:00:47 +08:00
morris
40093b34eb fix(rmt): enable dma owner check
Closes https://github.com/espressif/esp-idf/issues/12564
2023-11-20 14:55:34 +08:00
Jin Cheng
78a3ecb7ff fix(bt/bluedroid): corrected the API documents of profile HFP and A2DP 2023-11-20 11:58:13 +08:00
Jin Cheng
135987b339 fix(bt/bluedroid): Added some argument check in APIs of HFP AG 2023-11-20 11:57:58 +08:00
Mahavir Jain
e67e9cca57 Merge branch 'fix/aes_mpi_interrupt_allocation_workflow_v5.2' into 'release/v5.2'
fix(mbedtls): move interrupt allocation during initialization phase (v5.2)

See merge request espressif/esp-idf!27203
2023-11-20 10:54:20 +08:00
morris
ea21b8b700 Merge branch 'bugfix/mcpwm_fault_trigger_test_v5.2' into 'release/v5.2'
fix(mcpwm): fault trigger test forget connect timer and operator (v5.2)

See merge request espressif/esp-idf!27239
2023-11-20 10:52:03 +08:00
Rahul Tank
600c7c8828 fix(nimble): Fixed issue of incorrect IRK being set 2023-11-20 08:21:50 +05:30
morris
8abcc07d1f fix(mcpwm): fault trigger test forget connect timer and operator 2023-11-17 16:34:40 +08:00
Mahavir Jain
bad8adfd59 docs(ecdsa): add a note about TRNG dependency for ECDSA peripheral 2023-11-17 07:13:53 +00:00
Mahavir Jain
f207ce15df fix(api-docs): include in the ECDSA APIs for doxygen build 2023-11-17 07:13:53 +00:00
Mahavir Jain
2882b6f68b docs: add ECDSA peripheral chapter for H2/P4
- Add ECDSA peripheral chapter and instructions to program efuse key block
- Update security guide for ECDSA peripheral mention for device identity
- Link with ESP-TLS guide about using ECDSA peripheral in TLS connection
2023-11-17 07:13:53 +00:00
Mahavir Jain
f434d21f4a fix(ecdsa): remove unused k_mode from the ECDSA HAL/LL API
For ESP32-H2 case, the hardware k mode is always enforced through
efuse settings (done in startup code).

For ESP32-P4 case, the software k mode is not supported in the peripheral
itself and code was redundant.
2023-11-17 07:13:53 +00:00
Mahavir Jain
d3b4acf7a0 fix(esp32h2): program use_hardware_k efuse bit for ECDSA key purpose
In ESP32-H2, the ECDSA peripheral by default uses the TRNG (hardware)
generated k value but it can be overridden to software supplied k.
This can happen through by overriding the `ECDSA_SOFTWARE_SET_K` bit
in the configuration register. Even though the HAL API is not exposed
for this but still it could be achieved by direct register
programming. And for this scenario, if sufficiently random k is not
supplied by the software then it could posses a security risk.

In this change, we are unconditionally programming the efuse
`ESP_EFUSE_ECDSA_FORCE_USE_HARDWARE_K` bit during startup security
checks itself. Additionally, same is ensured in the `esp_efuse_write_key`
API as well. This always enforces the hardware k mode in the ECDSA
peripheral and ensures strongest possible security.
2023-11-17 07:13:53 +00:00
Jiang Jiang Jian
35013d90a3 Merge branch 'bugfix/fix_onebyte_watchpoint_setting_v5.2' into 'release/v5.2'
fix(riscv): supports 1 byte and larger than 64byte range watchpoint setting (v5.2)

See merge request espressif/esp-idf!27214
2023-11-17 13:49:30 +08:00
Jiang Jiang Jian
57bbfd423a Merge branch 'fix/heap-task-tracking_v5.2' into 'release/v5.2'
fix(heap): Fix bugs in heap task tracking (backport v5.2)

See merge request espressif/esp-idf!27042
2023-11-17 12:47:52 +08:00
Marius Vikhammer
3d591c57c0 Merge branch 'feature/add_run_time_counter_type_option_v5.2' into 'release/v5.2'
feat(freertos/idf): Add configRUN_TIME_COUNTER_TYPE option (v5.2)

See merge request espressif/esp-idf!26848
2023-11-17 11:25:37 +08:00
Jiang Jiang Jian
9d694e40ed Merge branch 'bugfix/clear_ulp_wake_intr_in_wake_source_enable_v5.2' into 'release/v5.2'
fix(esp_hw_support): clear all type ULP wakeup intr status at ulp wakeup source enable (backport v5.2)

See merge request espressif/esp-idf!27187
2023-11-17 11:04:23 +08:00
Jiang Jiang Jian
1cdca25776 Merge branch 'bugfix/fix_lightsleep_current_leakage_on_usj_pad_v5.2' into 'release/v5.2'
fix(esp_hw_support): fix lightsleep current leakage on usb pad (backport v5.2)

See merge request espressif/esp-idf!27199
2023-11-17 10:47:31 +08:00
Jin Cheng
0e61201243 fix(bt/bluedroid): Fix the crash of invalid access to released resources
It is caused by the delayed timer is alarmed after esp_spp_deinit.
2023-11-17 10:37:28 +08:00
Jiang Jiang Jian
7f0f299e66 Merge branch 'bugfix/fix_dhcp_subnet_option_api_dos_not_work_issue_5.2' into 'release/v5.2'
Fix(dhcps):fix dhcp subnet option api dos not work issue 5.2

See merge request espressif/esp-idf!27210
2023-11-17 10:33:51 +08:00
Jiang Jiang Jian
fc11d2ae72 Merge branch 'bugfix/secure_boot_v2_docs_v5.2' into 'release/v5.2'
fix(docs): correct the target specific macros for secure boot v2 guide (v5.2)

See merge request espressif/esp-idf!27169
2023-11-17 10:31:57 +08:00
Jiang Jiang Jian
7f8fe9569c Merge branch 'bugfix/fix_some_ble_bugs_v5.2' into 'release/v5.2'
Fixed some BLE bugs (backport v5.2)

See merge request espressif/esp-idf!27195
2023-11-17 10:30:27 +08:00
Jiang Jiang Jian
bf8a6ef490 Merge branch 'bugfix/fix_psram_access_faild_after_pd_cpu_wakeup_v5.2' into 'release/v5.2'
fix(esp_pm): fix psram access failed after pd_cpu wakeup if uart driver driven console is used (backport v5.2)

See merge request espressif/esp-idf!27050
2023-11-17 10:29:03 +08:00
Jiang Jiang Jian
f8ee9b334c Merge branch 'bugfix/freertos_define_list_volatile_v5.2' into 'release/v5.2'
fix(freertos/idf): Define configLIST_VOLATILE for list elements (v5.2)

See merge request espressif/esp-idf!27096
2023-11-17 10:28:44 +08:00
Jiang Jiang Jian
47ddba60d7 Merge branch 'bugfix/generate_new_irk_across_reboot_v5.2' into 'release/v5.2'
fix(nimble): Generate a new unique IRK for every chip. (v5.2)

See merge request espressif/esp-idf!27116
2023-11-17 10:28:22 +08:00
Jiang Jiang Jian
2fa1e2b23a Merge branch 'bugfix/wifi_backport_v5.2' into 'release/v5.2'
fix(esp_wifi): backport some wifi fixes to v5.2

See merge request espressif/esp-idf!27185
2023-11-17 04:43:10 +08:00
Jiang Jiang Jian
f0869bb354 Merge branch 'bugfix/dpp_config_memset_v5.2' into 'release/v5.2'
Wi-Fi: Fixed some DPP issues (v5.2)

See merge request espressif/esp-idf!27191
2023-11-16 20:37:28 +08:00
Jiang Jiang Jian
89c3bebad4 Merge branch 'bugfix/move_fe_32m_to_adc_fe_common_clock_v5.2' into 'release/v5.2'
fix(esp_hw_support): move fe_32m to fe/adc common clock (backport v5.2)

See merge request espressif/esp-idf!27057
2023-11-16 20:36:58 +08:00
wuzhenghui
600986cf49 fix(riscv): supports 1 byte and larger than 64byte range watchpoint setting 2023-11-16 20:23:57 +08:00
wuzhenghui
4379d26f65 change(soc): rename SOC_CPU_WATCHPOINT_SIZE to SOC_CPU_WATCHPOINT_MAX_REGION_SIZE 2023-11-16 20:23:57 +08:00
xueyunfei
30ecc4ce72 Fix(dhcps):fix dhcp subnet option api dos not work issue 2023-11-16 20:17:42 +08:00
harshal.patil
9bf48e77f0 fix(mbedtls): move interrupt allocation during initialization phase 2023-11-16 16:16:57 +05:30
wuzhenghui
b7f1aa5292 fix(esp_hw_support): fix lightsleep current leakage on usb-phy controlled pad 2023-11-16 17:18:43 +08:00
chenjianhua
d65f8a5fc6 fix(bt): Update bt lib for ESP32-C3 and ESP32-S3(2758518)
- Fixed power state setting when entering modem sleep
2023-11-16 16:31:25 +08:00
chenjianhua
34d964bf38 Update bt lib for ESP32-C3 and ESP32-S3(f817304)
- Support get the range of TX power level
- Support clear legacy adv using vendor hci
2023-11-16 16:31:18 +08:00
chenjianhua
48b4693eae update esp32 bt-lib (6458728)
- Modify mesh proxy solic uuid to 0x18590303
- Support get the range of TX power level
- Support clear legacy adv using vendor hci
2023-11-16 16:29:47 +08:00
chenjianhua
9ecfa6af81 feat(bt/bluedroid): support clear legacy advertising 2023-11-16 16:29:32 +08:00
morris
43f2476aac Merge branch 'bugfix/esp32s3_usb_otg_console_without_efuse_v5.2' into 'release/v5.2'
fix(console): switch USB PHY to OTG when OTG is used for console (v5.2)

See merge request espressif/esp-idf!27134
2023-11-16 16:29:09 +08:00
Kapil Gupta
476f83c602 fix(wifi): Disallow DPP and WPS concurrency 2023-11-16 12:34:23 +05:30
Kapil Gupta
ab93a6bd5b fix(wpa_supplicant): memzero wifi config before sending config event 2023-11-16 12:34:10 +05:30
wuzhenghui
79dd7a350e ci(ulp_test): fix fake sleep of the maincore in ulp pytest cases 2023-11-16 11:47:20 +08:00
wuzhenghui
adc8351458 fix(esp_hw_support): clear all type ULP wakeup intr status at ulp wakeup source enable 2023-11-16 11:47:20 +08:00
Marius Vikhammer
681439b85a Merge branch 'change/freertos_local_crit_section_macro_v5.2' into 'release/v5.2'
change(freertos/idf): Refactor thread safety convenience macros (v5.2)

See merge request espressif/esp-idf!26997
2023-11-16 11:23:25 +08:00
Sarvesh Bodakhe
8baaeb2fa3 fix(wifi): fix bug in 'esp_wifi_deauthenticate_internal' and other improvements 2023-11-16 11:13:45 +08:00
Sarvesh Bodakhe
eb51374615 fix(wpa_supplicant): Add some bugfixes in wpa_supplicant
1) Add parameter to configure reason code of deauth frame
2) Add logs to indicate MIC failure 4-Way-Handshake
3) Process RSNXE capabilities only if AP advertises them
2023-11-16 11:13:26 +08:00
zhangyanjiao
00484dc8a7 feat(wifi/vendor): get more wifi information in csi rx callback 2023-11-16 11:11:26 +08:00
zhangyanjiao
539c4d8cd0 doc(Wi-Fi/Vendor): Update comments for wifi_csi_info_t 2023-11-16 11:09:52 +08:00
xueyunfei
f5b7b148f1 Fix(esp_wifi): Add the missing header file to the wifi header files. 2023-11-16 11:09:38 +08:00
jgujarathi
b62d63b767 fix(esp_wifi): Add more descriptive reasons for disconnect
Adds 3 more ddisconnect reasons in case of No AP found.
1. REASON_NO_AP_FOUND_IN_RSSI_THRESHOLD : AP rejected because it did
   not meet rssi threshold.

2. REASON_NO_AP_FOUND_IN_AUTHMODE THRESHOLD : AP rejected because it
   did not meet security threshold.

3. REASON_NO_AP_FOUND_WITH_COMPATIBLE_ SECURITY : AP rejected because
   of incompatible security configuration. These situations could include
   -- bss offerring WEP, but our password is not WEP compliant,
   -- Encrypted AP bss but we have no password config set.
   -- AP is Enterprise but we have not setup enterprise config and vice versa

    Closes https://github.com/espressif/esp-idf/issues/5957
2023-11-16 11:08:55 +08:00
muhaidong
de36cb7904 fix(wifi): sta not pmf capable when ap requires should reject profile 2023-11-16 11:07:48 +08:00
zhangyanjiao
07245bf43a fix(wifi/mesh): fix the IE crypto disable error and update doc 2023-11-16 11:03:59 +08:00
muhaidong
2b6feac67c change(wifi): update esp_coexist_internal.h and esp_modem_wrapper.h 2023-11-16 11:03:44 +08:00
muhaidong
6cabcc8206 docs(esp_mesh): update esp_mesh_internal.h 2023-11-16 11:03:32 +08:00
muhaidong
6bf448ddc8 update(wifi): update esp_wifi_crypto_types.h 2023-11-16 11:03:08 +08:00
muhaidong
868d52dcd1 update(esp_coexist): update esp coexist header file 2023-11-16 11:02:56 +08:00
muhaidong
22c5a4befc fix(wifi): add esp_wifi and esp_coexist header files to Doxyfile 2023-11-16 11:02:40 +08:00
muhaidong
d8b2b9e77f esp_supplicant: remove wpa supplicant ROM source code copyrights 2023-11-16 11:02:30 +08:00
linruihao
7b27e4e66a fix(esp_coex): Fix deprecated configuration options not rename to new one 2023-11-16 02:59:00 +00:00
wuzhenghui
4175c60a21 fix(esp_hw_support): move fe_32m to fe/adc common clock 2023-11-16 02:58:16 +00:00
Jakob Hasse
592b1660a0 fix(newlib,ci): wrong floating point number handling in tests 2023-11-16 02:57:41 +00:00
Guillaume Souchere
5740323822 fix(heap): Add missing test for heap task tracking config
- Add sdkconfig.ci.task_tracking that runs generic tests
with heap task tracking enabled.
- Add task_tracking.c that includes a test checking that
a created task that allocates memory is added to the list
of task tracked by the heap task tracking feature.
2023-11-16 02:57:15 +00:00
Guillaume Souchere
4824325fe4 fix(heap): Fix bugs in heap task tracking
Update task tracking feature to fix bugs introduced when
decoupling task tracking from heap poisoning.

Closes https://github.com/espressif/esp-idf/issues/12498
Closes https://github.com/espressif/esp-idf/issues/12493
2023-11-16 02:57:15 +00:00
wuzhenghui
c570105f36 fix(esp_pm): fix psram access faild after pd_cpu wakeup 2023-11-16 02:55:06 +00:00
wuzhenghui
841d75b3a3 change(esp_pm): improve POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP description
Rename PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP to PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP
and improve the description for it
2023-11-16 02:55:06 +00:00
Darian Leung
2d07e3a6dc change(freertos): Update real_time_stats example to use configRUN_TIME_COUNTER_TYPE
This commit updates the real_time_stats example to use the configurable
configRUN_TIME_COUNTER_TYPE. The CONFIG_FREERTOS_RUN_TIME_COUNTER_TYPE_U64 is
enabled by the example by default to demonstrate its usage.

Note: Also cleaned up redundant configs in sdkconfig.ci
2023-11-16 10:16:00 +08:00
Darian Leung
d0aa950fa6 feat(freertos/idf): Add configRUN_TIME_COUNTER_TYPE option
This commit adds a Kconfig option for configRUN_TIME_COUNTER_TYPE

Closes https://github.com/espressif/esp-idf/issues/11973
2023-11-16 10:16:00 +08:00
Marius Vikhammer
7bbe4eae46 Merge branch 'feature/freertos_add_valid_core_id_macro_v5.2' into 'release/v5.2'
feat(freertos/idf): Add taskVALID_CORE_ID() macro (v5.2)

See merge request espressif/esp-idf!27180
2023-11-16 10:08:17 +08:00
Marius Vikhammer
2f694bee0a Merge branch 'bugfix/esp32p4_fpu_check_v5.2' into 'release/v5.2'
fix(riscv): fix a bug in FPU exception handling (backport v5.2)

See merge request espressif/esp-idf!27172
2023-11-16 09:39:22 +08:00
Jiang Jiang Jian
293f5631bb Merge branch 'bugfix/fix_deinit_init_wifi_scan_fail_issue_v5.2' into 'release/v5.2'
Bugfix/fix deinit init wifi scan fail issue v5.2(Backport v5.2)

See merge request espressif/esp-idf!27065
2023-11-16 04:12:15 +08:00
Darian Leung
7391b59f54 feat(freertos/idf): Add taskVALID_CORE_ID() macro
This commit adds a taskVALID_CORE_ID() macro, similar to the one offered in
Amazon SMP FreeRTOS.

- Various functions have been updated to use that macro
- Removed some unecessary static asserts of CONFIG_FREERTOS_NO_AFFINITY and
added casting.
- Uncrustify changes
2023-11-15 22:05:54 +08:00
Omar Chebib
e5155c2a54 fix(riscv): fix a bug in FPU exception handling
On the ESP32-P4, it is possible to have an exception because of an FPU instruction
while EXT_ILL CSR is not zero and its FPU bit is not set.
2023-11-15 18:58:30 +08:00
Sudeep Mohanty
2c0cea641a fix(freertos/idf): Define configLIST_VOLATILE for list elements
It was noticed that when high level compiler optimizations are enabled,
the compiler optimizes some list manupulation code. This commit enables
the configLIST_VOLATILE for list elements to prevent the compiler from
optimizing out essential kernel code.
2023-11-15 10:04:33 +00:00
Mahavir Jain
b4f6edecbc fix(docs): correct the target specific macros for secure boot v2 guide
It appears that target specific or'ing is not supported through the
docs build. Actual text rendering on the docs site was still using
"default" field from the custom macro, rather than using target
specific.
2023-11-15 15:34:12 +05:30
morris
ab3bb3d414 Merge branch 'bugfix/fix_adc_read_zero_h2_new_v5.2' into 'release/v5.2'
ADC: fix adc raw data get 0 because of signal delay on ESP32H2 v5.2

See merge request espressif/esp-idf!27114
2023-11-15 14:31:52 +08:00
Marius Vikhammer
e1b6713f8f Merge branch 'docs/h2_programming_guide_cleanup_v5.2' into 'release/v5.2'
docs(esp32h2): updated misc docs with esp32h2 content (v5.2)

See merge request espressif/esp-idf!27145
2023-11-15 11:37:38 +08:00
Marius Vikhammer
1efaf83ef4 docs(esp32h2): updated misc docs with esp32h2 content 2023-11-15 09:54:05 +08:00
Ivan Grokhotkov
8fe15a26d5 fix(console): switch USB PHY to OTG when OTG is used for console
On ESP32-S3 with the default efuse settings, USB PHY is connected to
the USB_SERIAL_JTAG peripheral. If USB OTG peripheral is used for the
console, we need to additionally switch the PHY to USB OTG, otherwise
we won't get any output.

Closes https://github.com/espressif/esp-idf/issues/12437
2023-11-14 14:19:14 +01:00
Ivan Grokhotkov
11a92e3dbd Merge branch 'fix/fatfs_missing_release_v5.2' into 'release/v5.2'
fix(storage/fatfs): add missing lock release introduced by IMMEDIATE_FSYNC (v5.2)

See merge request espressif/esp-idf!26956
2023-11-14 20:14:01 +08:00
muhaidong
42aaf57419 fix(adc): rename ADC_ATTEN_DB_11 to ADC_ATTEN_DB_12 in test_adc.c 2023-11-14 19:31:05 +08:00
muhaidong
05a4a77b52 change(hal): remove useless code from periph_ll_wifi_bt_module_enable_clk 2023-11-14 19:29:03 +08:00
muhaidong
9583c45947 fix(wifi): fix deinit init wifi scan fail issue 2023-11-14 19:29:03 +08:00
Marius Vikhammer
4d0d0f5d10 Merge branch 'revert/freertos_same_priority_preemption_disabled_v5.2' into 'release/v5.2'
Revert "fix(freertos/idf): Add workaround for same priority preemption in xTaskIncrementTick()" (v5.2)

See merge request espressif/esp-idf!26926
2023-11-14 15:35:05 +08:00
Marius Vikhammer
5e65545320 Merge branch 'feature/frertos_idle_task_name_suffix_v5.2' into 'release/v5.2'
fix(freertos/idf): Updated IDLE task names for each core to have the coreID as a suffix (v5.2)

See merge request espressif/esp-idf!26892
2023-11-14 15:33:54 +08:00
gaoxu
0b0d474cab fix(adc): fix h2 adc oneshot read zero and add delay after getting done signal v5.2 2023-11-14 14:41:08 +08:00
Rahul Tank
78784a60c0 fix(nimble): Generate a new unique Local IRK for each chip 2023-11-14 10:38:25 +05:30
Roland Dobai
3ab9a2fd71 Merge branch 'coredump-gdb-timeout_v5.2' into 'release/v5.2'
fix(coredump-info): set default gdb timeout as 3 seconds (v5.2)

See merge request espressif/esp-idf!27104
2023-11-14 03:52:16 +08:00
Roland Dobai
6e187ee0af Merge branch 'fix/ci_autocomplete_v5.2' into 'release/v5.2'
Tools, CI: Improve autocomplete tests (v5.2)

See merge request espressif/esp-idf!27036
2023-11-14 02:43:55 +08:00
Erhan Kurubas
94c27b976d fix(coredump-info): set default gdb timeout as 3 seconds 2023-11-13 15:34:24 +01:00
Jiang Jiang Jian
8da85639a2 Merge branch 'bugfix/build_error_when_enable_ag_and_hf_v5.2' into 'release/v5.2'
fix(bt/bluedroid): Fix build error when both of the HFP roles are enabled (v5.2)

See merge request espressif/esp-idf!27076
2023-11-13 16:03:12 +08:00
morris
621acc4d75 Merge branch 'feature/rmt_receive_in_isr_v5.2' into 'release/v5.2'
feat(rmt): support calling rmt_receive in ISR callback (v5.2)

See merge request espressif/esp-idf!26996
2023-11-13 12:22:33 +08:00
Marius Vikhammer
99f06b7c56 Merge branch 'ci/docs_no_download_artifacts_v5.2' into 'release/v5.2'
ci(docs): stop build docs jobs from downloading artifacts (v5.2)

See merge request espressif/esp-idf!26973
2023-11-13 11:55:25 +08:00
Rahul Tank
fe3d0955af Merge branch 'bugfix/remove_bond_v5.2' into 'release/v5.2'
fix(nimble): Handled IRK/LTK deletion based on key availability(v5.2)

See merge request espressif/esp-idf!27027
2023-11-11 15:47:05 +08:00
Abhinav Kudnar
c56f226e51 fix(nimble): Handled IRK/LTK deletion based on key availability 2023-11-11 11:43:12 +05:30
Wang Mengyang
9036037a36 fix(bt/bluedroid): Fix build error when both of the HFP roles are enabled and also CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY is set to true 2023-11-10 21:08:01 +08:00
Tomáš Rohlínek
fbf4b7f705 fix(storage/fatfs): add missing lock release introduced by IMMEDIATE_FSYNC 2023-11-10 12:49:48 +01:00
Rahul Tank
89b27577d6 Merge branch 'bugfix/pairing_when_enc_with_no_key_fails_v5.2' into 'release/v5.2'
fix(nimble): Initate pairing if encryption fails with reason no pin or key missing (v5.2)

See merge request espressif/esp-idf!27016
2023-11-10 14:39:20 +08:00
Roland Dobai
498e41d93e ci(fix): Improve the stability of the autocomplete tests 2023-11-09 14:09:17 +01:00
Jiang Jiang Jian
340195ba79 Merge branch 'bugfix/add_config_for_tcp_ooseq_5.2' into 'release/v5.2'
Fix(lwip):bugfix for add config for tcp ooseq bufs 5.2

See merge request espressif/esp-idf!27000
2023-11-09 15:31:48 +08:00
Rahul Tank
db5e8805ed fix(nimble): Initate pairing if encryption fails with reason no pin or key missing 2023-11-09 11:49:51 +05:30
Jiang Jiang Jian
9b5be39b0f Merge branch 'feature/protocomm_update_params_v5.2' into 'release/v5.2'
fix(protocomm): added Protocomm BLE Event Structure and Event Handling (v5.2)

See merge request espressif/esp-idf!26898
2023-11-09 12:16:52 +08:00
Jiang Jiang Jian
9cd791b6ca Merge branch 'backport/fix_ble_scan_rsp_v5.2' into 'release/v5.2'
Backport/fix ble scan rsp v5.2(backport v5.2)

See merge request espressif/esp-idf!27008
2023-11-09 12:16:19 +08:00
Jiang Jiang Jian
4331ae783a Merge branch 'feature/support_adc_calibration_on_h2_v5.2' into 'release/v5.2'
adc_cali: supported adc calibration v1 on ESP32H2 (v5.2)

See merge request espressif/esp-idf!26962
2023-11-09 12:14:40 +08:00
Jiang Jiang Jian
e0286e24c8 Merge branch 'bugfix/lp_active_slow_clock_domain_default_power_down_v5.2' into 'release/v5.2'
backport v5.2: In the LP ACTIVE state, the slow clock power domain is by default in a powered-off state

See merge request espressif/esp-idf!26998
2023-11-09 12:14:24 +08:00
Island
441b0f1ea0 Merge branch 'test/ble_mesh_sar_enh_v5.2' into 'release/v5.2'
update(ble_mesh): Miscellaneous updates/fixes and support SAR enhancement (v5.2)

See merge request espressif/esp-idf!26986
2023-11-09 11:34:01 +08:00
morris
be39a0d2aa Merge branch 'bugfix/fix_adc_read_zero_h2_v5.2' into 'release/v5.2'
ADC: fix adc raw data get 0 because of signal delay on ESP32H2(v5.2)

See merge request espressif/esp-idf!26933
2023-11-09 10:10:45 +08:00
zhanghaipeng
82052a0fc4 fix(bt/bluedroid): Fix ble keysize check 2023-11-08 19:45:38 +08:00
zhanghaipeng
41be2013fd fix(bt/bluedroid): Fix ble adv report evt type 2023-11-08 19:45:29 +08:00
Island
1ae8347bf4 Merge branch 'backport/fix_ble_remove_bond_list_v5.2' into 'release/v5.2'
fix(bt/bluedroid): Fix BLE remove bond list status(backport v5.2)

See merge request espressif/esp-idf!26978
2023-11-08 19:39:59 +08:00
xueyunfei
0402fdeba1 Fix(lwip):bugfix for add config for tcp ooseq bufs 2023-11-08 16:45:48 +08:00
Li Shuai
2a968da432 change(Power Management): the xpd_xtal32k value depends on system slow clock source config option when pmu initialize 2023-11-08 14:55:14 +08:00
Darian Leung
a442a6b65c refactor(freertos/idf): Update thread safety convenience macros
This commit refactors some of the thread safety convenience macros by removing
some repeated definitions and keeping them all in "freertos_idf_additions_priv.h"
2023-11-08 14:53:28 +08:00
Darian Leung
1d9a155fd7 fix(freertos/idf): Fix xEventGroupGetBitsFromISR() critical section
Adds missing critical section to xEventGroupGetBitsFromISR() that is required
in dual-core SMP.
2023-11-08 14:53:28 +08:00
morris
02cacc6e05 Merge branch 'bugfix/fix_wrong_adc_attenuation_name_v5.2' into 'release/v5.2'
fix(adc): rename ADC_ATTEN_DB_11 to ADC_ATTEN_DB_12 (v5.2)

See merge request espressif/esp-idf!26966
2023-11-08 14:50:30 +08:00
morris
f8268a2848 Merge branch 'docs/i2c_ng_docs_v5.2' into 'release/v5.2'
docs(I2C): Add new programming guide for new I2C driver (backport v5.2)

See merge request espressif/esp-idf!26994
2023-11-08 14:49:57 +08:00
morris
2e8cc61af7 feat(rmt): support calling rmt_receive in ISR callback 2023-11-08 14:32:26 +08:00
Cao Sen Miao
9d3d9d16f0 docs(i2c): Modify some variables in I2C driver for good docs 2023-11-08 10:48:48 +08:00
Jiang Jiang Jian
83aeb7bbb2 Merge branch 'bugfix/fixed_ble_disconnect_under_temp_change_v5.2' into 'release/v5.2'
fix(ble): fixed ble disconnection issue under temperature change

See merge request espressif/esp-idf!26829
2023-11-08 10:39:29 +08:00
Cao Sen Miao
614aed7409 docs(i2c): Add new programming guide for new I2C driver 2023-11-08 09:57:25 +08:00
Rahul Tank
477e19f71c Merge branch 'bugfix/validate_random_address_v5.2' into 'release/v5.2'
fix(nimble): Added check to validate allowed random address (v5.2)

See merge request espressif/esp-idf!26927
2023-11-08 00:21:50 +08:00
zwl
7c33c24fe4 fix(ble): fixed ble disconnection issue under temperature change 2023-11-07 20:57:58 +08:00
Liu Linyan
d9876ffd53 feat(ble_mesh): Support Bluetooth Mesh SAR enhancement 2023-11-07 19:13:09 +08:00
Liu Linyan
f57acc21d6 fix(ble_mesh): Miscellaneous updates and fixes 2023-11-07 19:13:04 +08:00
Liu Linyan
48960337b8 update(ble_mesh): Remove useless mesh lib copy script 2023-11-07 19:13:00 +08:00
zhanghaipeng
28a8e77021 fix(bt/bluedroid): Fix BLE remove bond list status 2023-11-07 15:57:54 +08:00
Jiang Jiang Jian
66992aca7a Merge branch 'ci/remove_unused_integration_test_files_v5.2' into 'release/v5.2'
ci: remove unused integration test files (v5.2)

See merge request espressif/esp-idf!26798
2023-11-07 15:32:34 +08:00
Armando
f01a40afe2 fix(adc): rename ADC_ATTEN_DB_11 to ADC_ATTEN_DB_12
By design, it's 12 dB. There're errors among chips, so the actual
attenuation will be 11dB more or less
2023-11-07 14:11:10 +08:00
Marius Vikhammer
03e31dd0ba Merge branch 'bugfix/freertos_psram_stack_v5.2' into 'release/v5.2'
bugfix(freertos): Fixed task creation function for PSRAM stack (v5.2)

See merge request espressif/esp-idf!26949
2023-11-07 12:58:03 +08:00
Jiang Jiang Jian
42db3c8660 Merge branch 'bugfix/fix_fragment_bug_v5.2' into 'release/v5.2'
fix(wifi): fix fragment bug and esp32c6 issues (v5.2)

See merge request espressif/esp-idf!26955
2023-11-07 12:04:34 +08:00
Marius Vikhammer
1f9d4c5c5c ci(docs): stop build docs jobs from downloading artifacts 2023-11-07 11:45:21 +08:00
morris
a2b9004203 Merge branch 'contrib/github_pr_12523_v5.2' into 'release/v5.2'
fix: assert failed in example uart_async_rxtxtasks (GitHub PR) (v5.2)

See merge request espressif/esp-idf!26951
2023-11-07 10:46:43 +08:00
gaoxu
1b07551997 docs(adc): added adc calibration doc on h2 2023-11-07 09:30:56 +08:00
xuxiao
02045155ae fix(wifi): fix esp32c6 rxctrl info is not correct 2023-11-06 19:16:56 +08:00
zhangyanjiao
86a62e1de9 fix(wifi): fix rate check error in fragment 2023-11-06 19:16:14 +08:00
Jiang Jiang Jian
d709fdfd12 Merge branch 'bugfix/fix_wifi_enabled_macro_v5.2' into 'release/v5.2'
Bugfix/fix wifi enabled macro (v5.2)

See merge request espressif/esp-idf!26775
2023-11-06 17:53:34 +08:00
Ngai-Fung Yip
90f7b0d321 fix: assert failed in example uart_async_rxtxtasks 2023-11-06 15:56:52 +08:00
Jakob Hasse
8c7ee8482e fix(freertos): Fixed prvTaskCreateDynamicPinnedToCoreWithCaps
* The function was based on an outdated IDF/FreeRTOS
  combination which didn't always require zero-ing
  the TCB. This has been changed in the current
  IDF/FreeRTOS combination, leading to crashes.
  Unconditionally zero-ing the TCB fixes this problem.
2023-11-06 15:33:40 +08:00
Jiang Jiang Jian
793de30863 Merge branch 'bugfix/increase_esp32h2_slow_clock_calibration_wdt_threshold_v5.2' into 'release/v5.2'
fix(esp_system): increase esp32h2 slow clock calibration timeout watchdog threshold(backport v5.2)

See merge request espressif/esp-idf!26921
2023-11-06 11:34:24 +08:00
Jiang Jiang Jian
ff4c82a32d Merge branch 'bugfix/disable_fastpbkdf2_hardwaredisable_v5.2' into 'release/v5.2'
fix(wpa_supplicant): implement sha1_finish for fastpbkdf2 (v5.2)

See merge request espressif/esp-idf!26877
2023-11-06 11:32:23 +08:00
Jiang Jiang Jian
172b7e45b8 Merge branch 'bugfix/hal_memcpy_v5.2' into 'release/v5.2'
fix(hal): Fix incorrect behavior of hal_memcpy (v5.2)

See merge request espressif/esp-idf!26909
2023-11-06 11:32:07 +08:00
Mahavir Jain
6e2c0de765 Merge branch 'fix/netif_sntp_examples_v5.2' into 'release/v5.2'
fix(examples): Fix usage of SNTP netif API in examples (v5.2)

See merge request espressif/esp-idf!26916
2023-11-06 11:06:05 +08:00
gaoxu
7f3221aa09 feat(adc_cali): Add ADC calibration support for ESP32H2 2023-11-06 10:57:36 +08:00
Rahul Tank
e9df6d89af fix(nimble): Added check to validate allowed random address 2023-11-04 09:17:03 +05:30
Sudeep Mohanty
29cfa2d472 Revert "fix(freertos/idf): Add workaround for same priority preemption in xTaskIncrementTick()"
This reverts commit 6c6a6ad44a.
2023-11-03 15:00:24 +01:00
alanmaxwell
ce5cd8bf75 fix(phy): Fix ESP32C6 rx pkts fail in light sleep mode 2023-11-03 21:18:18 +08:00
alanmaxwell
5a43831006 fix(wifi): Fix bug using CONFIG_WIFI_ENABLED macro 2023-11-03 21:18:18 +08:00
Jiang Jiang Jian
5bf1070143 Merge branch 'bugfix/backport_wifi_fixes_v5.2' into 'release/v5.2'
fix(wifi): optimize wifi bin size and fix some issue

See merge request espressif/esp-idf!26894
2023-11-03 21:08:39 +08:00
Jiang Jiang Jian
a25673efb2 Merge branch 'backport/add_ot_radio_stats_enable_config_5_2' into 'release/v5.2'
Backport/backport some openthread features(backportV5.2)

See merge request espressif/esp-idf!26886
2023-11-03 20:58:37 +08:00
Jiang Jiang Jian
04ead4c281 Merge branch 'feat/add_support_for_host_only_mode_v5.2' into 'release/v5.2'
Feat/add support for host only mode v5.2

See merge request espressif/esp-idf!26881
2023-11-03 20:57:33 +08:00
Jiang Jiang Jian
bfa65bfd0d Merge branch 'bugfix/remove_iram_attr_from_ceva_files_v5.2' into 'release/v5.2'
fix(nimble): remove IRAM_ATTR from npl_os_freertos.c file (v5.2)

See merge request espressif/esp-idf!26838
2023-11-03 20:57:13 +08:00
Jiang Jiang Jian
1ae6dad0d8 Merge branch 'bugfix/fix_compilation_issue_v5.2' into 'release/v5.2'
fix(wpa_supplicant): Fix compilation issue in EAP disabled (v5.2)

See merge request espressif/esp-idf!26876
2023-11-03 20:54:46 +08:00
Jiang Jiang Jian
cd33e77e0f Merge branch 'bugfix/supplicant_tls_fix_v5.2' into 'release/v5.2'
fix(wpa_supplicant): Correct iv lenght passed in mbedtls_cipher_set_iv() (v5.2)

See merge request espressif/esp-idf!26845
2023-11-03 20:54:13 +08:00
Jiang Jiang Jian
5171308939 Merge branch 'fix/exception_was_unhandled_for_bt_spp_vfs_acceptor_v5.2' into 'release/v5.2'
fix(bt/bluedroid): fix LoadProhibited error in spp vfs acceptor example (backport v5.2)

See merge request espressif/esp-idf!26860
2023-11-03 20:49:32 +08:00
Roland Dobai
bcf2ef7ddd Merge branch 'bugfix/docker_safe_repo_v5.2' into 'release/v5.2'
fix(docker): set esp-idf repo as safe directory (v5.2)

See merge request espressif/esp-idf!26803
2023-11-03 20:02:49 +08:00
Chen Yudong
3c67e1ba01 ci: add label rules for integration test
fix typo
2023-11-03 19:21:34 +08:00
Chen Yudong
4400846c61 ci: remove unused integration test files 2023-11-03 19:21:30 +08:00
wuzhenghui
3207599b6d fix(esp_system): increase esp32h2 slow clock calibration timeout watchdog threshold 2023-11-03 19:08:28 +08:00
David Cermak
6077c3f70c fix(examples): Fix usage of SNTP netif API in examples 2023-11-03 11:18:32 +01:00
Island
3d37631967 Merge branch 'bugfix/ble_update_lib_1027_5.2' into 'release/v5.2'
Bugfix/ble update lib 1027 5.2

See merge request espressif/esp-idf!26831
2023-11-03 17:53:23 +08:00
Wang Meng Yang
8a12837745 Merge branch 'feature/include_hf_and_ag_in_single_build_v5.2' into 'release/v5.2'
Feature/include hf and ag in single build v5.2

See merge request espressif/esp-idf!26873
2023-11-03 16:00:21 +08:00
KonstantinKondrashov
b6ad8703ce fix(hal): Fix incorrect behavior of hal_memcpy
Closes https://github.com/espressif/esp-idf/issues/12489
2023-11-03 15:47:39 +08:00
Shu Chen
8ab97bb37d Merge branch 'bugfix/esp32c6_phy_coex_sleep_issue_v5.2' into 'release/v5.2'
fix(esp_phy): update esp32c6 libphy for coex zb rx and sleep bug (backport v5.2)

See merge request espressif/esp-idf!26884
2023-11-03 14:16:49 +08:00
darshan
83f4025a92 fix(protocomm): added Protocomm BLE Event Structure and Event Handling 2023-11-03 11:42:30 +05:30
Kapil Gupta
e3c2ee1ba9 fix(wpa_supplicant): implement sha1_finish for fastpbkdf2 2023-11-03 06:04:50 +00:00
morris
85ba4189f8 Merge branch 'bugfix/fix_pdm_rx_high_pass_cut_off_coeff_v5.2' into 'release/v5.2'
bugfix(i2s): fix pdm rx high pass filter cut off coeff (v5.2)

See merge request espressif/esp-idf!26836
2023-11-03 13:46:12 +08:00
liuning
93efb9e351 fix(rom): fix wifi rom ld 2023-11-03 10:20:49 +08:00
Kapil Gupta
89dcaf4ae5 fix(esp_wifi): Drop fragmented AMPDU(fixCVE-2020-26142) 2023-11-03 10:17:41 +08:00
alanmaxwell
1dd7ece5d3 fix(wifi): optimize wifi bin size and fix some issue
1.Optimize bin size for STA only mode
2.Change fragment threshold to 256
3.Support fragment for LR mode
4.Fix ampdu duration issue
5.Fix rx fragment fail in Open mode.
2023-11-03 10:17:26 +08:00
Kapil Gupta
7a701fbc85 fix(esp_wifi): Fix key install issue in PTK renew 2023-11-03 10:16:48 +08:00
Shreyas Sheth
e8d43b03a1 fix(wifi): wpa3 softap fix deauth when assoc req recv before sae is finished 2023-11-03 10:15:55 +08:00
Sarvesh Bodakhe
8f8f7ddb45 fix(esp_wifi): Fix issue of station disconnecting immediately when AP RSSI is zero 2023-11-03 10:14:47 +08:00
Island
deceda36ac Merge branch 'backport/fix_ble_bugs_v5.2' into 'release/v5.2'
Backport/fix ble bugs v5.2(backport v5.2)

See merge request espressif/esp-idf!26795
2023-11-03 09:12:32 +08:00
Sudeep Mohanty
33e0f11ef4 fix(freertos/idf): Updated IDLE task names for each core to have the coreID as a suffix
This commit updates the IDLE task names for each core by concatenating
the respective coreIDs to the task names.

Closes https://github.com/espressif/esp-idf/issues/12204
2023-11-02 16:38:16 +01:00
morris
7c93afb8bd Merge branch 'bugfix/rmt_stop_issue_v5.2' into 'release/v5.2'
fix(rmt): a disabled channel may pick up a pending transaction (v5.2)

See merge request espressif/esp-idf!26778
2023-11-02 23:00:07 +08:00
morris
1a3a74c26c Merge branch 'bugfix/32bit_addr_naming_v5.2' into 'release/v5.2'
bugfix(spi_flash): Fix wrong naming on 32bit address (backport v5.2)

See merge request espressif/esp-idf!26833
2023-11-02 21:46:48 +08:00
Shu Chen
0582b4a25f Merge branch 'backport5.2/bugfix/fix_c6_wrong_reg_offset' into 'release/v5.2'
fix(coex): fix esp32c6 wrong reg offset(backport v5.2)

See merge request espressif/esp-idf!26768
2023-11-02 20:47:34 +08:00
zwx
57e59a47c1 feat(openthread): Add deep sleep support for SED 2023-11-02 20:19:00 +08:00
zwx
23c0565a95 feat(openthread): add config for radio statistic feature 2023-11-02 20:18:54 +08:00
xiaqilin
462d57e18f fix(esp_phy): update esp32c6 libphy for coex zb rx and sleep bug 2023-11-02 19:37:28 +08:00
Kapil Gupta
94c38470ac fix(wpa_supplicant): Fix compilation issue in EAP disabled 2023-11-02 16:17:18 +05:30
Jin Cheng
b05df37981 feat(bt/bluedroid): Support to build HID Host and HID Device in single binary 2023-11-02 17:32:55 +08:00
Wang Mengyang
8b8c3d6204 feat(bt/bluedroid): Support to build HFP Audio Gateway and Hands Free Unit in single binary 2023-11-02 17:32:48 +08:00
gongyantao
22108bbeb4 fix(bt/bluedroid): fix loadprohibited error in spp vfs acceptor example 2023-11-02 11:47:21 +08:00
morris
8dda17e3a3 fix(rmt): a disabled channel may pick up a pending transaction
because in the trans_done interrupt, the driver didn't check the channel FSM
2023-11-02 11:30:42 +08:00
Jin Cheng
59e504ef27 feat(bt/bluedroid): Added bt_discovery based host only example 2023-11-02 11:10:35 +08:00
Jin Cheng
b9ed6f722b feat(bt/bluedroid): Added mode to use BlueDroid host only without Bluetooth Controller 2023-11-02 11:10:24 +08:00
laokaiyao
f03448ca94 fix(i2s): fix pdm rx high pass filter cut off coeff 2023-11-02 10:10:14 +08:00
Kapil Gupta
ba274216b9 fix(wpa_supplicant): Correct iv lenght passed in mbedtls_cipher_set_iv() 2023-11-01 18:02:18 +05:30
Rahul Tank
e758c819d9 fix(nimble): remove IRAM_ATTR from npl_os_freertos.c file 2023-11-01 17:36:44 +05:30
Cao Sen Miao
5fb2277aaa bugfix(spi_flash): Fix wrong naming on 32bit address 2023-11-01 18:15:13 +08:00
luomanruo
3b7e220519 ble: update c2 lib to 6ed444f2 2023-11-01 17:25:24 +08:00
luomanruo
e3d72eada7 ble: update c2 rom.ld 2023-11-01 17:25:17 +08:00
cjin
20ca1c0dfa change(ble): added option for msys buffer source 2023-11-01 17:25:09 +08:00
luomanruo
caaf3fbe69 ble: update c6 h2 lib to 5bd7cb83, c2 lib to 1d31e175 2023-11-01 17:25:01 +08:00
Frantisek Hrbata
113c22c1fc fix(tools/docker): set esp-idf repo as safe directory
In our docker docs[1] we recommend to start docker as a non-root user. This has
a side effect, because the esp-idf repo in docker image is owned by
root. Git by default refuses even to parse a config file if the repo is
owned by other than current user. As a result the version detection in
cmake fails[2] and the app version is set to "HEAD-HASH-NOTFOUND".
This adds esp-idf repo to the system git config as a safe one.

[1] https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/
    tools/idf-docker-image.html#building-a-project-with-cmake
[2] https://github.com/espressif/esp-idf/issues/12389#issuecomment-1764268773

Closes https://github.com/espressif/esp-idf/issues/12389

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2023-10-31 16:23:54 +01:00
zhanghaipeng
0de2c5092b feat(bt/bluedroid): Display BLE permission check handle in error trace 2023-10-31 19:45:10 +08:00
zhanghaipeng
1ea656f3d9 fix(bt/bluedroid): Fix max BLE gattc notify number to improve compatibility 2023-10-31 19:44:36 +08:00
zhanghaipeng
a2e4a3581b feat(bt/bluedroid): Support BLE gattc notify registration number 2023-10-31 19:42:48 +08:00
zhanghaipeng
b68c026adb fix(bt/bluedroid): Fix key size check in BLE smp 2023-10-31 19:42:34 +08:00
zhanghaipeng
855f95e588 fix(bt/bluedroid): Optimize compatibility with Android 10 and later devices 2023-10-31 19:42:23 +08:00
zhanghaipeng
1276247696 feat(bt/bluedroid): Support hid device control point 2023-10-31 19:42:13 +08:00
zhanghaipeng
cb1765de81 fix(bt/bluedroid): Optimize compatibility with IOS and MACOS devices 2023-10-31 19:42:01 +08:00
Xu Si Yu
7385079984 fix(coex): fix esp32c6 wrong reg offset 2023-10-31 15:41:08 +08:00
morris
868737e022 Merge branch 'bugfix/i2c_ll_read_write_fifo_by_index_v5.2' into 'release/v5.2'
fix(i2c): read write FIFO memory by volatile (v5.2)

See merge request espressif/esp-idf!26737
2023-10-31 10:15:20 +08:00
morris
80997d5860 fix(i2c): read write FIFO memory by volatile 2023-10-30 10:34:43 +08:00
Ivan Grokhotkov
2b0d48f84d Merge branch 'maint/release_v5.2_codeowners' into 'release/v5.2'
change(gitlab): simplify approvals for backports (v5.2)

See merge request espressif/esp-idf!26703
2023-10-27 17:49:57 +08:00
Ivan Grokhotkov
dec0bc482c change(gitlab): simplify approvals for backports (v5.2) 2023-10-26 16:00:52 +02:00
7933 changed files with 448880 additions and 840061 deletions

View File

@@ -1,4 +0,0 @@
[codespell]
skip = build,*.yuv,components/fatfs/src/*,alice.txt,*.rgb,components/wpa_supplicant/*,components/esp_wifi/*
ignore-words-list = ser,dout,rsource,fram,inout,shs,ans,aci,unstall,unstalling,hart,wheight,ot,wel,parms,ehen
write-changes = true

5
.github/dangerjs/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
# Transpiled JavaScript (if any)
dist
# Installed dependencies
node_modules

47
.github/dangerjs/README.md vendored Normal file
View File

@@ -0,0 +1,47 @@
# DangerJS pull request automatic review tool - GitHub
## Implementation
The main development is done in Espressif Gitlab project.
Espressif [GitHub project espressif/esp-idf](https://github.com/espressif/esp-idf) is only a public mirror.
Therefore, all changes and updates to DangerJS files (`.github/dangerjs`) must be made via MR in the **Gitlab** repository by Espressif engineer.
When adding a new Danger rule or updating existing one, might be a good idea to test it on the developer's fork of GitHub project. This way, the new feature can be tested using a GitHub action without concern of damaging Espressif's GitHub repository.
Danger for Espressif GitHub is implemented in TypeScript. This makes the code more readable and robust than plain JavaScript.
Compilation to JavaScript code (using `tsc`) is not necessary; Danger handles TypeScript natively.
A good practice is to store each Danger rule in a separate module, and then import these modules into the main Danger file `.github/dangerjs/dangerfile.ts` (see how this is done for currently present modules when adding a new one).
If the Danger module (new check/rule) uses an external NPM module (e.g. `axios`), be sure to add this dependency to `.github/dangerjs/package.json` and also update `.github/dangerjs/package-lock.json`.
In the GitHub action, `danger` is not installed globally (nor are its dependencies) and the `npx` call is used to start the `danger` checks in CI.
## Adding new Danger rule
For local development you can use following strategy
#### Install dependencies
```sh
cd .github/dangerjs
npm install
```
(If the IDE still shows compiler/typing errors, reload the IDE window.)
#### Add new code as needed or make updates
#### Test locally
Danger rules can be tested locally (without running the GitHub action pipeline).
To do this, you have to first export the ENV variables used by Danger in the local terminal:
```sh
export GITHUB_TOKEN='**************************************'
```
Then you can call Danger by:
```sh
cd .github/dangerjs
danger pr https://github.com/espressif/esp-idf/pull/<number_of_pull_request>
```
The result will be displayed in your terminal.

48
.github/dangerjs/dangerfile.ts vendored Normal file
View File

@@ -0,0 +1,48 @@
import { DangerResults } from "danger";
declare const results: DangerResults;
declare const message: (message: string, results?: DangerResults) => void;
declare const markdown: (message: string, results?: DangerResults) => void;
// Import modules with danger rules
// (Modules with checks are stored in ".github/dangerjs/<module_name>.ts". To import them, use path relative to "dangerfile.ts")
import prCommitsTooManyCommits from "./prCommitsTooManyCommits";
import prDescription from "./prDescription";
import prTargetBranch from "./prTargetBranch";
import prInfoContributor from "./prInfoContributor";
import prCommitMessage from "./prCommitMessage";
async function runDangerRules(): Promise<void> {
// Message to contributor about review and merge process
const prInfoContributorMessage: string = await prInfoContributor();
markdown(prInfoContributorMessage);
// Run danger checks
prCommitsTooManyCommits();
prDescription();
prTargetBranch();
prCommitMessage();
// Add success log if no issues
const dangerFails: number = results.fails.length;
const dangerWarns: number = results.warnings.length;
const dangerInfos: number = results.messages.length;
if (!dangerFails && !dangerWarns && !dangerInfos) {
return message("Good Job! All checks are passing!");
}
// Add retry link
addRetryLink();
}
runDangerRules();
function addRetryLink(): void {
const serverUrl: string | undefined = process.env.GITHUB_SERVER_URL;
const repoName: string | undefined = process.env.GITHUB_REPOSITORY;
const runId: string | undefined = process.env.GITHUB_RUN_ID;
const retryLinkUrl: string = `${serverUrl}/${repoName}/actions/runs/${runId}`;
const retryLink: string = `<sub>:repeat: You can re-run automatic PR checks by retrying the <a href="${retryLinkUrl}">DangerJS action</a></sub>`;
markdown(retryLink);
}

1999
.github/dangerjs/package-lock.json generated vendored Normal file

File diff suppressed because it is too large Load Diff

18
.github/dangerjs/package.json vendored Normal file
View File

@@ -0,0 +1,18 @@
{
"name": "dangerjs-github",
"description": "GitHub PR reviewing with DangerJS",
"main": "dangerfile.ts",
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.3.3",
"danger": "^11.2.3",
"request": "^2.88.2",
"sync-request": "^6.1.0",
"typescript": "^5.0.3"
},
"devDependencies": {
"@types/node": "^18.15.11"
}
}

67
.github/dangerjs/prCommitMessage.ts vendored Normal file
View File

@@ -0,0 +1,67 @@
import { DangerDSLType, DangerResults } from "danger";
declare const danger: DangerDSLType;
declare const warn: (message: string, results?: DangerResults) => void;
interface Commit {
message: string;
}
/**
* Check if commit messages are sufficiently descriptive (not too short).
*
* Search for commit messages that appear to be automatically generated or temporary messages and report them.
*
* @dangerjs WARN
*/
export default function (): void {
const prCommits: Commit[] = danger.git.commits;
const detectRegexes: RegExp[] = [
/^Merge pull request #\d+ from .*/i, // Automatically generated message by GitHub
/^Merged .+:.+ into .+/i, // Automatically generated message by GitHub
/^Automatic merge by GitHub Action/i, // Automatically generated message by GitHub
/^Merge branch '.*' of .+ into .+/i, // Automatically generated message by GitHub
/^Create\s[a-zA-Z0-9_.-]+(\.[a-zA-Z0-9]{1,4})?(?=\s|$)/, // Automatically generated message by GitHub using UI
/^Delete\s[a-zA-Z0-9_.-]+(\.[a-zA-Z0-9]{1,4})?(?=\s|$)/, // Automatically generated message by GitHub using UI
/^Update\s[a-zA-Z0-9_.-]+(\.[a-zA-Z0-9]{1,4})?(?=\s|$)/, // Automatically generated message by GitHub using UI
/^Initial commit/i, // Automatically generated message by GitHub
/^WIP.*/i, // Message starts with prefix "WIP"
/^Cleaned.*/i, // Message starts "Cleaned", , probably temporary
/^Test:.*/i, // Message starts with "test" prefix, probably temporary
/clean ?up/i, // Message contains "clean up", probably temporary
/^[^A-Za-z0-9\s].*/, // Message starts with special characters
];
let partMessages: string[] = [];
for (const commit of prCommits) {
const commitMessage: string = commit.message;
const commitMessageTitle: string = commit.message.split("\n")[0];
// Check if the commit message matches any regex from "detectRegexes"
if (detectRegexes.some((regex) => commitMessage.match(regex))) {
partMessages.push(
`- the commit message \`${commitMessageTitle}\` appears to be a temporary or automatically generated message`
);
continue;
}
// Check if the commit message is not too short
const shortCommitMessageThreshold: number = 20; // commit message is considered too short below this number of characters
if (commitMessage.length < shortCommitMessageThreshold) {
partMessages.push(
`- the commit message \`${commitMessageTitle}\` may not be sufficiently descriptive`
);
}
}
// Create report
if (partMessages.length) {
partMessages.sort();
let dangerMessage = `\nSome issues found for the commit messages in this MR:\n${partMessages.join(
"\n"
)}
\nPlease consider updating these commit messages.`;
warn(dangerMessage);
}
}

View File

@@ -0,0 +1,19 @@
import { DangerDSLType, DangerResults } from "danger";
declare const danger: DangerDSLType;
declare const message: (message: string, results?: DangerResults) => void;
/**
* Check if pull request has not an excessive numbers of commits (if squashed)
*
* @dangerjs INFO
*/
export default function (): void {
const tooManyCommitThreshold: number = 2; // above this number of commits, squash commits is suggested
const prCommits: number = danger.github.commits.length;
if (prCommits > tooManyCommitThreshold) {
return message(
`You might consider squashing your ${prCommits} commits (simplifying branch history).`
);
}
}

19
.github/dangerjs/prDescription.ts vendored Normal file
View File

@@ -0,0 +1,19 @@
import { DangerDSLType, DangerResults } from "danger";
declare const danger: DangerDSLType;
declare const warn: (message: string, results?: DangerResults) => void;
/**
* Check if pull request has has a sufficiently accurate description
*
* @dangerjs WARN
*/
export default function (): void {
const prDescription: string = danger.github.pr.body;
const shortPrDescriptionThreshold: number = 100; // Description is considered too short below this number of characters
if (prDescription.length < shortPrDescriptionThreshold) {
return warn(
"The PR description looks very brief, please check if more details can be added."
);
}
}

58
.github/dangerjs/prInfoContributor.ts vendored Normal file
View File

@@ -0,0 +1,58 @@
import { DangerDSLType } from "danger";
declare const danger: DangerDSLType;
interface Contributor {
login?: string;
}
const authorLogin = danger.github.pr.user.login;
const messageKnownContributor: string = `
***
👋 **Hi ${authorLogin}**, thank you for your another contribution to \`espressif/esp-idf\` project!
If the change is approved and passes the tests in our internal git repository, it will appear in this public Github repository on the next sync.
***
`;
const messageFirstContributor: string = `
***
👋 **Welcome ${authorLogin}**, thank you for your first contribution to \`espressif/esp-idf\` project!
📘 Please check [Contributions Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/contribute/index.html#contributions-guide) for the contribution checklist, information regarding code and documentation style, testing and other topics.
🖊️ Please also make sure you have **read and signed** the [Contributor License Agreement for espressif/esp-idf project](https://cla-assistant.io/espressif/esp-idf).
#### Pull request review and merge process you can expect
Espressif develops the ESP-IDF project in an internal repository (Gitlab). We do welcome contributions in the form of bug reports, feature requests and pull requests via this public GitHub repository.
1. An internal issue has been created for the PR, we assign it to the relevant engineer
2. They review the PR and either approve it or ask you for changes or clarifications
3. Once the Github PR is approved, we synchronize it into our internal git repository
4. In the internal git repository we do the final review, collect approvals from core owners and make sure all the automated tests are passing
- At this point we may do some adjustments to the proposed change, or extend it by adding tests or documentation.
5. If the change is approved and passes the tests it is merged into the \`master\` branch
6. On next sync from the internal git repository merged change will appear in this public Github repository
***
`;
/**
* Check whether the author of the pull request is known or a first-time contributor, and add a message to the PR with information about the review and merge process.
*/
export default async function (): Promise<string> {
const contributors = await danger.github.api.repos.listContributors({
owner: danger.github.thisPR.owner,
repo: danger.github.thisPR.repo,
});
const contributorsData: Contributor[] = contributors.data;
const knownContributors: (string | undefined)[] = contributorsData.map(
(contributor: Contributor) => contributor.login
);
if (knownContributors.includes(authorLogin)) {
return messageKnownContributor;
} else {
return messageFirstContributor;
}
}

19
.github/dangerjs/prTargetBranch.ts vendored Normal file
View File

@@ -0,0 +1,19 @@
import { DangerDSLType, DangerResults } from "danger";
declare const danger: DangerDSLType;
declare const fail: (message: string, results?: DangerResults) => void;
/**
* Check if the target branch is "master"
*
* @dangerjs FAIL
*/
export default function (): void {
const prTargetBranch: string = danger.github?.pr?.base?.ref;
if (prTargetBranch !== "master") {
return fail(`
The target branch for this pull request should be \`master\`.\n
If you would like to add this feature to the release branch, please state this in the PR description and we will consider backporting it.
`);
}
}

17
.github/dangerjs/tsconfig.json vendored Normal file
View File

@@ -0,0 +1,17 @@
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"target": "es6",
"noImplicitAny": true,
"noUnusedParameters": true,
"strictNullChecks": true,
"sourceMap": true,
"removeComments": true,
"outDir": "./dist"
},
"include": [
"./*.ts"
]
}

15
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
version: 2
updates:
- package-ecosystem: "all"
directory: "/"
schedule:
interval: "weekly"
ignore:
- directory: ".gitlab/dangerjs"
patterns:
- "package-lock.json"
- directory: ".github/dangerjs"
patterns:
- "package-lock.json"
# Disable "version updates" (keep only "security updates")
open-pull-requests-limit: 0

View File

@@ -9,19 +9,28 @@ permissions:
contents: write
jobs:
pull-request-style-linter:
danger-check:
runs-on: ubuntu-latest
defaults:
run:
working-directory: .github/dangerjs
steps:
- name: Check out PR head
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: DangerJS pull request linter
uses: espressif/shared-github-dangerjs@v1
- name: Setup NodeJS environment
uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
cache-dependency-path: .github/dangerjs/package-lock.json
- name: Install DangerJS dependencies
run: npm install
- name: Run DangerJS
run: npx danger ci --failOnErrors -v
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
instructions-gitlab-mirror: 'true'
instructions-contributions-file: 'CONTRIBUTING.md'
instructions-cla-link: 'https://cla-assistant.io/espressif/esp-idf'

View File

@@ -60,9 +60,7 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up QEMU for multiarch builds
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:qemu-v7.0.0-28
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push

View File

@@ -12,7 +12,7 @@ jobs:
name: Sync Issue Comments to Jira
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Sync issue comments to JIRA
uses: espressif/github-actions/sync_issues_to_jira@master
env:

View File

@@ -12,7 +12,7 @@ jobs:
name: Sync issues to Jira
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Sync GitHub issues to Jira project
uses: espressif/github-actions/sync_issues_to_jira@master
env:

View File

@@ -15,7 +15,7 @@ jobs:
name: Sync PRs to Jira
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Sync PRs to Jira project
uses: espressif/github-actions/sync_issues_to_jira@master
with:

View File

@@ -11,7 +11,7 @@ jobs:
(github.event.label.name == 'PR-Sync-Rebase') ||
(github.event.label.name == 'PR-Sync-Update')
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
- name: Sync approved PRs to internal codebase
uses: espressif/github-actions/github_pr_to_internal_pr@master
env:

View File

@@ -14,7 +14,7 @@ jobs:
SKIP: "cleanup-ignore-lists" # Comma-separated string of ignored pre-commit check IDs
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Fetch head and base refs
# This is necessary for pre-commit to check the changes in the PR branch
run: |

View File

@@ -1,34 +0,0 @@
name: Vulnerability scan
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
vulnerability-scan:
strategy:
# We don't want to run all jobs in parallel, because this would
# overload NVD and we would get 503
max-parallel: 1
matrix:
# References/branches which should be scanned for vulnerabilities are
# defined in the VULNERABILITY_SCAN_REFS variable as json list.
# For example: ['master', 'release/v5.2', 'release/v5.1', 'release/v5.0', 'release/v4.4']
ref: ${{ fromJSON(vars.VULNERABILITY_SCAN_REFS) }}
name: Vulnerability scan
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{ matrix.ref }}
- name: Vulnerability scan
env:
SBOM_MATTERMOST_WEBHOOK: ${{ secrets.SBOM_MATTERMOST_WEBHOOK }}
NVDAPIKEY: ${{ secrets.NVDAPIKEY }}
uses: espressif/esp-idf-sbom-action@master
with:
ref: ${{ matrix.ref }}

38
.gitignore vendored
View File

@@ -24,14 +24,6 @@ GPATH
# cache dir
.cache/
# Doc build artifacts
docs/_build/
docs/doxygen_sqlite3.db
# Downloaded font files
docs/_static/DejaVuSans.ttf
docs/_static/NotoSansSC-Regular.otf
# Components Unit Test Apps files
components/**/build/
components/**/build_*_*/
@@ -40,15 +32,28 @@ components/**/sdkconfig.old
# Example project files
examples/**/build/
examples/**/build_*_*/
examples/**/build_esp*_*/
examples/**/sdkconfig
examples/**/sdkconfig.old
# Doc build artifacts
docs/_build/
docs/doxygen_sqlite3.db
# Downloaded font files
docs/_static/DejaVuSans.ttf
docs/_static/NotoSansSC-Regular.otf
# Unit test app files
tools/unit-test-app/build
tools/unit-test-app/build_*_*/
tools/unit-test-app/sdkconfig
tools/unit-test-app/sdkconfig.old
tools/unit-test-app/build
tools/unit-test-app/build_*_*/
tools/unit-test-app/output
tools/unit-test-app/test_configs
# Unit Test CMake compile log folder
log_ut_cmake
# test application build files
tools/test_apps/**/build/
@@ -56,8 +61,7 @@ tools/test_apps/**/build_*_*/
tools/test_apps/**/sdkconfig
tools/test_apps/**/sdkconfig.old
TEST_LOGS/
build_summary_*.xml
TEST_LOGS
# gcov coverage reports
*.gcda
@@ -96,13 +100,9 @@ dependencies.lock
managed_components
# pytest log
pytest-embedded/
# legacy one
pytest_embedded_log/
list_job*.txt
size_info*.txt
XUNIT_RESULT*.xml
.manifest_sha
list_job_*.txt
size_info.txt
# clang config (for LSP)
.clangd

View File

@@ -18,16 +18,14 @@ workflow:
# Place the default settings in `.gitlab/ci/common.yml` instead
include:
- '.gitlab/ci/danger.yml'
- '.gitlab/ci/common.yml'
- '.gitlab/ci/rules.yml'
- '.gitlab/ci/upload_cache.yml'
- '.gitlab/ci/docs.yml'
- '.gitlab/ci/static-code-analysis.yml'
- '.gitlab/ci/pre_commit.yml'
- '.gitlab/ci/pre_check.yml'
- '.gitlab/ci/build.yml'
- '.gitlab/ci/integration_test.yml'
- '.gitlab/ci/host-test.yml'
- '.gitlab/ci/target-test.yml'
- '.gitlab/ci/deploy.yml'
- '.gitlab/ci/test-win.yml'

View File

@@ -1,7 +1,7 @@
.build_template:
stage: build
extends:
- .after_script:build:ccache-show-stats:upload-failed-job-logs
- .after_script:build:ccache
image: $ESP_ENV_IMAGE
tags:
- build
@@ -16,7 +16,7 @@
extends:
- .build_template
- .before_script:build
- .after_script:build:ccache-show-stats
- .after_script:build:ccache
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
@@ -32,8 +32,8 @@
# keep the size info to help track the binary size
- size_info.txt
- "**/build*/size.json"
expire_in: 1 week
when: always
expire_in: 4 days
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v
@@ -42,11 +42,11 @@
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--extra-preserve-dirs
examples/bluetooth/esp_ble_mesh/ble_mesh_console
examples/bluetooth/hci/controller_hci_uart_esp32
examples/wifi/iperf
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
examples/bluetooth/esp_ble_mesh/ble_mesh_console
examples/bluetooth/hci/controller_hci_uart_esp32
examples/wifi/iperf
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
# for detailed documents, please refer to .gitlab/ci/README.md#uploaddownload-artifacts-to-internal-minio-server
- python tools/ci/artifacts_handler.py upload
@@ -64,14 +64,281 @@
--copy-sdkconfig
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
$TEST_BUILD_OPTS_EXTRA
- python tools/ci/artifacts_handler.py upload
######################
# build_template_app #
######################
.build_pytest_template:
extends:
- .build_cmake_template
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v
-t $IDF_TARGET
-m \"not host_test\"
--pytest-apps
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- python tools/ci/artifacts_handler.py upload
.build_pytest_no_jtag_template:
extends:
- .build_cmake_template
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v
-t $IDF_TARGET
-m \"not host_test and not jtag\"
--pytest-apps
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- python tools/ci/artifacts_handler.py upload
.build_pytest_jtag_template:
extends:
- .build_cmake_template
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v
-t $IDF_TARGET
-m \"not host_test and jtag\"
--pytest-apps
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- python tools/ci/artifacts_handler.py upload
build_pytest_examples_esp32:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32
parallel: 6
variables:
IDF_TARGET: esp32
TEST_DIR: examples
build_pytest_examples_esp32s2:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32s2
parallel: 3
variables:
IDF_TARGET: esp32s2
TEST_DIR: examples
build_pytest_examples_esp32s3:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32s3
parallel: 4
variables:
IDF_TARGET: esp32s3
TEST_DIR: examples
build_pytest_examples_esp32c3:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32c3
parallel: 4
variables:
IDF_TARGET: esp32c3
TEST_DIR: examples
build_pytest_examples_esp32c2:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32c2
parallel: 2
variables:
IDF_TARGET: esp32c2
TEST_DIR: examples
build_pytest_examples_esp32c6:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32c6
parallel: 2
variables:
IDF_TARGET: esp32c6
TEST_DIR: examples
build_pytest_examples_esp32h2:
extends:
- .build_pytest_no_jtag_template
- .rules:build:example_test-esp32h2
parallel: 2
variables:
IDF_TARGET: esp32h2
TEST_DIR: examples
build_pytest_examples_jtag: # for all targets
extends:
- .build_pytest_jtag_template
- .rules:build:example_test
variables:
IDF_TARGET: all
TEST_DIR: examples
build_pytest_components_esp32:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32
parallel: 5
variables:
IDF_TARGET: esp32
TEST_DIR: components
build_pytest_components_esp32s2:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32s2
parallel: 4
variables:
IDF_TARGET: esp32s2
TEST_DIR: components
build_pytest_components_esp32s3:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32s3
parallel: 4
variables:
IDF_TARGET: esp32s3
TEST_DIR: components
build_pytest_components_esp32c3:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32c3
parallel: 4
variables:
IDF_TARGET: esp32c3
TEST_DIR: components
build_pytest_components_esp32c2:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32c2
parallel: 3
variables:
IDF_TARGET: esp32c2
TEST_DIR: components
build_pytest_components_esp32c6:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32c6
parallel: 3
variables:
IDF_TARGET: esp32c6
TEST_DIR: components
build_pytest_components_esp32h2:
extends:
- .build_pytest_template
- .rules:build:component_ut-esp32h2
parallel: 4
variables:
IDF_TARGET: esp32h2
TEST_DIR: components
build_only_components_apps:
extends:
- .build_cmake_template
- .rules:build:component_ut
parallel: 5
script:
- set_component_ut_vars
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py $COMPONENT_UT_DIRS -v
-t all
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- python tools/ci/artifacts_handler.py upload
build_pytest_test_apps_esp32:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32
variables:
IDF_TARGET: esp32
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32s2:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32s2
variables:
IDF_TARGET: esp32s2
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32s3:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32s3
parallel: 2
variables:
IDF_TARGET: esp32s3
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32c3:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32c3
variables:
IDF_TARGET: esp32c3
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32c2:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32c2
variables:
IDF_TARGET: esp32c2
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32c6:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32c6
variables:
IDF_TARGET: esp32c6
TEST_DIR: tools/test_apps
build_pytest_test_apps_esp32h2:
extends:
- .build_pytest_template
- .rules:build:custom_test-esp32h2
variables:
IDF_TARGET: esp32h2
TEST_DIR: tools/test_apps
build_only_tools_test_apps:
extends:
- .build_cmake_template
- .rules:build:custom_test
parallel: 9
script:
# CI specific options start from "--parallel-count xxx". could ignore when running locally
- run_cmd python tools/ci/ci_build_apps.py tools/test_apps -v
-t all
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- python tools/ci/artifacts_handler.py upload
.build_template_app_template:
extends:
- .build_template
@@ -83,12 +350,12 @@
BUILD_LOG_CMAKE: "${LOG_PATH}/cmake_@t_@w.txt"
BUILD_COMMAND_ARGS: ""
artifacts:
when: always
paths:
- log_template_app/*
- size_info.txt
- build_template_app/**/size.json
expire_in: 1 week
when: always
script:
# Set the variable for 'esp-idf-template' testing
- ESP_IDF_TEMPLATE_GIT=${ESP_IDF_TEMPLATE_GIT:-"https://github.com/espressif/esp-idf-template.git"}
@@ -107,32 +374,100 @@ fast_template_app:
- .build_template_app_template
- .rules:build:target_test
stage: pre_check
tags: [fast_run, shiny]
variables:
BUILD_COMMAND_ARGS: "-p"
#------------------------------------------------------------------------------
########################################
# Clang Build Apps Without Tests Cases #
########################################
build_examples_cmake_esp32:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32
parallel: 8
variables:
IDF_TARGET: esp32
TEST_DIR: examples
build_examples_cmake_esp32s2:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32s2
parallel: 7
variables:
IDF_TARGET: esp32s2
TEST_DIR: examples
build_examples_cmake_esp32s3:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32s3
parallel: 11
variables:
IDF_TARGET: esp32s3
TEST_DIR: examples
build_examples_cmake_esp32c2:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32c2
parallel: 7
variables:
IDF_TARGET: esp32c2
TEST_DIR: examples
build_examples_cmake_esp32c3:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32c3
parallel: 9
variables:
IDF_TARGET: esp32c3
TEST_DIR: examples
build_examples_cmake_esp32c6:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32c6
parallel: 11
variables:
IDF_TARGET: esp32c6
TEST_DIR: examples
build_examples_cmake_esp32h2:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32h2
parallel: 9
variables:
IDF_TARGET: esp32h2
TEST_DIR: examples
build_examples_cmake_esp32p4:
extends:
- .build_cmake_template
- .rules:build:example_test-esp32p4
parallel: 4
variables:
IDF_TARGET: esp32p4
TEST_DIR: examples
build_clang_test_apps_esp32:
extends:
- .build_cmake_clang_template
- .rules:build
- .rules:build:custom_test-esp32
variables:
IDF_TARGET: esp32
build_clang_test_apps_esp32s2:
extends:
- .build_cmake_clang_template
- .rules:build
- .rules:build:custom_test-esp32s2
variables:
IDF_TARGET: esp32s2
build_clang_test_apps_esp32s3:
extends:
- .build_cmake_clang_template
- .rules:build
- .rules:build:custom_test-esp32s3
variables:
IDF_TARGET: esp32s3
@@ -149,77 +484,72 @@ build_clang_test_apps_esp32s3:
build_clang_test_apps_esp32c3:
extends:
- .build_clang_test_apps_riscv
- .rules:build
- .rules:build:custom_test-esp32c3
variables:
IDF_TARGET: esp32c3
build_clang_test_apps_esp32c2:
extends:
- .build_clang_test_apps_riscv
- .rules:build
- .rules:build:custom_test-esp32c2
variables:
IDF_TARGET: esp32c2
build_clang_test_apps_esp32c6:
extends:
- .build_clang_test_apps_riscv
- .rules:build
- .rules:build:custom_test-esp32c6
# TODO: c6 builds fail in master due to missing headers
allow_failure: true
variables:
IDF_TARGET: esp32c6
######################
# Build System Tests #
######################
.test_build_system_template:
stage: host_test
extends:
- .build_template
- .rules:build:check
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
reports:
junit: XUNIT_RESULT.xml
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 1 week
when: always
script:
- ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
- cd ${IDF_PATH}/tools/test_build_system
- python ${IDF_PATH}/tools/ci/get_known_failure_cases_file.py
- pytest
--cleanup-idf-copy
--parallel-count ${CI_NODE_TOTAL:-1}
--parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system
--junitxml ${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
- pytest --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1}
--work-dir ${CI_PROJECT_DIR}/test_build_system --junitxml=${CI_PROJECT_DIR}/XUNIT_RESULT.xml
--ignore-result-files known_failure_cases/known_failure_cases.txt
pytest_build_system:
extends: .test_build_system_template
parallel: 3
artifacts:
paths:
- XUNIT_RESULT.xml
- test_build_system
when: always
expire_in: 2 days
reports:
junit: XUNIT_RESULT.xml
pytest_build_system_macos:
extends:
- .test_build_system_template
- .before_script:build:macos
- .after_script:build:macos:upload-failed-job-logs:ccache-show-stats
- .rules:build:macos
tags:
- macos_shell
parallel: 3
variables:
PYENV_VERSION: "3.8"
# CCACHE_DIR: "/cache/idf_ccache". On macOS, you cannot write to this folder due to insufficient permissions.
CCACHE_DIR: "" # ccache will use "$HOME/Library/Caches/ccache".
CCACHE_MAXSIZE: "5G" # To preserve the limited Macbook storage. CCACHE automatically prunes old caches to fit the set limit.
artifacts:
paths:
- XUNIT_RESULT.xml
- test_build_system
when: always
expire_in: 2 days
reports:
junit: XUNIT_RESULT.xml
build_docker:
extends:
- .before_script:minimal
@@ -250,52 +580,6 @@ build_template_app:
- .build_template_app_template
- .rules:build
stage: host_test
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- job: fast_template_app
artifacts: false
####################
# Dynamic Pipeline #
####################
generate_build_child_pipeline:
extends:
- .build_template
tags: [fast_run, shiny]
dependencies: # set dependencies to null to avoid missing artifacts issue
needs:
- pipeline_variables
- job: baseline_manifest_sha
optional: true
artifacts:
paths:
- build_child_pipeline.yml
- test_related_apps.txt
- non_test_related_apps.txt
expire_in: 1 week
when: always
script:
- run_cmd python tools/ci/dynamic_pipelines/scripts/generate_build_child_pipeline.py
build_child_pipeline:
stage: build
needs:
- job: fast_template_app
optional: true
artifacts: false
- pipeline_variables
- generate_build_child_pipeline
variables:
IS_MR_PIPELINE: $IS_MR_PIPELINE
MR_MODIFIED_COMPONENTS: $MR_MODIFIED_COMPONENTS
MR_MODIFIED_FILES: $MR_MODIFIED_FILES
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
BUILD_AND_TEST_ALL_APPS: $BUILD_AND_TEST_ALL_APPS
# https://gitlab.com/gitlab-org/gitlab/-/issues/214340
inherit:
variables: false
trigger:
include:
- artifact: build_child_pipeline.yml
job: generate_build_child_pipeline
strategy: depend

View File

@@ -6,28 +6,22 @@ stages:
- pre_check
- build
- assign_test
- build_doc
- target_test
- host_test
- build_doc
- test_deploy
- deploy
- post_deploy
variables:
# System environment
# System environment
# Common parameters for the 'make' during CI tests
MAKEFLAGS: "-j5 --no-keep-going"
# GitLab-CI environment
# Thanks to pack-objects cache, clone strategy should behave faster than fetch
# so we pick "clone" as default git strategy
# Shiny runners by default remove the CI_PROJECT_DIR every time at the beginning of one job
# and clone with a --depth=1
# Brew runners will fetch from locally mirror first, and cache the local CI_PROJECT_DIR
# In conclusion
# - set GIT_STRATEGY: "clone" to shiny runners
# - set GIT_STRATEGY: "fetch" to brew runners
# GitLab-CI environment
# now we have pack-objects cache, so clone strategy is faster than fetch
GIT_STRATEGY: clone
# we will download archive for each submodule instead of clone.
# we don't do "recursive" when fetch submodule as they're not used in CI now.
@@ -39,7 +33,7 @@ variables:
GIT_FETCH_EXTRA_FLAGS: "--no-recurse-submodules --prune --prune-tags"
# we're using .cache folder for caches
GIT_CLEAN_FLAGS: -ffdx -e .cache/
LATEST_GIT_TAG: v5.3.3
LATEST_GIT_TAG: v5.2-dev
SUBMODULE_FETCH_TOOL: "tools/ci/ci_fetch_submodule.py"
# by default we will fetch all submodules
@@ -52,11 +46,14 @@ variables:
IDF_PATH: "$CI_PROJECT_DIR"
V: "0"
CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
PYTHON_VER: 3.8.17
# Docker images
ESP_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-env-v5.3:1"
ESP_IDF_DOC_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-doc-env-v5.3:1-1"
TARGET_TEST_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/target-test-env-v5.3:1"
ESP_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-env-v5.2:2"
ESP_IDF_DOC_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-doc-env-v5.2:2-1"
QEMU_IMAGE: "${CI_DOCKER_REGISTRY}/qemu-v5.2:2-20230522"
TARGET_TEST_ENV_IMAGE: "${CI_DOCKER_REGISTRY}/target-test-env-v5.2:2"
SONARQUBE_SCANNER_IMAGE: "${CI_DOCKER_REGISTRY}/sonarqube-scanner:5"
PRE_COMMIT_IMAGE: "${CI_DOCKER_REGISTRY}/esp-idf-pre-commit:1"
@@ -72,7 +69,7 @@ variables:
CI_PYTHON_CONSTRAINT_BRANCH: ""
# Update the filename for a specific ESP-IDF release. It is used only with CI_PYTHON_CONSTRAINT_BRANCH.
CI_PYTHON_CONSTRAINT_FILE: "espidf.constraints.v5.3.txt"
CI_PYTHON_CONSTRAINT_FILE: "espidf.constraints.v5.2.txt"
# Set this variable to repository name of a Python tool you wish to install and test in the context of ESP-IDF CI.
# Keep the variable empty when not used.
@@ -83,25 +80,13 @@ variables:
# This is used only if CI_PYTHON_TOOL_REPO is not empty.
CI_PYTHON_TOOL_BRANCH: ""
# Set this variable to specify the file name for the known failure cases.
KNOWN_FAILURE_CASES_FILE_NAME: "5.3.txt"
IDF_CI_BUILD: 1
# ccache settings
# some settings need to set in .gitlab-ci.yml as it takes effect while start-up the job
# https://ccache.dev/manual/latest.html#_configuring_ccache
# host mapping volume to share ccache between runner concurrent jobs
CCACHE_DIR: "/cache/idf_ccache"
CCACHE_MAXSIZE: "50G"
################################################
# `before_script` and `after_script` Templates #
################################################
.common_before_scripts: &common-before_scripts |
source tools/ci/utils.sh
is_based_on_commits $REQUIRED_ANCESTOR_COMMITS
if [[ -n "$IDF_DONT_USE_MIRRORS" ]]; then
@@ -156,15 +141,6 @@ variables:
$IDF_PATH/tools/idf_tools.py --non-interactive install esp-clang
fi
# Install QEMU if necessary
if [[ ! -z "$INSTALL_QEMU" ]]; then
$IDF_PATH/tools/idf_tools.py --non-interactive install qemu-xtensa qemu-riscv32
fi
# Since the version 3.21 CMake passes source files and include dirs to ninja using absolute paths.
# Needed for pytest junit reports.
$IDF_PATH/tools/idf_tools.py --non-interactive install cmake
source ./export.sh
# Custom clang
@@ -194,7 +170,7 @@ variables:
.show_ccache_statistics: &show_ccache_statistics |
# Show ccache statistics if enabled globally
test "$CI_CCACHE_STATS" == 1 && test -n "$(which ccache)" && ccache --show-stats -vv || true
test "$CI_CCACHE_STATS" == 1 && test -n "$(which ccache)" && ccache --show-stats || true
.upload_failed_job_log_artifacts: &upload_failed_job_log_artifacts |
if [ $CI_JOB_STATUS = "failed" ]; then
@@ -207,10 +183,6 @@ variables:
.before_script:build:macos:
before_script:
# macos is running shell executor, which means it would use
# the system installed /usr/local/bin/python3 by default.
# Ensure pyenv and PYENV_VERSION installed
- eval "$(pyenv init -)"
- *common-before_scripts
# On macOS, these tools need to be installed
- export IDF_TOOLS_PATH="${HOME}/.espressif_runner_${CI_RUNNER_ID}_${CI_CONCURRENT_ID}"
@@ -219,15 +191,6 @@ variables:
- *setup_tools_and_idf_python_venv
- fetch_submodules
.after_script:build:macos:upload-failed-job-logs:ccache-show-stats:
after_script:
# macos is running shell executor, which means it would use
# the system installed /usr/local/bin/python3 by default.
# Ensure pyenv and PYENV_VERSION installed
- eval "$(pyenv init -)"
- *upload_failed_job_log_artifacts
- *show_ccache_statistics
.before_script:build:
before_script:
- *common-before_scripts
@@ -237,11 +200,7 @@ variables:
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
.after_script:build:ccache-show-stats:
after_script:
- *show_ccache_statistics
.after_script:build:ccache-show-stats:upload-failed-job-logs:
.after_script:build:ccache:
after_script:
- *show_ccache_statistics
- *upload_failed_job_log_artifacts
@@ -325,6 +284,22 @@ variables:
- *setup_tools_and_idf_python_venv
- add_gitlab_ssh_keys
# git describe requires commit history until the latest tag
.before_script:fetch:git_describe:
variables:
GIT_STRAEGY: none
before_script:
- *git_init
- *git_fetch_from_mirror_url_if_exists
- |
git fetch origin refs/tags/"${LATEST_GIT_TAG}":refs/tags/"${LATEST_GIT_TAG}" --depth=1
git repack -d
git fetch origin $CI_COMMIT_SHA --shallow-since=$(git log -1 --format=%as "${LATEST_GIT_TAG}")
- *git_checkout_fetch_head
- *common-before_scripts
- *setup_tools_and_idf_python_venv
- add_gitlab_ssh_keys
# target test runners may locate in different places
# for runners set git mirror, we fetch from the mirror first, then fetch the HEAD commit
.before_script:fetch:target_test:
@@ -347,15 +322,11 @@ default:
cache:
# pull only for most of the use cases since it's cache dir.
# Only set "push" policy for "upload_cache" stage jobs
- key: pip-cache-${LATEST_GIT_TAG}
fallback_keys:
- pip-cache
- key: pip-cache
paths:
- .cache/pip
policy: pull
- key: submodule-cache-${LATEST_GIT_TAG}
fallback_keys:
- submodule-cache
- key: submodule-cache
paths:
- .cache/submodule_archives
policy: pull
@@ -364,12 +335,6 @@ default:
- *setup_tools_and_idf_python_venv
- add_gitlab_ssh_keys
- fetch_submodules
# gitlab bug, setting them here doesn't work
# - expire_in: https://gitlab.com/gitlab-org/gitlab/-/issues/404563
# - when: https://gitlab.com/gitlab-org/gitlab/-/issues/440672
# artifacts:
# expire_in: 1 week
# when: always
retry:
max: 2
when:

View File

@@ -1,17 +0,0 @@
# External DangerJS
include:
- project: espressif/shared-ci-dangerjs
ref: master
file: danger.yaml
run-danger-mr-linter:
stage: pre_check
variables:
GIT_STRATEGY: none # no repo checkout
ENABLE_CHECK_AREA_LABELS: 'true'
ENABLE_CHECK_DOCS_TRANSLATION: 'true'
ENABLE_CHECK_UPDATED_CHANGELOG: 'false'
before_script: []
cache: []
tags:
- dangerjs

View File

@@ -7,11 +7,10 @@
#
# This file should ONLY be used during bringup. Should be reset to empty after the bringup process
extra_default_build_targets:
- esp32p4
- esp32p4
bypass_check_test_targets:
- esp32c5
- esp32c61
- esp32p4
#
# These lines would
# - enable the README.md check for esp32c6. Don't forget to add the build jobs in .gitlab/ci/build.yml

View File

@@ -5,7 +5,6 @@
- esp32c3
- esp32c2
- esp32c6
- esp32c5
- esp32h2
- esp32p4
@@ -66,6 +65,104 @@
included_in:
- build:check
# ---------------
# Build Test Jobs
# ---------------
"build:{0}-{1}":
matrix:
- *target_test
- *all_targets
labels:
- build
patterns:
- build_components
- build_system
- build_target_test
- downloadable-tools
included_in:
- "build:{0}"
- build:target_test
####################
# Target Test Jobs #
####################
"test:{0}-{1}":
matrix:
- *target_test
- *all_targets
labels: # For each rule, use labels <test_type> and <test_type>-<target>
- "{0}"
- "{0}_{1}"
- target_test
patterns: # For each rule, use patterns <test_type> and build-<test_type>
- "{0}"
- "build-{0}"
included_in: # Parent rules
- "build:{0}"
- "build:{0}-{1}"
- build:target_test
# -------------
# Special Cases
# -------------
# To reduce the specific runners' usage.
# Do not create these jobs by default patterns on development branches
# Can be triggered by labels or related changes
"test:{0}-{1}-{2}":
matrix:
- *target_test
- *all_targets
- - wifi # pytest*wifi*
- ethernet # pytest*ethernet*
- sdio # pytest*sdio*
- usb # USB Device & Host tests
- adc # pytest*adc*
- i154
- flash_multi
- ecdsa
- nvs_encr_hmac
patterns:
- "{0}-{1}-{2}"
- "{0}-{2}"
- "target_test-{2}"
labels:
- "{0}_{1}"
- "{0}"
- target_test
included_in:
- "build:{0}-{1}"
- "build:{0}"
- build:target_test
# For example_test*flash_encryption_wifi_high_traffic jobs
# set `INCLUDE_NIGHTLY_RUN` variable when triggered on development branches
"test:example_test-{0}-include_nightly_run-rule":
matrix:
- - esp32
- esp32c3
specific_rules:
- "if-example_test-ota-include_nightly_run-rule"
included_in:
- "build:example_test-{0}"
- "build:example_test"
- build:target_test
# For i154 runners
"test:example_test-i154":
patterns:
- "example_test-i154"
- "target_test-i154"
labels:
- target_test
- example_test
included_in:
- "build:example_test-esp32s3"
- "build:example_test-esp32c6"
- "build:example_test-esp32h2"
- "build:example_test"
- build:target_test
"test:host_test":
labels:
- host_test
@@ -84,9 +181,3 @@
"labels:nvs_coverage": # host_test
labels:
- nvs_coverage
"labels:windows_pytest_build_system":
labels:
- windows
specific_rules:
- if-schedule-test-build-system-windows

View File

@@ -37,16 +37,25 @@
.if-dev-push: &if-dev-push
if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && $CI_COMMIT_TAG !~ /^qa-test/ && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event")'
.if-schedule: &if-schedule
if: '$CI_PIPELINE_SOURCE == "schedule"'
.doc-rules:build:docs-full:
rules:
- <<: *if-qa-test-tag
when: never
- <<: *if-protected
- <<: *if-schedule
- <<: *if-label-build_docs
- <<: *if-label-docs_full
- <<: *if-dev-push
changes: *patterns-docs-full
.doc-rules:build:docs-full-prod:
rules:
- <<: *if-qa-test-tag
when: never
- <<: *if-protected-no_label
.doc-rules:build:docs-partial:
rules:
- <<: *if-qa-test-tag
@@ -83,18 +92,13 @@ check_docs_lang_sync:
stage: build_doc
tags:
- build_docs
needs:
- job: fast_template_app
artifacts: false
optional: true
script:
- if [ -n "${BREATHE_ALT_INSTALL_URL}" ]; then pip uninstall -y breathe && pip install -U ${BREATHE_ALT_INSTALL_URL}; fi
- cd docs
- build-docs -t $DOCTGT -bs $DOC_BUILDERS -l $DOCLANG build
parallel:
matrix:
- DOCLANG: ["en", "zh_CN"]
DOCTGT: ["esp32", "esp32s2", "esp32s3", "esp32c3", "esp32c2", "esp32c6", "esp32c5","esp32h2", "esp32p4"]
DOCTGT: ["esp32", "esp32s2", "esp32s3", "esp32c3", "esp32c2", "esp32c6", "esp32h2", "esp32p4"]
check_docs_gh_links:
image: $ESP_IDF_DOC_ENV_IMAGE
@@ -111,6 +115,24 @@ build_docs_html_full:
extends:
- .build_docs_template
- .doc-rules:build:docs-full
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
when: always
paths:
- docs/_build/*/*/*.txt
- docs/_build/*/*/html/*
expire_in: 4 days
variables:
DOC_BUILDERS: "html"
build_docs_html_full_prod:
extends:
- .build_docs_template
- .doc-rules:build:docs-full-prod
dependencies: [] # Stop build_docs jobs from downloading all previous job's artifacts
artifacts:
when: always
paths:
@@ -124,6 +146,10 @@ build_docs_html_partial:
extends:
- .build_docs_template
- .doc-rules:build:docs-partial
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
when: always
paths:
@@ -139,6 +165,35 @@ build_docs_html_partial:
- DOCLANG: "zh_CN"
DOCTGT: "esp32p4"
build_docs_pdf:
extends:
- .build_docs_template
- .doc-rules:build:docs-full
needs:
- job: fast_template_app
artifacts: false
optional: true
artifacts:
when: always
paths:
- docs/_build/*/*/latex/*
expire_in: 4 days
variables:
DOC_BUILDERS: "latex"
build_docs_pdf_prod:
extends:
- .build_docs_template
- .doc-rules:build:docs-full-prod
dependencies: [] # Stop build_docs jobs from downloading all previous job's artifacts
artifacts:
when: always
paths:
- docs/_build/*/*/latex/*
expire_in: 4 days
variables:
DOC_BUILDERS: "latex"
.deploy_docs_template:
image: $ESP_IDF_DOC_ENV_IMAGE
variables:
@@ -167,6 +222,8 @@ deploy_docs_preview:
optional: true
- job: build_docs_html_full
optional: true
- job: build_docs_pdf
optional: true
variables:
TYPE: "preview"
# older branches use DOCS_DEPLOY_KEY, DOCS_SERVER, DOCS_SERVER_USER, DOCS_PATH for preview server so we keep these names for 'preview'
@@ -181,12 +238,12 @@ deploy_docs_production:
# The DOCS_PROD_* variables used by this job are "Protected" so these branches must all be marked "Protected" in Gitlab settings
extends:
- .deploy_docs_template
rules:
- <<: *if-protected-no_label
- .doc-rules:build:docs-full-prod
stage: post_deploy
dependencies: # set dependencies to null to avoid missing artifacts issue
needs: # ensure runs after push_to_github succeeded
- build_docs_html_full
- build_docs_html_full_prod
- build_docs_pdf_prod
- job: push_to_github
artifacts: false
variables:
@@ -196,12 +253,12 @@ deploy_docs_production:
DOCS_DEPLOY_SERVER_USER: "$DOCS_PROD_SERVER_USER"
DOCS_DEPLOY_PATH: "$DOCS_PROD_PATH"
DOCS_DEPLOY_URL_BASE: "https://docs.espressif.com/projects/esp-idf"
DEPLOY_STABLE: 1
check_doc_links:
extends:
- .build_docs_template
rules:
- <<: *if-protected-no_label
- .doc-rules:build:docs-full-prod
stage: post_deploy
needs:
- job: deploy_docs_production

View File

@@ -14,25 +14,6 @@
optional: true
artifacts: false
- pipeline_variables
artifacts:
expire_in: 1 week
when: always
check_public_headers:
extends:
- .host_test_template
- .rules:build:check
script:
- IDF_TARGET=esp32 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32-elf-
- IDF_TARGET=esp32s2 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32s2-elf-
- IDF_TARGET=esp32s3 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32s3-elf-
- IDF_TARGET=esp32c3 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c2 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c6 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c5 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32h2 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32p4 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c61 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
test_nvs_on_host:
extends: .host_test_template
@@ -47,6 +28,7 @@ test_nvs_coverage:
artifacts:
paths:
- components/nvs_flash/test_nvs_host/coverage_report
expire_in: 1 week
script:
- cd components/nvs_flash/test_nvs_host
- make coverage_report
@@ -83,6 +65,7 @@ test_reproducible_build:
- "**/build*/*.bin"
- "**/build*/bootloader/*.bin"
- "**/build*/partition_table/*.bin"
expire_in: 1 week
test_spiffs_on_host:
extends: .host_test_template
@@ -116,9 +99,18 @@ test_gdbstub_on_host:
- cd components/esp_gdbstub/test_gdbstub_host
- make test
test_idf_py:
extends: .host_test_template
variables:
LC_ALL: C.UTF-8
script:
- cd ${IDF_PATH}/tools/test_idf_py
- ./test_idf_py.py
- ./test_hints.py
# Test for create virtualenv. It must be invoked from Python, not from virtualenv.
# Use docker image system python without any extra dependencies
test_cli_installer:
test_idf_tools:
extends:
- .host_test_template
- .before_script:minimal
@@ -127,19 +119,17 @@ test_cli_installer:
paths:
- tools/tools.new.json
- tools/test_idf_tools/test_python_env_logs.txt
expire_in: 1 week
image:
name: $ESP_ENV_IMAGE
entrypoint: [""] # use system python3. no extra pip package installed
script:
# Tools must be downloaded for testing
# We could use "idf_tools.py download all", but we don't want to install clang because of its huge size
- python3 ${IDF_PATH}/tools/idf_tools.py download required qemu-riscv32 qemu-xtensa cmake
- python3 ${IDF_PATH}/tools/idf_tools.py download required qemu-riscv32 qemu-xtensa
- cd ${IDF_PATH}/tools/test_idf_tools
- python3 -m pip install jsonschema
- python3 ./test_idf_tools.py -v
- python3 ./test_idf_tools_python_env.py
# It runs at the end because it modifies dependencies
- IDF_TEST_MAY_BREAK_DEPENDENCIES=1 python3 ./test_idf_tools.py -v TestSystemDependencies.test_commands_when_nodeps
.test_efuse_table_on_host_template:
extends: .host_test_template
@@ -149,6 +139,7 @@ test_cli_installer:
when: on_failure
paths:
- components/efuse/${IDF_TARGET}/esp_efuse_table.c
expire_in: 1 week
script:
- cd ${IDF_PATH}/components/efuse/
- ./efuse_table_gen.py -t "${IDF_TARGET}" ${IDF_PATH}/components/efuse/${IDF_TARGET}/esp_efuse_table.csv
@@ -191,6 +182,7 @@ test_logtrace_proc:
paths:
- tools/esp_app_trace/test/logtrace/output
- tools/esp_app_trace/test/logtrace/.coverage
expire_in: 1 week
script:
- cd ${IDF_PATH}/tools/esp_app_trace/test/logtrace
- ./test.sh
@@ -202,43 +194,42 @@ test_sysviewtrace_proc:
paths:
- tools/esp_app_trace/test/sysview/output
- tools/esp_app_trace/test/sysview/.coverage
expire_in: 1 week
script:
- cd ${IDF_PATH}/tools/esp_app_trace/test/sysview
- ./test.sh
test_tools:
test_mkdfu:
extends: .host_test_template
variables:
LC_ALL: C.UTF-8
script:
- cd ${IDF_PATH}/tools/test_mkdfu
- ./test_mkdfu.py
test_autocomplete:
extends:
- .host_test_template
artifacts:
when: on_failure
paths:
- ${IDF_PATH}/*.out
- ${IDF_PATH}/XUNIT_*.xml
reports:
junit: ${IDF_PATH}/XUNIT_*.xml
variables:
LC_ALL: C.UTF-8
INSTALL_QEMU: 1 # for test_idf_qemu.py
expire_in: 1 week
script:
- ${IDF_PATH}/tools/ci/test_autocomplete.py
test_detect_python:
extends:
- .host_test_template
script:
- stat=0
- cd ${IDF_PATH}/tools/ci/test_autocomplete
- pytest --noconftest test_autocomplete.py --junitxml=${IDF_PATH}/XUNIT_AUTOCOMP.xml || stat=1
- cd ${IDF_PATH}/tools/test_idf_py
- pytest --noconftest test_idf_py.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY.xml || stat=1
- pytest --noconftest test_hints.py --junitxml=${IDF_PATH}/XUNIT_HINTS.xml || stat=1
- pytest --noconftest test_idf_qemu.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY_QEMU.xml || stat=1
- cd ${IDF_PATH}/tools/test_mkdfu
- pytest --noconftest test_mkdfu.py --junitxml=${IDF_PATH}/XUNIT_MKDFU.xml || stat=1
- cd ${IDF_PATH}/tools/test_idf_size
- pytest --noconftest test_idf_size.py --junitxml=${IDF_PATH}/XUNIT_IDF_SIZE.xml || stat=1
- cd ${IDF_PATH}
- shellcheck -s sh tools/detect_python.sh || stat=1
- shellcheck -s bash tools/detect_python.sh || stat=1
- shellcheck -s dash tools/detect_python.sh || stat=1
- shellcheck -s sh tools/detect_python.sh
- shellcheck -s bash tools/detect_python.sh
- shellcheck -s dash tools/detect_python.sh
- "bash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
- "dash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
- "zsh -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
- "fish -c 'source tools/detect_python.fish && echo Our Python: $ESP_PYTHON'"
- exit "$stat"
test_split_path_by_spaces:
extends: .host_test_template
@@ -295,72 +286,61 @@ test_pytest_qemu:
extends:
- .host_test_template
- .before_script:build
image: $QEMU_IMAGE
artifacts:
when: always
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- pytest_embedded_log/
reports:
junit: XUNIT_RESULT.xml
expire_in: 1 week
allow_failure: true # IDFCI-1752
parallel:
matrix:
- IDF_TARGET: [esp32, esp32c3]
variables:
INSTALL_QEMU: 1
script:
- run_cmd python tools/ci/ci_build_apps.py . -vv
--target $IDF_TARGET
--pytest-apps
-m qemu
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
- python tools/ci/get_known_failure_cases_file.py
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
- run_cmd pytest
--target $IDF_TARGET
-m qemu
--embedded-services idf,qemu
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--ignore-result-files known_failure_cases/known_failure_cases.txt
--app-info-filepattern \"list_job_*.txt\"
--qemu-extra-args \"-global driver=timer.$IDF_TARGET.timg,property=wdt_disable,value=true\"
test_pytest_linux:
extends:
- .host_test_template
- .before_script:build
artifacts:
when: always
paths:
- XUNIT_RESULT.xml
- pytest-embedded/
- pytest_embedded_log/
- "**/build*/build_log.txt"
reports:
junit: XUNIT_RESULT.xml
expire_in: 1 week
script:
- run_cmd python tools/ci/ci_build_apps.py components examples tools/test_apps -vv
--target linux
--pytest-apps
-m host_test
--collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt"
--modified-components ${MR_MODIFIED_COMPONENTS}
--modified-files ${MR_MODIFIED_FILES}
- python tools/ci/get_known_failure_cases_file.py
--modified-components ${MODIFIED_COMPONENTS}
--modified-files ${MODIFIED_FILES}
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
- run_cmd pytest
--target linux
-m host_test
--junitxml=XUNIT_RESULT.xml
--ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME}
--ignore-result-files known_failure_cases/known_failure_cases.txt
--app-info-filepattern \"list_job_*.txt\"
test_idf_pytest_plugin:
extends:
- .host_test_template
- .rules:patterns:idf-pytest-plugin
variables:
SUBMODULES_TO_FETCH: "none"
artifacts:
reports:
junit: XUNIT_RESULT.xml
script:
- cd tools/ci/idf_pytest
- pytest --junitxml=${CI_PROJECT_DIR}/XUNIT_RESULT.xml

View File

@@ -34,7 +34,8 @@ gen_integration_pipeline:
image: ${CI_INTEGRATION_ASSIGN_ENV}
stage: assign_test
cache: []
tags: [fast_run, shiny]
tags:
- assign_test
variables:
SUBMODULES_TO_FETCH: "none"
GIT_LFS_SKIP_SMUDGE: 1
@@ -46,7 +47,6 @@ gen_integration_pipeline:
paths:
- idf-integration-ci/child_pipeline/
expire_in: 2 weeks
when: always
script:
- add_gitlab_ssh_keys
- retry_failed git clone ${CI_GEN_INTEGRATION_PIPELINE_REPO} idf-integration-ci

View File

@@ -3,7 +3,45 @@
image: $ESP_ENV_IMAGE
tags:
- host_test
dependencies: # set dependencies to null to avoid missing artifacts issue
dependencies: []
check_pre_commit:
extends:
- .pre_check_template
- .before_script:minimal
image: $PRE_COMMIT_IMAGE
needs:
- pipeline_variables
script:
- fetch_submodules
- pre-commit run --files $MODIFIED_FILES
check_MR_style_dangerjs:
extends:
- .pre_check_template
image: node:18.15.0-alpine3.16
variables:
DANGER_GITLAB_API_TOKEN: ${ESPCI_TOKEN}
DANGER_GITLAB_HOST: ${GITLAB_HTTP_SERVER}
DANGER_GITLAB_API_BASE_URL: ${GITLAB_HTTP_SERVER}/api/v4
DANGER_JIRA_USER: ${DANGER_JIRA_USER}
DANGER_JIRA_PASSWORD: ${DANGER_JIRA_PASSWORD}
cache:
# pull only for most of the use cases since it's cache dir.
# Only set "push" policy for "upload_cache" stage jobs
key:
files:
- .gitlab/dangerjs/package-lock.json
paths:
- .gitlab/dangerjs/node_modules/
policy: pull
before_script:
- cd .gitlab/dangerjs
- npm install --no-progress --no-update-notifier # Install danger dependencies
script:
- npx danger ci --failOnErrors -v
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
check_version:
# Don't run this for feature/bugfix branches, so that it is possible to modify
@@ -11,13 +49,7 @@ check_version:
extends:
- .pre_check_template
- .rules:protected
tags: [ brew, github_sync ]
variables:
# need a full clone to get the latest tag
# the --shallow-since=$(git log -1 --format=%as $LATEST_GIT_TAG) option is not accurate
GIT_STRATEGY: fetch
SUBMODULES_TO_FETCH: "none"
GIT_DEPTH: 0
- .before_script:fetch:git_describe
script:
- export IDF_PATH=$PWD
- tools/ci/check_idf_version.sh
@@ -25,8 +57,7 @@ check_version:
check_api_usage:
extends: .pre_check_template
script:
- python -m pip install ast-grep-cli # use ast-grep to describe customized lint rules
- ast-grep scan
- tools/ci/check_examples_rom_header.sh
- tools/ci/check_api_violation.sh
- tools/ci/check_examples_extra_component_dirs.sh
@@ -44,8 +75,6 @@ check_blobs:
- IDF_TARGET=esp32c2 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
- IDF_TARGET=esp32c3 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
- IDF_TARGET=esp32c6 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
- IDF_TARGET=esp32c5 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
- IDF_TARGET=esp32_host $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
# Check if Coexistence library header files match between IDF and the version used when compiling the libraries
- IDF_TARGET=esp32 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
- IDF_TARGET=esp32s2 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
@@ -54,10 +83,23 @@ check_blobs:
- IDF_TARGET=esp32c3 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
- IDF_TARGET=esp32c6 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
- IDF_TARGET=esp32h2 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
- IDF_TARGET=esp32c5 $IDF_PATH/components/esp_coex/test_md5/test_md5.sh
# Check if Wi-Fi, PHY, BT blobs contain references to specific symbols
- bash $IDF_PATH/tools/ci/check_blobs.sh
check_public_headers:
extends:
- .pre_check_template
- .rules:build:check
script:
- IDF_TARGET=esp32 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32-elf-
- IDF_TARGET=esp32s2 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32s2-elf-
- IDF_TARGET=esp32s3 python tools/ci/check_public_headers.py --jobs 4 --prefix xtensa-esp32s3-elf-
- IDF_TARGET=esp32c3 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c2 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32c6 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32h2 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
- IDF_TARGET=esp32p4 python tools/ci/check_public_headers.py --jobs 4 --prefix riscv32-esp-elf-
check_chip_support_components:
extends:
- .pre_check_template
@@ -70,7 +112,7 @@ check_chip_support_components:
expire_in: 1 week
script:
- python tools/ci/check_soc_headers_leak.py
- find ${IDF_PATH}/components/soc/**/include/soc/ -name "*_struct.h" -print0 | xargs -0 -n1 ./tools/ci/check_soc_struct_headers.py
- find ${IDF_PATH}/components/soc/*/include/soc/ -name "*_struct.h" -print0 | xargs -0 -n1 ./tools/ci/check_soc_struct_headers.py
- tools/ci/check_esp_memory_utils_headers.sh
check_esp_err_to_name:
@@ -101,16 +143,16 @@ check_version_tag:
extends:
- .pre_check_template
- .rules:tag:release
tags: [ brew, github_sync ]
variables:
# need a full clone to get the latest tag
# the --shallow-since=$(git log -1 --format=%as $LATEST_GIT_TAG) option is not accurate
GIT_STRATEGY: fetch
SUBMODULES_TO_FETCH: "none"
GIT_DEPTH: 0
- .before_script:fetch:git_describe
script:
- (git cat-file -t $CI_COMMIT_REF_NAME | grep tag) || (echo "ESP-IDF versions must be annotated tags." && exit 1)
check_artifacts_expire_time:
extends: .pre_check_template
script:
# check if we have set expire time for all artifacts
- python tools/ci/check_artifacts_expire_time.py
check_test_scripts_build_test_rules:
extends:
- .pre_check_template
@@ -133,71 +175,19 @@ pipeline_variables:
extends:
- .pre_check_template
- .before_script:fetch:git_diff
tags: [fast_run, shiny]
tags:
- build
script:
# MODIFIED_FILES is a list of files that changed, could be used everywhere
- MODIFIED_FILES=$(echo "$GIT_DIFF_OUTPUT" | xargs)
- echo "MODIFIED_FILES=$MODIFIED_FILES" >> pipeline.env
# MR_MODIFIED_FILES and MR_MODIFIED_COMPONENTS are semicolon separated lists that is used in MR only
# for non MR pipeline, these are empty lists
- |
if [ $IS_MR_PIPELINE == "0" ]; then
echo "MR_MODIFIED_FILES=\"\"" >> pipeline.env
echo "MR_MODIFIED_COMPONENTS=\"\"" >> pipeline.env
else
MR_MODIFIED_FILES=$(echo "$GIT_DIFF_OUTPUT" | tr '\n' ';')
echo "MR_MODIFIED_FILES=\"$MR_MODIFIED_FILES\"" >> pipeline.env
MR_MODIFIED_COMPONENTS=$(run_cmd python tools/ci/ci_get_mr_info.py components --modified-files $MODIFIED_FILES | tr '\n' ';')
echo "MR_MODIFIED_COMPONENTS=\"$MR_MODIFIED_COMPONENTS\"" >> pipeline.env
fi
- echo "MODIFIED_COMPONENTS=$(run_cmd python tools/ci/ci_get_mr_info.py components --modified-files $MODIFIED_FILES | xargs)" >> pipeline.env
- |
if echo "$CI_MERGE_REQUEST_LABELS" | egrep "(^|,)BUILD_AND_TEST_ALL_APPS(,|$)"; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
# run full pipeline if testing constraint branch
- |
if [ -n "$CI_PYTHON_CONSTRAINT_BRANCH" ]; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
- cat pipeline.env
- python tools/ci/artifacts_handler.py upload --type modified_files_and_components_report
artifacts:
reports:
dotenv: pipeline.env
paths:
- pipeline.env
expire_in: 1 week
when: always
baseline_manifest_sha:
extends:
- .pre_check_template
- .rules:dev-push
tags: [fast_run, shiny]
script:
- |
# merged results pipelines, by default
# diff between target-branch-head and merged-result-head
if [ -n "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA" ]; then
git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_SHA --depth=1
git checkout FETCH_HEAD
idf-build-apps dump-manifest-sha \
--manifest-files $(find . -name ".build-test-rules.yml" | xargs) \
--output .manifest_sha
# merge request pipelines, when the mr got conflicts
# diff between diff-base-sha and merge-request-head
elif [ -n "$CI_MERGE_REQUEST_DIFF_BASE_SHA" ]; then
git fetch origin $CI_MERGE_REQUEST_DIFF_BASE_SHA --depth=1
git checkout FETCH_HEAD
idf-build-apps dump-manifest-sha \
--manifest-files $(find . -name ".build-test-rules.yml" | xargs) \
--output .manifest_sha
# other pipelines, like the protected branches pipelines
# not triggered in this job
fi
artifacts:
paths:
- .manifest_sha
expire_in: 1 week
when: always
expire_in: 4 days

View File

@@ -1,47 +0,0 @@
.check_pre_commit_template:
extends:
- .before_script:minimal
stage: pre_check
image: $PRE_COMMIT_IMAGE
tags: [cache, shiny]
needs:
- pipeline_variables
variables:
# cache pre_commit
PRE_COMMIT_HOME: "$CI_PROJECT_DIR/.cache/pre-commit"
script:
- fetch_submodules
- pre-commit run --files $MODIFIED_FILES
- pre-commit run --hook-stage post-commit validate-sbom-manifest
check_pre_commit_upload_cache:
extends:
- .check_pre_commit_template
rules:
- if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/) && $CI_PIPELINE_SOURCE == "push"'
cache:
- key: pre_commit-cache-${LATEST_GIT_TAG}
paths:
- .cache/pre-commit
policy: pull-push
- key: submodule-cache-${LATEST_GIT_TAG}
paths:
- .cache/submodule_archives
policy: pull
check_pre_commit:
extends:
- .check_pre_commit_template
rules:
- if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/) && $CI_PIPELINE_SOURCE == "push"'
when: never
- when: on_success
cache:
- key: pre_commit-cache-${LATEST_GIT_TAG}
paths:
- .cache/pre-commit
policy: pull
- key: submodule-cache-${LATEST_GIT_TAG}
paths:
- .cache/submodule_archives
policy: pull

File diff suppressed because it is too large Load Diff

View File

@@ -6,8 +6,8 @@ clang_tidy_check:
artifacts:
paths:
- clang_tidy_reports/
expire_in: 1 week
when: always
expire_in: 1 day
variables:
IDF_TOOLCHAIN: clang
script:
@@ -23,12 +23,10 @@ check_pylint:
needs:
- pipeline_variables
artifacts:
when: always
reports:
codequality: pylint.json
paths:
- pylint.json
expire_in: 1 week
when: always
script:
- |
if [ -n "$CI_MERGE_REQUEST_IID" ]; then
@@ -38,3 +36,82 @@ check_pylint:
fi
- if [ -z "$files" ]; then echo "No python files found"; exit 0; fi
- run_cmd pylint --exit-zero --load-plugins=pylint_gitlab --output-format=gitlab-codeclimate:pylint.json $files
# build stage
# Sonarqube related jobs put here for this reason:
# Here we have two jobs. code_quality_check and code_quality_report.
#
# code_quality_check will analyze the code changes between your MR and
# code repo stored in sonarqube server. The analysis result is only shown in
# the comments under this MR and won't be transferred to the server.
#
# code_quality_report will analyze and transfer both of the newly added code
# and the analysis result to the server.
#
# Put in the front to ensure that the newly merged code can be stored in
# sonarqube server ASAP, in order to avoid reporting unrelated code issues
.sonar_scan_template:
stage: build
extends: .pre_check_template
image:
name: $SONARQUBE_SCANNER_IMAGE
before_script:
- source tools/ci/utils.sh
- export PYTHONPATH="$CI_PROJECT_DIR/tools:$CI_PROJECT_DIR/tools/ci/python_packages:$PYTHONPATH"
- fetch_submodules
# Exclude the submodules, all paths ends with /**
- submodules=$(get_all_submodules)
# get all exclude paths specified in tools/ci/sonar_exclude_list.txt | ignore lines start with # | xargs | replace all <space> to <comma>
- custom_excludes=$(cat $CI_PROJECT_DIR/tools/ci/sonar_exclude_list.txt | grep -v '^#' | xargs | sed -e 's/ /,/g')
# Exclude the report dir as well
- export EXCLUSIONS="$custom_excludes,$submodules"
- export SONAR_SCANNER_OPTS="-Xmx2048m"
variables:
GIT_DEPTH: 0
REPORT_PATTERN: clang_tidy_reports/*.txt
artifacts:
when: always
paths:
- $REPORT_PATTERN
expire_in: 1 week
dependencies: # Here is not a hard dependency relationship, could be skipped when only python files changed. so we do not use "needs" here.
- clang_tidy_check
code_quality_check:
extends:
- .sonar_scan_template
- .rules:patterns:static-code-analysis-preview
allow_failure: true # since now it's using exit code to indicate the code analysis result,
# we don't want to block ci when critical issues founded
script:
- export CI_MERGE_REQUEST_COMMITS=$(python ${CI_PROJECT_DIR}/tools/ci/ci_get_mr_info.py commits --src-branch ${CI_COMMIT_REF_NAME} | tr '\n' ',')
# test if this branch have merge request, if not, exit 0
- test -n "$CI_MERGE_REQUEST_IID" || exit 0
- test -n "$CI_MERGE_REQUEST_COMMITS" || exit 0
- sonar-scanner
-Dsonar.analysis.mode=preview
-Dsonar.branch.name=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
-Dsonar.cxx.clangtidy.reportPath=$REPORT_PATTERN
-Dsonar.exclusions=$EXCLUSIONS
-Dsonar.gitlab.ci_merge_request_iid=$CI_MERGE_REQUEST_IID
-Dsonar.gitlab.commit_sha=$CI_MERGE_REQUEST_COMMITS
-Dsonar.gitlab.merge_request_discussion=true
-Dsonar.gitlab.ref_name=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
-Dsonar.host.url=$SONAR_HOST_URL
-Dsonar.login=$SONAR_LOGIN
code_quality_report:
extends:
- .sonar_scan_template
- .rules:protected
allow_failure: true # since now it's using exit code to indicate the code analysis result,
# we don't want to block ci when critical issues founded
script:
- sonar-scanner
-Dsonar.branch.name=$CI_COMMIT_REF_NAME
-Dsonar.cxx.clangtidy.reportPath=$REPORT_PATTERN
-Dsonar.exclusions=$EXCLUSIONS
-Dsonar.gitlab.commit_sha=$PIPELINE_COMMIT_SHA
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
-Dsonar.host.url=$SONAR_HOST_URL
-Dsonar.login=$SONAR_LOGIN

1537
.gitlab/ci/target-test.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,96 +0,0 @@
# Host tests
.host_test_win_template:
extends: .rules:test:host_test
stage: host_test
image: $ESP_ENV_IMAGE
tags:
- windows-build
dependencies: # set dependencies to null to avoid missing artifacts issue
# run host_test jobs immediately, only after upload cache
needs:
- job: upload-pip-cache
optional: true
artifacts: false
- job: upload-submodules-cache
optional: true
artifacts: false
before_script: []
after_script: []
test_cli_installer_win:
extends:
- .host_test_win_template
- .rules:labels:windows_pytest_build_system
artifacts:
when: on_failure
paths:
- tools/tools.new.json
- tools/test_idf_tools/test_python_env_logs.txt
expire_in: 1 week
variables:
IDF_PATH: "$CI_PROJECT_DIR"
script:
# Tools must be downloaded for testing
- python ${IDF_PATH}\tools\idf_tools.py download required qemu-riscv32 qemu-xtensa cmake
- cd ${IDF_PATH}\tools\test_idf_tools
- python -m pip install jsonschema
- python .\test_idf_tools.py
- python .\test_idf_tools_python_env.py
test_tools_win:
extends:
- .host_test_win_template
- .rules:labels:windows_pytest_build_system
artifacts:
paths:
- ${IDF_PATH}/*.out
- ${IDF_PATH}/XUNIT_*.xml
reports:
junit: ${IDF_PATH}/XUNIT_*.xml
expire_in: 1 week
when: always
variables:
LC_ALL: C.UTF-8
PYTHONPATH: "$PYTHONPATH;$IDF_PATH\\tools;$IDF_PATH\\tools\\esp_app_trace;$IDF_PATH\\components\\partition_table;$IDF_PATH\\tools\\ci\\python_packages"
script:
- python -m pip install jsonschema
- .\install.ps1 --enable-ci --enable-pytest
- .\export.ps1
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}/tools/test_idf_py
- pytest --noconftest test_idf_py.py --junitxml=${IDF_PATH}/XUNIT_IDF_PY.xml
- pytest --noconftest test_hints.py --junitxml=${IDF_PATH}/XUNIT_HINTS.xml
# Build tests
.test_build_system_template_win:
stage: host_test
variables:
# Enable ccache for all build jobs. See configure_ci_environment.sh for more ccache related settings.
IDF_CCACHE_ENABLE: "1"
PYTHONPATH: "$PYTHONPATH;$IDF_PATH\\tools;$IDF_PATH\\tools\\esp_app_trace;$IDF_PATH\\components\\partition_table;$IDF_PATH\\tools\\ci\\python_packages"
before_script: []
after_script: []
timeout: 4 hours
script:
- .\install.ps1 --enable-ci --enable-pytest
- . .\export.ps1
- python "${SUBMODULE_FETCH_TOOL}" -s "all"
- cd ${IDF_PATH}\tools\test_build_system
- pytest --parallel-count ${CI_NODE_TOTAL} --parallel-index ${CI_NODE_INDEX} --junitxml=${CI_PROJECT_DIR}\XUNIT_RESULT.xml
pytest_build_system_win:
extends:
- .test_build_system_template_win
- .rules:labels:windows_pytest_build_system
parallel: 2
needs: []
tags:
- windows-build
artifacts:
paths:
- XUNIT_RESULT.xml
- test_build_system
expire_in: 2 days
reports:
junit: XUNIT_RESULT.xml
when: always

View File

@@ -10,12 +10,12 @@ upload-pip-cache:
extends:
- .upload_cache_template
- .before_script:minimal
- .rules:upload-python-cache
- .rules:patterns:python-cache
tags:
- $GEO
- cache
cache:
key: pip-cache-${LATEST_GIT_TAG}
key: pip-cache
paths:
- .cache/pip
policy: push
@@ -30,12 +30,12 @@ upload-submodules-cache:
extends:
- .upload_cache_template
- .before_script:minimal
- .rules:upload-submodule-cache
- .rules:patterns:submodule
tags:
- $GEO
- cache
cache:
key: submodule-cache-${LATEST_GIT_TAG}
key: submodule-cache
paths:
- .cache/submodule_archives
policy: push
@@ -48,3 +48,27 @@ upload-submodules-cache:
parallel:
matrix:
- GEO: [ 'shiny', 'brew' ]
upload-danger-npm-cache:
stage: upload_cache
image: node:18.15.0-alpine3.16
extends:
- .rules:patterns:dangerjs
tags:
- $GEO
- cache
cache:
key:
files:
- .gitlab/dangerjs/package-lock.json
paths:
- .gitlab/dangerjs/node_modules/
policy: push
before_script:
- echo "Skip before scripts ...."
script:
- cd .gitlab/dangerjs
- npm install --no-progress --no-update-notifier
parallel:
matrix:
- GEO: [ 'shiny', 'brew' ]

View File

@@ -0,0 +1,172 @@
const {
minimumSummaryChars,
maximumSummaryChars,
maximumBodyLineChars,
allowedTypes,
} = require("./mrCommitsConstants.js");
const { gptStandardModelTokens } = require("./mrCommitsConstants.js");
const { ChatPromptTemplate } = require("langchain/prompts");
const { SystemMessagePromptTemplate } = require("langchain/prompts");
const { LLMChain } = require("langchain/chains");
const { ChatOpenAI } = require("langchain/chat_models/openai");
const openAiTokenCount = require("openai-gpt-token-counter");
module.exports = async function () {
let outputDangerMessage = `\n\nPerhaps you could use an AI-generated suggestion for your commit message. Here is one `;
let mrDiff = await getMrGitDiff(danger.git.modified_files);
const mrCommitMessages = getCommitMessages(danger.gitlab.commits);
const inputPrompt = getInputPrompt();
const inputLlmTokens = getInputLlmTokens(
inputPrompt,
mrDiff,
mrCommitMessages
);
console.log(`Input tokens for LLM: ${inputLlmTokens}`);
if (inputLlmTokens >= gptStandardModelTokens) {
mrDiff = ""; // If the input mrDiff is larger than 16k model, don't use mrDiff, use only current commit messages
outputDangerMessage += `(based only on your current commit messages, git-diff of this MR is too big (${inputLlmTokens} tokens) for the AI models):\n\n`;
} else {
outputDangerMessage += `(based on your MR git-diff and your current commit messages):\n\n`;
}
// Generate AI commit message
let generatedCommitMessage = "";
try {
const rawCommitMessage = await createAiGitMessage(
inputPrompt,
mrDiff,
mrCommitMessages
);
generatedCommitMessage = postProcessCommitMessage(rawCommitMessage);
} catch (error) {
console.error("Error in generating AI commit message: ", error);
outputDangerMessage +=
"\nCould not generate commit message due to an error.\n";
}
// Append closing statements ("Closes https://github.com/espressif/esp-idf/issues/XXX") to the generated commit message
let closingStatements = extractClosingStatements(mrCommitMessages);
if (closingStatements.length > 0) {
generatedCommitMessage += "\n\n" + closingStatements;
}
// Add the generated git message, format to the markdown code block
outputDangerMessage += `\n\`\`\`\n${generatedCommitMessage}\n\`\`\`\n`;
outputDangerMessage +=
"\n**NOTE: AI-generated suggestions may not always be correct, please review the suggestion before using it.**"; // Add disclaimer
return outputDangerMessage;
};
async function getMrGitDiff(mrModifiedFiles) {
const fileDiffs = await Promise.all(
mrModifiedFiles.map((file) => danger.git.diffForFile(file))
);
return fileDiffs.map((fileDiff) => fileDiff.diff.trim()).join(" ");
}
function getCommitMessages(mrCommits) {
return mrCommits.map((commit) => commit.message);
}
function getInputPrompt() {
return `You are a helpful assistant that creates suggestions for single git commit message, that user can use to describe all the changes in their merge request.
Use git diff: {mrDiff} and users current commit messages: {mrCommitMessages} to get the changes made in the commit.
Output should be git commit message following the conventional commit format.
Output only git commit message in desired format, without comments and other text.
Do not include the closing statements ("Closes https://....") in the output.
Here are the strict rules you must follow:
- Avoid mentioning any JIRA tickets (e.g., "Closes JIRA-123").
- Be specific. Don't use vague terms (e.g., "some checks", "add new ones", "few changes").
- The commit message structure should be: <type><(scope/component)>: <summary>
- Types allowed: ${allowedTypes.join(", ")}
- If 'scope/component' is used, it must start with a lowercase letter.
- The 'summary' must NOT end with a period.
- The 'summary' must be between ${minimumSummaryChars} and ${maximumSummaryChars} characters long.
If a 'body' of commit message is used:
- Each line must be no longer than ${maximumBodyLineChars} characters.
- It must be separated from the 'summary' by a blank line.
Examples of correct commit messages:
- With scope and body:
fix(freertos): Fix startup timeout issue
This is a text of commit message body...
- adds support for wifi6
- adds validations for logging script
- Without scope and body:
ci: added target test job for ESP32-Wifi6`;
}
function getInputLlmTokens(inputPrompt, mrDiff, mrCommitMessages) {
const mrCommitMessagesTokens = openAiTokenCount(mrCommitMessages.join(" "));
const gitDiffTokens = openAiTokenCount(mrDiff);
const promptTokens = openAiTokenCount(inputPrompt);
return mrCommitMessagesTokens + gitDiffTokens + promptTokens;
}
async function createAiGitMessage(inputPrompt, mrDiff, mrCommitMessages) {
const chat = new ChatOpenAI({ engine: "gpt-3.5-turbo", temperature: 0 });
const chatPrompt = ChatPromptTemplate.fromPromptMessages([
SystemMessagePromptTemplate.fromTemplate(inputPrompt),
]);
const chain = new LLMChain({ prompt: chatPrompt, llm: chat });
const response = await chain.call({
mrDiff: mrDiff,
mrCommitMessages: mrCommitMessages,
});
return response.text;
}
function postProcessCommitMessage(rawCommitMessage) {
// Split the result into lines
let lines = rawCommitMessage.split("\n");
// Format each line
for (let i = 0; i < lines.length; i++) {
let line = lines[i].trim();
// If the line is longer than maximumBodyLineChars, split it into multiple lines
if (line.length > maximumBodyLineChars) {
let newLines = [];
while (line.length > maximumBodyLineChars) {
let lastSpaceIndex = line.lastIndexOf(
" ",
maximumBodyLineChars
);
newLines.push(line.substring(0, lastSpaceIndex));
line = line.substring(lastSpaceIndex + 1);
}
newLines.push(line);
lines[i] = newLines.join("\n");
}
}
// Join the lines back into a single string with a newline between each one
return lines.join("\n");
}
function extractClosingStatements(mrCommitMessages) {
let closingStatements = [];
mrCommitMessages.forEach((message) => {
const lines = message.split("\n");
lines.forEach((line) => {
if (line.startsWith("Closes")) {
closingStatements.push(line);
}
});
});
return closingStatements.join("\n");
}

View File

@@ -0,0 +1,56 @@
let outputStatuses = [];
/**
* Logs the status of a rule with padded formatting and stores it in the `outputStatuses` array.
* If the rule already exists in the array, its status is updated.
* @param message The name of the rule
* @param status The output (exit) status of the rule
*/
function recordRuleExitStatus(message, status) {
// Check if the rule already exists in the array
const existingRecord = outputStatuses.find(
(rule) => rule.message === message
);
if (existingRecord) {
// Update the status of the existing rule
existingRecord.status = status;
} else {
// If the rule doesn't exist, add it to the array
outputStatuses.push({ message, status });
}
}
/**
* Displays all the rule output statuses stored in the `outputStatuses` array.
* Filters out any empty lines, sorts them alphabetically, and prints the statuses
* with a header and separator.
* These statuses are later displayed in CI job tracelog.
*/
function displayAllOutputStatuses() {
const lineLength = 100;
const sortedStatuses = outputStatuses.sort((a, b) =>
a.message.localeCompare(b.message)
);
const formattedLines = sortedStatuses.map((statusObj) => {
const paddingLength =
lineLength - statusObj.message.length - statusObj.status.length;
const paddedMessage = statusObj.message.padEnd(
statusObj.message.length + paddingLength,
"."
);
return `${paddedMessage} ${statusObj.status}`;
});
console.log(
"DangerJS checks (rules) output states:\n" + "=".repeat(lineLength + 2)
);
console.log(formattedLines.join("\n"));
console.log("=".repeat(lineLength + 2));
}
module.exports = {
displayAllOutputStatuses,
recordRuleExitStatus,
};

View File

@@ -0,0 +1,51 @@
const { displayAllOutputStatuses } = require("./configParameters.js");
/*
* Modules with checks are stored in ".gitlab/dangerjs/<module_name>". To import them, use path relative to "dangerfile.js"
*/
async function runChecks() {
// Checks for merge request title
require("./mrTitleNoDraftOrWip.js")();
// Checks for merge request description
require("./mrDescriptionLongEnough.js")();
require("./mrDescriptionReleaseNotes.js")();
await require("./mrDescriptionJiraLinks.js")();
// Checks for documentation
await require("./mrDocsTranslation.js")();
// Checks for MR commits
require("./mrCommitsTooManyCommits.js")();
await require("./mrCommitsCommitMessage.js")();
require("./mrCommitsEmail.js")();
// Checks for MR code
require("./mrSizeTooLarge.js")();
// Checks for MR area labels
await require("./mrAreaLabels.js")();
// Checks for Source branch name
require("./mrSourceBranchName.js")();
// Show DangerJS individual checks statuses - visible in CI job tracelog
displayAllOutputStatuses();
// Add success log if no issues
if (
results.fails.length === 0 &&
results.warnings.length === 0 &&
results.messages.length === 0
) {
return message("🎉 Good Job! All checks are passing!");
}
}
runChecks();
// Add retry link
const retryLink = `${process.env.DANGER_GITLAB_HOST}/${process.env.CI_PROJECT_PATH}/-/jobs/${process.env.CI_JOB_ID}`;
markdown(
`***\n#### :repeat: You can enforce automatic MR checks by retrying the [DangerJS job](${retryLink})\n***`
);

View File

@@ -0,0 +1,27 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR has area labels (light blue labels)
*
* @dangerjs WARN
*/
module.exports = async function () {
const ruleName = "Merge request area labels";
const projectId = 103; // ESP-IDF
const areaLabelColor = /^#d2ebfa$/i; // match color code (case-insensitive)
const projectLabels = await danger.gitlab.api.Labels.all(projectId); // Get all project labels
const areaLabels = projectLabels
.filter((label) => areaLabelColor.test(label.color))
.map((label) => label.name); // Filter only area labels
const mrLabels = danger.gitlab.mr.labels; // Get MR labels
if (!mrLabels.some((label) => areaLabels.includes(label))) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
`Please add some [area labels](${process.env.DANGER_GITLAB_HOST}/espressif/esp-idf/-/labels) to this MR.`
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

View File

@@ -0,0 +1,165 @@
const {
minimumSummaryChars,
maximumSummaryChars,
maximumBodyLineChars,
allowedTypes,
} = require("./mrCommitsConstants.js");
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check that commit messages are based on the Espressif ESP-IDF project's rules for git commit messages.
*
* @dangerjs WARN
*/
module.exports = async function () {
const ruleName = "Commit messages style";
const mrCommits = danger.gitlab.commits;
const lint = require("@commitlint/lint").default;
const lintingRules = {
// rule definition: [(0-1 = off/on), (always/never = must be/mustn't be), (value)]
"body-max-line-length": [1, "always", maximumBodyLineChars], // Max length of the body line
"footer-leading-blank": [1, "always"], // Always have a blank line before the footer section
"footer-max-line-length": [1, "always", maximumBodyLineChars], // Max length of the footer line
"subject-max-length": [1, "always", maximumSummaryChars], // Max length of the "Summary"
"subject-min-length": [1, "always", minimumSummaryChars], // Min length of the "Summary"
"scope-case": [1, "always", "lower-case"], // "scope/component" must start with lower-case
"subject-full-stop": [1, "never", "."], // "Summary" must not end with a full stop (period)
"subject-empty": [1, "never"], // "Summary" is mandatory
"type-case": [1, "always", "lower-case"], // "type/action" must start with lower-case
"type-empty": [1, "never"], // "type/action" is mandatory
"type-enum": [1, "always", allowedTypes], // "type/action" must be one of the allowed types
"body-leading-blank": [1, "always"], // Always have a blank line before the body section
};
// Switcher for AI suggestions (for poor messages)
let generateAISuggestion = false;
// Search for the messages in each commit
let issuesAllCommitMessages = [];
for (const commit of mrCommits) {
const commitMessage = commit.message;
const commitMessageTitle = commit.title;
let issuesSingleCommitMessage = [];
let reportSingleCommitMessage = "";
// Check if the commit message contains any Jira ticket references
const jiraTicketRegex = /[A-Z0-9]+-[0-9]+/g;
const jiraTicketMatches = commitMessage.match(jiraTicketRegex);
if (jiraTicketMatches) {
const jiraTicketNames = jiraTicketMatches.join(", ");
issuesSingleCommitMessage.push(
`- probably contains Jira ticket reference (\`${jiraTicketNames}\`). Please remove Jira tickets from commit messages.`
);
}
// Lint commit messages with @commitlint (Conventional Commits style)
const result = await lint(commit.message, lintingRules);
for (const warning of result.warnings) {
// Custom messages for each rule with terminology used by Espressif conventional commits guide
switch (warning.name) {
case "subject-max-length":
issuesSingleCommitMessage.push(
`- *summary* appears to be too long`
);
break;
case "type-empty":
issuesSingleCommitMessage.push(
`- *type/action* looks empty`
);
break;
case "type-case":
issuesSingleCommitMessage.push(
`- *type/action* should start with a lowercase letter`
);
break;
case "scope-empty":
issuesSingleCommitMessage.push(
`- *scope/component* looks empty`
);
break;
case "scope-case":
issuesSingleCommitMessage.push(
`- *scope/component* should be lowercase without whitespace, allowed special characters are \`_\` \`/\` \`.\` \`,\` \`*\` \`-\` \`.\``
);
break;
case "subject-empty":
issuesSingleCommitMessage.push(`- *summary* looks empty`);
generateAISuggestion = true;
break;
case "subject-min-length":
issuesSingleCommitMessage.push(
`- *summary* looks too short`
);
generateAISuggestion = true;
break;
case "subject-case":
issuesSingleCommitMessage.push(
`- *summary* should start with a capital letter`
);
break;
case "subject-full-stop":
issuesSingleCommitMessage.push(
`- *summary* should not end with a period (full stop)`
);
break;
case "type-enum":
issuesSingleCommitMessage.push(
`- *type/action* should be one of [${allowedTypes
.map((type) => `\`${type}\``)
.join(", ")}]`
);
break;
default:
issuesSingleCommitMessage.push(`- ${warning.message}`);
}
}
if (issuesSingleCommitMessage.length) {
reportSingleCommitMessage = `- the commit message \`"${commitMessageTitle}"\`:\n${issuesSingleCommitMessage
.map((message) => ` ${message}`) // Indent each issue by 2 spaces
.join("\n")}`;
issuesAllCommitMessages.push(reportSingleCommitMessage);
}
}
// Create report
if (issuesAllCommitMessages.length) {
issuesAllCommitMessages.sort();
const basicTips = [
`- correct format of commit message should be: \`<type/action>(<scope/component>): <summary>\`, for example \`fix(esp32): Fixed startup timeout issue\``,
`- allowed types are: \`${allowedTypes}\``,
`- sufficiently descriptive message summary should be between ${minimumSummaryChars} to ${maximumSummaryChars} characters and start with upper case letter`,
`- avoid Jira references in commit messages (unavailable/irrelevant for our customers)`,
`- follow this [commit messages guide](${process.env.DANGER_GITLAB_HOST}/espressif/esp-idf/-/wikis/dev-proc/Commit-messages)`,
];
let dangerMessage = `\n**Some issues found for the commit messages in this MR:**\n${issuesAllCommitMessages.join(
"\n"
)}
\n***
\n**Please consider updating these commit messages** - here are some basic tips:\n${basicTips.join(
"\n"
)}
\n \`TIP:\` You can install commit-msg pre-commit hook (\`pre-commit install -t pre-commit -t commit-msg\`) to run this check when committing.
\n***
`;
if (generateAISuggestion) {
// Create AI generated suggestion for git commit message based of gitDiff and current commit messages
const AImessageSuggestion =
await require("./aiGenerateGitMessage.js")();
dangerMessage += AImessageSuggestion;
}
recordRuleExitStatus(ruleName, "Failed");
return warn(dangerMessage);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

View File

@@ -0,0 +1,16 @@
module.exports = {
gptStandardModelTokens: 4096,
minimumSummaryChars: 20,
maximumSummaryChars: 72,
maximumBodyLineChars: 100,
allowedTypes: [
"change",
"ci",
"docs",
"feat",
"fix",
"refactor",
"remove",
"revert",
],
};

View File

@@ -0,0 +1,23 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if the author is accidentally making a commit using a personal email
*
* @dangerjs INFO
*/
module.exports = function () {
const ruleName = 'Commits from outside Espressif';
const mrCommitAuthorEmails = danger.gitlab.commits.map(commit => commit.author_email);
const mrCommitCommitterEmails = danger.gitlab.commits.map(commit => commit.committer_email);
const emailPattern = /.*@espressif\.com/;
const filteredEmails = [...mrCommitAuthorEmails, ...mrCommitCommitterEmails].filter((email) => !emailPattern.test(email));
if (filteredEmails.length) {
recordRuleExitStatus(ruleName, "Failed");
return message(
`Some of the commits were authored or committed by developers outside Espressif: ${filteredEmails.join(', ')}. Please check if this is expected.`
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, 'Passed');
};

View File

@@ -0,0 +1,22 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR has not an excessive numbers of commits (if squashed)
*
* @dangerjs INFO
*/
module.exports = function () {
const ruleName = 'Number of commits in merge request';
const tooManyCommitThreshold = 2; // above this number of commits, squash commits is suggested
const mrCommits = danger.gitlab.commits;
if (mrCommits.length > tooManyCommitThreshold) {
recordRuleExitStatus(ruleName, "Passed (with suggestions)");
return message(
`You might consider squashing your ${mrCommits.length} commits (simplifying branch history).`
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, 'Passed');
};

View File

@@ -0,0 +1,238 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/** Check that there are valid JIRA links in MR description.
*
* This check extracts the "Related" section from the MR description and
* searches for JIRA ticket references in the format "Closes [JIRA ticket key]".
*
* It then extracts the closing GitHub links from the corresponding JIRA tickets and
* checks if the linked GitHub issues are still in open state.
*
* Finally, it checks if the required GitHub closing links are present in the MR's commit messages.
*
*/
module.exports = async function () {
const ruleName = 'Jira ticket references';
const axios = require("axios");
const mrDescription = danger.gitlab.mr.description;
const mrCommitMessages = danger.gitlab.commits.map(
(commit) => commit.message
);
const jiraTicketRegex = /[A-Z0-9]+-[0-9]+/;
let partMessages = []; // Create a blank field for future records of individual issues
// Parse section "Related" from MR Description
const sectionRelated = extractSectionRelated(mrDescription);
if (
!sectionRelated.header || // No section Related in MR description or ...
!jiraTicketRegex.test(sectionRelated.content) // no Jira links in section Related
) {
recordRuleExitStatus(ruleName, 'Passed (with suggestions)');
return message(
"Please consider adding references to JIRA issues in the `Related` section of the MR description."
);
}
// Get closing (only) JIRA tickets
const jiraTickets = findClosingJiraTickets(sectionRelated.content);
for (const ticket of jiraTickets) {
ticket.jiraUIUrl = `https://jira.espressif.com:8443/browse/${ticket.ticketName}`;
if (!ticket.correctFormat) {
partMessages.push(
`- closing ticket \`${ticket.record}\` seems to be in the wrong format (or inaccessible to Jira DangerBot).. The correct format is for example \`- Closes JIRA-123\`.`
);
}
// Get closing GitHub issue links from JIRA tickets
const closingGithubLink = await getGitHubClosingLink(ticket.ticketName);
if (closingGithubLink) {
ticket.closingGithubLink = closingGithubLink;
} else if (closingGithubLink === null) {
partMessages.push(
`- the Jira issue number [\`${ticket.ticketName}\`](${ticket.jiraUIUrl}) seems to be invalid (please check if the ticket number is correct)`
);
continue; // Handle unreachable JIRA tickets; skip the following checks
} else {
continue; // Jira ticket have no GitHub closing link; skip the following checks
}
// Get still open GitHub issues
const githubIssueStatusOpen = await isGithubIssueOpen(
ticket.closingGithubLink
);
ticket.isOpen = githubIssueStatusOpen;
if (githubIssueStatusOpen === null) {
// Handle unreachable GitHub issues
partMessages.push(
`- the GitHub issue [\`${ticket.closingGithubLink}\`](${ticket.closingGithubLink}) does not seem to exist on GitHub (referenced from JIRA ticket [\`${ticket.ticketName}\`](${ticket.jiraUIUrl}) )`
);
continue; // skip the following checks
}
// Search in commit message if there are all GitHub closing links (from Related section) for still open GH issues
if (ticket.isOpen) {
if (
!mrCommitMessages.some((item) =>
item.includes(`Closes ${ticket.closingGithubLink}`)
)
) {
partMessages.push(
`- please add \`Closes ${ticket.closingGithubLink}\` to the commit message`
);
}
}
}
// Create report / DangerJS check feedback if issues with Jira links found
if (partMessages.length) {
createReport();
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, 'Passed');
// ---------------------------------------------------------------
/**
* This function takes in a string mrDescription which contains a Markdown-formatted text
* related to a Merge Request (MR) in a GitLab repository. It searches for a section titled "Related"
* and extracts the content of that section. If the section is not found, it returns an object
* indicating that the header and content are null. If the section is found but empty, it returns
* an object indicating that the header is present but the content is null. If the section is found
* with content, it returns an object indicating that the header is present and the content of the
* "Related" section.
*
* @param {string} mrDescription - The Markdown-formatted text related to the Merge Request.
* @returns {{
* header: string | boolean | null,
* content: string | null
* }} - An object containing the header and content of the "Related" section, if present.
*/
function extractSectionRelated(mrDescription) {
const regexSectionRelated = /## Related([\s\S]*?)(?=## |$)/;
const sectionRelated = mrDescription.match(regexSectionRelated);
if (!sectionRelated) {
return { header: null, content: null }; // Section "Related" is missing
}
const content = sectionRelated[1].replace(/(\r\n|\n|\r)/gm, ""); // Remove empty lines
if (!content.length) {
return { header: true, content: null }; // Section "Related" is present, but empty
}
return { header: true, content: sectionRelated[1] }; // Found section "Related" with content
}
/**
* Finds all JIRA tickets that are being closed in the given sectionRelatedcontent.
* The function searches for lines that start with - Closes and have the format Closes [uppercase letters]-[numbers].
* @param {string} sectionRelatedcontent - A string that contains lines with mentions of JIRA tickets
* @returns {Array} An array of objects with ticketName property that has the correct format
*/
function findClosingJiraTickets(sectionRelatedcontent) {
let closingTickets = [];
const lines = sectionRelatedcontent.split("\n");
for (const line of lines) {
if (!line.startsWith("- Closes")) {
continue; // Not closing-type ticket, skip
}
const correctJiraClosingLinkFormat = new RegExp(
`^- Closes ${jiraTicketRegex.source}$`
);
const matchedJiraTicket = line.match(jiraTicketRegex);
if (matchedJiraTicket) {
if (!correctJiraClosingLinkFormat.test(line)) {
closingTickets.push({
record: line,
ticketName: matchedJiraTicket[0],
correctFormat: false,
});
} else {
closingTickets.push({
record: line,
ticketName: matchedJiraTicket[0],
correctFormat: true,
});
}
}
}
return closingTickets;
}
/**
* This function takes a JIRA issue key and retrieves the description from JIRA's API.
* It then searches the description for a GitHub closing link in the format "Closes https://github.com/owner/repo/issues/123".
* If a GitHub closing link is found, it is returned. If no GitHub closing link is found, it returns null.
* @param {string} jiraIssueKey - The key of the JIRA issue to search for the GitHub closing link.
* @returns {Promise<string|null>} - A promise that resolves to a string containing the GitHub closing link if found,
* or null if not found.
*/
async function getGitHubClosingLink(jiraIssueKey) {
let jiraDescription = "";
// Get JIRA ticket description content
try {
const response = await axios({
url: `https://jira.espressif.com:8443/rest/api/latest/issue/${jiraIssueKey}`,
auth: {
username: process.env.DANGER_JIRA_USER,
password: process.env.DANGER_JIRA_PASSWORD,
},
});
jiraDescription = response.data.fields.description
? response.data.fields.description
: ""; // if the Jira ticket has an unfilled Description, the ".description" property is missing in API response - in that case set "jiraDescription" to an empty string
} catch (error) {
return null;
}
// Find GitHub closing link in description
const regexClosingGhLink =
/Closes\s+(https:\/\/github.com\/\S+\/\S+\/issues\/\d+)/;
const closingGithubLink = jiraDescription.match(regexClosingGhLink);
if (closingGithubLink) {
return closingGithubLink[1];
} else {
return false; // Jira issue has no GitHub closing link in description
}
}
/**
* Check if a GitHub issue linked in a merge request is still open.
*
* @param {string} link - The link to the GitHub issue.
* @returns {Promise<boolean>} A promise that resolves to a boolean indicating if the issue is open.
* @throws {Error} If the link is invalid or if there was an error fetching the issue.
*/
async function isGithubIssueOpen(link) {
const parsedUrl = new URL(link);
const [owner, repo] = parsedUrl.pathname.split("/").slice(1, 3);
const issueNumber = parsedUrl.pathname.split("/").slice(-1)[0];
try {
const response = await axios.get(
`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}`
);
return response.data.state === "open"; // return True if GitHub issue is open
} catch (error) {
return null; // GET request to issue fails
}
}
function createReport() {
partMessages.sort();
let dangerMessage = `Some issues found for the related JIRA tickets in this MR:\n${partMessages.join(
"\n"
)}`;
recordRuleExitStatus(ruleName, "Failed");
return warn(dangerMessage);
}
};

View File

@@ -0,0 +1,24 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR Description has accurate description".
*
* @dangerjs WARN
*/
module.exports = function () {
const ruleName = "Merge request sufficient description";
const mrDescription = danger.gitlab.mr.description;
const descriptionChunk = mrDescription.match(/^([^#]*)/)[1].trim(); // Extract all text before the first section header (i.e., the text before the "## Release notes")
const shortMrDescriptionThreshold = 50; // Description is considered too short below this number of characters
if (descriptionChunk.length < shortMrDescriptionThreshold) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
"The MR description looks very brief, please check if more details can be added."
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

View File

@@ -0,0 +1,103 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR Description contains mandatory section "Release notes"
*
* Extracts the content of the "Release notes" section from the GitLab merge request description.
*
* @dangerjs WARN (if section missing, is empty or wrong markdown format)
*/
module.exports = function () {
const ruleName = 'Merge request Release Notes section';
const mrDescription = danger.gitlab.mr.description;
const wiki_link = `${process.env.DANGER_GITLAB_HOST}/espressif/esp-idf/-/wikis/rfc/How-to-write-release-notes-properly`;
const regexSectionReleaseNotes = /## Release notes([\s\S]*?)(?=## |$)/;
const regexValidEntry = /^\s*[-*+]\s+.+/;
const regexNoReleaseNotes = /no release note/i;
const sectionReleaseNotes = mrDescription.match(regexSectionReleaseNotes);
if (!sectionReleaseNotes) {
recordRuleExitStatus(ruleName, "Failed");
return warn(`The \`Release Notes\` section seems to be missing. Please check if the section header in MR description is present and in the correct markdown format ("## Release Notes").\n\nSee [Release Notes Format Rules](${wiki_link}).`);
}
const releaseNotesLines = sectionReleaseNotes[1].replace(/<!--[\s\S]*?-->/g, '')
const lines = releaseNotesLines.split("\n").filter(s => s.trim().length > 0);
let valid_entries_found = 0;
let no_release_notes_found = false;
let violations = [];
lines.forEach((line) => {
if (line.match(regexValidEntry)) {
valid_entries_found++;
const error_msg = check_entry(line);
if (error_msg) {
violations.push(error_msg);
}
} else if (line.match(regexNoReleaseNotes)) {
no_release_notes_found = true;
}
});
let error_output = [];
if (violations.length > 0) {
error_output = [...error_output, 'Invalid release note entries:', violations.join('\n')];
}
if (no_release_notes_found) {
if (valid_entries_found > 0) {
error_output.push('`No release notes` comment shows up when there is valid entry. Remove bullets before comments in release notes section.');
}
} else {
if (!valid_entries_found) {
error_output.push('The `Release Notes` section seems to have no valid entries. Add bullets before valid entries, or add `No release notes` comment to suppress this error if you mean to have no release notes.');
}
}
if (error_output.length > 0) {
// Paragraphs joined by double `\n`s.
error_output = [...error_output, `See [Release Notes Format Guide](${wiki_link}).`].join('\n\n');
recordRuleExitStatus(ruleName, "Failed");
return warn(error_output);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, 'Passed');
};
function check_entry(entry) {
const entry_str = `- \`${entry}\``;
const indent = " ";
if (entry.match(/no\s+release\s+note/i)) {
return [entry_str, `${indent}- \`No release notes\` comment shouldn't start with bullet.`].join('\n');
}
// Remove a leading escaping backslash of the special characters, https://www.markdownguide.org/basic-syntax/#characters-you-can-escape
const escapeCharRegex = /\\([\\`*_{}[\]<>()+#-.!|])/g;
entry = entry.replace(escapeCharRegex, '$1');
const regex = /^(\s*)[-*+]\s+\[([^\]]+)\]\s+(.*)$/;
const match = regex.exec(entry);
if (!match) {
return [entry_str, `${indent}- Please specify the [area] to which the change belongs (see guide). If this line is just a comment, remove the bullet.`].join('\n');
}
// area is in match[2]
const description = match[3].trim();
let violations = [];
if (match[1]) {
violations.push(`${indent}- Release note entry should start from the beginning of line. (Nested release note not allowed.)`);
}
if (!/^[A-Z0-9]/.test(description)) {
violations.push(`${indent}- Release note statement should start with a capital letter or digit.`);
}
if (violations.length > 0) {
return [entry_str, ...violations].join('\n');
}
return null;
}

View File

@@ -0,0 +1,280 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check the documentation files in this MR.
*
* Generate an object with all docs/ files found in this MR with paths to their EN/CN versions.
*
* For common files (both language versions exist in this MR), compare the lines of both files.
* Ignore if the CN file is only a single line file with an "include" reference to the EN version.
*
* For files that only have a CN version in this MR, add a message to the message that an EN file also needs to be created.
*
* For a file that only has an EN version in this MR, try loading its CN version from the target Gitlab branch.
* If its CN version doesn't exist in the repository or it does exist,
* but its contents are larger than just an "include" link to the EN version (it's a full-size file),
* add a message to the report
*
* Create a compiled report with the docs/ files issues found and set its severity (WARN/INFO).
* Severity is based on the presence of "needs translation: ??" labels in this MR
*
* @dangerjs WARN (if docs translation issues in the MR)
* @dangerjs INFO (if docs translation issues in the MR and the user has already added translation labels).
* Adding translation labels "needs translation: XX" automatically notifies the Documentation team
*
* @dangerjs WARN (if there are no docs issues in MR, but translation labels have been added anyway)
*
*/
module.exports = async function () {
const ruleName = 'Documentation translation';
let partMessages = []; // Create a blank field for future records of individual issues
const pathProject = "espressif/esp-idf";
const regexIncludeLink = /\.\.\sinclude::\s((\.\.\/)+)en\//;
const allMrFiles = [
...danger.git.modified_files,
...danger.git.created_files,
...danger.git.deleted_files,
];
const docsFilesMR = parseMrDocsFiles(allMrFiles); // Create single object of all doc files in MR with names, paths and groups
// Both versions (EN and CN) of document found changed in this MR
for (const file of docsFilesMR.bothFilesInMr) {
file.contentEn = await getContentFileInMR(file.fileEnPath); // Get content of English file
file.linesEn = file.contentEn.split("\n").length; // Get number of lines of English file
file.contentCn = await getContentFileInMR(file.fileCnPath); // Get content of Chinese file
file.linesCn = file.contentCn.split("\n").length; // Get number of lines of English file
// Compare number of lines in both versions
if (file.linesEn !== file.linesCn) {
// Check if CN file is only link to EN file
if (!regexIncludeLink.test(file.contentCn)) {
// if not just a link ...
partMessages.push(
`- please synchronize the EN and CN version of \`${file.fileName}\`. [\`${file.fileEnPath}\`](${file.fileUrlRepoEN}) has ${file.linesEn} lines; [\`${file.fileCnPath}\`](${file.fileUrlRepoCN}) has ${file.linesCn} lines.`
);
}
}
}
// Only Chinese version of document found changed in this MR
for (const file of docsFilesMR.onlyCnFilesInMr) {
partMessages.push(
`- file \`${file.fileEnPath}\` doesn't exist in this MR or in the GitLab repo. Please add \`${file.fileEnPath}\` into this MR.`
);
}
// Only English version of document found in this MR
for (const file of docsFilesMR.onlyEnFilesInMr) {
const targetBranch = danger.gitlab.mr.target_branch;
file.contentCn = await getContentFileInGitlab(
file.fileCnPath,
targetBranch
); // Try to fetch CN file from target branch of Gitlab repository and store content
if (file.contentCn) {
// File found on target branch in Gitlab repository
if (!regexIncludeLink.test(file.contentCn)) {
// File on Gitlab master is NOT just an ..include:: link to ENG version
file.fileUrlRepoMasterCN = `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${targetBranch}/${file.fileCnPath}`;
partMessages.push(
`- file \`${file.fileCnPath}\` was not updated in this MR, but found unchanged full document (not just link to EN) in target branch of Gitlab repository [\`${file.fileCnPath}\`](${file.fileUrlRepoMasterCN}). Please update \`${file.fileCnPath}\` into this MR.`
);
}
} else {
// File failed to fetch, probably does not exist in the target branch
partMessages.push(
`- file \`${file.fileCnPath}\` probably doesn't exist in this MR or in the GitLab repo. Please add \`${file.fileCnPath}\` into this MR.`
);
}
}
// Create a report with found issues with documents in MR
createReport();
// At this point, the rule has passed
recordRuleExitStatus(ruleName, 'Passed');
/**
* Generates an object that represents the relationships between files in two different languages found in this MR.
*
* @param {string[]} docsFilesEN - An array of file paths for documents in English.
* @param {string[]} docsFilesCN - An array of file paths for documents in Chinese.
* @returns {Object} An object with the following properties:
* - bothFilesInMr: An array of objects that represent files that found in MR in both languages. Each object has the following properties:
* - fileName: The name of the file.
* - fileEnPath: The path to the file in English.
* - fileCnPath: The path to the file in Chinese.
* - fileUrlRepoEN: The URL link to MR branch path to the file in English.
* - fileUrlRepoCN: The URL link to MR branch path to the file in Chinese.
* - onlyCnFilesInMr: An array of objects that represent files that only found in MR in English. Each object has the following properties:
* - fileName: The name of the file.
* - fileEnPath: The path to the file in English.
* - fileCnPath: The FUTURE path to the file in Chinese.
* - fileUrlRepoEN: The URL link to MR branch path to the file in English.
* - fileUrlRepoCN: The URL link to MR branch path to the file in Chinese.
* - onlyEnFilesInMr: An array of objects that represent files that only found in MR in Chinese. Each object has the following properties:
* - fileName: The name of the file.
* - fileEnPath: The FUTURE path to the file in English.
* - fileCnPath: The path to the file in Chinese.
* - fileUrlRepoEN: The URL link to MR branch path to the file in English.
* - fileUrlRepoCN: The URL link to MR branch path to the file in Chinese.
*/
function parseMrDocsFiles(allMrFiles) {
const path = require("path");
const mrBranch = danger.gitlab.mr.source_branch;
const docsEnFilesMrPath = allMrFiles.filter((file) =>
file.startsWith("docs/en")
); // Filter all English doc files in MR
const docsCnFilesMrPath = allMrFiles.filter((file) =>
file.startsWith("docs/zh_CN")
); // Filter all Chinese doc files in MR
const docsEnFileNames = docsEnFilesMrPath.map((filePath) =>
path.basename(filePath)
); // Get (base) file names for English docs
const docsCnFileNames = docsCnFilesMrPath.map((filePath) =>
path.basename(filePath)
); // Get (base) file names for Chinese docs
const bothFileNames = docsEnFileNames.filter((fileName) =>
docsCnFileNames.includes(fileName)
); // Get file names that are common to both English and Chinese docs
const onlyEnFileNames = docsEnFileNames.filter(
(fileName) => !docsCnFileNames.includes(fileName)
); // Get file names that are only present in English version
const onlyCnFileNames = docsCnFileNames.filter(
(fileName) => !docsEnFileNames.includes(fileName)
); // Get file names that are only present in Chinese version
return {
bothFilesInMr: bothFileNames.map((fileName) => {
const fileEnPath =
docsEnFilesMrPath[docsEnFileNames.indexOf(fileName)];
const fileCnPath =
docsCnFilesMrPath[docsCnFileNames.indexOf(fileName)];
return {
fileName,
fileEnPath,
fileCnPath,
fileUrlRepoEN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileEnPath}`,
fileUrlRepoCN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileCnPath}`,
};
}),
onlyEnFilesInMr: onlyEnFileNames.map((fileName) => {
const fileEnPath =
docsEnFilesMrPath[docsEnFileNames.indexOf(fileName)];
const fileCnPath = fileEnPath.replace("en", "zh_CN"); // Generate future CN file path
return {
fileName,
fileEnPath,
fileCnPath,
fileUrlRepoEN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileEnPath}`,
fileUrlRepoCN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileCnPath}`,
};
}),
onlyCnFilesInMr: onlyCnFileNames.map((fileName) => {
const fileCnPath =
docsCnFilesMrPath[docsCnFileNames.indexOf(fileName)];
const fileEnPath = fileCnPath.replace("zh_CN", "en"); // Generate future EN file path
return {
fileName,
fileEnPath,
fileCnPath,
fileUrlRepoEN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileEnPath}`,
fileUrlRepoCN: `${process.env.DANGER_GITLAB_HOST}/${pathProject}/-/blob/${mrBranch}/${fileCnPath}`,
};
}),
};
}
/**
* Retrieves the contents of a file from GitLab using the GitLab API.
*
* @param {string} filePath - The path of the file to retrieve.
* @param {string} branch - The branch where the file is located.
* @returns {string|null} - The contents of the file, with any trailing new lines trimmed, or null if the file cannot be retrieved.
*/
async function getContentFileInGitlab(filePath, branch) {
const axios = require("axios");
const encFilePath = encodeURIComponent(filePath);
const encBranch = encodeURIComponent(branch);
const urlApi = `${process.env.DANGER_GITLAB_API_BASE_URL}/projects/${danger.gitlab.mr.project_id}/repository/files/${encFilePath}/raw?ref=${encBranch}`;
try {
const response = await axios.get(urlApi, {
headers: {
"Private-Token": process.env.DANGER_GITLAB_API_TOKEN,
},
});
return response.data.trim(); // Trim trailing new line
} catch (error) {
return null;
}
}
/**
* Retrieves the contents of a file in a DangerJS merge request object.
*
* @param {string} filePath - The path of the file to retrieve.
* @returns {string|null} - The contents of the file, with any trailing new lines trimmed, or null if the file cannot be retrieved.
*/
async function getContentFileInMR(filePath) {
try {
const content = await danger.git.diffForFile(filePath);
const fileContentAfter = content.after.trim(); // Trim trailing new lines
return fileContentAfter;
} catch (error) {
console.error(`Error while getting file content MR: ${error}`);
return null;
}
}
/**
* Creates a compiled report for found documentation issues in the current MR and alerts the Documentation team if there are any "needs translation" labels present.
*
* Report if documentation labels have been added by mistake.
*/
function createReport() {
const mrLabels = danger.gitlab.mr.labels; // Get MR labels
const regexTranslationLabel = /needs translation:/i;
const translationLabelsPresent = mrLabels.some((label) =>
regexTranslationLabel.test(label)
); // Check if any of MR labels are "needs translation: XX"
// No docs issues found in MR, but translation labels have been added anyway
if (!partMessages.length && translationLabelsPresent) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
`Please remove the \`needs translation: XX\` labels. For documents that need to translate from scratch, Doc team will translate them in the future. For the current stage, we only focus on updating exiting EN and CN translation to make them in sync.`
);
}
// Docs issues found in this MR
partMessages.sort();
let dangerMessage = `Some of the documentation files in this MR seem to have translations issues:\n${partMessages.join(
"\n"
)}\n`;
if (partMessages.length) {
if (!translationLabelsPresent) {
dangerMessage += `
\nWhen synchronizing the EN and CN versions, please follow the [Documentation Code](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/contribute/documenting-code.html#standardize-document-format). The total number of lines of EN and CN should be same.\n
\nIf you have difficulty in providing translation, you can contact Documentation team by adding <kbd>needs translation: CN</kbd> or <kbd>needs translation: EN</kbd> labels into this MR and retrying Danger CI job. The documentation team will be automatically notified and will help you with the translations before the merge.\n`;
recordRuleExitStatus(ruleName, "Failed");
return warn(dangerMessage); // no "needs translation: XX" labels in MR; report issues as warn
} else {
dangerMessage += `\nTranslation labels <kbd>needs translation: CN</kbd> or <kbd>needs translation: EN</kbd> were added - this will automatically notify the Documentation team to help you with translation issues.`;
recordRuleExitStatus(ruleName, 'Passed (with suggestions)');
return message(dangerMessage); // "needs translation: XX" labels were found in MR and Docs team was notified; report issues as info
}
}
}
};

View File

@@ -0,0 +1,22 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR is too large (more than 1000 lines of changes)
*
* @dangerjs INFO
*/
module.exports = async function () {
const ruleName = "Merge request size (number of changed lines)";
const bigMrLinesOfCodeThreshold = 1000;
const totalLines = await danger.git.linesOfCode();
if (totalLines > bigMrLinesOfCodeThreshold) {
recordRuleExitStatus(ruleName, "Passed (with suggestions)");
return message(
`This MR seems to be quite large (total lines of code: ${totalLines}), you might consider splitting it into smaller MRs`
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

View File

@@ -0,0 +1,31 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Throw Danger WARN if branch name contains more than one slash or uppercase letters
*
* @dangerjs INFO
*/
module.exports = function () {
const ruleName = "Source branch name";
const sourceBranch = danger.gitlab.mr.source_branch;
// Check if the source branch name contains more than one slash
const slashCount = (sourceBranch.match(/\//g) || []).length;
if (slashCount > 1) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
`The source branch name \`${sourceBranch}\` contains more than one slash. This can cause troubles with git sync. Please rename the branch.`
);
}
// Check if the source branch name contains any uppercase letters
if (sourceBranch !== sourceBranch.toLowerCase()) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
`The source branch name \`${sourceBranch}\` contains uppercase letters. This can cause troubles on case-insensitive file systems (macOS). Please use only lowercase letters.`
);
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

View File

@@ -0,0 +1,31 @@
const { recordRuleExitStatus } = require("./configParameters.js");
/**
* Check if MR Title contains prefix "WIP: ...".
*
* @dangerjs WARN
*/
module.exports = function () {
const ruleName = 'Merge request not in Draft or WIP state';
const mrTitle = danger.gitlab.mr.title;
const regexes = [
{ prefix: "WIP", regex: /^WIP:/i },
{ prefix: "W.I.P", regex: /^W\.I\.P/i },
{ prefix: "[WIP]", regex: /^\[WIP/i },
{ prefix: "[W.I.P]", regex: /^\[W\.I\.P/i },
{ prefix: "(WIP)", regex: /^\(WIP/i },
{ prefix: "(W.I.P)", regex: /^\(W\.I\.P/i },
];
for (const item of regexes) {
if (item.regex.test(mrTitle)) {
recordRuleExitStatus(ruleName, "Failed");
return warn(
`Please remove the \`${item.prefix}\` prefix from the MR name before merging this MR.`
);
}
}
// At this point, the rule has passed
recordRuleExitStatus(ruleName, "Passed");
};

2745
.gitlab/dangerjs/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,12 @@
{
"name": "dangerjs-esp-idf",
"description": "Merge request automatic linter",
"main": "dangerfile.js",
"dependencies": {
"danger": "^11.2.3",
"axios": "^1.3.3",
"langchain": "^0.0.53",
"openai-gpt-token-counter": "^1.0.3",
"@commitlint/lint": "^13.1.0"
}
}

View File

@@ -10,7 +10,8 @@ _This entire section can be deleted if all items are checked._
* [ ] All related links, including JIRA, backport, submodule MR, are mentioned in the `Related` subsection.
* [ ] Any GitHub issues are linked inside the git commit message and corresponding release notes
* [ ] Add label for the area this MR is part of
* [ ] For documentation updates, check if label `needs translation:CN` or `needs translation:EN` have been added when the other language version still needs the update. Don't add such labels if the document updated has never been translated before and requires translation from scratch.
* [ ] For documentation updates, check if label `Docs` and `needs translation:CN` or `needs translation:EN` have been added when the other language version still needs the update. Skip adding the label if the document is not yet translated.
* [ ] Check if documents requiring translation fall under get-started section. If yes, add the labels mentioned above. Then the documentation team will assign a translator for you. Please inform the translator to prepare translation once your MR is ready to merge. The translation should be included in your MR to get it merged. For more information, see documentation workflow in Wiki.
* [ ] Any necessary "needs backport" labels are added
* [ ] Check if this is a breaking change. If it is, add notes to the `Breaking change notes` subsection below
* [ ] Release note entry if this is a new public feature, or a fix for an issue introduced in the previous release.
@@ -41,7 +42,7 @@ _For other small/non-public changes, which are not expected to be in the release
_Don't touch the subsection titles below, they will be parsed by scripts._
## Release notes <!-- Mandatory -->
## Release notes (Mandatory)
_Changes made in this MR that should go into the **Release Notes** should be listed here. Please use **past tense** and *specify the area (see maintainers page of IDF internal wiki)*. If there is a subscope, include it and separate with slash (`/`). Minor changes can go to the descriptions above without a release notes entry._

17
.gitmodules vendored
View File

@@ -49,13 +49,12 @@
[submodule "components/json/cJSON"]
path = components/json/cJSON
url = ../../DaveGamble/cJSON.git
sbom-version = 1.7.18
sbom-version = 1.7.16
sbom-cpe = cpe:2.3:a:cjson_project:cjson:{}:*:*:*:*:*:*:*
sbom-supplier = Person: Dave Gamble
sbom-url = https://github.com/DaveGamble/cJSON
sbom-description = Ultralightweight JSON parser in ANSI C
sbom-hash = acc76239bee01d8e9c858ae2cab296704e52d916
sbom-cve-exclude-list = CVE-2024-31755 Resolved in v1.7.18
sbom-hash = cb8693b058ba302f4829ec6d03f609ac6f848546
[submodule "components/mbedtls/mbedtls"]
path = components/mbedtls/mbedtls
@@ -82,11 +81,11 @@
[submodule "components/unity/unity"]
path = components/unity/unity
url = ../../ThrowTheSwitch/Unity.git
sbom-version = v2.6.0-RC1
sbom-version = v2.4.3-51-g7d2bf62b7e6a
sbom-supplier = Organization: ThrowTheSwitch community <http://www.throwtheswitch.org>
sbom-url = https://github.com/ThrowTheSwitch/Unity
sbom-description = Simple Unit Testing for C
sbom-hash = bf560290f6020737eafaa8b5cbd2177c3956c03f
sbom-hash = 7d2bf62b7e6afaf38153041a9d53c21aeeca9a25
[submodule "components/bt/host/nimble/nimble"]
path = components/bt/host/nimble/nimble
@@ -121,6 +120,10 @@
path = components/openthread/lib
url = ../../espressif/esp-thread-lib.git
[submodule "components/ieee802154/lib"]
path = components/ieee802154/lib
url = ../../espressif/esp-ieee802154-lib.git
[submodule "components/bt/controller/lib_esp32h2/esp32h2-bt-lib"]
path = components/bt/controller/lib_esp32h2/esp32h2-bt-lib
url = ../../espressif/esp32h2-bt-lib.git
@@ -133,10 +136,6 @@
path = components/bt/controller/lib_esp32c6/esp32c6-bt-lib
url = ../../espressif/esp32c6-bt-lib.git
[submodule "components/bt/controller/lib_esp32c5/esp32c5-bt-lib"]
path = components/bt/controller/lib_esp32c5/esp32c5-bt-lib
url = ../../espressif/esp32c5-bt-lib.git
[submodule "components/heap/tlsf"]
path = components/heap/tlsf
url = ../../espressif/tlsf.git

View File

@@ -1,11 +1,9 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
default_stages: [commit]
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v4.0.1
hooks:
- id: trailing-whitespace
# note: whitespace exclusions use multiline regex, see https://pre-commit.com/#regular-expressions
@@ -22,8 +20,7 @@ repos:
.*_pb2.py|
.*.pb-c.h|
.*.pb-c.c|
.*.yuv|
.*.rgb
.*.yuv
)$
- id: end-of-file-fixer
exclude: *whitespace_excludes
@@ -42,20 +39,15 @@ repos:
hooks:
- id: flake8
args: ['--config=.flake8', '--tee', '--benchmark']
- repo: https://github.com/asottile/reorder-python-imports
rev: v3.12.0
- repo: https://github.com/pycqa/isort
rev: 5.12.0 # python 3.8 compatible
hooks:
- id: reorder-python-imports
name: Reorder Python imports
args: [--py38-plus]
- id: isort
name: isort (python)
exclude: >
(?x)^(
.*_pb2.py
)$
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
hooks:
- id: codespell
- repo: local
hooks:
- id: check-executables
@@ -70,6 +62,13 @@ repos:
language: python
pass_filenames: false
always_run: true
- id: check-kconfigs
name: Validate Kconfig files
entry: tools/ci/check_kconfigs.py
language: python
additional_dependencies:
- esp-idf-kconfig
files: '^Kconfig$|Kconfig.*$'
- id: check-deprecated-kconfigs-options
name: Check if any Kconfig Options Deprecated
entry: tools/ci/check_deprecated_kconfigs.py
@@ -90,24 +89,30 @@ repos:
always_run: true
files: '\.gitlab/CODEOWNERS'
pass_filenames: false
- id: check-rules-yml
name: Check rules.yml all rules have at lease one job applied, all rules needed exist
entry: tools/ci/check_rules_yml.py
language: python
files: '\.gitlab/ci/.+\.yml|\.gitlab-ci.yml|\.gitmodules'
pass_filenames: false
additional_dependencies:
- PyYAML == 5.3.1
- id: check-generated-rules
name: Check rules are generated (based on .gitlab/ci/dependencies/dependencies.yml)
entry: tools/ci/generate_rules.py
language: python
files: '\.gitlab/ci/dependencies/.+|\.gitlab/ci/.*\.yml|.gitlab-ci.yml'
files: '\.gitlab/ci/dependencies/.+|\.gitlab/ci/.*\.yml'
pass_filenames: false
require_serial: true
additional_dependencies:
- PyYAML == 5.3.1
- id: mypy-check
name: Check type annotations in python files
entry: tools/ci/check_type_comments.py
additional_dependencies:
- 'mypy'
- 'mypy-extensions'
- 'types-setuptools'
- 'types-PyYAML'
- 'types-requests'
- 'mypy==0.940'
- 'mypy-extensions==0.4.3'
- 'types-setuptools==57.4.14'
- 'types-PyYAML==0.1.9'
exclude: >
(?x)^(
.*_pb2.py
@@ -154,20 +159,14 @@ repos:
require_serial: true
additional_dependencies:
- PyYAML == 5.3.1
- idf-build-apps~=2.5
- id: sort-yaml-files
name: sort yaml files
entry: tools/ci/sort_yaml.py
- idf_build_apps~=1.0
- id: sort-build-test-rules-ymls
name: sort .build-test-rules.yml files
entry: tools/ci/check_build_test_rules.py sort-yaml
language: python
files: '\.build-test-rules\.yml$|known_generate_test_child_pipeline_warnings\.yml$'
additional_dependencies:
- ruamel.yaml
- id: sort-yaml-test
name: sort yaml test
entry: python -m unittest tools/ci/sort_yaml.py
language: python
files: 'tools/ci/sort_yaml\.py$'
files: '\.build-test-rules\.yml'
additional_dependencies:
- PyYAML == 5.3.1
- ruamel.yaml
- id: check-build-test-rules-path-exists
name: check path in .build-test-rules.yml exists
@@ -184,14 +183,6 @@ repos:
language: python
always_run: true
require_serial: true
- id: gitlab-yaml-linter
name: Check gitlab yaml files
entry: tools/ci/gitlab_yaml_linter.py
language: python
files: '\.gitlab-ci\.yml|\.gitlab/ci/.+\.yml|\.gitmodules'
pass_filenames: false
additional_dependencies:
- PyYAML == 5.3.1
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
@@ -203,7 +194,7 @@ repos:
- id: check-copyright
args: ['--ignore', 'tools/ci/check_copyright_ignore.txt', '--config', 'tools/ci/check_copyright_config.yaml']
- repo: https://github.com/espressif/conventional-precommit-linter
rev: v1.7.0
rev: v1.2.1
hooks:
- id: conventional-precommit-linter
stages: [commit-msg]
@@ -225,17 +216,6 @@ repos:
args: ['--shell', 'dash', '-x']
files: 'export.sh'
- repo: https://github.com/espressif/esp-idf-sbom.git
rev: v0.13.0
rev: v0.11.0
hooks:
- id: validate-sbom-manifest
stages: [post-commit]
- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v0.9.1
hooks:
- id: 'sphinx-lint'
name: Lint rST files in docs folder using Sphinx Lint
files: ^(docs/en|docs/zh_CN)/.*\.(rst|inc)$
- repo: https://github.com/espressif/esp-idf-kconfig.git
rev: v2.4.1
hooks:
- id: check-kconfig-files

View File

@@ -15,7 +15,7 @@ python:
install:
- requirements: docs/requirements.txt
# We need to list all the submodules included in documenation build by Doxygen
# We need to list all the submodules included in documenation build by DOxygen
submodules:
include:
- components/mqtt/esp-mqtt

View File

@@ -96,7 +96,7 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Wno-pointer-bool-conversion")
# mbedTLS md5.c triggers this warning in md5_test_buf (false positive)
list(APPEND compile_options "-Wno-string-concatenation")
# multiple cases of implicit conversions between unrelated enum types
# multiple cases of implict convertions between unrelated enum types
list(APPEND compile_options "-Wno-enum-conversion")
# When IRAM_ATTR is specified both in function declaration and definition,
# it produces different section names, since section names include __COUNTER__.
@@ -121,10 +121,8 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
list(APPEND compile_options "-Wno-c2x-extensions")
# warning on xMPU_SETTINGS for esp32s2 has size 0 for C and 1 for C++
list(APPEND compile_options "-Wno-extern-c-compat")
if(NOT (CONFIG_IDF_TARGET_LINUX AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin"))
# warning: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
list(APPEND compile_options "-Wno-single-bit-bitfield-constant-conversion")
endif()
# warning: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
list(APPEND compile_options "-Wno-single-bit-bitfield-constant-conversion")
endif()
# More warnings may exist in unit tests and example projects.
@@ -136,10 +134,6 @@ if(CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE)
list(APPEND compile_definitions "-DNDEBUG")
endif()
if(CONFIG_COMPILER_NO_MERGE_CONSTANTS)
list(APPEND compile_options "-fno-merge-constants")
endif()
if(CONFIG_COMPILER_STACK_CHECK_MODE_NORM)
list(APPEND compile_options "-fstack-protector")
elseif(CONFIG_COMPILER_STACK_CHECK_MODE_STRONG)
@@ -152,10 +146,6 @@ if(CONFIG_COMPILER_DUMP_RTL_FILES)
list(APPEND compile_options "-fdump-rtl-expand")
endif()
idf_build_set_property(GDBINIT_FILES_PREFIX_MAP "${BUILD_DIR}/gdbinit/prefix_map")
file(MAKE_DIRECTORY "${BUILD_DIR}/gdbinit")
file(WRITE "${BUILD_DIR}/gdbinit/prefix_map" "")
if(NOT ${CMAKE_C_COMPILER_VERSION} VERSION_LESS 8.0.0)
if(CONFIG_COMPILER_HIDE_PATHS_MACROS)
list(APPEND compile_options "-fmacro-prefix-map=${CMAKE_SOURCE_DIR}=.")
@@ -223,44 +213,17 @@ endif()
list(APPEND link_options "-fno-lto")
if(CONFIG_IDF_TARGET_LINUX AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
# Not all versions of the MacOS linker support the -warn_commons flag.
# ld version 1053.12 (and above) have been tested to support it.
# Hence, we extract the version string from the linker output
# before including the flag.
# Get the ld version, capturing both stdout and stderr
execute_process(
COMMAND ${CMAKE_LINKER} -v
OUTPUT_VARIABLE LD_VERSION_OUTPUT
ERROR_VARIABLE LD_VERSION_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
# Combine stdout and stderr
set(LD_VERSION_OUTPUT "${LD_VERSION_OUTPUT}\n${LD_VERSION_ERROR}")
# Extract the version string
string(REGEX MATCH "PROJECT:(ld|dyld)-([0-9]+)\\.([0-9]+)" LD_VERSION_MATCH "${LD_VERSION_OUTPUT}")
set(LD_VERSION_MAJOR_MINOR "${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
message(STATUS "Linker Version: ${LD_VERSION_MAJOR_MINOR}")
# Compare the version with 1053.12
if(LD_VERSION_MAJOR_MINOR VERSION_GREATER_EQUAL "1053.12")
list(APPEND link_options "-Wl,-warn_commons")
endif()
list(APPEND link_options "-Wl,-dead_strip")
list(APPEND link_options "-Wl,-warn_commons")
else()
list(APPEND link_options "-Wl,--gc-sections")
list(APPEND link_options "-Wl,--warn-common")
endif()
# SMP FreeRTOS user provided minimal idle hook. This allows the user to provide
# their own copy of vApplicationPassiveIdleHook()
if(CONFIG_FREERTOS_USE_PASSIVE_IDLE_HOOK)
list(APPEND link_options "-Wl,--wrap=vApplicationPassiveIdleHook")
# their own copy of vApplicationMinimalIdleHook()
if(CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK)
list(APPEND link_options "-Wl,--wrap=vApplicationMinimalIdleHook")
endif()
# Placing jump tables in flash would cause issues with code that required
@@ -280,6 +243,15 @@ if(COMPILER_RT_LIB_NAME)
list(APPEND link_options "-rtlib=${CONFIG_COMPILER_RT_LIB_NAME}")
endif()
# For the transition period from 32-bit time_t to 64-bit time_t,
# auto-detect the size of this type and set corresponding variable.
include(CheckTypeSize)
check_type_size("time_t" TIME_T_SIZE)
if(TIME_T_SIZE)
idf_build_set_property(TIME_T_SIZE ${TIME_T_SIZE})
else()
message(FATAL_ERROR "Failed to determine sizeof(time_t)")
endif()
idf_build_set_property(COMPILE_OPTIONS "${compile_options}" APPEND)
idf_build_set_property(C_COMPILE_OPTIONS "${c_compile_options}" APPEND)

View File

@@ -52,36 +52,33 @@ Supported since ESP-IDF v4.2.
| Release branch | Recommended | Required |
|------------------------|-------------|----------|
| release/v4.2 | v4.2.3+ | v4.2 |
| release/v4.3 | v4.3.3+ | v4.3 |
| release/v4.4 | v4.4.6+ | v4.4 |
| release/v5.0 | v5.0.4+ | v5.0 |
| release/v5.1 | v5.1.2+ | v5.1 |
| release/v5.2 and above | v5.2+ | v5.2 |
| release/v4.2 | v4.2.3 | v4.2.3 |
| release/v4.3 | v4.3.3 | v4.3.3 |
| release/v4.4 | v4.4.6 | v4.4.1 |
| release/v5.0 | v5.0.4 | v5.0 |
| release/v5.1 | v5.1.2 | v5.1 |
| release/v5.2 and above | v5.2 | v5.2 |
### ESP32-C3
#### v0.2 - v0.4
#### v0.2, v0.3
Supported since ESP-IDF v4.3.
#### v1.1
#### v0.4
| Release branch | Recommended | Required |
|------------------------|-------------|----------|
| release/v4.2 | EOL | EOL |
| release/v4.3 | v4.3.7+ | v4.3.7 |
| release/v4.4 | v4.4.7+ | v4.4.7 |
| release/v5.0 | v5.0.5+ | v5.0.5 |
| release/v5.1 | v5.1.3+ | v5.1.3 |
| release/v5.2 and above | v5.2+ | v5.2 |
To be added.
### ESP32-S3
#### v0.1, v0.2
#### v0.1
Supported since ESP-IDF v4.4.
#### v0.2
To be added.
### ESP32-C2 & ESP8684
#### v1.0
@@ -96,17 +93,6 @@ To be added.
To be added.
### ESP32-C6
#### v0.0, v0.1
Supported since ESP-IDF v5.1.
### ESP32-H2
#### v0.1, v0.2
Supported since ESP-IDF v5.1.
## What If the ESP-IDF Version Is Lower than the `Required` Version?

View File

@@ -50,38 +50,35 @@
#### v1.0
| 发布分支 | 推荐版本 | 需求版本 |
| 发布分支 | 推荐版本 | 需求版本 |
|------------------------|-------------|----------|
| release/v4.2 | v4.2.3+ | v4.2 |
| release/v4.3 | v4.3.3+ | v4.3 |
| release/v4.4 | v4.4.6+ | v4.4 |
| release/v5.0 | v5.0.4+ | v5.0 |
| release/v5.1 | v5.1.2+ | v5.1 |
| release/v5.2 及以上 | v5.2+ | v5.2 |
| release/v4.2 | v4.2.3 | v4.2.3 |
| release/v4.3 | v4.3.3 | v4.3.3 |
| release/v4.4 | v4.4.6 | v4.4.1 |
| release/v5.0 | v5.0.4 | v5.0 |
| release/v5.1 | v5.1.2 | v5.1 |
| release/v5.2 及以上 | v5.2 | v5.2 |
### ESP32-C3
#### v0.2 - v0.4
#### v0.2 v0.3
从 ESP-IDF v4.3 开始支持。
#### v1.1
#### v0.4
| 发布分支 | 推荐版本 | 需求版本 |
|------------------------|-------------|----------|
| release/v4.2 | EOL | EOL |
| release/v4.3 | v4.3.7+ | v4.3.7 |
| release/v4.4 | v4.4.7+ | v4.4.7 |
| release/v5.0 | v5.0.5+ | v5.0.5 |
| release/v5.1 | v5.1.3+ | v5.1.3 |
| release/v5.2 及以上 | v5.2+ | v5.2 |
待更新。
### ESP32-S3
#### v0.1, v0.2
#### v0.1
从 ESP-IDF v4.4 开始支持。
#### v0.2
待更新。
### ESP32-C2 & ESP8684
#### v1.0
@@ -96,18 +93,6 @@
待更新。
### ESP32-C6
#### v0.0, v0.1
从 ESP-IDF v5.1 开始支持。
### ESP32-H2
#### v0.1, v0.2
从 ESP-IDF v5.1 开始支持。
## 如果 ESP-IDF 版本低于 `需求版本` 会出现什么情况?

78
Kconfig
View File

@@ -22,6 +22,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
config IDF_ENV_BRINGUP
bool
default "y" if IDF_TARGET_ESP32P4
help
- This option is ONLY used when doing new chip bringup.
- This option will only enable necessary hw / sw settings for running
@@ -75,6 +76,10 @@ mainmenu "Espressif IoT Development Framework Configuration"
string
default "$IDF_INIT_VERSION"
config IDF_TARGET_LINUX
bool
default "y" if IDF_TARGET="linux"
config IDF_TARGET_ESP32
bool
default "y" if IDF_TARGET="esp32"
@@ -109,34 +114,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
config IDF_TARGET_ESP32C5
bool
default "y" if IDF_TARGET="esp32c5"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
# TODO: IDF-9197
choice IDF_TARGET_ESP32C5_VERSION
prompt "ESP32-C5 version"
depends on IDF_TARGET_ESP32C5
default IDF_TARGET_ESP32C5_MP_VERSION
help
ESP32-C5 will support two versions for a period.
This option is for internal use only.
Select the one that matches your chip model.
config IDF_TARGET_ESP32C5_BETA3_VERSION
bool
prompt "ESP32-C5 beta3"
select ESPTOOLPY_NO_STUB
config IDF_TARGET_ESP32C5_MP_VERSION
bool
prompt "ESP32-C5 MP"
select ESPTOOLPY_NO_STUB
select IDF_ENV_FPGA
endchoice
config IDF_TARGET_ESP32P4
bool
default "y" if IDF_TARGET="esp32p4"
@@ -148,13 +125,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
config IDF_TARGET_ESP32C61
bool
default "y" if IDF_TARGET="esp32c61"
select FREERTOS_UNICORE
select IDF_TARGET_ARCH_RISCV
select IDF_ENV_FPGA
config IDF_TARGET_LINUX
bool
default "y" if IDF_TARGET="linux"
@@ -169,9 +139,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
default 0x000D if IDF_TARGET_ESP32C6
default 0x0010 if IDF_TARGET_ESP32H2
default 0x0012 if IDF_TARGET_ESP32P4
default 0x0011 if IDF_TARGET_ESP32C5 && IDF_TARGET_ESP32C5_BETA3_VERSION # TODO: IDF-9197
default 0x0017 if IDF_TARGET_ESP32C5 && IDF_TARGET_ESP32C5_MP_VERSION # TODO: IDF-9197
default 0x0014 if IDF_TARGET_ESP32C61
default 0xFFFF
@@ -529,15 +496,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
help
Stack smashing protection.
config COMPILER_NO_MERGE_CONSTANTS
bool "Disable merging const sections"
depends on IDF_TOOLCHAIN_GCC
help
Disable merging identical constants (string/floating-point) across compilation units.
This helps in better size analysis of the application binary as the rodata section
distribution is more uniform across libraries. On downside, it may increase
the binary size and hence should be used during development phase only.
config COMPILER_WARN_WRITE_STRINGS
bool "Enable -Wwrite-strings warning flag"
default "n"
@@ -612,27 +570,6 @@ mainmenu "Espressif IoT Development Framework Configuration"
default "gcc" if COMPILER_RT_LIB_GCCLIB
default "" if COMPILER_RT_LIB_HOST
choice COMPILER_ORPHAN_SECTIONS
prompt "Orphan sections handling"
default COMPILER_ORPHAN_SECTIONS_PLACE
depends on !IDF_TARGET_LINUX
help
If the linker finds orphan sections, it attempts to place orphan sections after sections of the same
attribute such as code vs data, loadable vs non-loadable, etc.
That means that orphan sections could placed between sections defined in IDF linker scripts.
This could lead to corruption of the binary image. Configure the linker action here.
config COMPILER_ORPHAN_SECTIONS_WARNING
bool "Place with warning"
help
Places orphan sections with a warning message.
config COMPILER_ORPHAN_SECTIONS_PLACE
bool "Place silently"
help
Places orphan sections without a warning/error message.
endchoice
endmenu # Compiler Options
menu "Component config"
@@ -653,7 +590,4 @@ mainmenu "Espressif IoT Development Framework Configuration"
- CONFIG_ESPTOOLPY_FLASHFREQ_120M && CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_DTR
- CONFIG_SPIRAM_SPEED_120M && CONFIG_SPIRAM_MODE_OCT
- CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH
- CONFIG_ESP_WIFI_EAP_TLS1_3
- CONFIG_ESP_WIFI_ENABLE_ROAMING_APP
- CONFIG_USB_HOST_EXT_PORT_SUPPORT_LS
- CONFIG_USB_HOST_EXT_PORT_RESET_ATTEMPTS
- CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL

View File

@@ -15,17 +15,16 @@ ESP-IDF is the development framework for Espressif SoCs supported on Windows, Li
The following table shows ESP-IDF support of Espressif SoCs where ![alt text][preview] and ![alt text][supported] denote preview status and support, respectively. The preview support is usually limited in time and intended for beta versions of chips. Please use an ESP-IDF release where the desired SoC is already supported.
|Chip | v4.4 | v5.0 | v5.1 | v5.2 | v5.3 | |
|:----------- | :---------------------:| :---------------------:| :--------------------: | :--------------------: | :--------------------: | :--------------------------------------------------------- |
|Chip | v4.3 | v4.4 | v5.0 | v5.1 | v5.2 | |
|:----------- | :---------------------:| :---------------------:| :---------------------:| :--------------------: | :--------------------: | :----------------------------------------------------------|
|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_S3) |
|ESP32-C2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32-C2) |
|ESP32-C6 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_C6) |
|ESP32-H2 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_H2) |
|ESP32-P4 | | | | | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][preview] | [Announcement](https://www.espressif.com/en/news/ESP32-C5) |
|ESP32-S3 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_S3) |
|ESP32-C2 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32-C2) |
|ESP32-C6 | | | | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_C6) |
|ESP32-H2 | | | | ![alt text][supported] | ![alt text][supported] | [Announcement](https://www.espressif.com/en/news/ESP32_H2) |
|ESP32-P4 | | | | | ![alt text][preview] | [Announcement](https://www.espressif.com/en/news/ESP32-P4) |
[supported]: https://img.shields.io/badge/-supported-green "supported"
[preview]: https://img.shields.io/badge/-preview-orange "preview"

View File

@@ -15,17 +15,16 @@ ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux
下表总结了乐鑫芯片在 ESP-IDF 各版本中的支持状态,其中 ![alt text][supported] 代表已支持,![alt text][preview] 代表目前处于预览支持状态。预览支持状态通常有时间限制,而且仅适用于测试版芯片。请确保使用与芯片相匹配的 ESP-IDF 版本。
|芯片 | v4.4 | v5.0 | v5.1 | v5.2 | v5.3 | |
|:----------- | :---------------------:| :---------------------:| :--------------------: | :--------------------: | :--------------------: | :-------------------------------------------------------------- |
|芯片 | v4.3 | v4.4 | v5.0 | v5.1 | v5.2 | |
|:----------- | :---------------------:| :---------------------:| :---------------------:| :--------------------: | :--------------------: | :-------------------------------------------------------------- |
|ESP32 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S2 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-C3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | |
|ESP32-S3 | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) |
|ESP32-C2 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) |
|ESP32-C6 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) |
|ESP32-H2 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) |
|ESP32-P4 | | | | | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/en/news/ESP32-P4) |
|ESP32-C5 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C5) |
|ESP32-S3 | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_S3) |
|ESP32-C2 | | | ![alt text][supported] | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32-C2) |
|ESP32-C6 | | | | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_C6) |
|ESP32-H2 | | | | ![alt text][supported] | ![alt text][supported] | [芯片发布公告](https://www.espressif.com/zh-hans/news/ESP32_H2) |
|ESP32-P4 | | | | | ![alt text][preview] | [芯片发布公告](https://www.espressif.com/en/news/ESP32-P4) |
[supported]: https://img.shields.io/badge/-%E6%94%AF%E6%8C%81-green "supported"
[preview]: https://img.shields.io/badge/-%E9%A2%84%E8%A7%88-orange "preview"

View File

@@ -9,11 +9,6 @@ set(srcs
"app_trace_util.c"
"host_file_io.c")
if(CONFIG_ESP_DEBUG_STUBS_ENABLE)
list(APPEND srcs
"debug_stubs.c")
endif()
if(CONFIG_APPTRACE_GCOV_ENABLE)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
list(APPEND srcs
@@ -68,7 +63,8 @@ endif()
idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS "${include_dirs}"
PRIV_INCLUDE_DIRS "${priv_include_dirs}"
PRIV_REQUIRES esp_driver_gptimer esp_driver_gpio esp_driver_uart
# Requires "driver" for GPTimer in "SEGGER_SYSVIEW_Config_FreeRTOS.c"
PRIV_REQUIRES soc driver
REQUIRES esp_timer
LDFRAGMENTS linker.lf)

View File

@@ -231,7 +231,7 @@ menu "Application Level Tracing"
choice APPTRACE_SV_CPU
prompt "CPU to trace"
depends on APPTRACE_SV_DEST_UART && !ESP_SYSTEM_SINGLE_CORE_MODE
depends on APPTRACE_SV_DEST_UART && !FREERTOS_UNICORE
default APPTRACE_SV_DEST_CPU_0
help
Define the CPU to trace by SystemView.
@@ -252,8 +252,8 @@ menu "Application Level Tracing"
choice APPTRACE_SV_TS_SOURCE
prompt "Timer to use as timestamp source"
depends on APPTRACE_SV_ENABLE
default APPTRACE_SV_TS_SOURCE_CCOUNT if ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_GPTIMER if !ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_CCOUNT if FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_GPTIMER if !FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3
default APPTRACE_SV_TS_SOURCE_ESP_TIMER if PM_ENABLE || IDF_TARGET_ESP32C3
help
SystemView needs to use a hardware timer as the source of timestamps
@@ -261,7 +261,7 @@ menu "Application Level Tracing"
config APPTRACE_SV_TS_SOURCE_CCOUNT
bool "CPU cycle counter (CCOUNT)"
depends on ESP_SYSTEM_SINGLE_CORE_MODE && !PM_ENABLE && !IDF_TARGET_ESP32C3
depends on FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3
config APPTRACE_SV_TS_SOURCE_GPTIMER
bool "General Purpose Timer (Timer Group)"

View File

@@ -1,7 +1,7 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
* SPDX-License-Identifier: Apache-2.0
*/
#include <string.h>
@@ -77,7 +77,7 @@ esp_err_t esp_apptrace_init(void)
return ESP_OK;
}
ESP_SYSTEM_INIT_FN(esp_apptrace_init, SECONDARY, ESP_SYSTEM_INIT_ALL_CORES, 115)
ESP_SYSTEM_INIT_FN(esp_apptrace_init, ESP_SYSTEM_INIT_ALL_CORES, 115)
{
return esp_apptrace_init();
}
@@ -196,7 +196,7 @@ esp_err_t esp_apptrace_read(esp_apptrace_dest_t dest, void *buf, uint32_t *size,
*size = 0;
uint8_t *ptr = ch->hw->get_down_buffer(ch->hw_data, &act_sz, &tmo);
if (ptr && act_sz > 0) {
ESP_APPTRACE_LOGD("Read %" PRIu32 " bytes from host", act_sz);
ESP_APPTRACE_LOGD("Read %d bytes from host", act_sz);
memcpy(buf, ptr, act_sz);
res = ch->hw->put_down_buffer(ch->hw_data, ptr, &tmo);
*size = act_sz;
@@ -329,7 +329,7 @@ int esp_apptrace_vprintf_to(esp_apptrace_dest_t dest, uint32_t user_tmo, const c
}
esp_apptrace_tmo_init(&tmo, user_tmo);
ESP_APPTRACE_LOGD("fmt %p", fmt);
ESP_APPTRACE_LOGD("fmt %x", fmt);
while ((p = (uint8_t *)strchr((char *)p, '%')) && nargs < ESP_APPTRACE_MAX_VPRINTF_ARGS) {
p++;
if (*p != '%' && *p != 0) {
@@ -355,7 +355,7 @@ int esp_apptrace_vprintf_to(esp_apptrace_dest_t dest, uint32_t user_tmo, const c
uint32_t arg = va_arg(ap, uint32_t);
*(uint32_t *)pout = arg;
pout += sizeof(uint32_t);
ESP_APPTRACE_LOGD("arg %" PRIx32, arg);
ESP_APPTRACE_LOGD("arg %x", arg);
}
int ret = ch->hw->put_up_buffer(ch->hw_data, p, &tmo);

View File

@@ -1,7 +1,7 @@
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
* SPDX-License-Identifier: Apache-2.0
*/
#include <sys/param.h>
@@ -100,7 +100,7 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
if (proto->hw->host_data_pending() && hdr->block_sz > 0) {
// TODO: add support for multiple blocks from host, currently there is no need for that
uint8_t *p = proto->blocks[new_block_num].start + proto->blocks[new_block_num].sz;
ESP_APPTRACE_LOGD("Recvd %" PRIu16 " bytes from host (@ %p) [%x %x %x %x %x %x %x %x .. %x %x %x %x %x %x %x %x]",
ESP_APPTRACE_LOGD("Recvd %d bytes from host (@ 0x%x) [%x %x %x %x %x %x %x %x .. %x %x %x %x %x %x %x %x]",
hdr->block_sz, proto->blocks[new_block_num].start,
*(proto->blocks[new_block_num].start+0), *(proto->blocks[new_block_num].start+1),
*(proto->blocks[new_block_num].start+2), *(proto->blocks[new_block_num].start+3),
@@ -109,7 +109,7 @@ static esp_err_t esp_apptrace_membufs_swap(esp_apptrace_membufs_proto_data_t *pr
*(p-8), *(p-7), *(p-6), *(p-5), *(p-4), *(p-3), *(p-2), *(p-1));
uint32_t sz = esp_apptrace_membufs_down_buffer_write_nolock(proto, (uint8_t *)(hdr+1), hdr->block_sz);
if (sz != hdr->block_sz) {
ESP_APPTRACE_LOGE("Failed to write %" PRIu32 " bytes to down buffer (%" PRIu16 " %" PRIu32 ")!", hdr->block_sz - sz, hdr->block_sz, sz);
ESP_APPTRACE_LOGE("Failed to write %d bytes to down buffer (%d %d)!", hdr->block_sz - sz, hdr->block_sz, sz);
}
hdr->block_sz = 0;
}
@@ -196,7 +196,7 @@ static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membu
uint32_t total_sz = 0;
while (total_sz < size) {
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock WRS %" PRIu32 "-%" PRIu32 "-%" PRIu32 " %" PRIu32, proto->rb_down.wr, proto->rb_down.rd,
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock WRS %d-%d-%d %d", proto->rb_down.wr, proto->rb_down.rd,
proto->rb_down.cur_size, size);
uint32_t wr_sz = esp_apptrace_rb_write_size_get(&proto->rb_down);
if (wr_sz == 0) {
@@ -206,15 +206,15 @@ static uint32_t esp_apptrace_membufs_down_buffer_write_nolock(esp_apptrace_membu
if (wr_sz > size - total_sz) {
wr_sz = size - total_sz;
}
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %" PRIu32, wr_sz);
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %d", wr_sz);
uint8_t *ptr = esp_apptrace_rb_produce(&proto->rb_down, wr_sz);
if (!ptr) {
assert(false && "Failed to produce bytes to down buffer!");
}
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %" PRIu32 " to %p from %p", wr_sz, ptr, data + total_sz + wr_sz);
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %d to 0x%x from 0x%x", wr_sz, ptr, data + total_sz + wr_sz);
memcpy(ptr, data + total_sz, wr_sz);
total_sz += wr_sz;
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %" PRIu32 "/%" PRIu32 "", wr_sz, total_sz);
ESP_APPTRACE_LOGD("esp_apptrace_trax_down_buffer_write_nolock wr %d/%d", wr_sz, total_sz);
}
return total_sz;
}
@@ -278,7 +278,7 @@ uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *p
uint8_t *buf_ptr = NULL;
if (size > ESP_APPTRACE_USR_DATA_LEN_MAX(proto)) {
ESP_APPTRACE_LOGE("Too large user data size %" PRIu32 "!", size);
ESP_APPTRACE_LOGE("Too large user data size %d!", size);
return NULL;
}
@@ -308,21 +308,21 @@ uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *p
#endif
if (ESP_APPTRACE_INBLOCK_MARKER(proto) + ESP_APPTRACE_USR_BLOCK_RAW_SZ(size) > ESP_APPTRACE_INBLOCK(proto)->sz) {
#if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
ESP_APPTRACE_LOGD("Block full. Get %" PRIu32 " bytes from PEND buffer", size);
ESP_APPTRACE_LOGD("Block full. Get %d bytes from PEND buffer", size);
buf_ptr = esp_apptrace_rb_produce(&proto->rb_pend, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
#endif
if (buf_ptr == NULL) {
int pended_buf;
ESP_APPTRACE_LOGD(" full. Get %" PRIu32 " bytes from pend buffer", size);
ESP_APPTRACE_LOGD(" full. Get %d bytes from pend buffer", size);
buf_ptr = esp_apptrace_membufs_wait4buf(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size), tmo, &pended_buf);
if (buf_ptr && !pended_buf) {
ESP_APPTRACE_LOGD("Got %" PRIu32 " bytes from block", size);
ESP_APPTRACE_LOGD("Got %d bytes from block", size);
// update cur block marker
ESP_APPTRACE_INBLOCK_MARKER_UPD(proto, ESP_APPTRACE_USR_BLOCK_RAW_SZ(size));
}
}
} else {
ESP_APPTRACE_LOGD("Get %" PRIu32 " bytes from buffer", size);
ESP_APPTRACE_LOGD("Get %d bytes from buffer", size);
// fit to curr nlock
buf_ptr = ESP_APPTRACE_INBLOCK(proto)->start + ESP_APPTRACE_INBLOCK_MARKER(proto);
// update cur block marker
@@ -352,12 +352,12 @@ esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *p
int res = ESP_OK;
if (ESP_APPTRACE_INBLOCK_MARKER(proto) < min_sz) {
ESP_APPTRACE_LOGI("Ignore flush request for min %" PRIu32 " bytes. Bytes in block: %" PRIu32, min_sz, ESP_APPTRACE_INBLOCK_MARKER(proto));
ESP_APPTRACE_LOGI("Ignore flush request for min %d bytes. Bytes in block: %d.", min_sz, ESP_APPTRACE_INBLOCK_MARKER(proto));
return ESP_OK;
}
// switch block while size of data (including that in pending buffer) is more than min size
while (ESP_APPTRACE_INBLOCK_MARKER(proto) > min_sz) {
ESP_APPTRACE_LOGD("Try to flush %" PRIu32 " bytes. Wait until block switch for %" PRIi64 " us", ESP_APPTRACE_INBLOCK_MARKER(proto), tmo->tmo);
ESP_APPTRACE_LOGD("Try to flush %d bytes. Wait until block switch for %lld us", ESP_APPTRACE_INBLOCK_MARKER(proto), tmo->tmo);
res = esp_apptrace_membufs_swap_waitus(proto, tmo);
if (res != ESP_OK) {
if (tmo->tmo != ESP_APPTRACE_TMO_INFINITE)

View File

@@ -1,7 +1,7 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
* SPDX-License-Identifier: Apache-2.0
*/
//
#include "freertos/FreeRTOS.h"

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -14,10 +14,14 @@
#include "soc/timer_periph.h"
#include "esp_app_trace.h"
#include "esp_freertos_hooks.h"
#include "dbg_stubs.h"
#include "esp_private/esp_ipc.h"
#include "esp_attr.h"
#include "esp_private/dbg_stubs.h"
#include "esp_ipc.h"
#include "hal/wdt_hal.h"
#if CONFIG_IDF_TARGET_ESP32
#include "esp32/rom/libc_stubs.h"
#elif CONFIG_IDF_TARGET_ESP32S2
#include "esp32s2/rom/libc_stubs.h"
#endif
#if CONFIG_APPTRACE_GCOV_ENABLE
@@ -76,11 +80,11 @@ void gcov_create_task(void *arg)
(void *)&s_gcov_task_running, configMAX_PRIORITIES - 1, NULL, 0);
}
static IRAM_ATTR
void gcov_create_task_tick_hook(void)
{
extern esp_err_t esp_ipc_start_gcov_from_isr(uint32_t cpu_id, esp_ipc_func_t func, void* arg);
if (s_create_gcov_task) {
if (esp_ipc_call_nonblocking(xPortGetCoreID(), &gcov_create_task, NULL) == ESP_OK) {
if (esp_ipc_start_gcov_from_isr(xPortGetCoreID(), &gcov_create_task, NULL) == ESP_OK) {
s_create_gcov_task = false;
}
}
@@ -102,16 +106,12 @@ static int esp_dbg_stub_gcov_entry(void)
void gcov_rtio_init(void)
{
uint32_t stub_entry = 0;
uint32_t capabilities = 0;
ESP_EARLY_LOGV(TAG, "%s", __FUNCTION__);
assert(esp_dbg_stub_entry_get(ESP_DBG_STUB_ENTRY_GCOV, &stub_entry) == ESP_OK);
if (stub_entry != 0) {
/* "__gcov_init()" can be called several times. We must avoid multiple tick hook registration */
return;
}
esp_dbg_stub_entry_set(ESP_DBG_STUB_ENTRY_GCOV, (uint32_t)&esp_dbg_stub_gcov_entry);
assert(esp_dbg_stub_entry_get(ESP_DBG_STUB_ENTRY_CAPABILITIES, &stub_entry) == ESP_OK);
esp_dbg_stub_entry_set(ESP_DBG_STUB_ENTRY_CAPABILITIES, stub_entry | ESP_DBG_STUB_CAP_GCOV_TASK);
if (esp_dbg_stub_entry_get(ESP_DBG_STUB_ENTRY_CAPABILITIES, &capabilities) == ESP_OK) {
esp_dbg_stub_entry_set(ESP_DBG_STUB_ENTRY_CAPABILITIES, capabilities | ESP_DBG_STUB_CAP_GCOV_TASK);
}
esp_register_freertos_tick_hook(gcov_create_task_tick_hook);
}

View File

@@ -122,7 +122,7 @@ static esp_err_t esp_apptrace_file_rsp_recv(esp_apptrace_dest_t dest, uint8_t *b
ESP_EARLY_LOGE(TAG, "Failed to read (%d)!", ret);
return ret;
}
ESP_EARLY_LOGV(TAG, "%s read %" PRIu32 " bytes", __FUNCTION__, rd_size);
ESP_EARLY_LOGV(TAG, "%s read %d bytes", __FUNCTION__, rd_size);
tot_rd += rd_size;
}

View File

@@ -15,7 +15,7 @@ entries:
SEGGER_SYSVIEW_FreeRTOS (noflash)
[mapping:app_trace_driver]
archive: libesp_driver_gptimer.a
archive: libdriver.a
entries:
if APPTRACE_SV_TS_SOURCE_GPTIMER = y:
gptimer (noflash)

View File

@@ -1,10 +1,9 @@
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
* SPDX-License-Identifier: Apache-2.0
*/
#include "sdkconfig.h"
#include "esp_cpu.h"
#include "esp_log.h"
#include "esp_app_trace_membufs_proto.h"
@@ -57,7 +56,7 @@ static bool esp_apptrace_riscv_host_data_pending(void);
const static char *TAG = "esp_apptrace";
static esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[CONFIG_FREERTOS_NUMBER_OF_CORES];
static esp_apptrace_riscv_ctrl_block_t s_tracing_ctrl[portNUM_PROCESSORS];
esp_apptrace_hw_t *esp_apptrace_jtag_hw_get(void **data)
{
@@ -159,7 +158,7 @@ static esp_err_t esp_apptrace_riscv_init(esp_apptrace_riscv_data_t *hw_data)
ESP_APPTRACE_LOGI("Apptrace initialized on CPU%d. Tracing control block @ %p.", core_id, &s_tracing_ctrl[core_id]);
s_tracing_ctrl[core_id].mem_blocks = hw_data->membufs.blocks;
for (int i = 0; i < 2; i++) {
ESP_APPTRACE_LOGD("Mem buf[%d] %" PRIu32 " bytes @ %p (%p/%p)", i,
ESP_APPTRACE_LOGD("Mem buf[%d] %d bytes @ %p (%p/%p)", i,
s_tracing_ctrl[core_id].mem_blocks[i].sz, s_tracing_ctrl[core_id].mem_blocks[i].start,
&(s_tracing_ctrl[core_id].mem_blocks[i].start), &(s_tracing_ctrl[core_id].mem_blocks[i].sz));
}
@@ -325,7 +324,7 @@ static esp_err_t esp_apptrace_riscv_buffer_swap_start(uint32_t curr_block_id)
uint32_t acked_block = ESP_APPTRACE_RISCV_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_RISCV_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32, esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
ESP_APPTRACE_LOGD("[%d]: Can not switch %x %d %x %x/%lx", esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_RISCV_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;

View File

@@ -1,7 +1,7 @@
/*
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
* SPDX-License-Identifier: Apache-2.0
*/
//
@@ -288,7 +288,7 @@ static inline void esp_apptrace_trax_select_memory_block(int block_num)
: TRACEMEM_CORE0_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
block_bits |= block_num ? TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK0_NUM)
: TRACEMEM_CORE1_MUX_BLK_BITS(TRACEMEM_MUX_BLK1_NUM);
ESP_EARLY_LOGV(TAG, "Select block %d @ %p (bits 0x%" PRIx32 ")", block_num, s_trax_blocks[block_num], block_bits);
ESP_EARLY_LOGV(TAG, "Select block %d @ %p (bits 0x%x)", block_num, s_trax_blocks[block_num], block_bits);
DPORT_WRITE_PERI_REG(SENSITIVE_INTERNAL_SRAM_USAGE_2_REG, block_bits);
#endif
}
@@ -298,7 +298,7 @@ static inline void esp_apptrace_trax_memory_enable(void)
#if CONFIG_IDF_TARGET_ESP32
/* Enable trace memory on PRO CPU */
DPORT_WRITE_PERI_REG(DPORT_PRO_TRACEMEM_ENA_REG, DPORT_PRO_TRACEMEM_ENA_M);
#if CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE == 0
#if CONFIG_FREERTOS_UNICORE == 0
/* Enable trace memory on APP CPU */
DPORT_WRITE_PERI_REG(DPORT_APP_TRACEMEM_ENA_REG, DPORT_APP_TRACEMEM_ENA_M);
#endif
@@ -498,7 +498,7 @@ static esp_err_t esp_apptrace_trax_buffer_swap_start(uint32_t curr_block_id)
uint32_t acked_block = ESP_APPTRACE_TRAX_BLOCK_ID_GET(ctrl_reg);
uint32_t host_to_read = ESP_APPTRACE_TRAX_BLOCK_LEN_GET(ctrl_reg);
if (host_to_read != 0 || acked_block != (curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK)) {
ESP_APPTRACE_LOGD("HC[%d]: Can not switch %" PRIx32 " %" PRIu32 " %" PRIx32 " %" PRIx32 "/%" PRIx32, esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
ESP_APPTRACE_LOGD("HC[%d]: Can not switch %x %d %x %x/%lx", esp_cpu_get_core_id(), ctrl_reg, host_to_read, acked_block,
curr_block_id & ESP_APPTRACE_TRAX_BLOCK_ID_MSK, curr_block_id);
res = ESP_ERR_NO_MEM;
goto _on_err;

View File

@@ -1,69 +0,0 @@
/*
* SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ESP_DBG_STUBS_H_
#define ESP_DBG_STUBS_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "esp_err.h"
/**
* Debug stubs entries IDs
*/
typedef enum {
ESP_DBG_STUB_MAGIC_NUM,
ESP_DBG_STUB_TABLE_SIZE,
ESP_DBG_STUB_CONTROL_DATA, ///< stubs descriptor entry
ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_GCOV ///< GCOV entry
= ESP_DBG_STUB_ENTRY_FIRST,
ESP_DBG_STUB_ENTRY_CAPABILITIES,
ESP_DBG_STUB_ENTRY_MAX
} esp_dbg_stub_id_t;
#define ESP_DBG_STUB_MAGIC_NUM_VAL 0xFEEDBEEF
#define ESP_DBG_STUB_CAP_GCOV_TASK (1 << 0)
/**
* @brief Initializes debug stubs.
*
* @note Must be called after esp_apptrace_init() if app tracing is enabled.
*/
void esp_dbg_stubs_init(void);
/**
* @brief Initializes application tracing module.
*
* @note Should be called before any esp_apptrace_xxx call.
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningfull for OpenOCD command/code
* such as capabilities
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_set(esp_dbg_stub_id_t id, uint32_t entry);
/**
* @brief Retrives the corresponding stub entry
*
* @param id Stub ID.
* @param entry Stub entry. Usually it is stub entry function address,
* but can be any value meaningfull for OpenOCD command/code
* such as capabilities
*
* @return ESP_OK on success, otherwise see esp_err_t
*/
esp_err_t esp_dbg_stub_entry_get(esp_dbg_stub_id_t id, uint32_t *entry);
#ifdef __cplusplus
}
#endif
#endif // ESP_DBG_STUBS_H_

View File

@@ -5,25 +5,21 @@ function(idf_create_coverage_report report_dir)
set(gcov_tool ${_CMAKE_TOOLCHAIN_PREFIX}gcov)
idf_build_get_property(project_name PROJECT_NAME)
file(TO_NATIVE_PATH "${report_dir}" _report_dir)
file(TO_NATIVE_PATH "${project_dir}" _project_dir)
file(TO_NATIVE_PATH "${report_dir}/html/index.html" _index_path)
add_custom_target(pre-cov-report
COMMENT "Generating coverage report in: ${_report_dir}"
COMMENT "Generating coverage report in: ${report_dir}"
COMMAND ${CMAKE_COMMAND} -E echo "Using gcov: ${gcov_tool}"
COMMAND ${CMAKE_COMMAND} -E make_directory ${_report_dir}/html
COMMAND ${CMAKE_COMMAND} -E make_directory ${report_dir}/html
)
add_custom_target(lcov-report
COMMENT "WARNING: lcov-report is deprecated. Please use gcovr-report instead."
COMMAND lcov --gcov-tool ${gcov_tool} -c -d ${CMAKE_CURRENT_BINARY_DIR} -o ${_report_dir}/${project_name}.info
COMMAND genhtml -o ${_report_dir}/html ${_report_dir}/${project_name}.info
COMMAND lcov --gcov-tool ${gcov_tool} -c -d ${CMAKE_CURRENT_BINARY_DIR} -o ${report_dir}/${project_name}.info
COMMAND genhtml -o ${report_dir}/html ${report_dir}/${project_name}.info
DEPENDS pre-cov-report
)
add_custom_target(gcovr-report
COMMAND gcovr -r ${_project_dir} --gcov-executable ${gcov_tool} -s --html-details ${_index_path}
COMMAND gcovr -r ${project_dir} --gcov-executable ${gcov_tool} -s --html-details ${report_dir}/html/index.html
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS pre-cov-report
)
@@ -33,9 +29,7 @@ endfunction()
#
# Clean coverage report.
function(idf_clean_coverage_report report_dir)
file(TO_CMAKE_PATH "${report_dir}" _report_dir)
add_custom_target(cov-data-clean
COMMENT "Clean coverage report in: ${_report_dir}"
COMMAND ${CMAKE_COMMAND} -E remove_directory ${_report_dir})
COMMENT "Clean coverage report in: ${report_dir}"
COMMAND ${CMAKE_COMMAND} -E remove_directory ${report_dir})
endfunction()

View File

@@ -35,7 +35,7 @@ static uint8_t s_down_buf[SYSVIEW_DOWN_BUF_SIZE];
#if CONFIG_APPTRACE_SV_DEST_UART
#define ESP_APPTRACE_DEST_SYSVIEW ESP_APPTRACE_DEST_UART
#if CONFIG_APPTRACE_SV_DEST_CPU_0 || CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE
#if CONFIG_APPTRACE_SV_DEST_CPU_0 || CONFIG_FREERTOS_UNICORE
#define APPTRACE_SV_DEST_CPU 0
#else
#define APPTRACE_SV_DEST_CPU 1
@@ -296,7 +296,7 @@ int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char* sName, void* p
* linked whenever SystemView is used.
*/
ESP_SYSTEM_INIT_FN(sysview_init, SECONDARY, BIT(0), 120)
ESP_SYSTEM_INIT_FN(sysview_init, BIT(0), 120)
{
SEGGER_SYSVIEW_Conf();
return ESP_OK;

View File

@@ -21,7 +21,7 @@ const static char *TAG = "sysview_heap_trace";
#endif
static SEGGER_SYSVIEW_MODULE s_esp_sysview_heap_module = {
.sModule = "M=ESP32 SystemView Heap Tracing Module",
.sModule = "ESP32 SystemView Heap Tracing Module",
.NumEvents = 2,
};

View File

@@ -7,7 +7,3 @@ components/app_trace/test_apps:
- soc
- driver
- esp_hw_support
disable:
- if: IDF_TARGET == "esp32c5"
temporary: true
reason: not support yet # TODO: [ESP32C5] IDF-8705

View File

@@ -1,4 +1,4 @@
idf_component_register(SRCS "test_app_trace_main.c" "test_trace.c"
INCLUDE_DIRS "."
PRIV_REQUIRES app_trace unity esp_driver_gptimer
PRIV_REQUIRES app_trace unity driver
WHOLE_ARCHIVE)

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -135,9 +135,9 @@ static bool esp_apptrace_test_timer_isr_crash(gptimer_handle_t timer, const gpti
memset(tim_arg->data.buf + 2 * sizeof(uint32_t), tim_arg->data.wr_cnt & tim_arg->data.mask, tim_arg->data.buf_sz - 2 * sizeof(uint32_t));
int res = ESP_APPTRACE_TEST_WRITE_FROM_ISR(tim_arg->data.buf, tim_arg->data.buf_sz);
if (res != ESP_OK) {
esp_rom_printf("tim-%p: Failed to write trace %d %" PRIx32 "!\n", tim_arg->gptimer, res, tim_arg->data.wr_cnt & tim_arg->data.mask);
esp_rom_printf("tim-%x: Failed to write trace %d %x!\n", tim_arg->gptimer, res, tim_arg->data.wr_cnt & tim_arg->data.mask);
} else {
esp_rom_printf("tim-%p: Written chunk%" PRIu32 " %" PRIu32 " bytes, %" PRIx32 "\n",
esp_rom_printf("tim-%x: Written chunk%d %d bytes, %x\n",
timer, tim_arg->data.wr_cnt, tim_arg->data.buf_sz, tim_arg->data.wr_cnt & tim_arg->data.mask);
tim_arg->data.wr_cnt++;
}
@@ -153,7 +153,7 @@ static void esp_apptrace_dummy_task(void *p)
esp_apptrace_test_task_arg_t *arg = (esp_apptrace_test_task_arg_t *) p;
TickType_t tmo_ticks = arg->data.period / (1000 * portTICK_PERIOD_MS);
ESP_APPTRACE_TEST_LOGI("%p: run dummy task (period %" PRIu32 " us, %" PRIu32 " timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->timers_num);
ESP_APPTRACE_TEST_LOGI("%x: run dummy task (period %u us, %u timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->timers_num);
for (int i = 0; i < arg->timers_num; i++) {
gptimer_config_t timer_config = {
@@ -163,7 +163,7 @@ static void esp_apptrace_dummy_task(void *p)
};
TEST_ESP_OK(gptimer_new_timer(&timer_config, &arg->timers[i].gptimer));
*(uint32_t *)arg->timers[i].data.buf = (uint32_t)arg->timers[i].gptimer | (1 << 31);
ESP_APPTRACE_TEST_LOGI("%p: start timer %p period %" PRIu32 " us", xTaskGetCurrentTaskHandle(), arg->timers[i].gptimer, arg->timers[i].data.period);
ESP_APPTRACE_TEST_LOGI("%x: start timer %x period %u us", xTaskGetCurrentTaskHandle(), arg->timers[i].gptimer, arg->timers[i].data.period);
gptimer_alarm_config_t alarm_config = {
.reload_count = 0,
.alarm_count = arg->timers[i].data.period,
@@ -180,7 +180,7 @@ static void esp_apptrace_dummy_task(void *p)
int i = 0;
while (!arg->stop) {
ESP_APPTRACE_TEST_LOGD("%p: dummy task work %d.%d", xTaskGetCurrentTaskHandle(), esp_cpu_get_core_id(), i++);
ESP_APPTRACE_TEST_LOGD("%x: dummy task work %d.%d", xTaskGetCurrentTaskHandle(), esp_cpu_get_core_id(), i++);
if (tmo_ticks) {
vTaskDelay(tmo_ticks);
}
@@ -202,7 +202,7 @@ static void esp_apptrace_test_task(void *p)
int res;
TickType_t tmo_ticks = arg->data.period / (1000 * portTICK_PERIOD_MS);
ESP_APPTRACE_TEST_LOGI("%p: run (period %" PRIu32 " us, stamp mask %" PRIx8 ", %" PRIu32 " timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->data.mask, arg->timers_num);
ESP_APPTRACE_TEST_LOGI("%x: run (period %u us, stamp mask %x, %u timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->data.mask, arg->timers_num);
for (int i = 0; i < arg->timers_num; i++) {
gptimer_config_t timer_config = {
@@ -212,7 +212,7 @@ static void esp_apptrace_test_task(void *p)
};
TEST_ESP_OK(gptimer_new_timer(&timer_config, &arg->timers[i].gptimer));
*(uint32_t *)arg->timers[i].data.buf = ((uint32_t)arg->timers[i].gptimer) | (1 << 31) | (esp_cpu_get_core_id() ? 0x1 : 0);
ESP_APPTRACE_TEST_LOGI("%p: start timer %p period %" PRIu32 " us", xTaskGetCurrentTaskHandle(), arg->timers[i].gptimer, arg->timers[i].data.period);
ESP_APPTRACE_TEST_LOGI("%x: start timer %x period %u us", xTaskGetCurrentTaskHandle(), arg->timers[i].gptimer, arg->timers[i].data.period);
gptimer_alarm_config_t alarm_config = {
.reload_count = 0,
.alarm_count = arg->timers[i].data.period,
@@ -242,14 +242,14 @@ static void esp_apptrace_test_task(void *p)
}
if (res) {
if (1) { //arg->data.wr_err++ < ESP_APPTRACE_TEST_PRN_WRERR_MAX) {
ESP_APPTRACE_TEST_LOGE("%p: Failed to write trace %d %" PRIx32 "!", xTaskGetCurrentTaskHandle(), res, arg->data.wr_cnt & arg->data.mask);
ESP_APPTRACE_TEST_LOGE("%x: Failed to write trace %d %x!", xTaskGetCurrentTaskHandle(), res, arg->data.wr_cnt & arg->data.mask);
if (arg->data.wr_err == ESP_APPTRACE_TEST_PRN_WRERR_MAX) {
ESP_APPTRACE_TEST_LOGE("\n");
}
}
} else {
if (0) {
ESP_APPTRACE_TEST_LOGD("%p:%" PRIx32 ": Written chunk%" PRIu32 " %" PRIu32 " bytes, %" PRIx32, xTaskGetCurrentTaskHandle(), *ts, arg->data.wr_cnt, arg->data.buf_sz, arg->data.wr_cnt & arg->data.mask);
ESP_APPTRACE_TEST_LOGD("%x:%x: Written chunk%d %d bytes, %x", xTaskGetCurrentTaskHandle(), *ts, arg->data.wr_cnt, arg->data.buf_sz, arg->data.wr_cnt & arg->data.mask);
}
arg->data.wr_err = 0;
}
@@ -273,7 +273,7 @@ static void esp_apptrace_test_task_crash(void *p)
{
esp_apptrace_test_task_arg_t *arg = (esp_apptrace_test_task_arg_t *) p;
ESP_APPTRACE_TEST_LOGE("%p: run (period %" PRIu32 " us, stamp mask %" PRIx8 ", %" PRIu32 " timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->data.mask, arg->timers_num);
ESP_APPTRACE_TEST_LOGE("%x: run (period %u us, stamp mask %x, %u timers)", xTaskGetCurrentTaskHandle(), arg->data.period, arg->data.mask, arg->timers_num);
arg->data.wr_cnt = 0;
*(uint32_t *)arg->data.buf = (uint32_t)xTaskGetCurrentTaskHandle();
@@ -283,9 +283,9 @@ static void esp_apptrace_test_task_crash(void *p)
memset(arg->data.buf + sizeof(uint32_t), arg->data.wr_cnt & arg->data.mask, arg->data.buf_sz - sizeof(uint32_t));
int res = ESP_APPTRACE_TEST_WRITE(arg->data.buf, arg->data.buf_sz);
if (res) {
ESP_APPTRACE_TEST_LOGE("%p: Failed to write trace %d %" PRIx32 "!", xTaskGetCurrentTaskHandle(), res, arg->data.wr_cnt & arg->data.mask);
ESP_APPTRACE_TEST_LOGE("%x: Failed to write trace %d %x!", xTaskGetCurrentTaskHandle(), res, arg->data.wr_cnt & arg->data.mask);
} else {
ESP_APPTRACE_TEST_LOGD("%p: Written chunk%" PRIu32 " %" PRIu32 " bytes, %" PRIx32, xTaskGetCurrentTaskHandle(), arg->data.wr_cnt, arg->data.buf_sz, arg->data.wr_cnt & arg->data.mask);
ESP_APPTRACE_TEST_LOGD("%x: Written chunk%d %d bytes, %x", xTaskGetCurrentTaskHandle(), arg->data.wr_cnt, arg->data.buf_sz, arg->data.wr_cnt & arg->data.mask);
}
arg->data.wr_cnt++;
}
@@ -315,7 +315,7 @@ static void esp_apptrace_test_ts_init(void)
.resolution_hz = 10000000,
};
TEST_ESP_OK(gptimer_new_timer(&timer_config, &ts_gptimer));
ESP_APPTRACE_TEST_LOGI("Use timer %p for TS", ts_gptimer);
ESP_APPTRACE_TEST_LOGI("Use timer %x for TS", ts_gptimer);
TEST_ESP_OK(gptimer_enable(ts_gptimer));
TEST_ESP_OK(gptimer_start(ts_gptimer));
}
@@ -368,7 +368,7 @@ static void esp_apptrace_test(esp_apptrace_test_cfg_t *test_cfg)
TaskHandle_t thnd;
sprintf(name, "apptrace_test%d", i);
xTaskCreatePinnedToCore(test_cfg->tasks[i].task_func, name, 2048, &test_cfg->tasks[i], test_cfg->tasks[i].prio, &thnd, test_cfg->tasks[i].core);
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
ESP_APPTRACE_TEST_LOGI("Created task %x", thnd);
}
xTaskCreatePinnedToCore(esp_apptrace_dummy_task, "dummy0", 2048, &dummy_task_arg, dummy_task_arg.prio, NULL, 0);
#if CONFIG_FREERTOS_UNICORE == 0
@@ -641,7 +641,7 @@ static void esp_logtrace_task(void *p)
{
esp_logtrace_task_t *arg = (esp_logtrace_task_t *) p;
ESP_APPTRACE_TEST_LOGI("%p: run log test task", xTaskGetCurrentTaskHandle());
ESP_APPTRACE_TEST_LOGI("%x: run log test task", xTaskGetCurrentTaskHandle());
int i = 0;
while (1) {
@@ -662,7 +662,7 @@ static void esp_logtrace_task(void *p)
ESP_APPTRACE_TEST_LOGE("Failed to flush printf buf (%d)!", ret);
}
ESP_APPTRACE_TEST_LOGI("%p: finished", xTaskGetCurrentTaskHandle());
ESP_APPTRACE_TEST_LOGI("%x: finished", xTaskGetCurrentTaskHandle());
xSemaphoreGive(arg->done);
vTaskDelay(1);
@@ -681,13 +681,13 @@ TEST_CASE("Log trace test (2 tasks)", "[trace][ignore]")
};
xTaskCreatePinnedToCore(esp_logtrace_task, "logtrace0", 2048, &arg1, 3, &thnd, 0);
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
ESP_APPTRACE_TEST_LOGI("Created task %x", thnd);
#if CONFIG_FREERTOS_UNICORE == 0
xTaskCreatePinnedToCore(esp_logtrace_task, "logtrace1", 2048, &arg2, 3, &thnd, 1);
#else
xTaskCreatePinnedToCore(esp_logtrace_task, "logtrace1", 2048, &arg2, 3, &thnd, 0);
#endif
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
ESP_APPTRACE_TEST_LOGI("Created task %x", thnd);
xSemaphoreTake(arg1.done, portMAX_DELAY);
vSemaphoreDelete(arg1.done);
@@ -760,7 +760,7 @@ static void esp_sysviewtrace_test_task(void *p)
xSemaphoreGive(*arg->sync);
}
}
ESP_APPTRACE_TEST_LOGI("%p: finished", xTaskGetCurrentTaskHandle());
ESP_APPTRACE_TEST_LOGI("%x: finished", xTaskGetCurrentTaskHandle());
xSemaphoreGive(arg->done);
vTaskDelay(1);
@@ -809,13 +809,13 @@ TEST_CASE("SysView trace test 1", "[trace][ignore]")
TEST_ESP_OK(gptimer_new_timer(&timer_config, &tim_arg2.gptimer));
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace0", 2048, &arg1, 3, &thnd, 0);
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
ESP_APPTRACE_TEST_LOGI("Created task %x", thnd);
#if CONFIG_FREERTOS_UNICORE == 0
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 5, &thnd, 1);
#else
xTaskCreatePinnedToCore(esp_sysviewtrace_test_task, "svtrace1", 2048, &arg2, 5, &thnd, 0);
#endif
ESP_APPTRACE_TEST_LOGI("Created task %p", thnd);
ESP_APPTRACE_TEST_LOGI("Created task %x", thnd);
xSemaphoreTake(arg1.done, portMAX_DELAY);
vSemaphoreDelete(arg1.done);

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -17,7 +17,6 @@
#include "esp_image_format.h"
#include "esp_secure_boot.h"
#include "esp_flash_encrypt.h"
#include "spi_flash_mmap.h"
#include "sdkconfig.h"
#include "esp_ota_ops.h"
@@ -32,6 +31,24 @@
#include "esp_bootloader_desc.h"
#include "esp_flash.h"
#if CONFIG_IDF_TARGET_ESP32
#include "esp32/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32S2
#include "esp32s2/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32C3
#include "esp32c3/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32S3
#include "esp32s3/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32C2
#include "esp32c2/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32C6
#include "esp32c6/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32H2
#include "esp32h2/rom/secure_boot.h"
#elif CONFIG_IDF_TARGET_ESP32P4
#include "esp32p4/rom/secure_boot.h"
#endif
#define SUB_TYPE_ID(i) (i & 0x0F)
/* Partial_data is word aligned so no reallocation is necessary for encrypted flash write */
@@ -41,7 +58,6 @@ typedef struct ota_ops_entry_ {
bool need_erase;
uint32_t wrote_size;
uint8_t partial_bytes;
bool ota_resumption;
WORD_ALIGNED_ATTR uint8_t partial_data[16];
LIST_ENTRY(ota_ops_entry_) entries;
} ota_ops_entry_t;
@@ -112,22 +128,6 @@ static esp_ota_img_states_t set_new_state_otadata(void)
#endif
}
static ota_ops_entry_t* esp_ota_init_entry(const esp_partition_t *partition)
{
ota_ops_entry_t *new_entry = (ota_ops_entry_t *) calloc(1, sizeof(ota_ops_entry_t));
if (new_entry == NULL) {
return NULL;
}
LIST_INSERT_HEAD(&s_ota_ops_entries_head, new_entry, entries);
new_entry->part = partition;
new_entry->handle = ++s_ota_ops_last_handle;
return new_entry;
}
esp_err_t esp_ota_begin(const esp_partition_t *partition, size_t image_size, esp_ota_handle_t *out_handle)
{
ota_ops_entry_t *new_entry;
@@ -161,13 +161,6 @@ esp_err_t esp_ota_begin(const esp_partition_t *partition, size_t image_size, esp
}
#endif
new_entry = esp_ota_init_entry(partition);
if (new_entry == NULL) {
return ESP_ERR_NO_MEM;
}
new_entry->need_erase = (image_size == OTA_WITH_SEQUENTIAL_WRITES);
*out_handle = new_entry->handle;
if (image_size != OTA_WITH_SEQUENTIAL_WRITES) {
// If input image size is 0 or OTA_SIZE_UNKNOWN, erase entire partition
if ((image_size == 0) || (image_size == OTA_SIZE_UNKNOWN)) {
@@ -181,44 +174,16 @@ esp_err_t esp_ota_begin(const esp_partition_t *partition, size_t image_size, esp
}
}
return ESP_OK;
}
esp_err_t esp_ota_resume(const esp_partition_t *partition, const size_t erase_size, const size_t image_offset, esp_ota_handle_t *out_handle)
{
ota_ops_entry_t *new_entry;
if ((partition == NULL) || (out_handle == NULL)) {
return ESP_ERR_INVALID_ARG;
}
if (image_offset > partition->size) {
return ESP_ERR_INVALID_ARG;
}
partition = esp_partition_verify(partition);
if (partition == NULL) {
return ESP_ERR_NOT_FOUND;
}
// The staging partition cannot be of type Factory, but the final partition can be.
if (!is_ota_partition(partition)) {
return ESP_ERR_INVALID_ARG;
}
const esp_partition_t* running_partition = esp_ota_get_running_partition();
if (partition == running_partition) {
return ESP_ERR_OTA_PARTITION_CONFLICT;
}
new_entry = esp_ota_init_entry(partition);
new_entry = (ota_ops_entry_t *) calloc(sizeof(ota_ops_entry_t), 1);
if (new_entry == NULL) {
return ESP_ERR_NO_MEM;
}
new_entry->ota_resumption = true;
new_entry->wrote_size = image_offset;
new_entry->need_erase = (erase_size == OTA_WITH_SEQUENTIAL_WRITES);
LIST_INSERT_HEAD(&s_ota_ops_entries_head, new_entry, entries);
new_entry->part = partition;
new_entry->handle = ++s_ota_ops_last_handle;
new_entry->need_erase = (image_size == OTA_WITH_SEQUENTIAL_WRITES);
*out_handle = new_entry->handle;
return ESP_OK;
}
@@ -1000,7 +965,6 @@ esp_err_t esp_ota_revoke_secure_boot_public_key(esp_ota_secure_boot_public_key_i
}
const esp_partition_t *running_app_part = esp_ota_get_running_partition();
esp_err_t ret = ESP_FAIL;
#ifdef CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
esp_ota_img_states_t running_app_state;
ret = esp_ota_get_state_partition(running_app_part, &running_app_state);
@@ -1015,7 +979,7 @@ esp_err_t esp_ota_revoke_secure_boot_public_key(esp_ota_secure_boot_public_key_i
#endif
esp_secure_boot_key_digests_t trusted_keys;
ret = esp_secure_boot_read_key_digests(&trusted_keys);
esp_err_t ret = esp_secure_boot_read_key_digests(&trusted_keys);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Could not read the secure boot key digests from efuse. Aborting..");
return ESP_FAIL;

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -99,32 +99,6 @@ int esp_ota_get_app_elf_sha256(char* dst, size_t size) __attribute__((deprecated
*/
esp_err_t esp_ota_begin(const esp_partition_t* partition, size_t image_size, esp_ota_handle_t* out_handle);
/**
* @brief Resume an interrupted OTA update by continuing to write to the specified partition.
*
* This function is used when an OTA update was previously started and needs to be resumed after an interruption.
* It continues the OTA process from the specified offset within the partition.
*
* Unlike esp_ota_begin(), this function does not erase the partition which receives the OTA update, but rather expects that part of the image
* has already been written correctly, and it resumes writing from the given offset.
*
* @param partition Pointer to info for the partition which is receiving the OTA update. Required.
* @param erase_size Specifies how much flash memory to erase before resuming OTA, depending on whether a sequential write or a bulk erase is being used.
* @param image_offset Offset from where to resume the OTA process. Should be set to the number of bytes already written.
* @param out_handle On success, returns a handle that should be used for subsequent esp_ota_write() and esp_ota_end() calls.
*
* @return
* - ESP_OK: OTA operation resumed successfully.
* - ESP_ERR_INVALID_ARG: partition, out_handle were NULL or image_offset arguments is negative, or partition doesn't point to an OTA app partition.
* - ESP_ERR_NO_MEM: Cannot allocate memory for OTA operation.
* - ESP_ERR_OTA_PARTITION_CONFLICT: Partition holds the currently running firmware, cannot update in place.
* - ESP_ERR_NOT_FOUND: Partition argument not found in partition table.
* - ESP_ERR_OTA_SELECT_INFO_INVALID: The OTA data partition contains invalid data.
* - ESP_ERR_INVALID_SIZE: Partition doesn't fit in configured flash size.
* - ESP_ERR_FLASH_OP_TIMEOUT or ESP_ERR_FLASH_OP_FAIL: Flash write failed.
*/
esp_err_t esp_ota_resume(const esp_partition_t *partition, const size_t erase_size, const size_t image_offset, esp_ota_handle_t *out_handle);
/**
* @brief Write OTA update data to partition
*

View File

@@ -0,0 +1,7 @@
# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps
components/app_update/test_apps:
disable:
- if: IDF_TARGET in ["esp32c6", "esp32h2", "esp32p4"]
temporary: true
reason: target esp32c6, esp32h2, esp32p4 is not supported yet # TODO: IDF-8068

View File

@@ -0,0 +1,7 @@
#This is the project CMakeLists.txt file for the test subproject
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(app_update_test)

View File

@@ -0,0 +1,2 @@
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
| ----------------- | ----- | -------- | -------- | -------- | -------- |

View File

@@ -0,0 +1,4 @@
idf_component_register(SRC_DIRS "."
PRIV_INCLUDE_DIRS "."
PRIV_REQUIRES cmock test_utils app_update bootloader_support nvs_flash driver spi_flash
WHOLE_ARCHIVE)

View File

@@ -6,7 +6,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "esp_log.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/semphr.h>
@@ -114,11 +113,3 @@ TEST_CASE("esp_ota_get_partition_description", "[ota]")
};
TEST_ESP_ERR(ESP_ERR_NOT_FOUND, bootloader_common_get_partition_description(&not_app_pos, &app_desc1));
}
TEST_CASE("esp_ota_get_running_partition points to correct address", "[spi_flash]")
{
const esp_partition_t *factory = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, "factory");
const esp_partition_t* part = esp_ota_get_running_partition();
ESP_LOGI("running bin", "0x%p", (void*)part->address);
TEST_ASSERT_EQUAL_HEX32(factory->address, part->address);
}

View File

@@ -842,7 +842,7 @@ static void test_flow6(void)
TEST_CASE_MULTIPLE_STAGES("Switching between factory, OTA0 using esp_ota_write_with_offset", "[app_update][timeout=90][reset=DEEPSLEEP_RESET, DEEPSLEEP_RESET]", start_test, test_flow6, test_flow6);
//IDF-5145
TEST_CASE("Test bootloader_common_get_sha256_of_partition returns ESP_ERR_IMAGE_INVALID when image is invalid", "[partitions]")
TEST_CASE("Test bootloader_common_get_sha256_of_partition returns ESP_ERR_IMAGE_INVALID when image is ivalid", "[partitions]")
{
const esp_partition_t *cur_app = esp_ota_get_running_partition();
ESP_LOGI(TAG, "copy current app to next part");

View File

@@ -0,0 +1,32 @@
# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0
import re
import pytest
from pytest_embedded import Dut
DEFAULT_TIMEOUT = 20
TEST_SUBMENU_PATTERN_PYTEST = re.compile(rb'\s+\((\d+)\)\s+"([^"]+)"\r?\n')
def run_multiple_stages(dut: Dut, test_case_num: int, stages: int) -> None:
for stage in range(1, stages + 1):
dut.write(str(test_case_num))
dut.expect(TEST_SUBMENU_PATTERN_PYTEST, timeout=DEFAULT_TIMEOUT)
dut.write(str(stage))
if stage != stages:
dut.expect_exact('Press ENTER to see the list of tests.')
@pytest.mark.supported_targets
@pytest.mark.temp_skip_ci(targets=['esp32c6', 'esp32h2'], reason='c6/h2 support TBD')
@pytest.mark.generic
def test_app_update(dut: Dut) -> None:
extra_data = dut.parse_test_menu()
for test_case in extra_data:
if test_case.type != 'multi_stage':
dut.write(str(test_case.index))
else:
run_multiple_stages(dut, test_case.index, len(test_case.subcases))
dut.expect_unity_test_output(timeout=90)
dut.expect_exact("Enter next test, or 'enter' to see menu")

View File

@@ -1,12 +0,0 @@
# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps
components/app_update/test_apps:
enable:
- if: CONFIG_NAME == "defaults" and IDF_TARGET != "linux"
- if: CONFIG_NAME == "xip_psram" and IDF_TARGET in ["esp32s2", "esp32s3", "esp32p4"]
# S2 doesn't have ROM for flash
- if: CONFIG_NAME == "xip_psram_with_rom_impl" and IDF_TARGET in ["esp32s3", "esp32p4"]
disable:
- if: IDF_TARGET in ["esp32c6", "esp32h2", "esp32c5", "esp32c61"]
temporary: true
reason: target esp32c6, esp32h2 esp32c5 is not supported yet # TODO: [ESP32C5] IDF-8638

Some files were not shown because too many files have changed in this diff Show More