# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/configuration-reference
version: 2.1
parameters:
  run_build:
    type: boolean
    default: false
  environment:
    type: string
    default: "m5stack-atom"
  build_flags:
    type: string
    default: ""
  config:
    type: string
    default: "{}"
  suffix:
    type: string
    default: ""
orbs:
  python: circleci/python@1.4.0

# Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/configuration-reference/#jobs
jobs:
  pio-build:
    executor: python/default
    # Add steps to the job
    # See: https://circleci.com/docs/configuration-reference/#steps
    environment:
      PLATFORMIO_BUILD_FLAGS: << pipeline.parameters.build_flags >>
    steps:
      - checkout
      - run:
          name: "platformio install"
          command: "pip install --upgrade platformio"
      - run:
          name: "build"
          command: "pio run -e << pipeline.parameters.environment >>"
      - run:
          name: "save config"
          working_directory: ".pio/build/<< pipeline.parameters.environment >>"
          command: "echo '<< pipeline.parameters.config >>' > config.json"
      - run:
          name: "save build config"
          working_directory: ".pio/build/<< pipeline.parameters.environment >>"
          command: "echo 'GIT_SHA=\"<< pipeline.git.revision >>\" PLATFORMIO_BUILD_FLAGS=\"<< pipeline.parameters.build_flags >>\" pio run -e << pipeline.parameters.environment >> ' > buildconfig.txt"
      - run:
          name: "rename"
          working_directory: ".pio/build/<< pipeline.parameters.environment >>"
          command: "mv firmware.bin << pipeline.parameters.environment >><< pipeline.parameters.suffix >>-update.bin"
      - when:
          condition: 
            not: 
              equal: [ << pipeline.parameters.suffix >> ,""]
          steps:
            - run:
                name: "rename2"
                working_directory: ".pio/build/<< pipeline.parameters.environment >>"
                command: "mv << pipeline.parameters.environment >>-all.bin << pipeline.parameters.environment >><< pipeline.parameters.suffix >>-all.bin"
      - run:
          name: "compress"
          working_directory: ".pio/build/<< pipeline.parameters.environment >>"
          command: "zip << pipeline.parameters.environment >><< pipeline.parameters.suffix >>.zip << pipeline.parameters.environment >>*.bin config.json buildconfig.txt"
      - store_artifacts:
          path: .pio/build/<< pipeline.parameters.environment >>/<< pipeline.parameters.environment >><< pipeline.parameters.suffix >>.zip
          destination: << pipeline.parameters.environment >><< pipeline.parameters.suffix >>.zip
# Orchestrate jobs using workflows
# See: https://circleci.com/docs/configuration-reference/#workflows
workflows:
  build-workflow:
    when: << pipeline.parameters.run_build >>
    jobs:
      - pio-build:
          filters:
            tags:
             only: /.*/
