This GitHub Action replaces placeholder variables in text-based config files using environment variables.
It supports patterns like:
$(VAR)${VAR}#{VAR}<<VAR>>
- 🔁 Replaces variable placeholders with values from environment variables
- ✨ Customizable prefix and suffix (
${VAR},$(VAR), etc.) - 🔠 Case-insensitive matching for variable names
- ✨ Supports glob patterns like
**/*.asa - 🚫 Automatically deduplicates matched files
- 🛡️ Fails cleanly if no files matched
- 🧾 Works with
.config,.asa,.env,.json, etc. - ⚙️ Fully cross-platform (Windows, Linux, macOS)
| Input | Description | Required | Default |
|---|---|---|---|
files |
Newline-separated list of XML file paths | ✅ | |
prefix |
Prefix for placeholder (e.g., #{) |
❌ | #{ |
suffix |
Suffix for placeholder (e.g., }) |
❌ | } |
- ✅ ubuntu-latest
- ✅ windows-latest
- ✅ macos-latest
- 🔧 Requires PowerShell Core
Because GitHub Actions composite actions cannot directly access the vars, inputs, or secrets contexts, you must manually pass any required values through the env block (see example below).
Alternatively you can dump all variables as environment variables using the following script in a step before calling this action:
⚠️ Warning: Dumping all variables may expose sensitive information. Use with caution.
- name: Export all GitHub vars
run: |
$json = '${{ toJson(vars) }}'
$vars = ConvertFrom-Json $json
foreach ($property in $vars.PSObject.Properties) {
$key = $property.Name
$value = $property.Value
Write-Host "Setting $key to $value"
$output = "${key}<<EOF`n${value}`nEOF" # Needed if any value contains a new-line (\r\n)
Add-Content -Path $Env:GITHUB_ENV -Value $output
}
Write-Host "Variables exported successfully."- name: Substitute placeholders in files
uses: CasperWSchmidt/substitute-vars-action@v1
with:
files: |
deploy/global.asa
deploy/**/*.config
prefix: '${'
suffix: '}'
env: # required to pass variables into the action
ENVIRONMENT: ${{ inputs.environment }}
CONNECTION_STRING: ${{ secrets.MY_DATABASE_CONNECTION }}
ROOT_DIRECTORY: ${{ vars.MY_ROOT_DIRECTORY }}- name: Export all GitHub vars
run: |
$json = '${{ toJson(vars) }}'
$vars = ConvertFrom-Json $json
foreach ($property in $vars.PSObject.Properties) {
$key = $property.Name
$value = $property.Value
Write-Host "Setting $key to $value"
$output = "${key}<<EOF`n${value}`nEOF" # Needed if any value contains a new-line (\r\n)
Add-Content -Path $Env:GITHUB_ENV -Value $output
}
Write-Host "Variables exported successfully."
- name: Substitute placeholders in files
uses: CasperWSchmidt/substitute-vars-action@v1
with:
files: |
deploy/global.asa
deploy/**/*.config
prefix: '${'
suffix: '}'<configuration>
<appSettings>
<add key="Environment" value="#{ENVIRONMENT}" />
<add key="RootDirectory" value="#{ROOT_DIRECTORY}" />
</appSettings>
<connectionStrings>
<add name="DefaultConnection" connectionString="#{CONNECTION_STRING}" />
</connectionStrings>
</configuration><configuration>
<appSettings>
<add key="Environment" value="Production" />
<add key="RootDirectory" value="C:\Some\Path" />
</appSettings>
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=sql;Database=prod;User Id=admin;" />
</connectionStrings>
</configuration>