Как мне получить сборку Yocto для доступа к частному репозиторию GitHub при использовании Actions?

#github #yocto #github-actions

#github #yocto #github-действия

Вопрос:

В моем рабочем процессе я могу нормально клонировать репозитории и подмодули, и сборка запускается, но когда запускается рецепт, который извлекается из наших частных репозиториев GitHub, я получаю сообщение об ошибке (все репозитории являются одноранговыми в одной организации). Обратите внимание, что рецепты, которые клонируются из Интернета, работают нормально, и они отлично строятся, когда я клонирую и создаю локально. Просто когда я использую действия GitHub, я получаю следующую ошибку.

 Cloning into bare repository '/home/runner/yocto_cache/downloads/git2/github.com.xxxxx.yyyyy.git'...
fatal: could not read Username for 'https://github.com': No such device or address
  

Рецепт похож…

 SRC_URI = "git://github.com/xxxxx/yyyyy.git;protocol=https;nobranch=1;subpath=<folder>/<folder>;rev=${BUILD_REV}"
  

Рабочий процесс

   build:
    runs-on: ubuntu-latest
    steps:  
    - uses: actions/checkout@v2
      with:
        token: ${{ secrets.REPO_ACCESS }}
        submodules: recursive
    
    - name: Configure Git
      run: |
        git config --unset-all "http.https://github.com/.extraheader"
        git config --add "http.https://github.com/.extraheader" "AUTHORIZATION:  
            Basic $(base64 <<< ${{ secrets.REPO_ACCESS }}:x-oauth-basic)"
               
    - name: Running on VM
      env:
        CC: gcc-9
      run: |
        sudo apt-get install -y diffstat
        gcc --version
        ./yocto-setup.sh
        source ./poky/oe-init-build-env
        bitbake image
  

У меня возникли проблемы с поиском ответов на этот конкретный сбой, и мне интересно, сталкивался ли кто-нибудь с чем-то подобным и может оказать некоторую помощь.

Ответ №1:

Судя по сообщению об ошибке

фатальный: не удалось прочитать имя пользователя для 'https://github.com ': Нет такого устройства или адреса

похоже, что ваш частный репозиторий, расположенный по $SRC_URI адресу, хочет, чтобы клиент Git (используемый внутри BitBake) аутентифицировался, поэтому он запросил учетные данные, которые должны быть предоставлены на вводе терминала. Действия GitHub выполняются в неинтерактивном режиме, поэтому ввод терминала недоступен (отсюда и сообщение об ошибке):

Нет такого устройства или адреса

Чтобы преодолеть это, если вы хотите получить доступ к своему частному репозиторию Git по протоколу HTTP (S) без предоставления учетных данных на вводе терминала, вам необходимо настроить git включение заголовка аутентификации basic access в HTTP-запрос.

Заголовок аутентификации можно настроить с помощью http.extraHeader опции git-config. Вы можете сделать это прямо в своей build работе, просто добавив этот дополнительный шаг перед Running on VM :

 - name: Configure Git
  run: |
    git config --unset-all "http.https://github.com/.extraheader"
    git config --add "http.https://github.com/.extraheader" 
              "AUTHORIZATION: Basic $(base64 <<< ${{ secrets.REPO_ACCESS }}:x-oauth-basic)"
- name: Running on VM
...
  

После добавления вышеуказанного Running on VM шага операция клонирования git должна завершиться успешно.

(Я предполагаю, что предоставленный GitHub REPO_ACCESS secret — это токен доступа, имеющий, по крайней мере, доступ на чтение к частному репозиторию, обозначаемый $SRC_URI символом ).

Вы можете прочитать больше о токенах доступа здесь и здесь .

Комментарии:

1. Все еще сбой. Обновленный оригинал с предлагаемыми обновлениями рабочего процесса

2. Какое сообщение об ошибке появляется после изменений? То же, что описано в вопросе?

3. ДА. Это все еще не выполняется, как описано.