Я использую Cypress.io для своих автоматических тестов и запускаю его в CI/D с помощью Действия на гитхабе. Файл конфигурации cypress.json имеет вложенные env значения, например:
{
"baseUrl": "<url-to-login>",
"env": {
"roles": {
"admin": {
"PASSWORD": "<password>",
"USERNAME": "<username>"
},
"employee": {
"PASSWORD": "<password>",
"USERNAME": "<username>"
},
"client": {
"PASSWORD": "<password>",
"USERNAME": "<username>"
}
}
}
}
К сожалению, Cypress не может получить доступ к глубоким переменным env поэтому я создаю конфиг cypress.json вот так:
name: Cypress Tests
on: [push]
jobs:
cypress-run:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
# creates cypress.json file to run Cypress
- name: Create Cypress config files
run: |
echo '{ "baseUrl": "${{ secrets.BASE_URL }}", "env": { "roles": { "admin": { "PASSWORD": "${{ secrets.PASSWORD }}", "USERNAME": "${{ secrets.USERNAME }}" } } } }' > cypress.json
- name: Cypress run
uses: cypress-io/github-action@v2
with:
build: yarn run
start: yarn cypress:run
wait-on-timeout: 120
browser: chrome
Это не работает, но я жестко запрограммировал значения, которые работали так:
run: |
echo '{ "baseUrl": "<hardcoded-redacted-value>", "env": { "roles": { "admin": { "PASSWORD": "<hardcoded-redacted-value>", "USERNAME": "<hardcoded-redacted-value>" } } } }' > cypress.json
Итак, мой вопрос: как передать секрет в файле json?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы обнаружите, что это было исправлено проверить наличие неопределенных значений в функции setPluginResolvedOn #7960
const roles = Cypress.env('roles')
expect(roles.client.PASSWORD).to.eq('<password>') // ✅ passes
Я решил эту проблему, сохранив все содержимое файла конфигурации cypress.json как Зашифрованный секрет репозитория GitHub. Затем я использовал create-json Действия на GitHub для создания cypress.json, необходимого для запуска Кипарис на CI/CD. Это окончательный .github/workflows/main.yml файл:
name: Cypress Tests
on: [push]
jobs:
cypress-run:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: create-json
id: create-json
uses: jsdaniell/[email protected]
with:
name: "cypress.json"
json: ${{ secrets.CYPRESS_CONFIG_JSON }}
- name: Cypress run
uses: cypress-io/github-action@v2
with:
build: yarn run
start: yarn cypress:run
wait-on-timeout: 120
browser: chrome
Итак, тогда ничего общего с глубоко вложенными переменными env?