Имя тега с использованием переменных среды

#github #release #github-actions #release-management

Вопрос:

Я хочу создать тег выпуска из рабочего процесса с использованием действий GitHub actions/create-release@v1 . Я указываю одно и то же значение для имени тега и имени выпуска, которые v${MAJOR}.${MINOR}.${PATCH} , где MAJOR , MINOR , и PATCH определены env в начале файла yaml перед всеми заданиями, подобными этому:

 env:
  MAJOR: $(cat VERSION.txt | cut -d . -f 1)
  MINOR: $(cat VERSION.txt | cut -d . -f 2)
  PATCH: $(cat VERSION.txt | cut -d . -f 3)
 

Вот часть, в которой я вызываю действие создать-освободить:

 - name: Create Release
  uses: actions/create-release@v1
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # this token is created by Actions, no need to set it up ourselves
  with:
    tag_name: "v${MAJOR}.${MINOR}.${PATCH}" #THIS DOESN'T CAST MAJOR, MINOR, PATCH
    release_name: "v${MAJOR}.${MINOR}.${PATCH}"
 

Это создает явное имя тега v${MAJOR}.${MINOR}.${PATCH} . Переменные среды не преобразуются в их значения. Когда я использую v${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }} вместо этого, я получаю неправильно сформированное имя тега.

Когда я повторяю v${MAJOR}.${MINOR}.${PATCH} , я получаю желаемый результат, что-то вроде v5.9.1 .

Как я могу заставить имя тега использовать значения переменных среды ?

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

1. Без раздела, в котором вы устанавливаете эти переменные, это просто предположение

2. Я добавил часть, в которой я определяю мажор, минор и патч

3. Вы не можете так настроить параметры env. Ознакомьтесь с документами здесь: docs.github.com/en/actions/reference/…

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

Ответ №1:

Благодаря одному из комментариев мне удалось заставить tag_name получить значение v5.9.1 . Я удалил env ключ в начале файла yaml и создал следующий шаг get_version :

    - name: Get version
      id: get_version
      run:  |
        MAJOR=$(cat VERSION.txt | cut -d . -f 1)
        MINOR=$(cat VERSION.txt | cut -d . -f 2)
        PATCH=$(cat VERSION.txt | cut -d . -f 3)
        VERSION="v${MAJOR}.${MINOR}.${PATCH}"
        echo "::set-output name=version::${VERSION}"
 

затем я изменил шаг создания выпуска :

 - name: Create release
  uses: actions/create-release@v1
  env:
     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  tag_name: ${{ needs.get_version.outputs.version }} 
  release_name: ${{ needs.get_version.outputs.version }}
   draft: false
   prerelease: false