Огляд контекстів і виразів у GitHub
Контексти – це спосіб доступу до інформації про запуски робочих циклів, змінні, середовища бігунів, завдання та кроки. Кожен контекст – це об'єкт, який містить властивості, які можуть бути рядками або іншими об'єктами.
Ви можете отримати доступ до контекстів, використовуючи синтаксис виразу. Вираз може бути будь-яким поєднанням літеральних значень, посилань на контекст або функцій. За допомогою операторів можна об'єднувати літерали, контекстні посилання та функції.
Контекстах
Створюючи робочі цикли та дії, слід завжди враховувати, чи може ваш код виконувати ненадійний ввід від можливих зловмисників. Певні контексти слід розглядати як ненадійний ввід, оскільки зловмисник може вставляти власний зловмисний вміст. Щоб отримати додаткові відомості, відвідайте загартування системи безпеки для дій GitHub."
У таблиці нижче наведено приклади контекстів, доступних у GitHub, це не повний перелік.
| Ім'я контексту | Тип | Опис |
|---|---|---|
github |
object |
Відомості про запуск робочого циклу. |
env |
object |
Містить змінні, набори в робочому циклі, роботі або кроці. |
vars |
object |
Містить змінні, встановлені на рівні сховища, організації або середовища. |
job |
object |
Відомості про поточне поточне завдання. |
Кінчик
Повний перелік контекстів див. в статті Про контексти.
Визначення використання контекстів
Дії GitHub включають дві колекції змінних, які називаються стандартними змінними, і контексти. Ці змінні призначені для використання в різних точках робочого циклу:
- Змінні середовища за промовчанням: ці змінні середовища існують лише для бігуна, який виконує завдання.
- Контексти. Більшість контекстів можна використовувати в будь-який момент робочого циклу, зокрема коли стандартні змінні будуть недоступні.
У наведеному нижче прикладі інструкція if перевіряє контекст github.ref, щоб визначити поточне ім'я гілки. Перевірка if обробляється, і завдання надсилається бігуну, лише якщо результат true. Коли завдання буде надіслано бігуну, він виконується та посилається на змінну $GITHUB_REF від бігуна.
name: CI
on: push
jobs:
prod-check:
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
Контексти, доступні в діях GitHub
У таблиці нижче наведено доступні контексти верхнього рівня, короткий опис і посилання на додаткові відомості про властивості об'єкта.
| Контекст верхнього рівня | Опис | Властивості та приклади |
|---|---|---|
github |
Контекст верхнього рівня, доступний під час будь-якого завдання або кроку робочого циклу. |
властивості контексту github. |
env |
Містить змінні, набори в робочому циклі, роботі або кроці. Вона не містить змінних, успадкованих процесом бігуна. |
властивості контексту env. |
vars |
Містить настроювані змінні конфігурації, установлені на рівні організації, сховища та середовища. |
приклади використання vars. |
job |
Містить відомості про поточне поточне завдання. |
властивості контексту job. |
jobs |
Доступні лише в робочих циклах, які можна використовувати для повторного використання, і їх можна використовувати лише для настроювання вихідних даних для робочого циклу для повторного використання. |
властивості контексту jobs. |
steps |
Містить відомості про виконані кроки в поточному робочому місці, у якому вказано id. |
властивості контексту steps. |
runner |
Містить відомості про бігуна, який виконує поточне завдання. |
властивості контексту runner. |
secrets |
Містить імена та значення секретів, доступних для запуску робочого циклу. |
властивості контексту secrets. |
strategy |
Містить відомості про стратегію виконання матриці для поточного завдання. |
властивості контексту strategy. |
matrix |
Містить властивості матриці, визначені у файлі робочого циклу, який застосовується до поточного завдання. |
властивості контексту matrix. |
needs |
Містить результати з усіх завдань, визначених як пряма залежність поточного завдання. |
властивості контексту matrix. |
inputs |
Містить властивості вводу, передані до дії, робочого циклу для повторного використання або до робочого циклу, що запускається вручну. |
властивості контексту inputs. |
Вирази
Вирази можна використовувати для програмного встановлення змінних середовища у файлах робочих циклів і контекстах доступу. Вираз може бути будь-яким поєднанням літеральних значень, посилань на контекст або функцій. За допомогою операторів можна об'єднувати літерали, контекстні посилання та функції.
Вирази зазвичай використовуються з ключовим словом умовного if у файлі робочого циклу, щоб визначити, чи слід виконувати крок. Коли умовне iftrue, виконується крок.
Потрібно використовувати певний синтаксис, ${{ <expression> }}, щоб повідомити GitHub обчислити вираз, а не розглядати його як рядок. Винятком цього правила є використання виразів у реченні if, де їх зазвичай можна пропустити ${{ та }}.
У наведеному нижче прикладі коду показано, як настроїти змінну середовища.
env:
MY_ENV_VAR: ${{ <expression> }}
Літерали
У виразі можна використовувати типи даних boolean, null, numberабо string. У умовних, помилкових значеннях (false, 0, -0, "", '', null) примушуються до false, а істина (true та інші нефальсивні значення) примушуються до true. Нижче наведено приклади реалізації літералів.
env:
myNull: ${{ null }}
myBoolean: ${{ false }}
myIntegerNumber: ${{ 711 }}
myFloatNumber: ${{ -9.2 }}
myHexNumber: ${{ 0xff }}
myExponentialNumber: ${{ -2.99e-2 }}
myString: Mona the Octocat
myStringInBraces: ${{ 'It''s open source!' }}
Операторів
Оператори відіграють важливу роль в оцінці виразів. Вираз може складатися з літеральних значень, посилань на контексти або функції. Оператори дають змогу об'єднувати ці елементи, щоб створювати складніші вирази. Нижче наведено кілька ключових операторів.
логічних операторів:
-
&&(і): об'єднує дві умови, обидві з яких мають бути істинними для загального виразу, щоб обчислити значення true. -
||(або): об'єднує дві умови, а вираз повертає значення true, якщо будь-яка умова істинна. -
!(ні): зводить нанівець умову, перевертаючи її значення істини.
-
операторів рівності:
-
==(дорівнює): порівнює два значення для рівності. -
!=(не дорівнює): перевіряє, чи не дорівнює два значення.
-
операторів порівняння:
-
<(менше) -
>(більше) -
<=(менше або дорівнює) -
>=(більше або дорівнює)
-
Ці оператори дають змогу створювати динамічні робочі цикли, визначаючи, коли певні кроки мають виконуватися на основі умов. Не забудьте використовувати правильний синтаксис для виразів, наприклад $\{\{ <expression> \}\}$, для належного оцінювання.