Skip to content

Latest commit

 

History

History
217 lines (169 loc) · 6.38 KB

circleci.rst

File metadata and controls

217 lines (169 loc) · 6.38 KB

CircleCI

CircleCI is a hosted cloud platform that provides hosted continuous integration, deployment, and testing to GitHub repositories.

CircleCI is configured by adding a file named circle.yml, which is a YAML format text file, to the root directory of the GitHub repository.

CircleCI automatically detects when a commit has been made and pushed to a repository that is using CircleCI, and each time this happens, it will try to build the project using :ref:`cmd_ci` command. This includes commits to all branches, not just to the master branch. CircleCI will also build and run pull requests. When that process has completed, it will notify a developer in the way it has been configured to do so — for example, by sending an email containing the build results (showing success or failure), or by posting a message on an IRC channel. It can be configured to build project on a range of different :ref:`platforms`.

Note

Please make sure to read CircleCI Getting Started guide first.

There are two possible ways of running PlatformIO in CI services:

This variant is default choice for native PlatformIO projects:

version: 2.1
orbs:
  python: circleci/python@1.4.0

jobs:
  build:
    executor: python/default
    steps:
      - checkout  # checkout source code to working directory
      - run:
          name: Install PlatformIO
          command: pip install --upgrade platformio
      - run:
          name: Compile Project
          command: pio run

workflows:
  main:
    jobs:
      - build

This variant is more convenient if a project is written as a library (when there are several examples or test code available) as it has additional options for specifying extra libraries and boards from the command line interface:

version: 2.1
orbs:
  python: circleci/python@1.4.0

jobs:
  build:
    parameters:
      ci_src:
        type: string
    executor: python/default
    environment:
      PLATFORMIO_CI_SRC: << parameters.ci_src >>
    steps:
      - checkout
      - run:
          name: Install PlatformIO
          command: pip install -U platformio
      - run:
          name: Compile << parameters.ci_src >>
          command: pio ci --board=<ID_1> --board=<ID_2> --board=<ID_N>

workflows:
  main:
    jobs:
      - build:
          matrix:
            parameters:
              ci_src: ["path/to/test/file.c", "examples/file.ino", "path/to/test/directory"]

There 2 options to test source code with dependent libraries:

- run:
  name: Install library
  command: pio lib -g install 1
- run:
    name: Install library
    command: |
      wget https://github.com/PaulStoffregen/OneWire/archive/master.zip -O /tmp/onewire_source.zip
      unzip /tmp/onewire_source.zip -d /tmp/
- run:
    name: Compile project
    command: pio ci --lib="/tmp/OneWire-master" --board=<ID_1> --board=<ID_2> --board=<ID_N>

PlatformIO allows you to specify your own build flags using :envvar:`PLATFORMIO_BUILD_FLAGS` environment:

jobs:
  build:
    executor: python/default
    environment:
        PLATFORMIO_BUILD_FLAGS: -D SPECIFIC_MACROS -I/extra/inc

For the more details, please follow to :ref:`available build flags/options <projectconf_build_flags>`.

PlatformIO allows you to configure multiple build environments for the single source code using :ref:`projectconf`.

Instead of --board, please use the --project-conf option:

- run:
    name: Compile project
    command: pio ci /path/to/test/file.c --project-conf=/path/to/platoformio.ini

Integration for USB_Host_Shield_2.0 project. The config.yml configuration file:

version: 2.1
orbs:
  python: circleci/python@1.4.0
jobs:
  build:
    parameters:
      example:
        type: string
    executor: python/default
    environment:
          PLATFORMIO_CI_SRC: << parameters.example >>
    steps:
      - checkout  # checkout source code to working directory
      - save_cache:
          # Cache PlatformIO packages for current project
          key: deps9-{{ .Branch }}-{{ arch }}
          paths:
            - "~/.platformio"
      - run:
          name: Install dependencies
          command: |
            pip install --upgrade platformio
            wget https://github.com/xxxajk/spi4teensy3/archive/master.zip -O /tmp/spi4teensy3.zip
            unzip /tmp/spi4teensy3.zip -d /tmp
      - run:
          name: Run PlatformIO
          command: pio ci --lib="." --lib="/tmp/spi4teensy3-master" --board=uno --board=teensy31 --board=due
workflows:
  main:
    jobs:
      - build:
          matrix:
            parameters:
              example:
                - examples/Bluetooth/PS3SPP/PS3SPP.ino
                - examples/pl2303/pl2303_gps/pl2303_gps.ino