70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
# Development Quality Control
|
|
|
|
rusEFI is striving to follow modern software development practices. Testing pyramid, TDD etc.
|
|
|
|
We love our engines and we want them to live a long & happy life. That's why we have a three-tier quality assurance process:
|
|
|
|
* Continuous Integration: Unit testing with Github Actions with [ASan](https://github.com/google/sanitizers/wiki/AddressSanitizer)
|
|
* built-in trigger signal simulation
|
|
* [Simulator](Virtual-simulator)
|
|
|
|
For current coverage report see [the coverage page](https://rusefi.com/docs/unit_tests_coverage/)
|
|
|
|
## Hardware Continuous Integration
|
|
|
|
### F7 Nucleo
|
|
|
|
![nucleo](https://github.com/user-attachments/assets/b6d50866-1fca-4a21-9b64-f1b04cd9ca89)
|
|
|
|
### STM32F407G-DISC1
|
|
|
|
Since 2015 there is always a stm32f4 board listening for VCS updates running rusEFI hardware continues integration, "HW CI" for short.
|
|
|
|
Anyone can execute real hardware test suite by invoking. This command would detect rusEFI hardware automatically and invoke
|
|
HwCiF4Discovery.java
|
|
|
|
``java -jar rusefi_console.jar functional_test``
|
|
|
|
The following jumper wires are used to test some subsystems as realistically as possible:
|
|
|
|
* PD1 <=> PC6
|
|
* PD2 <=> PA5
|
|
|
|
### Proteus F4
|
|
|
|
See https://github.com/rusefi/rusefi/blob/c309174fdbb6b082113ac320294066c37922f2ce/java_console/autotest/src/main/java/com/rusefi/proteus/ProteusAnalogTest.java#L22
|
|
|
|
### HOWTO self-hosted runner build from scratch
|
|
|
|
GitHub Actions are Ubuntu, WSL is Ubuntu, Ubuntu is recommended
|
|
|
|
```shell
|
|
sudo apt install net-tools openssh-server curl git make gcc-multilib g++-multilib g++-mingw-w64 gcc-mingw-w64 sshpass mtools zip dosfstools openocd
|
|
sudo apt install gcc-12-arm-linux-gnueabi openjdk-21-jdk-headless stlink-tools
|
|
sudo systemctl enable ssh
|
|
```
|
|
|
|
https://github.com/rusefi/rusefi/settings/actions/runners use
|
|
``hw-ci-f4-discovery``
|
|
or
|
|
``hw-ci-nucleo-f7``
|
|
or
|
|
``hw-ci-proteus-f7``
|
|
additional label while adding runner.
|
|
|
|
https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service
|
|
|
|
https://elinux.org/Accessing_Devices_without_Sudo
|
|
|
|
```shell
|
|
useradd -G plugdev rusefi-ci
|
|
echo 'ATTRS{idProduct}=="374b", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"' > /etc/udev/rules.d/10-my-openocd.rules
|
|
echo 'ATTRS{idProduct}=="374e", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"' > /etc/udev/rules.d/11-my-openocd.rules
|
|
echo 'ATTRS{idProduct}=="5740", ATTRS{idVendor}=="0483", MODE="666", GROUP="plugdev"' > /etc/udev/rules.d/20-my-ecu-serial.rules
|
|
udevadm trigger
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
Migrate to https://github.com/rusefi/rusefi-ci/ ?
|