Как выполнять манипуляции со строками при объявлении переменных env в действиях GitHub

У меня есть репозиторий github, подобный следующему

johndoe/ привет-мир

Я пытаюсь установить следующие переменные среды в действиях github

env:
  DOCKER_HUB_USERID: ${{ github.actor }}
  REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}
  IMAGE_NAME_CLIENT: "$REPOSITORY_NAME-client"
  IMAGE_NAME_SERVER: "$REPOSITORY_NAME-server"

Мои ожидаемые результаты для этих переменных:

johndoe
hello-world
hello-world-client
hello-world-server

Но я получаю

johndoe
${REPOSITORY_NAME#*\/}
$REPOSITORY_NAME-client
$REPOSITORY_NAME-server

Похоже, выражения не оцениваются при объявлении env вары.

Как я могу добиться ожидаемого поведения?

4 ответа

Расширение параметров оболочки невозможно за пределами run шаг.

env:
  REPOSITORY_NAME: ${GITHUB_REPOSITORY#*\/}

Создайте дополнительный шаг для вычисления значения в новой переменной.

      - name: Set env
        run: echo ::set-env name=REPOSITORY_NAME::${GITHUB_REPOSITORY#*\/}
      - name: Test
        run: echo $REPOSITORY_NAME

Или создайте пошаговый вывод.

      - name: Set outputs
        id: vars
        run: echo ::set-output name=repo_name::${GITHUB_REPOSITORY#*\/}
      - name: Test set output
        run: echo ${{ steps.vars.outputs.repo_name }}

После того, как вычисленная переменная среды REPOSITORY_NAME, или пошаговый вывод steps.vars.outputs.repo_name, существует, их можно использовать для установки других подобных переменных.

env:
  IMAGE_NAME_CLIENT: ${{ env.REPOSITORY_NAME }}-server
  IMAGE_NAME_SERVER: ${{ steps.vars.outputs.repo_name }}-server

Github изменил способ установки переменных среды из соображений безопасности, нет необходимости использовать этот способ.

      steps:
  - name: Set the environment variable
    run: echo REPOSITORY_NAME=${GITHUB_REPOSITORY#*\/} >> $GITHUB_ENV

  - name: Use the value
    run: echo $REPOSITORY_NAME # This will output repository name

https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable

Нравится

      IMAGE_NAME_SERVER: "${{ REPOSITORY_NAME }}-server"

Новинка этого месяца, все еще в стадии разработки.

https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/

echo "action_state=yellow" >> $GITHUB_ENV

Я также обнаружил, что такие вещи, как uses:with:ref, не будут использовать расширение ${action_state}, но они будут принимать расширение ${{ env.action_state }} после заполнения.

Другие вопросы по тегам