Отобразить переменную среды в действиях Github - PullRequest
2 голосов
/ 14 февраля 2020

Я создал задание действий GitHub с матрицей стратегии, которая создает набор переменных среды. Одним из них является machine_architecture, что равно 32 или 64.

В большинстве шагов я могу использовать его напрямую, т.е. через ${{ machine_architecture }}. Но для некоторых шагов требуются строки типа «i386» против «x86_64». Есть ли простой способ в действиях GitHub создать объект карты, который я могу использовать в выражениях, таких как:

map_object = { 32: "i386", 64: 'x86_64' }
...
${{ map_object[machine_architecture] }}

Если нет, как идиоматический c способ действия GitHub для решения этой проблемы?

PS: я знаю, что могу установить переменные окружения на шагах , но проблема в том, что эти переменные доступны только для следующих шагов (т.е. не для использования в "run" -on: "tag"

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Вот способ сделать это с JSON и jq. Создается шаговый вывод ${{ steps.vars.outputs.arch }}, который можно использовать в последующих шагах.

jobs:
  varMap:
    strategy:
      matrix:
        machine_architecture: [32, 64]
    runs-on: ubuntu-latest
    steps:
      - name: Set arch var
        id: vars
        run: |
          echo ::set-output name=arch::\
          $(echo '{ "32": "i386", "64": "x86_64" }' | jq -r 'to_entries[] | select(.key=="${{ matrix.machine_architecture }}") | .value')

      - name: Test arch var
        run: echo "Testing ${{ steps.vars.outputs.arch }}"
0 голосов
/ 14 февраля 2020

Как насчет вашего "map_object" на самом деле представляет собой отображение файла machine_architecture значений на нужные вам значения, например:

32=i386
64=x86_64

или любой другой формат, который вы хотите сохранить.

Затем ваша работа может определить ее во вторичной переменной как:

jobs:
  FirstJob:
    name: job 1
    runs-on: .....
    steps:
      - uses: ....
      - name: Define variables
        run: |
          cat $(cat MAP_OBJECT_FILE_NAME) | grep $(cat machine_architecture)= | > MACHINE_ARCHITECTURE_STRING

С этого момента у вас будет переменная MACHINE_ARCHITECTURE_STRING, доступная для необходимых вам работ. Конечно, вы можете сделать это гораздо проще, объединяя или что-то еще, но здесь вы поддерживаете отображение в своем коде с помощью файла отображения и его можно расширять.

...