arduino_ci 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +75 -56
- data/REFERENCE.md +1 -6
- data/exe/arduino_ci.rb +40 -39
- data/lib/arduino_ci/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c4765de27f7f477f5a64189afba2d70a280d1ae65e64916af6b98aa7d1a0266f
         | 
| 4 | 
            +
              data.tar.gz: dd3748bdf67dfc526183d5a1372ce06d11b293cbaf984af19b90b999fdf1623e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ae3f368ed4f543f22a0702df9945abac4df15683f85e7d54c5c958cc60b951453bd21aad19beac73a54257bee558ea172d5c8cbcea69deed3a7b15da0cff0495
         | 
| 7 | 
            +
              data.tar.gz: b2481e5d6096e6dd6df1aa86efb6465e6f13dc853840fca4ba6044c8dc51b1ac1c8c0196f3c9d49c1412c4e880177a40880346e1bba1d4fb7cc4967468f192f7
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 |  | 
| 2 2 | 
             
            # ArduinoCI Ruby gem (`arduino_ci`)
         | 
| 3 3 | 
             
            [](https://rubygems.org/gems/arduino_ci)
         | 
| 4 | 
            -
            [](http://www.rubydoc.info/gems/arduino_ci/1. | 
| 4 | 
            +
            [](http://www.rubydoc.info/gems/arduino_ci/1.3.0)
         | 
| 5 5 | 
             
            [](https://gitter.im/Arduino-CI/arduino_ci?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
         | 
| 6 6 | 
             
            [](https://github.com/marketplace/actions/arduino_ci)
         | 
| 7 7 |  | 
| 8 8 | 
             
            Arduino CI was created to enable better collaboration among Arduino library maintainers and contributors, by enabling automated code checks to be performed as part of a pull request process.
         | 
| 9 9 |  | 
| 10 10 | 
             
            * enables running unit tests against the library **without hardware present**
         | 
| 11 | 
            -
            * provides a system of mocks that allow fine-grained control over the  | 
| 11 | 
            +
            * provides a system of mocks that allow fine-grained control over the hardware inputs, including the system's clock
         | 
| 12 12 | 
             
            * verifies compilation of any example sketches included in the library
         | 
| 13 13 | 
             
            * can test a wide range of arduino boards with different hardware options available
         | 
| 14 14 | 
             
            * compares entries in `library.properties` to the contents of the library and reports mismatches
         | 
| @@ -29,69 +29,91 @@ Windows  | [
         | 
| 36 | 
            +
            * `python` (if using a board architecutre that requires it, e.g. ESP32, ESP8266; see [this issue](https://github.com/Arduino-CI/arduino_ci/issues/235#issuecomment-739629243)). Consider `pyserial` as well.
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            In that environment, you can install by running `gem install arduino_ci`.  To update to a latest version, use `gem update arduino_ci`.
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            You can now test your library by simply running the command `arduino_ci.rb` from your library directory.  This will perform the following:
         | 
| 35 41 |  | 
| 36 | 
            -
             | 
| 42 | 
            +
            * validation of some fields in `library.properties`, if it exists
         | 
| 43 | 
            +
            * running unit tests from files found in `test/`, if they exist
         | 
| 44 | 
            +
            * testing compilation of example sketches found in `examples/`, if they exist
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            ### Assumptions About Your Repository
         | 
| 37 47 |  | 
| 38 48 | 
             
            Arduino expects all libraries to be in a specific `Arduino/libraries` directory on your system.  If your library is elsewhere, `arduino_ci` will _automatically_ create a symbolic link in the `libraries` directory that points to the directory of the project being tested.  This simplifieds working with project dependencies, but **it can have unintended consequences on Windows systems**.
         | 
| 39 49 |  | 
| 40 50 | 
             
            > If you use a Windows system **it is recommended that you only run `arduino_ci` from project directories that are already inside the `libraries` directory** because [in some cases deleting a folder that contains a symbolic link to another folder can cause the _entire linked folder_ to be removed instead of just the link itself](https://superuser.com/a/306618).
         | 
| 41 51 |  | 
| 52 | 
            +
            ### Changes to Your Repository
         | 
| 42 53 |  | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
            You'll need Ruby version 2.5 or higher, and to `gem install bundler` if it's not already there.
         | 
| 54 | 
            +
            Unit testing binaries created by `arduino_ci` should not be commited to the codebase.  To avoid that, add the following to your `.gitignore`:
         | 
| 46 55 |  | 
| 56 | 
            +
            ```ignore-list
         | 
| 57 | 
            +
            # arduino_ci unit test binaries and artifacts
         | 
| 58 | 
            +
            *.bin
         | 
| 59 | 
            +
            *.bin.dSYM
         | 
| 60 | 
            +
            ```
         | 
| 47 61 |  | 
| 48 | 
            -
            ###  | 
| 62 | 
            +
            ### A Quick Example
         | 
| 49 63 |  | 
| 50 | 
            -
            For unit  | 
| 64 | 
            +
            For a fairly minimal practical example of a unit-testable library repo that you can copy from, see [the `Arduino-CI/Blink` repository](https://github.com/Arduino-CI/Blink).
         | 
| 51 65 |  | 
| 52 | 
            -
            * **Linux**: `gcc`/`g++` is likely pre-installed.
         | 
| 53 | 
            -
            * **OSX**: `g++` is an alias for `clang`, which is provided by Xcode and the developer tools.  You are free to `brew install gcc` as well; this is also tested and working.
         | 
| 54 | 
            -
            * **Windows**: you will need Cygwin, and the `mingw-gcc-g++` package.
         | 
| 55 66 |  | 
| 67 | 
            +
            ## Advanced Start
         | 
| 56 68 |  | 
| 57 | 
            -
             | 
| 69 | 
            +
            New features and bugfixes reach GitHub before they reach a released ruby gem.  Alternately, it may be that (for your own reasons) you do not wish to install `arduino_ci` globally on your system.  A few additional setup steps are required if you wish to do this.
         | 
| 58 70 |  | 
| 59 | 
            -
             | 
| 71 | 
            +
            ### You Need Ruby _and_ Bundler
         | 
| 60 72 |  | 
| 61 | 
            -
             | 
| 73 | 
            +
            In addition to version 2.5 or higher, you'll also need to `gem install bundler` to a minimum of version 2.0 if it's not already there.  You may find it easiest to do this by using [`rbenv`](https://github.com/rbenv/rbenv).
         | 
| 62 74 |  | 
| 75 | 
            +
            You will need to add a file called `Gemfile` (no extension) to your Arduino project.
         | 
| 63 76 |  | 
| 64 | 
            -
             | 
| 77 | 
            +
            #### Non-root installation
         | 
| 65 78 |  | 
| 66 | 
            -
             | 
| 79 | 
            +
            If you are simply trying to avoid the need to install `arduino_ci` system-wide (which may require administrator permissions), your `Gemfile` would look like this:
         | 
| 67 80 |  | 
| 68 81 | 
             
            ```ruby
         | 
| 69 82 | 
             
            source 'https://rubygems.org'
         | 
| 70 | 
            -
             | 
| 83 | 
            +
             | 
| 84 | 
            +
            # Replace 1.2 with the desired version of arduino_ci.  See https://guides.rubygems.org/patterns/#pessimistic-version-constraint
         | 
| 85 | 
            +
            gem 'arduino_ci', '~> 1.2'
         | 
| 71 86 | 
             
            ```
         | 
| 72 87 |  | 
| 73 | 
            -
             | 
| 88 | 
            +
            It would also make sense to add the following to your `.gitignore`:
         | 
| 89 | 
            +
            ```ignore-list
         | 
| 90 | 
            +
            /.bundle/
         | 
| 91 | 
            +
            vendor
         | 
| 92 | 
            +
            ```
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            > Note: this used to be the recommended installation method, but with the library's maturation it's better to avoid the use of `Gemfile` and `bundle install` by just installing as per the "Quick Start" instructions above.
         | 
| 95 | 
            +
             | 
| 74 96 |  | 
| 75 | 
            -
             | 
| 97 | 
            +
            #### Using the latest-available code
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            If you want to use the latest code on GitHub, your `Gemfile` would look like this:
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            ```ruby
         | 
| 102 | 
            +
            source 'https://rubygems.org'
         | 
| 76 103 |  | 
| 104 | 
            +
            # to use the latest github code in a given repo and branch, replace the below values for git: and ref: as needed
         | 
| 105 | 
            +
            gem 'arduino_ci', git: 'https://github.com/ArduinoCI/arduino_ci.git', ref: '<your desired ref, branch, or tag>'
         | 
| 77 106 | 
             
            ```
         | 
| 78 | 
            -
            /.bundle/
         | 
| 79 | 
            -
            /.yardoc
         | 
| 80 | 
            -
            Gemfile.lock
         | 
| 81 | 
            -
            /_yardoc/
         | 
| 82 | 
            -
            /coverage/
         | 
| 83 | 
            -
            /doc/
         | 
| 84 | 
            -
            /pkg/
         | 
| 85 | 
            -
            /spec/reports/
         | 
| 86 | 
            -
            vendor
         | 
| 87 | 
            -
            *.gem
         | 
| 88 107 |  | 
| 89 | 
            -
            # rspec failure tracking
         | 
| 90 | 
            -
            .rspec_status
         | 
| 91 108 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 109 | 
            +
            #### Using a version of `arduino_ci` source code on your local machine
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            First, Thanks!  See [CONTRIBUTING.md](CONTRIBUTING.md).  Your `Gemfile` would look like this:
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            ```ruby
         | 
| 114 | 
            +
            source 'https://rubygems.org'
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            gem 'arduino_ci', path: '/path/to/development/dir/for/arduino_ci'
         | 
| 95 117 | 
             
            ```
         | 
| 96 118 |  | 
| 97 119 |  | 
| @@ -103,17 +125,18 @@ $ bundle install   # adds packages to global library (may require admin rights) | |
| 103 125 | 
             
            $ bundle install --path vendor/bundle   # adds packages to local library
         | 
| 104 126 | 
             
            ```
         | 
| 105 127 |  | 
| 128 | 
            +
            This will create a `Gemfile.lock` in your project directory, which you may optionally check into source control.  A broader introduction to ruby dependencies is outside the scope of this document.
         | 
| 106 129 |  | 
| 107 | 
            -
             | 
| 130 | 
            +
             | 
| 131 | 
            +
             | 
| 132 | 
            +
            ### Running `arduino_ci.rb` To Test Your Library
         | 
| 108 133 |  | 
| 109 134 | 
             
            With that installed, just the following shell command each time you want the tests to execute:
         | 
| 110 135 |  | 
| 111 | 
            -
            ```
         | 
| 136 | 
            +
            ```console
         | 
| 112 137 | 
             
            $ bundle exec arduino_ci.rb
         | 
| 113 138 | 
             
            ```
         | 
| 114 139 |  | 
| 115 | 
            -
            `arduino_ci.rb` is the main entry point for this library.  This command will iterate over all the library's `examples/` and attempt to compile them.  If you set up unit tests, it will run those as well.
         | 
| 116 | 
            -
             | 
| 117 140 |  | 
| 118 141 | 
             
            ### Reference
         | 
| 119 142 |  | 
| @@ -128,18 +151,14 @@ For more information on the usage of `arduino_ci.rb`, see [REFERENCE.md](REFEREN | |
| 128 151 |  | 
| 129 152 | 
             
            ## Setting up Pull Request Testing and/or External CI
         | 
| 130 153 |  | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
            * A GitHub (or other repository-hosting) project for your library
         | 
| 134 | 
            -
            * A CI system like [Travis CI](https://travis-ci.org/) or [Appveyor](https://www.appveyor.com/) that is linked to your project
         | 
| 135 | 
            -
             | 
| 154 | 
            +
            > **Note:** `arduino_ci.rb` expects to be run from the root directory of your Arduino project library.
         | 
| 136 155 |  | 
| 137 | 
            -
            ###  | 
| 156 | 
            +
            ### Arduino CI's Own GitHub action
         | 
| 138 157 |  | 
| 139 | 
            -
             | 
| 158 | 
            +
            [](https://github.com/marketplace/actions/arduino_ci)
         | 
| 140 159 |  | 
| 141 160 |  | 
| 142 | 
            -
             | 
| 161 | 
            +
            ### Your Own Scripted GitHub Action
         | 
| 143 162 |  | 
| 144 163 | 
             
            GitHub Actions allows you to automate your workflows directly in GitHub.
         | 
| 145 164 | 
             
            No additional steps are needed.
         | 
| @@ -156,12 +175,12 @@ jobs: | |
| 156 175 | 
             
                    with:
         | 
| 157 176 | 
             
                      ruby-version: 2.6
         | 
| 158 177 | 
             
                  - run: |
         | 
| 159 | 
            -
                       | 
| 160 | 
            -
                       | 
| 178 | 
            +
                      gem install arduino_ci
         | 
| 179 | 
            +
                      arduino_ci.rb
         | 
| 161 180 | 
             
            ```
         | 
| 162 181 |  | 
| 163 182 |  | 
| 164 | 
            -
             | 
| 183 | 
            +
            ### Travis CI
         | 
| 165 184 |  | 
| 166 185 | 
             
            You'll need to go to https://travis-ci.org/profile/ and enable testing for your Arduino project.  Once that happens, you should be all set.  The script will test all example projects of the library and all unit tests.
         | 
| 167 186 |  | 
| @@ -171,12 +190,12 @@ Next, you need this in `.travis.yml` in your repo | |
| 171 190 | 
             
            sudo: false
         | 
| 172 191 | 
             
            language: ruby
         | 
| 173 192 | 
             
            script:
         | 
| 174 | 
            -
              -  | 
| 175 | 
            -
              -  | 
| 193 | 
            +
              - gem install arduino_ci
         | 
| 194 | 
            +
              - arduino_ci.rb
         | 
| 176 195 | 
             
            ```
         | 
| 177 196 |  | 
| 178 197 |  | 
| 179 | 
            -
             | 
| 198 | 
            +
            ### Appveyor CI
         | 
| 180 199 |  | 
| 181 200 | 
             
            You'll need to go to https://ci.appveyor.com/projects and add your project.
         | 
| 182 201 |  | 
| @@ -185,8 +204,8 @@ Next, you'll need this in `appveyor.yml` in your repo. | |
| 185 204 | 
             
            ```yaml
         | 
| 186 205 | 
             
            build: off
         | 
| 187 206 | 
             
            test_script:
         | 
| 188 | 
            -
              -  | 
| 189 | 
            -
              -  | 
| 207 | 
            +
              - gem install arduino_ci
         | 
| 208 | 
            +
              - arduino_ci.rb
         | 
| 190 209 | 
             
            ```
         | 
| 191 210 |  | 
| 192 211 |  | 
    
        data/REFERENCE.md
    CHANGED
    
    | @@ -46,7 +46,7 @@ This allows a file (or glob) pattern to be executed in your tests directory, cre | |
| 46 46 |  | 
| 47 47 | 
             
            ### `CUSTOM_INIT_SCRIPT` environment variable
         | 
| 48 48 |  | 
| 49 | 
            -
            If set, testing will execute (using `/bin/sh`) the script referred to by this variable -- relative to the current working directory.  This enables use cases like the GitHub action to install custom library versions (i.e. a version of a library that is different than what the library manager would automatically install by name) prior to CI test runs.
         | 
| 49 | 
            +
            If set, testing will execute (using `/bin/sh`) the script referred to by this variable -- relative to the current working directory (i.e. the root directory of the library).  The script will _run_ in the Arduino Libraries directory (changing to the Libraries directory, running the script, and returning to the individual library root afterward).  This enables use cases like the GitHub action to install custom library versions (i.e. a version of a library that is different than what the library manager would automatically install by name) prior to CI test runs.
         | 
| 50 50 |  | 
| 51 51 |  | 
| 52 52 | 
             
            ### `USE_SUBDIR` environment variable
         | 
| @@ -64,11 +64,6 @@ If set, testing will fail if no unit test files are detected (or if the director | |
| 64 64 | 
             
            If set, testing will fail if no example sketches are detected.  This is to avoid communicating a passing status in cases where a commit may have accidentally moved or deleted the examples.
         | 
| 65 65 |  | 
| 66 66 |  | 
| 67 | 
            -
            ### `SKIP_LIBRARY_PROPERTIES` environment variable
         | 
| 68 | 
            -
             | 
| 69 | 
            -
            If set, testing will skip validating `library.properties` entries.  This is to work around any possible bugs in `arduino_ci`'s interpretation of what is "correct".
         | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 67 | 
             
            ## Indirectly Overriding Build Behavior (medium term use), and Advanced Options
         | 
| 73 68 |  | 
| 74 69 | 
             
            For build behavior that you'd like to persist across commits (e.g. defining the set of platforms to test against, disabling a test that you expect to re-enable at some future point), a special configuration file called `.arduino-ci.yml` can be used.  There are 3 places you can put them:
         | 
    
        data/exe/arduino_ci.rb
    CHANGED
    
    | @@ -9,7 +9,6 @@ VAR_CUSTOM_INIT_SCRIPT = "CUSTOM_INIT_SCRIPT".freeze | |
| 9 9 | 
             
            VAR_USE_SUBDIR         = "USE_SUBDIR".freeze
         | 
| 10 10 | 
             
            VAR_EXPECT_EXAMPLES    = "EXPECT_EXAMPLES".freeze
         | 
| 11 11 | 
             
            VAR_EXPECT_UNITTESTS   = "EXPECT_UNITTESTS".freeze
         | 
| 12 | 
            -
            VAR_SKIP_LIBPROPS      = "SKIP_LIBRARY_PROPERTIES".freeze
         | 
| 13 12 |  | 
| 14 13 | 
             
            @failure_count = 0
         | 
| 15 14 | 
             
            @passfail = proc { |result| result ? "✓" : "✗" }
         | 
| @@ -22,7 +21,6 @@ class Parser | |
| 22 21 | 
             
                output_options = {
         | 
| 23 22 | 
             
                  skip_unittests: false,
         | 
| 24 23 | 
             
                  skip_compilation: false,
         | 
| 25 | 
            -
                  skip_library_properties: false,
         | 
| 26 24 | 
             
                  ci_config: {
         | 
| 27 25 | 
             
                    "unittest" => unit_config
         | 
| 28 26 | 
             
                  },
         | 
| @@ -39,10 +37,6 @@ class Parser | |
| 39 37 | 
             
                    output_options[:skip_compilation] = p
         | 
| 40 38 | 
             
                  end
         | 
| 41 39 |  | 
| 42 | 
            -
                  opts.on("--skip-library-properties", "Don't validate library.properties entries") do |p|
         | 
| 43 | 
            -
                    output_options[:skip_compilation] = p
         | 
| 44 | 
            -
                  end
         | 
| 45 | 
            -
             | 
| 46 40 | 
             
                  opts.on("--testfile-select=GLOB", "Unit test file (or glob) to select") do |p|
         | 
| 47 41 | 
             
                    unit_config["testfiles"] ||= {}
         | 
| 48 42 | 
             
                    unit_config["testfiles"]["select"] ||= []
         | 
| @@ -154,10 +148,32 @@ def inform_multiline(message, &block) | |
| 154 148 | 
             
              perform_action(message, true, nil, nil, false, false, &block)
         | 
| 155 149 | 
             
            end
         | 
| 156 150 |  | 
| 151 | 
            +
            def rule(char)
         | 
| 152 | 
            +
              puts char[0] * WIDTH
         | 
| 153 | 
            +
            end
         | 
| 154 | 
            +
             | 
| 157 155 | 
             
            def warn(message)
         | 
| 158 156 | 
             
              inform("WARNING") { message }
         | 
| 159 157 | 
             
            end
         | 
| 160 158 |  | 
| 159 | 
            +
            def phase(name)
         | 
| 160 | 
            +
              puts
         | 
| 161 | 
            +
              rule("=")
         | 
| 162 | 
            +
              inform("Beginning the next phase of testing") { name }
         | 
| 163 | 
            +
            end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
            def banner
         | 
| 166 | 
            +
              art = [
         | 
| 167 | 
            +
                "         .                  __  ___",
         | 
| 168 | 
            +
                " _, ,_  _| , . * ._   _    /  `  | ",
         | 
| 169 | 
            +
                "(_| [ `(_] (_| | [ ) (_)   \\__. _|_   v#{ArduinoCI::VERSION}",
         | 
| 170 | 
            +
              ]
         | 
| 171 | 
            +
             | 
| 172 | 
            +
              pad = " " * ((WIDTH - art[2].length) / 2)
         | 
| 173 | 
            +
              art.each { |l| puts "#{pad}#{l}" }
         | 
| 174 | 
            +
              puts
         | 
| 175 | 
            +
            end
         | 
| 176 | 
            +
             | 
| 161 177 | 
             
            # Assure that a platform exists and return its definition
         | 
| 162 178 | 
             
            def assured_platform(purpose, name, config)
         | 
| 163 179 | 
             
              platform_definition = config.platform_definition(name)
         | 
| @@ -351,7 +367,7 @@ def choose_platform_set(config, reason, desired_platforms, library_properties) | |
| 351 367 | 
             
                # completely ignore default config, opting for brute-force library matches
         | 
| 352 368 | 
             
                # OTOH, we don't need to assure platforms because we defined them
         | 
| 353 369 | 
             
                return inform_multiline("Default config, platforms matching architectures in library.properties") do
         | 
| 354 | 
            -
                  supported_platforms. | 
| 370 | 
            +
                  supported_platforms.keys.each do |p|  # rubocop:disable Style/HashEachMethods
         | 
| 355 371 | 
             
                    puts "    #{p}"
         | 
| 356 372 | 
             
                  end # this returns supported_platforms
         | 
| 357 373 | 
             
                end
         | 
| @@ -366,34 +382,9 @@ def choose_platform_set(config, reason, desired_platforms, library_properties) | |
| 366 382 | 
             
              end
         | 
| 367 383 | 
             
            end
         | 
| 368 384 |  | 
| 369 | 
            -
            # tests of sane library.properties values
         | 
| 370 | 
            -
            def perform_property_tests(cpp_library)
         | 
| 371 | 
            -
              return inform("Skipping library.properties tests") { "as requested via command line" } if @cli_options[:skip_library_properties]
         | 
| 372 | 
            -
              return inform("Skipping library.properties tests") { "as requested via environment" } unless ENV[VAR_SKIP_LIBPROPS].nil?
         | 
| 373 | 
            -
              return inform("Skipping library.properties tests") { "file not found" } unless cpp_library.library_properties?
         | 
| 374 | 
            -
             | 
| 375 | 
            -
              props = cpp_library.library_properties
         | 
| 376 | 
            -
             | 
| 377 | 
            -
              props.depends&.each do |l|
         | 
| 378 | 
            -
                assure("library.properties 'depends=' entry '#{l}' is available via the library manager") { @backend.library_available?(l) }
         | 
| 379 | 
            -
              end
         | 
| 380 | 
            -
             | 
| 381 | 
            -
              # the IDE would add these entries to a sketch (as "#include <...>" lines), they are nothing to do with the compioler
         | 
| 382 | 
            -
              props.includes&.map(&:strip)&.map(&Pathname::method(:new))&.each do |f|
         | 
| 383 | 
            -
                if (cpp_library.path + f).exist?
         | 
| 384 | 
            -
                  inform("library.properties 'includes=' entry found") { f }
         | 
| 385 | 
            -
                elsif (cpp_library.path + "src" + f).exist?
         | 
| 386 | 
            -
                  inform("library.properties 'includes=' entry found") { Pathname.new("src") + f }
         | 
| 387 | 
            -
                else
         | 
| 388 | 
            -
                  # this is if they want to "#include <math>" or something -- may or may not be valid!  so just warn.
         | 
| 389 | 
            -
                  warn("library.properties 'includes=' entry '#{f}' does not refer to a file in the library")
         | 
| 390 | 
            -
                end
         | 
| 391 | 
            -
              end
         | 
| 392 | 
            -
             | 
| 393 | 
            -
            end
         | 
| 394 | 
            -
             | 
| 395 385 | 
             
            # Unit test procedure
         | 
| 396 386 | 
             
            def perform_unit_tests(cpp_library, file_config)
         | 
| 387 | 
            +
              phase("Unit testing")
         | 
| 397 388 | 
             
              if @cli_options[:skip_unittests]
         | 
| 398 389 | 
             
                inform("Skipping unit tests") { "as requested via command line" }
         | 
| 399 390 | 
             
                return
         | 
| @@ -424,6 +415,7 @@ def perform_unit_tests(cpp_library, file_config) | |
| 424 415 | 
             
              install_arduino_library_dependencies(config.aux_libraries_for_unittest, "<unittest/libraries>")
         | 
| 425 416 |  | 
| 426 417 | 
             
              platforms.each do |p|
         | 
| 418 | 
            +
                puts
         | 
| 427 419 | 
             
                config.allowable_unittest_files(cpp_library.test_files).each do |unittest_path|
         | 
| 428 420 | 
             
                  unittest_name = unittest_path.basename.to_s
         | 
| 429 421 | 
             
                  compilers.each do |gcc_binary|
         | 
| @@ -449,6 +441,7 @@ def perform_unit_tests(cpp_library, file_config) | |
| 449 441 | 
             
            end
         | 
| 450 442 |  | 
| 451 443 | 
             
            def perform_example_compilation_tests(cpp_library, config)
         | 
| 444 | 
            +
              phase("Compilation of example sketches")
         | 
| 452 445 | 
             
              if @cli_options[:skip_compilation]
         | 
| 453 446 | 
             
                inform("Skipping compilation of examples") { "as requested via command line" }
         | 
| 454 447 | 
             
                return
         | 
| @@ -463,23 +456,25 @@ def perform_example_compilation_tests(cpp_library, config) | |
| 463 456 |  | 
| 464 457 | 
             
              library_examples.each do |example_path|
         | 
| 465 458 | 
             
                example_name = File.basename(example_path)
         | 
| 459 | 
            +
                puts
         | 
| 460 | 
            +
                inform("Discovered example sketch") { example_name }
         | 
| 461 | 
            +
             | 
| 466 462 | 
             
                ovr_config = config.from_example(example_path)
         | 
| 467 463 | 
             
                platforms = choose_platform_set(ovr_config, "library example", ovr_config.platforms_to_build, cpp_library.library_properties)
         | 
| 468 464 |  | 
| 469 465 | 
             
                if platforms.empty?
         | 
| 470 466 | 
             
                  explain_and_exercise_envvar(VAR_EXPECT_EXAMPLES, "examples compilation", "platforms and architectures") do
         | 
| 471 | 
            -
                    puts "    Configured platforms: #{ | 
| 472 | 
            -
                    puts "    Configuration is default: #{ | 
| 467 | 
            +
                    puts "    Configured platforms: #{ovr_config.platforms_to_build}"
         | 
| 468 | 
            +
                    puts "    Configuration is default: #{ovr_config.is_default}"
         | 
| 473 469 | 
             
                    arches = cpp_library.library_properties.nil? ? nil : cpp_library.library_properties.architectures
         | 
| 474 470 | 
             
                    puts "    Architectures in library.properties: #{arches}"
         | 
| 475 471 | 
             
                  end
         | 
| 476 472 | 
             
                end
         | 
| 477 473 |  | 
| 478 474 | 
             
                install_all_packages(platforms, ovr_config)
         | 
| 475 | 
            +
                install_arduino_library_dependencies(ovr_config.aux_libraries_for_build, "<compile/libraries>")
         | 
| 479 476 |  | 
| 480 477 | 
             
                platforms.each do |p|
         | 
| 481 | 
            -
                  install_arduino_library_dependencies(ovr_config.aux_libraries_for_build, "<compile/libraries>")
         | 
| 482 | 
            -
             | 
| 483 478 | 
             
                  board = ovr_config.platform_info[p][:board]
         | 
| 484 479 | 
             
                  attempt("Compiling #{example_name} for #{board}") do
         | 
| 485 480 | 
             
                    ret = @backend.compile_sketch(example_path, board)
         | 
| @@ -494,10 +489,18 @@ def perform_example_compilation_tests(cpp_library, config) | |
| 494 489 | 
             
              end
         | 
| 495 490 | 
             
            end
         | 
| 496 491 |  | 
| 492 | 
            +
            banner
         | 
| 493 | 
            +
            inform("Host OS") { ArduinoCI::Host.os }
         | 
| 494 | 
            +
             | 
| 497 495 | 
             
            # initialize command and config
         | 
| 498 496 | 
             
            config = ArduinoCI::CIConfig.default.from_project_library
         | 
| 499 497 | 
             
            @backend = ArduinoCI::ArduinoInstallation.autolocate!
         | 
| 500 498 | 
             
            inform("Located arduino-cli binary") { @backend.binary_path.to_s }
         | 
| 499 | 
            +
            if @backend.lib_dir.exist?
         | 
| 500 | 
            +
              inform("Found libraries directory") { @backend.lib_dir }
         | 
| 501 | 
            +
            else
         | 
| 502 | 
            +
              assure("Creating libraries directory") { @backend.lib_dir.mkpath || true }
         | 
| 503 | 
            +
            end
         | 
| 501 504 |  | 
| 502 505 | 
             
            # run any library init scripts from the library itself.
         | 
| 503 506 | 
             
            perform_custom_initialization(config)
         | 
| @@ -524,8 +527,6 @@ else | |
| 524 527 | 
             
              end
         | 
| 525 528 | 
             
            end
         | 
| 526 529 |  | 
| 527 | 
            -
            perform_property_tests(cpp_library)
         | 
| 528 | 
            -
             | 
| 529 530 | 
             
            install_arduino_library_dependencies(
         | 
| 530 531 | 
             
              cpp_library.arduino_library_dependencies,
         | 
| 531 532 | 
             
              "<#{ArduinoCI::CppLibrary::LIBRARY_PROPERTIES_FILE}>"
         | 
    
        data/lib/arduino_ci/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: arduino_ci
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ian Katz
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-01- | 
| 11 | 
            +
            date: 2021-01-14 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: os
         |