Search code examples
dockergithub-actionsesp32esp-idf

ESP-IDF Github Actions: docker: command not found Error: Process completed with exit code 127


I'm building my first CI for GitHub Action and I have problem with building the code.

name: Build

on: [push, pull_request, workflow_dispatch]

jobs:
  build-esp-idf-component:
    name: Build with ESP-IDF ${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # The version names here correspond to the versions of espressif/idf Docker image.
        # See https://hub.docker.com/r/espressif/idf/tags and
        # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
        # for details.
        idf_ver: ["v4.4.4", "release-v4.4"]
        idf_target: ["esp32"]
    container: espressif/idf:${{ matrix.idf_ver }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          submodules: 'recursive'
      - name: esp-idf build
        uses: espressif/esp-idf-ci-action@v1
        with:
            esp_idf_version: ${{ matrix.idf_ver }}
            target: ${{ matrix.idf_target }}
            path: 'main'

as an output from logs I receive:

Run espressif/esp-idf-ci-action@v1
  with:
    esp_idf_version: v4.4.4
    target: esp32
    path: main
    command: idf.py build
Run export IDF_TARGET=$(echo "esp32" | tr '[:upper:]' '[:lower:]' | tr -d '_-')
  export IDF_TARGET=$(echo "esp32" | tr '[:upper:]' '[:lower:]' | tr -d '_-')
  docker run -t -e IDF_TARGET="${IDF_TARGET}" -v "${GITHUB_WORKSPACE}:/app/NightSkySK/mSpaceLock-device" \
  -w "/app/NightSkySK/mSpaceLock-device/main" espressif/idf:v4.4.4 \
  /bin/bash -c 'git config --global --add safe.directory "*" && idf.py build'
  shell: bash --noprofile --norc -e -o pipefail {0}
/__w/_temp/43fd574a-8b69-4abc-8986-5b3b2e88aca5.sh: line 2: docker: command not found
Error: Process completed with exit code 127.

What I did wrong? The same output I got on `release-v4.4'


Solution

  • I found what was wrong with my github action yaml script, error was result of merging few different files which I wanted combine to match my needs, once I didn't fully understand how it works. So the problem was at line container: espressif/idf:${{ matrix.idf_ver }} which shouldn't be there as it caused that following steps was executed in idf container already. For long time I couldn't understand why there is docker command to be executed by espressif/esp-idf-ci-action@v1. It was intuitive for me that checkout should be executed in idf environment. Once I finally understood that checkout is going to be passed to espressif/esp-idf-ci-action@v1 and only than docker image need to be run than fixing the yaml code become easy task. I will leave my experience here, may be someone will face same issue as me.

    Here is the yaml code for github action which is finally working for me:

    # This is a basic workflow that is manually triggered
    
    name:  Build and Publish Application
    
    # Controls when the action will run. Workflow runs when manually triggered using the UI
    # or API.
    on:
      push:
      pull_request:
        branches: [main]
      workflow_dispatch:
        # Inputs the workflow accepts.
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      build:
        strategy:
          fail-fast: false
          matrix:
            # The version names here correspond to the versions of espressif/idf Docker image.
            # See https://hub.docker.com/r/espressif/idf/tags and
            # https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-docker-image.html
            # for details.
            idf_ver: ["release-v4.3", "release-v4.4"]
            idf_target: ["esp32"]
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repo
            uses: actions/checkout@v3
            with:
              submodules: 'recursive'
          - name: Build Application
            uses: espressif/esp-idf-ci-action@v1
            with:
              esp_idf_version: ${{ matrix.idf_ver }}
              target: ${{ matrix.idf_target }}
          - name: Rename artifact
            run: |
              ls -lah 
              cp build/bootloader/bootloader.bin bootloader-${{ matrix.idf_ver }}.bin
              cp build/partition_table/partition-table.bin partition-table-${{ matrix.idf_ver }}.bin
              cp build/mspacelock.bin mspacelock-${{ matrix.idf_ver }}.bin
              cp build/ota_data_initial.bin ota_data_initial-${{ matrix.idf_ver }}.bin
    
          - name: Upload
            uses: actions/upload-artifact@v3
            with:
              name: mSpaceLock_${{ matrix.idf_target }}_${{ matrix.idf_ver }}
              path: "*-${{ matrix.idf_ver }}.bin"
    
      release:
        needs: build
        runs-on: ubuntu-latest
        steps:
        - name: Download Firmware Files
          uses: actions/download-artifact@v3
          with:
            path: build