This GitHub Action (written in JavaScript) allows you to leverage GitHub Actions to decrypt secrets from a JSON file using gpg. For more information, see the "gpg manpage." Common workflows are:
Note: This currently does not support a JSON file that is more than one level deep.
Create a workflow .yml file in your .github/workflows directory. Example workflows are available below. For more information, reference the GitHub Help Documentation for Creating a workflow file.
All of these inputs are required. For more information on these inputs, see the Workflow syntax for GitHub Actions
secrets_file: Thegpgfile. For example,.github/workflows/secrets.json.gpgmap: Describes the map between the environment variables and secret keys. For example,SECRET_PASSWORD=PASSWORD,PASSPHRASE=passphrase
Additionally, you must set the GPG_PASSPHRASE environment variable to decrypt the JSON file.
None. The secrets are exported as environment variables through the map input. For more information, see the Environment variables documentation
On any workflow you will need to do the following:
- Store your secrets in a JSON file. Warning: Do not commit this in your repository.
- Encrypt your JSON file to
gpgusing a long alphanumeric passphrase. For example:
gpg --symmetric --cipher-algo AES256 secrets.json - Place and commit the generated
gpgfile (e.g.,secrets.json.gpg) in your repository. The recommended location is.github/workflows/secrets.json.gpgor.github/workflows/secrets/beta.json.gpg.
Instead of manually setting all of your secrets in GitHub's settings, you can simply store the passphrase you used when encrypting the JSON file using gpg. For example:
{
"PASSWORD": "cSHS4mE&vDRJqKaPO&Fi{g@JCyv3|#Y><>Mp{8KP2m<#H0DL*F",
"passphrase": "7heGrecgc<7oYLURMR%y6y#)fEl2zWF%j%PiL$E5s$za4PtxlC",
}on: push
name: Continuous Integration
jobs:
build:
name: Example
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Decrypt secrets
uses: zgosalvez/github-actions-decrypt-secrets@v3
with:
secrets_file: .github/workflows/secrets.json.gpg
map: 'SECRET_PASSWORD=PASSWORD,PASSPHRASE=passphrase'
env:
GPG_PASSPHRASE: ${{ secrets.SECRETS_PASSPHRASE }}
- name: Test (Do not expose your actual secrets!)
run: |
echo $SECRET_PASSWORD
echo $PASSPHRASEAnother common scenario is when you need the same environment variable with a different value that depends on the environment. For example, you may have two JSON files: beta and production.
on:
push:
- beta
- production
name: Continuous Deployment
jobs:
build:
name: Example
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Determine environment
id: determine_environment
run: echo "::set-output name=environment::${GITHUB_REF#refs/heads/}"
- name: Decrypt ${{ steps.determine_environment.outputs.environment }} secrets
uses: zgosalvez/github-actions-decrypt-secrets@v3
with:
secrets_file: .github/workflows/secrets/${{ steps.determine_environment.outputs.environment }}.json.gpg
map: 'SECRET_PASSWORD=PASSWORD,PASSPHRASE=passphrase'
env:
GPG_PASSPHRASE: ${{ secrets.SECRETS_PASSPHRASE }}
- name: Test (Do not expose your actual secrets!)
run: |
echo $SECRET_PASSWORD
echo $PASSPHRASEThe scripts and documentation in this project are released under the MIT License