All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.6.2 - 2023-06-08
- Fixes #352, in which the Arduino backend was being referenced in the CI runner before being explicitly assigned; this affected all tests of modules that used
library.propertiesto specify runtime Arduino module dependencies.
1.6.1 - 2023-06-08
- Compiler flags for Nano Every
1.6.0 - 2023-06-07
- Add util/atomic.h
Loggerclass to centralize CI runner script logging (in particular, indentation)- Explicit reporting of free bytes after compilation
interrupt.hmock#definestatements for analog pinsA0-A11
arduino_ci.rbuses newLogger
- Fix phrasing of free-space check
- Handle unrecognized command line errors in a nicer way
1.5.0 - 2023-01-17
- C++ definitions of
ARDUINO_CI_COMPILATION_MOCKSandARDUINO_CI_GODMODEto aid in compilation macros CIConfig.available_override_config_path()to search for available override files in standard locationsCIConfig.override_file_from_project_libraryandCIConfig.override_file_from_exampleto expose config locations- CI runner script now expliclty informs about config overrides
- A project
examples/directory can now provide its own configuration override file, which provides no new flexibility but simply mirrors the behavior fortests/.
CIConfignow usesPathnameinstead of strings
CIConfig.with_config, which was only used internally
-
arduino_ci.rb --helpno longer crashes -
Fix missing
LED_BUILTINdefinition for Arduino Due, Zero and Circuit Playground. -
No longer ignore failures if the first step of compiling files for the unit test fails.
1.4.0 - 2022-12-28
- Allow use of watchdog timer in application code (though it doesn't do anything)
- Show output from successful compile
--min-free-space=Ncommand-line argument to fail if free space is below required value- Add
_BV()macro. - Support for
dtostrf() - Added a CI workflow to lint the code base
- Added a CI workflow to check for spelling errors
- Extraction of bytes usage in a compiled sketch is now calculated in a method:
ArduinoBackend.last_bytes_usage - Added
nano_everyplatform to representarduino:megaavrarchitecture - Working directory is now printed in test runner output
- Explicitly include
irbvia rubygems
- We now compile a shared library to be used for each test.
- Put build artifacts in a separate directory to reduce clutter.
- Replace
#define yield() _NOP()withinline void yield() { _NOP(); }so that other code can define ayield()function. - Update .gitattributes so we have consistent line endings
- Change 266 files from CRLF to LF.
- Run tests on push as well as on a pull request so developers can see impact
ArduinoBackendnow exposesconfig_file_pathinstead ofconfig_dirso that we can be explicit about strange behavior inarduino-clithat isn't going to change anytime soon- Use
arduino-cliversion0.29.0as the backend - Test runner detects console width if possible, allowing variable width from 80-132 chars
- Properly report compile errors in GitHub Actions.
- Fix copy/paste error to allow additional warnings for a platform
- Apply "rule of three" to Client copy constructor and copy assignment operator
- Run Windows tests on Windows not Ubuntu
- Properly report error in building shared library
- A missing
examplesdirectory no longer causes a crash incpp_library.rb - Referring to an undefined platform no longer causes a crash; it's now a helpful error message
- A copy/paste error that prevented compiler warning flags from being supplied has been fixed, via jgfoster
- RSpec was not communicating compile errors from unit test executables that failed to build. Now it does, via jgfoster
- Windows paths now avoid picking up backslashes, for proper equality comparisons
- Libraries are now considered installed if their entry is a symlink (for which
exist?would returnfalse)
1.3.0 - 2021-01-13
- Better indications of the build phases in the test runner
arduino_ci.rb - Better indications of which example sketch is being compiled as part of testing
- Topmost installation instructions now suggest
gem install arduino_ciinstead of using aGemfile. Reasons for using aGemfileare listed and discussed separately further down the README. - Stream::readStreamUntil() no longer returns delimiter
- scanning of
library.properties; this can and should now be performed by the standalonearduino-linttool.
- Example sketches with no configured platforms were printing the wrong configuration values to the debug message
- Libraries directory was not being automatically created prior to attempting to change directory into it
- A style error whose "fix" caused an actual error.
- Proper installation order for NetworkLib in CI workflow configuration
1.2.0 - 2021-01-06
- Environment variable to run a custom initialization script during CI testing:
CUSTOM_INIT_SCRIPT - Environment variable to run from a subdirectory during CI testing:
USE_SUBDIR assertComparativeEquivalent()andassertComparativeNotEquivalent()to evaluate equality on ana - b == 0basis (and/or!(a > b) && !(a < b))assertEqualFloat()andassertNotEqualFloat()for comparing floats with epsilonassertInfinity()andassertNotInfinity()for comparing floats to infinityassertNAN()andassertNotNAN()for comparing floats toNaNassertion(),ReporterTAP.onAssert(), andtestBehaviorExpmacro to handle simple expression evaluation (is true, is false, etc)Wire.resetMocks()and documentationshiftIn()andshiftOut()CIConfig.is_defaultto detect when the default configuration is usedArduinoBackend.boards_installed?to detect whether a board family (or package, likearduino:avr) is installedArduinoBackend.library_available?to detect whether the library manager knows of a library- Sanity checks for
library.propertiesincludes=anddepends=entries
- Rubocop expected syntax downgraded from ruby 2.6 to 2.5
assertEqual()andassertNotEqual()use actual==and!=-- they no longer require a type to be totally ordered just to do equality tests- Evaluative assertions (is true/false/null/etc) now produce simpler error messages instead of masquerading as an operation (e.g. "== true")
LibraryProperties.to_hnow properly uses formatters and symbolic keys, in order to support a.to_s- Architectures from
library.propertiesare considered when iterating over unit test or examples compilation, as well as the configured platforms
- Warnings about directory name mismatches are now based on proper comparison of strings
- Now using the recommended "stable" URL for the
esp32board family esp8266:huzzahoptions updated as per upstream- Errors about
'_NOP' was not declared in this scope(test added) pinMode()andanalogReference()are now functions (no longer macros), because that conflicted with actual function names in the wildanalogReadResolution()andanalogWriteResolution()are also no longer macros
1.1.0 - 2020-12-02
ensure_arduino_installation.rbnow ensures the existence of the library directory as well- Environment variables to escalate unit tests or examples not being found during CI testing -
EXPECT_EXAMPLESandEXPECT_UNITTESTS
- Conserve CI testing minutes by grouping CI into fewer runs
- Improper reference to
Hostinarduino_ci.rbtest runner is now properly qualified - Failure to set board manager URLs (for 3rd party board providers) has been fixed
1.0.0 - 2020-11-29
- Special handling of attempts to run the
arduino_ci.rbCI script against the ruby library instead of an actual Arduino project - Explicit checks for attempting to test
arduino_ciitself as if it were a library, resolving a minor annoyance to this developer. - Code coverage tooling
- Explicit check and warning for library directory names that do not match our guess of what the library should/would be called
- Symlink tests for
Host - Add documentation on how to use Arduino CI with GitHub Actions
- Allow tests to run on GitHub without external set up, via GitHub Actions (Windows, Linux, MacOS)
- Exposed desired CLI backend version as
ArduinoInstallation::DESIRED_ARDUINO_CLI_VERSION
- Arduino backend is now
arduino-cliversion0.13.0 ArduinoCmdis nowArduinoBackendCppLibrarynow relies largely onArduinoBackendinstead of making its own judgements about libraries (metadata, includes, and examples)ArduinoBackendfunctionality related toCppLibrarynow lives inCppLibraryCppLibrarynow works in an installation-first manner for exposure toarduino-cli's logic -- without installation, there is no ability to reason about librariesCppLibraryforces just-in-time recursive dependency installation in order to work sensiblyArduinoBackendmaintains the central "best guess" logic on what a library (on disk) might be named
arduino_ci_remote.rbCLI switch--skip-compilation- Deprecated
arduino_ci_remote.rbin favor ofarduino_ci.rb
ARDUINO_CI_SKIP_SPLASH_SCREEN_RSPEC_TESTSno longer affects any tests because there are no longer splash screens since switching toarduino-cliCIConfig.package_builtin?as this is no longer relevant to thearduino-clibackend (which has no built-in packages)- Travis and Appveyor CI
- Missing include of
IPAddress.hinClient.h - Mismatches between library names in
library.propertiesand the directory names, which can cause cryptic failures LibraryPropertiesskips over parse errors instead of crashing: only lines with non-empty keys and non-nil values are recorded
0.4.0 - 2020-11-21
arduino_ci_remote.rbCLI switch--skip-examples-compilation- Add support for
digitalPinToPort(),digitalPinToBitMask(),portOutputRegister(), andportInputRegister() CppLibrary.header_filesto find header filesLibraryPropertiesto read metadata from Arduino librariesCppLibrary.library_properties_path,CppLibrary.library_properties?,CppLibrary.library_propertiesto expose library properties of a Cpp libraryCppLibrary.arduino_library_dependenciesto list the dependent libraries specified by the library.properties fileCppLibrary.print_stack_dumpprints stack trace dumps (on Windows specifically) to the console if encountered- Definitions for Arduino zero
- Support for mock EEPROM (but only if board supports it)
- Add stubs for
Client.h,IPAddress.h,Printable.h,Server.h, andUdp.h Wirenow has a mock support for the master role- Sample project for
BusIOto show problem finding header file
- Move repository from https://github.com/ianfixes/arduino_ci to https://github.com/Arduino-CI/arduino_ci
- Revise math macros to avoid name clashes
CppLibraryfunctions returning C++ header or code files now respect the 1.0/1.5 library specification- Mocks of built-in macros made more accurate
- NUM_SERIAL_PORTS can now be set explicitly
- Improve SPI header strategy
arduino_ci_remote.rbCLI switch--skip-compilation- Deprecated
arduino_ci_remote.rbin favor ofarduino_ci.rb
- Don't define
ostream& operator<<(nullptr_t)if already defined by Apple CppLibrary.in_tests_dir?no longer produces an error if there is no tests directory- The definition of the
_SFR_IO8macro no longer produces errors about rvalues - Typo in
cpp_library.rb, misspelling ofaux_libraries
0.3.0 - 2019-09-03
- Unit testing configuration now allows
exclude_dirsto be set, which prevents stray source files from as part of unit testing allows
0.2.1 - 2019-08-12
- Minimal Wire mocks. Will not provide support for unit testing I2C communication yet, but will allow compilation of libraries that use I2C.
StreamTapeclass now bridgesStreamandHardwareSerialto allow general-purpose stream mocking & history
- Arduino command failures (to read preferences) now causes a fatal error, with help for troubleshooting the underlying command
- Arduino library dependencies are now installed prior to unit testing, instead of prior to compilation testing. Whoops.
- Arduino library dependencies with spaces in their names are now handled properly during compilation -- spaces are automatically coerced to underscores
0.2.0 - 2019-02-20
release-new-version.shscript- outputs for
PinHistorycan now report timestamps - Fibonacci Clock for clock testing purposes (internal to this library)
- Shortened
ArduinoQueuepush and pop operations ci/Queue.his nowMockEventQueue.h, with timing dataMockEventQueue::Nodenow contains structMockEventQueue::Event, which contains both the templated typeTand a field for a timestamp.- Construction of
MockEventQueuenow includes a constructor argument for the time-fetching function - Construction of
PinHistorynow includes a constructor argument for the time-fetching function PinHistorycan now return an array of timestamps for its eventsGodmodeStateis now a singleton pattern, which is necessary to support the globality of Arduino functionsGodmodeStatenow uses timestamped PinHistory for Analog and Digital
ArduinoQueueno longer leaks memory
0.1.21 - 2019-02-07
- Proper
ostream operator <<fornullptr - Proper comparison operations for
nullptr
Compare.hheavily refactored to use a smallish macro
- Homegrown implementation of
nullptr
nullptrsupport (again)
0.1.20 - 2019-01-31
unittest_setup()andunittest_teardown()were not being executed for each unit test, only for the set of all tests. My bad.
0.1.19 - 2019-01-30
- Added rspec sensitivity to the environment variable
$ARDUINO_CI_SELECT_CPP_TESTS=<glob>(forarduino_cigem hackers) assertNotNull()andassureNotNull()C++ comparisons
CiConfig::allowable_unittest_filesnow usesPathnameto full effectnullptrnow defined in its own class
- Assertions on
nullptr - The definition of
nullptr
0.1.18 - 2019-01-29
ArduinoInstallationandArduinoDownloadernow allow console output to optionally be set to anIOobject of choice duringforce_installArduinoInstallation::force_installnow optionally accepts a version stringarduino_library_location.rbscript to print Arduino library location to stdoutarduino_ci_remote.rbnow supports--skip-unittestsand--skip-compilation. If you skip both, only theautolocate!of the Arduino binary will be performed.keepachangelog_managergem to begin streamlining the release processunittest_setup()andunittest_teardown()macros, my thanks to @hlovdal for contributing this code- Added rspec sensitivity to the environment variable
$ARDUINO_CI_SKIP_SPLASH_SCREEN_RSPEC_TESTS(forarduino_cigem hackers) - Added rspec sensitivity to the environment variable
$ARDUINO_CI_SKIP_RUBY_RSPEC_TESTS(forarduino_cigem hackers) - Added rspec sensitivity to the environment variable
$ARDUINO_CI_SKIP_CPP_RSPEC_TESTS(forarduino_cigem hackers) nullptrdefinition in C++assertNull()for unit tests
- Unit tests and examples are now executed alphabetically by filename
- The
pgm_read_...preprocessor macros in cpp/arduino/avr/pgmspace.h now expands to an expression with applicable type. - Unit tests for interrupts (
attachInterruptanddetachInterrupt) get their own file
- Library installation no longer "fails" if the library is already installed
- Platform definition for
mega2560now includes proper AVR compiler flag CppLibrary::vendor_bundle?now asks where gems are, instead of assumingvendor/bundle/install_local_librarystep inarduino_ci_remote.rbnow properly surfaces any error message
0.1.17 - 2019-01-14
- Provide an
itoafunction. It is present in Arduino's runtime environment but not on most (all?) host systems because itoa is not a portable standard function. to_handto_sfunctions forci_config.rbCIConfig::clone- Ability to override
CIConfigfrom a hash instead of just a file arduino_ci_remote.rbnow supports command line switches--testfile-select=GLOBand--testfile-reject=GLOB(which can both be repeated)
- Simplified the use of
Array.eachwith a return statement; it's now simplyArray.find autolocate!for Arduino installations now raisesArduinoInstallationErrorifforce_installfails- Errors due to missing YAML are now named
ConfigurationError
- Determining a working OSX launch command no longer breaks on non-English installations
arduino_ci_remote.rbnow honors selected and rejected test files
0.1.16 - 2019-01-06
- Finally put some factorization into the
arduino_ci_remote.rbscript: testing unit and testing compilation are now standalone functions
- Unnecessary board changes during unit tests no longer happen
- Proper casting for
pgm_read_byte
0.1.15 - 2019-01-04
- Checking for (empty) set of platforms to build now precedes the check for examples to build; this avoids assuming that all libraries will have an example and dumping the file set when none are found
- Spaces in the names of project directories no longer cause unit test binaries to fail execution
- Configuration file overrides with
nils (or empty arrays) now properly override their base configuration
0.1.14 - 2018-09-21
- Arduino command wrapper now natively supports board manager URLs
arduino_ci_remote.rbchecks for proper board manager URLs for requested platformsarduino_ci_remote.rbreports on Arduino executable location- exposed
index_librariesinArduinoCmdso it can be used as an explicit build step
- Centralized file listing code in
arduino_ci_remote.rb arduino_ci_remote.rbis verbose about platforms, packages, and URLs
- Linux wrapper no longer bails out on long-running commands. That behavior was possible in Arduino 1.6.x that might pop up a graphical error message, but with the display manager removed this is no longer a concern
0.1.13 - 2018-09-19
arduino_ci_remote.rbnow iterates over example platforms before examples (saves time)
arduino_ci_remote.rbno longer crashes iftest/directory doesn't exist
0.1.12 - 2018-09-13
- Explicit
libasanchecking (reporting) in build script
- Test file
int main(){}needed a CPP extension in order to properly compile - Fixed build script reporting for
inform()when it returns a non-string value from its block - Don't count false returns from
inform()blocks as failures
0.1.11 - 2018-09-13
- Explicit checks that the requested test platforms are defined in YML
- Arduino command wrapper can now guess whether a library is installed
- CPP library class now reaches into included Arduino libraries for source files
- SPI mocks
ensure_arduino_installation.rbto allow custom libraries to be installed- Copy constructor for
ArduinoCITable - Some error information on failures to download the Arduino binary
- Refactored documentation
- External libraries aren't forcibly installed via the Arduino binary (in
arduino_cmd_remote.rb) if they appear to exist on disk already attachInterruptanddetachInterruptare now mocked instead of_NOP- Unit test binaries now run with debugging symbols and address sanitization (if available), to help isolate the causes of segfaults
ArduinoCommand::libdirlogic is now centralized, usingsketchbook.pathfrom prefs instead of hard-coding
- Display Manager became no longer necessary with Arduino 1.8.X
- OSX splash screen re-disabled
- ArduinoCITable didn't initialize its size on
clear() - CPP file aggregation now ignores dotfiles
- Unit test
compilerssection of YAML configuration is now properly inherited from parent configuration files - Retrieving preferences is now properly cached
- Paths on Windows should now work due to the use of
Pathname - symlinking directories in Windows environments now properly uses
/Dswitch tomklink
0.1.10 - 2018-05-06
- Arduino
force_installon Linux now attempts downloading 3 times and provides more information on failure - Explicit check for
wget - Windows / Appveyor support, enabled largely by contributions from @tomduff
long longsupport inString- Representative
.gitignorefiles in sample projects - Cross-platform symlinking in
Host - OSX CI via Travis, with separate badges
- Author
- Splash-screen-skip hack on OSX now falls back on "official" launch method if the hack doesn't work
- Refactored download/install code in prepration for windows CI
- Explicitly use 32-bit math for mocked Random()
- Ruby-centric download and unzipping of Arduino IDE packages, now with progress dots
ArduinoDownloaderPosixbecame empty, so it was removed
Gemfile.lockfiles are properly ignored- Windows hosts won't try to open a display manager
isnanportability- OSX force_install
0.1.9 - 2018-04-12
- Explicit tests of
.arduino-ci.ymlinTestSomethingexample
- Malformed YAML (duplicate unittests section) now has no duplicate section
- arduino_ci_remote.rb script now has correct arguments in build_for_test
0.1.8 - 2018-04-03
- Definition of
LED_BUILTIN, first reported bydfrenchamon GitHub - Stubs for
toneandnoTone, first suggested bydfrenchamon GitHub - Ability to specify multiple compilers for unit testing
- Compile errors / portability issues in
WString.handPrint.h, first reported bydfrenchamon GitHub - Compile errors / inheritance issues in
Print.handStream.h, first reported bydfrenchamon GitHub - Print functions for int, double, long, etc
0.1.7 - 2018-03-07
- Queue and Table are now ArduinoCIQueue and ArduinoCITable to avoid name collisions
0.1.6 - 2018-03-07
CppLibrarycan now reportgcc_version
arduino_ci_remote.rbnow formats tasks with multiple output lines more nicely- Templates for CI classes are now pass-by-value (no const reference)
- Replaced pipes with
Open3.capture3to avoid deadlocks when commands have too much output ci_config.rbnow returns empty arrays (instead of nil) for undefined config keyspgmspace.hexplicitly includes<string.h>__FlashStringHelpershould now be properly mocked for compilationWString.hbool operator now works and is simpler
0.1.5 - 2018-03-05
- Yaml files can have either
.ymlor.yamlextensions - Yaml files support select/reject criteria for paths of unit tests for targeted testing
- Pins now track history and can report it in Ascii (big- or little-endian) for digital sequences
- Pins now accept an array (or string) of input bits for providing pin values across multiple reads
- FlashStringHelper (and related macros) compilation mocks
- SoftwareSerial. That took a while.
- Queue template implementation
- Table template implementation
- ObservableDataStream and DataStreamObserver pattern implementation
- DeviceUsingBytes and implementation of mocked serial device
- Unit test executables print to STDERR just in case there are segfaults. Uh, just in case I ever write any.
- OSX no longer experiences
javax.net.ssl.SSLKeyException: RSA premaster secret errormessages when downloading board package files arduino_ci_remote.rbno longer makes unnecessary changes to the board being tested- Scripts no longer crash if there is no
test/directory - Scripts no longer crash if there is no
examples/directory assureTrueandassureFalsenowassureinstead of justasserting.
0.1.4 - 2018-02-01
- Support for all builtin Math functions https://www.arduino.cc/reference/en/
- Support for all builtin Bits and Bytes functions https://www.arduino.cc/reference/en/
- Support for GODMODE and time functions
- Support for Character functions https://www.arduino.cc/reference/en/
- Mocks for
randomfunctions with seed control - Many original Arduino
#defines - Mocks for pinMode, analog/digital read/write
- Support for WString
- Support for Print
- Support for Stream (backed by a String implementation)
- All the IO stuff (pins, serial port support flags, etc) from the Arduino library
- Support for Serial (backed by GODMODE)
- Made
wgethave quieter output
0.1.3 - 2018-01-25
- C++ functions for
assure;asserts will run tests and continue,assures will abort on failures - Missing dotfiles in the
DoSomethingproject have been committed
arduino_ci_remote.rbdoesn't attempt to set URLs if nothing needs to be downloadedarduino_ci_remote.rbdoes unit tests firstunittest_main()is now the macro for theint main()of test files
- All test files were reporting "not ok" in TAP output. Now they are OK iff all asserts pass.
- Directories with a C++ extension in their name could cause problems. Now they are ignored.
CppLibraryhad trouble with symlinks. It shouldn't anymore.CppLibraryhad trouble with vendor bundles. It might in the future, but I have a better fix ready to go if it's an issue.
0.1.2 - 2018-01-25
- Actually package CPP and YAML files into the gem. Whoops.
0.1.1 - 2018-01-24
- README documentation for the actual unit tests
0.1.0 - 2018-01-24
- Unit testing support
- Documentation for all Ruby methods
ArduinoInstallationclass for managing lib / executable pathsDisplayManagerclass for managing Xvfb instance if neededArduinoCmdcaptures and caches preferencesArduinoCmdreports on whether a board is installedArduinoCmdsets preferencesArduinoCmdinstalls boardsArduinoCmdinstalls librariesArduinoCmdselects boards (compiler preference)ArduinoCmdverifies sketchesCppLibrarymanages GCC for unittestsCIConfigmanages overridable config for all testing
DisplayManger.with_displaydoesn'tdisableif the display was enabled prior to starting the block
- Built gems are
.gitignored - Updated gems based on Github's security advisories
0.0.1 - 2018-01-10
- Skeleton for gem with working unit tests