Как заменить ключ API секретом в коде во время Github Actions Job? - PullRequest
0 голосов
/ 02 апреля 2020

Я обычно скрываю свой ключ API в файле XML и использую .gitignore вместе с getString() для получения моего ключа API.

Я пытаюсь использовать Github Actions для автоматизации сборки Gradle и выпуска отладочных apk. Из-за того, что файл XML не загружен в репозиторий, он явно не работает.

Есть ли способ сохранить мой ключ в Github Secrets, а затем заменить код секретом?

Текущий код: headers["token"]= getString(R.string.token)
Замененный код на сервере действий Github: headers["token"]="MY_API_KEY_FROM_SECRETS"

Вот мой файл YAML, который я использовал:

name: Gradle build test and release
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
   #I'd like to replace the api key here in code from secrets
    - name: Make Gradle executable
      run: chmod +x ./gradlew
    - name: Build with Gradle
      run: ./gradlew build
    - name: Build Debug APK
      run: ./gradlew assembleDebug
    - name: Releasing using Hub
      uses: ShaunLWM/action-release-debugapk@master
      env:
       GITHUB_TOKEN: ${{ secrets.TOKEN }}
       APP_FOLDER: app
       RELEASE_TITLE: New Build
       BODY: github.event.head_commit.message
       prerelease: true

1 Ответ

1 голос
/ 03 апреля 2020

Конечно, это возможно. Вы не сказали, какой файл вы хотите изменить, но это должно быть достаточно легко сделать с однострочником (заменив FILENAME на имя вашего файла конфигурации):

- run: perl -pi -e 's/getString\(R\.string\.token\)/"$ENV{TOKEN}"/' FILENAME
  env:
    TOKEN: ${{ secrets.TOKEN }}

Если вы предпочитаете Ruby или другой язык сценариев, вы можете использовать его вместо этого. Вы также можете использовать sed, но я предпочитаю этот подход, потому что это означает, что значение никогда не будет доступно в выводе ps (даже если это является заблокированной виртуальной машиной).

...