Передача переменных окружения от одного кубика к другому

В CI/CD SourceCraft вы можете передавать переменные окружения от одного кубика к другому с помощью специальных предопределенных переменных окружения SOURCECRAFT_ENV и SOURCECRAFT_OUTPUT.

SOURCECRAFT_ENV

Переменная, с помощью которой передаются переменные окружения от одного кубика к последующим в виде пар KEY=VALUE. Для записи в переменную используется оператор перенаправления ввода >>.

Значения, записанные в SOURCECRAFT_ENV в одном кубике, передаются последующим кубикам в рамках того же задания.

Пример передачи однострочных значений в SOURCECRAFT_ENV

on:
  push:
    - workflows: [ env-single-line ]

workflows:
  env-single-line:
    tasks:
      - name: env-single-line-task
        cubes:
          - name: input
            script:
              - echo "VER=1.0.1" >> $SOURCECRAFT_ENV  # Запись в переменную
              - echo "VAR1=SOME_VALUE" >> $SOURCECRAFT_ENV  # Запись в переменную
          - name: use-env
            script:
              - echo $VER  # Вывод переменной
              - echo $VAR1  # Вывод переменной

Пример передачи многострочных значений в SOURCECRAFT_ENV

on:
  push:
    - workflows: [ env-multi-line ]

workflows:
  env-multi-line:
    tasks:
      - name: env-multi-line-task
        cubes:
          - name: input
            script:  # Запись многострочного значения в переменную
              - |
                echo "my_var_multiline<<EOF
                line1
                line2
                EOF" >> $SOURCECRAFT_ENV
          - name: use-env
            script:
              - echo $my_var_multiline # Вывод переменной

SOURCECRAFT_OUTPUT

Переменная, с помощью которой от одного кубика к другому передаются пары KEY=VALUE через блок outputs. Для записи в переменную используется оператор перенаправления ввода >>.

Значения, записанные в SOURCECRAFT_OUTPUT в одном кубике, становятся доступными для последующих кубиков в рамках того же задания. Чтобы использовать переданное значение, в последующем кубике нужно обратиться к нему через специальный синтаксис: ${{ cubes.<имя_исходного_кубика>.outputs.<ключ> }}.

Пример передачи однострочных значений в SOURCECRAFT_OUTPUT

on:
  push:
    - workflows: [ output-single-line ]

workflows:
  output-single-line:
    tasks:
      - name: output-single-line-task
        cubes:
          - name: inputcube
            script:
              - echo "outputvar=my-value" >> $SOURCECRAFT_OUTPUT  # Запись в переменную
          - name: outputcube
            env:
              MY_ENV: "${{ cubes.inputcube.outputs.outputvar }}"  # Получение значения

Пример передачи многострочных значений в SOURCECRAFT_OUTPUT

on:
  push:
    - workflows: [ output-multi-line ]

workflows:
  output-multi-line:
    tasks:
      - name: output-multi-line-task
        cubes:
          - name: inputcube
            script:  # Запись многострочного значения в переменную
              - |
                echo "outputvar<<EOF
                line3
                line4
                EOF" >> $SOURCECRAFT_OUTPUT
          - name: outputcube
            env:
              MY_ENV: "${{ cubes.inputcube.outputs.outputvar }}"  # Получение значения