Выпуск Github Actions в другие репо - PullRequest
0 голосов
/ 25 апреля 2020

В настоящее время у меня есть следующий код:

name: Build-All

    on: 
      push:
        branches: [ master ]
      pull_request:
        branches: [ master ]

    jobs:    
      build-linux-64:
        name: ${{ matrix.config.name }} Build
        runs-on: ${{ matrix.config.os }}
        strategy:
          fail-fast: true
          matrix:
            config:
              - os: ubuntu-latest
                name: Ubuntu 64
                other_linker_flags: '-m64'
                arch: x86_64
                output: myLib.so

        steps:
        - name: Make fake file
          run: |
            echo "hello" > ${{ github.workspace }}/test.txt

        - name: Uploading Release
          uses: ollydev/upload-release-action@master
          with:
            repo_token: XXXXXXXXX
            file: '${{ github.workspace }}/test.txt'
            asset_name: "test"
            tag: autobuild
            owner: '${{ github.repo.owner }}'
            repo: 'B'
            overwrite: true

и два репо: A и B.

Репо A имеет указанные выше задания yml и является частным репо. Он имеет весь код, скомпилирует его и хочет опубликовать sh релиз для репо B, который опубликован c.

. Для этого я создал новую учетную запись github My-CI и добавил это как для частного репо, так и для публичного репо c. На этой новой учетной записи я затем создал Personal access token с областью действия: public_repo

и все. Код работает ... но есть ли способ НЕ создавать отдельную учетную запись только для того, чтобы предоставить ей доступ в качестве CI для обоих репо? IE: Есть ли способ, с помощью которого я могу создать токен для моей реальной учетной записи, который предназначен только для чтения для одного репо и для чтения-записи для другого? ИЛИ может, создать токен приложения GitHub или что-то, что может загружать релизы только для одного репо (B)?

1 Ответ

0 голосов
/ 30 апреля 2020

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

Intermediate, publi c storage

Первый - это загрузить артефакты в промежуточное место, доступное из любого места, например Dropbox, Docker Hub, et c. Затем вы можете вручную запустить действие github в своем репозитории publi c, чтобы вернуть этот артефакт обратно и создать из него релиз. Чтобы вручную запустить это действие, вы можете использовать событие repository_dispatch либо локально используя cURL / postman (с носителем авторизации токена доступа), либо используя что-то вроде https://www.actionspanel.app/, которое представляет собой приложение github, которое позволяет вам вручную запускать действия github, используя repository_dispatch, с параметрами, чтобы ваша ссылка для скачивания была параметром.

Личный токен доступа

Самым простым вариантом остается персональный токен доступа, хотя , Ваш рабочий процесс выше repo_token: XXXXXXXXX, который заставляет меня задуматься, знаете ли вы о секретах github? В идеале этот токен должен храниться в секрете, а затем вызываться с помощью ${{ secrets.BRANDONS_TOKEN }}. Я хотел бы спросить, почему вы беспокоитесь о личном маркере доступа. Если вы используете секреты github и внимательно относитесь к стороннему коду, которому вы передаете токен (например, вы можете не захотеть просто передавать свой токен на @master), все будет в порядке.

GitHub Apps & Webhooks

GitHub приложения или веб-хуки - это другой способ, вы можете аутентифицировать их для каждого человека и для каждого репо, но вам нужно приложение, работающее онлайн, чтобы получать и парсинг сообщений и его довольно большой труд. используйте их для получения доступа на чтение / запись к одному репозиторию без присоединенной учетной записи Затем этот ключ развертывания будет храниться в секрете в настройках другого репо. Однако я не уверен, что вы можете запускать выпуски с помощью ключей развертывания - они не привязаны к учетной записи, поэтому я не уверен, чье имя пользователя будет отображаться в истории выпусков.

...