Skip to content

Commit abf27e7

Browse files
committed
Use $RUNNER_TEMP when TF_CLI_CONFIG_FILE not in use
If you don't specify the TF_CLI_CONFIG_FILE environment variable, the default config is written to $HOME directory, which could theoretically be shared by multiple runners when using self-hosted runners. When TF_CLI_CONFIG_FILE is _not_ in use, I replaced the usage of $HOME with the directory $RUNNER_TEMP, whose setup/cleanup is managed by the runner framework and exported a TF_CLI_CONFIG_FILE.
1 parent 633666f commit abf27e7

File tree

3 files changed

+24
-44
lines changed

3 files changed

+24
-44
lines changed

.github/workflows/setup-terraform.yml

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,10 @@ jobs:
116116
with:
117117
cli_config_credentials_token: ${{ env.TF_CLOUD_API_TOKEN }}
118118

119-
- name: Validate Terraform Credentials (Windows)
120-
if: runner.os == 'Windows'
119+
- name: Validate Terraform Credentials
121120
run: |
122-
cat ${APPDATA}/terraform.rc | grep 'credentials "app.terraform.io"'
123-
cat ${APPDATA}/terraform.rc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }}"'
124-
125-
- name: Validate Teraform Credentials (Linux & macOS)
126-
if: runner.os != 'Windows'
127-
run: |
128-
cat ${HOME}/.terraformrc | grep 'credentials "app.terraform.io"'
129-
cat ${HOME}/.terraformrc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }}"'
121+
cat ${RUNNER_TEMP}/setup-terraform.tfrc | grep 'credentials "app.terraform.io"'
122+
cat ${RUNNER_TEMP}/setup-terraform.tfrc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }
130123
131124
terraform-credentials-enterprise:
132125
name: 'Terraform Enterprise Credentials'
@@ -146,17 +139,10 @@ jobs:
146139
cli_config_credentials_hostname: 'terraform.example.com'
147140
cli_config_credentials_token: ${{ env.TF_CLOUD_API_TOKEN }}
148141

149-
- name: Validate Terraform Credentials (Windows)
150-
if: runner.os == 'Windows'
151-
run: |
152-
cat ${APPDATA}/terraform.rc | grep 'credentials "terraform.example.com"'
153-
cat ${APPDATA}/terraform.rc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }}"'
154-
155-
- name: Validate Teraform Credentials (Linux & macOS)
156-
if: runner.os != 'Windows'
142+
- name: Validate Terraform Credentials
157143
run: |
158-
cat ${HOME}/.terraformrc | grep 'credentials "terraform.example.com"'
159-
cat ${HOME}/.terraformrc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }}"'
144+
cat ${RUNNER_TEMP}/setup-terraform.tfrc | grep 'credentials "terraform.example.com"'
145+
cat ${RUNNER_TEMP}/setup-terraform.tfrc | grep 'token = "${{ env.TF_CLOUD_API_TOKEN }}"'
160146
161147
terraform-credentials-none:
162148
name: 'Terraform No Credentials'
@@ -171,15 +157,9 @@ jobs:
171157
- name: Setup Terraform
172158
uses: ./
173159

174-
- name: Validate Terraform Credentials (Windows)
175-
if: runner.os == 'Windows'
176-
run: |
177-
[[ -f ${APPDATA}/terraform.rc ]] || exit 0
178-
179-
- name: Validate Teraform Credentials (Linux & macOS)
180-
if: runner.os != 'Windows'
160+
- name: Validate Teraform Credentials
181161
run: |
182-
[[ -f ${HOME}/.terraformrc ]] || exit 0
162+
[[ -f ${RUNNER_TEMP}/.terraformrc ]] || exit 0
183163
184164
terraform-arguments:
185165
name: 'Terraform Arguments'

dist/index.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,15 @@ credentials "${credentialsHostname}" {
103103
}`.trim();
104104
// eslint-enable
105105

106-
// default to OS-specific path
107-
let credsFile = osPlat === 'win32'
108-
? `${process.env.APPDATA}/terraform.rc`
109-
: `${process.env.HOME}/.terraformrc`;
110-
111-
// override with TF_CLI_CONFIG_FILE environment variable
112-
credsFile = process.env.TF_CLI_CONFIG_FILE ? process.env.TF_CLI_CONFIG_FILE : credsFile;
106+
// set or use the TF_CLI_CONFIG_FILE environment variable
107+
let credsFile = process.env.TF_CLI_CONFIG_FILE;
108+
if (!credsFile) {
109+
credsFile = path.join(process.env.RUNNER_TEMP, 'setup-terraform.tfrc');
110+
core.debug(`Default CLI config created as ${credsFile}`);
111+
core.exportVariable('TF_CLI_CONFIG_FILE', credsFile);
112+
}
113113

114-
// get containing folder
114+
// create containing folder in case it doesn't exist
115115
const credsFolder = path.dirname(credsFile);
116116

117117
core.debug(`Creating ${credsFolder}`);

lib/setup-terraform.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ credentials "${credentialsHostname}" {
9797
}`.trim();
9898
// eslint-enable
9999

100-
// default to OS-specific path
101-
let credsFile = osPlat === 'win32'
102-
? `${process.env.APPDATA}/terraform.rc`
103-
: `${process.env.HOME}/.terraformrc`;
104-
105-
// override with TF_CLI_CONFIG_FILE environment variable
106-
credsFile = process.env.TF_CLI_CONFIG_FILE ? process.env.TF_CLI_CONFIG_FILE : credsFile;
100+
// set or use the TF_CLI_CONFIG_FILE environment variable
101+
let credsFile = process.env.TF_CLI_CONFIG_FILE;
102+
if (!credsFile) {
103+
credsFile = path.join(process.env.RUNNER_TEMP, 'setup-terraform.tfrc');
104+
core.debug(`Default CLI config created as ${credsFile}`);
105+
core.exportVariable('TF_CLI_CONFIG_FILE', credsFile);
106+
}
107107

108-
// get containing folder
108+
// create containing folder in case it doesn't exist
109109
const credsFolder = path.dirname(credsFile);
110110

111111
core.debug(`Creating ${credsFolder}`);

0 commit comments

Comments
 (0)