Skip to content

GitHub Action that exports .env file variables to job env

License

Notifications You must be signed in to change notification settings

cardinalby/export-env-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

test

Table of contents

  1. Export variables from .env file to job env
  2. Examples
    1. Simple case
    2. Multiple environment files
    3. Specify variables filter
    4. Expand variables
    5. Do not export
  3. Inputs
    1. envFile
    2. filter
    3. expand
    4. expandWithJobEnv
    5. export
    6. mask
  4. Outputs

Export variables from .env file to job env

Can be useful if you want to use .env file as a storage of constants among multiple workflows.

Examples

Simple case:

# constants.env file

VAR1=abc
VAR2=def
- uses: cardinalby/export-env-action@v2
  with:
    envFile: 'constants.env'    
  
# env.VAR1 == 'abc'
# env.VAR2 == 'def'

Multiple environment files:

# constants1.env file

VAR1=abc
VAR2=def
# constants2.env file

VAR2=ghi
VAR3=jkl
- uses: cardinalby/export-env-action@v2
  with:
    envFile: 'constants1.env|constants2.env'
  
# env.VAR1 == 'abc'
# env.VAR2 == 'ghi'
# env.VAR3 == 'jkl'

Specify variables filter:

# constants.env file

VAR1=abc
VAR2=def
VAR3=ghi
- uses: cardinalby/export-env-action@v2
  with:
    envFile: 'constants.env'
    filter: 'VAR1|VAR3'
  
# env.VAR1 == 'abc'
# env.VAR3 == 'jkl'

Expand variables

# constants.env file

PROTOCOL=https
HOST=example.com
PORT=8080
URI=${PROTOCOL}://${HOST}:${PORT}
- uses: cardinalby/export-env-action@v2
  with:
    envFile: 'constants.env'    
    expand: 'true'
  
# env.PROTOCOL == 'https'
# env.HOST == 'example.com'
# env.PORT == '8080'
# env.URI == 'https://example.com:8080'

Do not export:

# constants.env file

VAR1=abc
VAR2=def
- uses: cardinalby/export-env-action@v2
  id: exportStep
  with:
    envFile: 'constants.env'
    export: 'false'
  
# env.VAR1 == ''
# env.VAR2 == ''
# steps.exportStep.outputs.VAR1 == 'abc'
# steps.exportStep.outputs.VAR2 == 'def'

Inputs

🔸 envFile Required

Path to env file to parse.

🔹 filter Default: null

Filter regexp to only export specific variables matching the filter.

It filters both exported variables and action outputs (if export: false), but doesn't impacts variables extending and masking.

If filter is: 'VAR_1|VAR_3'

VAR_1=aaa
VAR_2=bbb
VAR_3=ccc

Will lead to following exported variables: VAR_1 = aaa, VAR3 = ccc.

🔹 expand Default: false

If true, "expands" variables:

VAR_1=aaa
VAR_2=${VAR_1}_bbb

Will lead to following exported variables: VAR1 = aaa, VAR2 = aaa_bbb.

Read more about expand engine rules here.

🔹 expandWithJobEnv Default: false

If true, "expands" variables considering step (job) env variables (in addition to variables defined in the same env file). It means, ${GITHUB_RUN_ATTEMPT} in a variable value will be substituted by the value of $GITHUB_RUN_ATTEMPT job env variable.

🔹 export Default: true

Export variables to a job environment. If false, all variables will be set as an action outputs instead.

🔹 mask Default: false

If true masks all result values (after expanding) as secrets.

Warning: be cautious if you want to use this option, it is bad idea to store secrets in .env file in the repo, use GitHub secrets for that purpose.

Outputs

If export is false then there are individual outputs for each variable from env file (where output name equals variable name).