Действия GitHub - пустые секреты env - PullRequest
2 голосов
/ 06 ноября 2019

Я начал играть с действиями GitHub, но мне сложно получить доступ к секретам репозитория, которые я передаю как env.

Мой файл рабочего процесса:

name: Invite

on: 
  pull_request:
    branches: [master]
    types: [closed]
jobs:
  invite:
    runs-on: ubuntu-latest
    steps:
      - name: Hello world action
        uses: lekterable/inclusive-organization-action@master
        env:
          SECRET_TOKEN: ${{ secrets.SECRET_TOKEN }}
          organization: string
          SUPER_SECRET: ${{ secrets.SUPER_SECRET }}

файл индекса действия

const core = require('@actions/core')
const github = require('@actions/github')

const run = async () => {
  try {
    ...
    console.log('env', process.env)
    const token = process.env.SECRET_TOKEN
    const secret = process.env.SUPER_SECRET
    const organization = process.env.organization
    console.log('organization', organization)
    console.log('token?', !!token)
    console.log('secret?', !!secret)
    console.log('token length', token.length)
    ...
  } catch (error) {
    core.setFailed(error.message)
  }
}

run()

как вы видите, я передаю 3 env, организация со значением 'string' существует, как и ожидалось, но SECRET_TOKEN и SUPER_SECRET пусты.

enter image description here

И да, у меня есть секреты, установленные в репо, который выполняет действие:

enter image description here

Isесть что-то, что я делаю не так?

1 Ответ

1 голос
/ 07 ноября 2019

Причина такого поведения заключается в том, что рабочий процесс Invite запускается по запросу извлечения из разветвленного хранилища.

За исключением GITHUB_TOKEN, секреты не передаются вСредство запуска, когда рабочий процесс запускается из разветвленного репозитория.

Когда это происходит, actor рабочего процесса - это пользователь, который открыл запрос на извлечение. Если у этого пользователя нет прав на запись в ваш репозиторий, он не может использовать секреты (кроме GITHUB_TOKEN).

Любой, имеющий доступ на запись в репозиторий, может создавать, читать и использовать секреты.

ref: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets#using-encrypted-secrets-in-a-workflow

Если вы выполните этот шаг в своем рабочем процессе, вы увидите, что он не имеет никакого отношения к вашему действию. Секрет TEST_SECRET также не будет доступен в рабочем процессе.

      - name: Test
        env:
          TEST_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TEST_SECRET: ${{ secrets.TEST_SECRET }}
        run: |
          echo ${#TEST_GITHUB_TOKEN}
          echo ${#TEST_SECRET}

Test secrets on pull requests from forks

Проверяя данные события в контексте GitHub, вы будетеобратите внимание, что actor - это пользователь, который разветвил хранилище и открыл запрос на извлечение.

      - name: Dump GitHub context
        env:
          GITHUB_CONTEXT: ${{ toJson(github) }}
        run: echo "$GITHUB_CONTEXT"

Это другая, но связанная проблема , на которую ответил сотрудник GitHub, и объяснил, чтоэти ограничения для разветвленных репозиториев существуют для «предотвращения действий злоумышленников с целью отравления репозиториев верхнего или нижнего уровня».

...