Skip to content

feat: add build-artifacts input to pass along interim build artifacts between runs#532

Draft
rdhar wants to merge 2 commits into
mainfrom
claude/test-upload-step-QfO9p
Draft

feat: add build-artifacts input to pass along interim build artifacts between runs#532
rdhar wants to merge 2 commits into
mainfrom
claude/test-upload-step-QfO9p

Conversation

@rdhar

@rdhar rdhar commented Jan 5, 2026

Copy link
Copy Markdown
Member

Source: https://claude.ai/code/session_016U1StdEoyq6uctW6w6KW91

Add new build-artifacts input that allows users to specify files and directories to upload alongside the tfplan file and restore during apply.

This resolves the issue where interim build artifacts (e.g., zip files created by data.archive_file) are missing during apply because only the tfplan file was transferred between workflow runs.

Changes:

  • Add build-artifacts input accepting newline or comma-separated paths
  • Add staging step to prepare build artifacts with manifest for upload
  • Modify upload steps to include staged artifacts directory
  • Add restore step to extract artifacts to original locations during apply
  • Add cleanup steps to remove staging directories after upload/restore
  • Add test case demonstrating the build artifact issue scenario
  • Update README with documentation and remove workaround from To-Do

Example usage:

  • uses: op5dev/tf-via-pr@v13 with: command: plan build-artifacts: | build/bundle.zip dist/

…n and apply (#517)

Add new `build-artifacts` input that allows users to specify files and
directories to upload alongside the tfplan file and restore during apply.

This resolves the issue where interim build artifacts (e.g., zip files
created by data.archive_file) are missing during apply because only the
tfplan file was transferred between workflow runs.

Changes:
- Add `build-artifacts` input accepting newline or comma-separated paths
- Add staging step to prepare build artifacts with manifest for upload
- Modify upload steps to include staged artifacts directory
- Add restore step to extract artifacts to original locations during apply
- Add cleanup steps to remove staging directories after upload/restore
- Add test case demonstrating the build artifact issue scenario
- Update README with documentation and remove workaround from To-Do

Example usage:
  - uses: op5dev/tf-via-pr@v13
    with:
      command: plan
      build-artifacts: |
        build/bundle.zip
        dist/
Copilot AI review requested due to automatic review settings January 5, 2026 16:34
@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Tip

Expected to PASS.

tofu plan -chdir=tests/pass_zero -workspace=dev
No changes. Your infrastructure matches the configuration.
By rdhar at 2026-05-31T18:58:00Z (view log).
No changes. Your infrastructure matches the configuration.

OpenTofu has compared your real infrastructure against your configuration and
found no differences, so no changes are needed.

@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Important

Expected to FAIL.

tofu plan -chdir=tests/fail_data_source_error -workspace=dev
Error: Read local file data source error
By rdhar at 2026-05-31T18:58:00Z (view log).
data.local_file.path: Reading...

Planning failed. OpenTofu encountered an error while generating this plan.


Error: Read local file data source error

  with data.local_file.path,
  on main.tf line 1, in data "local_file" "path":
   1: data "local_file" "path" {

The file at given path cannot be read.

+Original Error: open /error: no such file or directory

@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Important

Expected to FAIL.

tofu fmt -chdir=tests/fail_format_diff -check -diff -recursive -workspace=dev
View output.
By rdhar at 2026-05-31T18:58:00Z (view log).
main.tf
--- old/main.tf
+++ new/main.tf
@@ -1,3 +1,3 @@
 resource "random_pet" "name" {
-  count =1
+  count = 1
 }

@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Important

Expected to FAIL.

tofu validate -chdir=tests/fail_invalid_resource_type -workspace=dev
Error: Invalid resource type
By rdhar at 2026-05-31T18:58:00Z (view log).
Error: Invalid resource type

  on main.tf line 1, in resource "random_pets" "name":
   1: resource "random_pets" "name" {

The provider hashicorp/random does not support resource type "random_pets".
Did you mean "random_pet"?

@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Tip

Expected to PASS.

tofu plan -chdir=tests/pass_one -workspace=dev
Diff of 1 change.
+ random_pet.name[0] will be created
Plan: 1 to add, 0 to change, 0 to destroy.
By rdhar at 2026-05-31T18:58:00Z (view log).
OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

OpenTofu will perform the following actions:

  # random_pet.name[0] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

Plan: 1 to add, 0 to change, 0 to destroy.

@github-actions

github-actions Bot commented Jan 5, 2026

Copy link
Copy Markdown

Tip

Expected to PASS.

tofu plan -chdir=tests/pass_character_limit -workspace=dev
Diff of 10000 changes.
+ random_pet.name[0] will be created
+ random_pet.name[1] will be created
+ random_pet.name[2] will be created
+ random_pet.name[3] will be created
+ random_pet.name[4] will be created
+ random_pet.name[5] will be created
+ random_pet.name[6] will be created
+ random_pet.name[7] will be created
+ random_pet.name[8] will be created
+ random_pet.name[9] will be created
+ random_pet.name[10] will be created
+ random_pet.name[11] will be created
+ random_pet.name[12] will be created
+ random_pet.name[13] will be created
+ random_pet.name[14] will be created
+ random_pet.name[15] will be created
+ random_pet.name[16] will be created
+ random_pet.name[17] will be created
+ random_pet.name[18] will be created
+ random_pet.name[19] will be created
+ random_pet.name[20] will be created
+ random_pet.name[21] will be created
+ random_pet.name[22] will be created
+ random_pet.name[23] will be created
+ random_pet.name[24] will be created
+ random_pet.name[25] will be created
+ random_pet.name[26] will be created
+ random_pet.name[27] will be created
+ random_pet.name[28] will be created
+ random_pet.name[29] will be created
+ random_pet.name[30] will be created
+ random_pet.name[31] will be created
+ random_pet.name[32] will be created
+ random_pet.name[33] will be created
+ random_pet.name[34] will be created
+ random_pet.name[35] will be created
+ random_pet.name[36] will be created
+ random_pet.name[37] will be created
+ random_pet.name[38] will be created
+ random_pet.name[39] will be created
+ random_pet.name[40] will be created
+ random_pet.name[41] will be created
+ random_pet.name[42] will be created
+ random_pet.name[43] will be created
+ random_pet.name[44] will be created
+ random_pet.name[45] will be created
+ random_pet.name[46] will be created
+ random_pet.name[47] will be created
+ random_pet.name[48] will be created
+ random_pet.name[49] will be created
+ random_pet.name[50] will be created
+ random_pet.name[51] will be created
+ random_pet.name[52] will be created
+ random_pet.name[53] will be created
+ random_pet.name[54] will be created
+ random_pet.name[55] will be created
+ random_pet.name[56] will be created
+ random_pet.name[57] will be created
+ random_pet.name[58] will be created
+ random_pet.name[59] will be created
+ random_pet.name[60] will be created
+ random_pet.name[61] will be created
+ random_pet.name[62] will be created
+ random_pet.name[63] will be created
+ random_pet.name[64] will be created
+ random_pet.name[65] will be created
+ random_pet.name[66] will be created
+ random_pet.name[67] will be created
+ random_pet.name[68] will be created
+ random_pet.name[69] will be created
+ random_pet.name[70] will be created
+ random_pet.name[71] will be created
+ random_pet.name[72] will be created
+ random_pet.name[73] will be created
+ random_pet.name[74] will be created
+ random_pet.name[75] will be created
+ random_pet.name[76] will be created
+ random_pet.name[77] will be created
+ random_pet.name[78] will be created
+ random_pet.name[79] will be created
+ random_pet.name[80] will be created
+ random_pet.name[81] will be created
+ random_pet.name[82] will be created
+ random_pet.name[83] will be created
+ random_pet.name[84] will be created
+ random_pet.name[85] will be created
+ random_pet.name[86] will be created
+ random_pet.name[87] will be created
+ random_pet.name[88] will be created
+ random_pet.name[89] will be created
+ random_pet.name[90] will be created
+ random_pet.name[91] will be created
+ random_pet.name[92] will be created
+ random_pet.name[93] will be created
+ random_pet.name[94] will be created
+ random_pet.name[95] will be created
+ random_pet.name[96] will be created
+ random_pet.name[97] will be created
+ random_pet.name[98] will be created
+ random_pet.name[99] will be created
+ random_pet.name[100] will be created
+ random_pet.name[101] will be created
+ random_pet.name[102] will be created
+ random_pet.name[103] will be created
+ random_pet.name[104] will be created
+ random_pet.name[105] will be created
+ random_pet.name[106] will be created
+ random_pet.name[107] will be created
+ random_pet.name[108] will be created
+ random_pet.name[109] will be created
+ random_pet.name[110] will be created
+ random_pet.name[111] will be created
+ random_pet.name[112] will be created
+ random_pet.name[113] will be created
+ random_pet.name[114] will be created
+ random_pet.name[115] will be created
+ random_pet.name[116] will be created
+ random_pet.name[117] will be created
+ random_pet.name[118] will be created
+ random_pet.name[119] will be created
+ random_pet.name[120] will be created
+ random_pet.name[121] will be created
+ random_pet.name[122] will be created
+ random_pet.name[123] will be created
+ random_pet.name[124] will be created
+ random_pet.name[125] will be created
+ random_pet.name[126] will be created
+ random_pet.name[127] will be created
+ random_pet.name[128] will be created
+ random_pet.name[129] will be created
+ random_pet.name[130] will be created
+ random_pet.name[131] will be created
+ random_pet.name[132] will be created
+ random_pet.name[133] will be created
+ random_pet.name[134] will be created
+ random_pet.name[135] will be created
+ random_pet.name[136] will be created
+ random_pet.name[137] will be created
+ random_pet.name[138] will be created
+ random_pet.name[139] will be created
+ random_pet.name[140] will be created
+ random_pet.name[141] will be created
+ random_pet.name[142] will be created
+ random_pet.name[143] will be created
+ random_pet.name[144] will be created
+ random_pet.name[145] will be created
+ random_pet.name[146] will be created
+ random_pet.name[147] will be created
+ random_pet.name[148] will be created
+ random_pet.name[149] will be created
+ random_pet.name[150] will be created
+ random_pet.name[151] will be created
+ random_pet.name[152] will be created
+ random_pet.name[153] will be created
+ random_pet.name[154] will be created
+ random_pet.name[155] will be created
+ random_pet.name[156] will be created
+ random_pet.name[157] will be created
+ random_pet.name[158] will be created
+ random_pet.name[159] will be created
+ random_pet.name[160] will be created
+ random_pet.name[161] will be created
+ random_pet.name[162] will be created
+ random_pet.name[163] will be created
+ random_pet.name[164] will be created
+ random_pet.name[165] will be created
+ random_pet.name[166] will be created
+ random_pet.name[167] will be created
+ random_pet.name[168] will be created
+ random_pet.name[169] will be created
+ random_pet.name[170] will be created
+ random_pet.name[171] will be created
+ random_pet.name[172] will be created
+ random_pet.name[173] will be created
+ random_pet.name[174] will be created
+ random_pet.name[175] will be created
+ random_pet.name[176] will be created
+ random_pet.name[177] will be created
+ random_pet.name[178] will be created
+ random_pet.name[179] will be created
+ random_pet.name[180] will be created
+ random_pet.name[181] will be created
+ random_pet.name[182] will be created
+ random_pet.name[183] will be created
+ random_pet.name[184] will be created
+ random_pet.name[185] will be created
+ random_pet.name[186] will be created
+ random_pet.name[187] will be created
+ random_pet.name[188] will be created
+ random_pet.name[189] will be created
+ random_pet.name[190] will be created
+ random_pet.name[191] will be created
+ random_pet.name[192] will be created
+ random_pet.name[193] will be created
+ random_pet.name[194] will be created
+ random_pet.name[195] will be created
+ random_pet.name[196] will be created
+ random_pet.name[197] will be created
+ random_pet.name[198] will be created
+ random_pet.name[199] will be created
+ random_pet.name[200] will be created
+ random_pet.name[201] will be created
+ random_pet.name[202] will be created
+ random_pet.name[203] will be created
+ random_pet.name[204] will be created
+ random_pet.name[205] will be created
+ random_pet.name[206] will be created
+ random_pet.name[207] will be created
+ random_pet.name[208] will be created
+ random_pet.name[209] will be created
+ random_pet.name[210] will be created
+ random_pet.name[211] will be created
+ random_pet.name[212] will be created
+ random_pet.name[213] will be created
+ random_pet.name[214] will be created
+ random_pet.name[215] will be created
+ random_pet.name[216] will be created
+ random_pet.name[217] will be created
+ random_pet.name[218] will be created
+ random_pet.name[219] will be created
+ random_pet.name[220] will be created
+ random_pet.name[221] will be created
+ random_pet.name[222] will be created
+ random_pet.name[223] will be created
+ random_pet.name[224] will be created
+ random_pet.name[225] will be created
+ random_pet.name[226] will be created
+ random_pet.name[227] will be created
+ random_pet.name[228] will be created
+ random_pet.name[229] will be created
+ random_pet.name[230] will be created
+ random_pet.name[231] will be created
+ random_pet.name[232] will be created
+ random_pet.name[233] will be created
+ random_pet.name[234] will be created
+ random_pet.name[235] will be created
+ random_pet.name[236] will be created
+ random_pet.name[237] will be created
+ random_pet.name[238] will be created
+ random_pet.name[239] will be created
+ random_pet.name[240] will be created
+ random_pet.name[241] will be created
+ random_pet.name[242] will be created
+ random_pet.name[243] will be created
+ random_pet.name[244] will be created
+ random_pet.name[245] will be created
+ random_pet.name[246] will be created
+ random_pet.name[247] will be created
+ random_pet.name[248] will be created
+ random_pet.name[249] will be created
+ random_pet.name[250] will be created
+ random_pet.name[251] will be created
+ random_pet.name[252] will be created
+ random_pet.name[253] will be created
+ random_pet.name[254] will be created
+ random_pet.name[255] will be created
+ random_pet.name[256] will be created
+ random_pet.name[257] will be created
+ random_pet.name[258] will be created
+ random_pet.name[259] will be created
+ random_pet.name[260] will be created
+ random_pet.name[261] will be created
+ random_pet.name[262] will be created
+ random_pet.name[263] will be created
+ random_pet.name[264] will be created
+ random_pet.name[265] will be created
+ random_pet.name[266] will be created
+ random_pet.name[267] will be created
+ random_pet.name[268] will be created
+ random_pet.name[269] will be created
+ random_pet.name[270] will be created
+ random_pet.name[271] will be created
+ random_pet.name[272] will be created
+ random_pet.name[273] will be created
+ random_pet.name[274] will be created
+ random_pet.name[275] will be created
+ random_pet.name[276] will be created
+ random_pet.name[277] will be created
+ random_pet.name[278] will be created
+ random_pet.name[279] will be created
+ random_pet.name[280] will be created
+ random_pet.name[281] will be created
+ random_pet.name[282] will be created
+ random_pet.name[283] will be created
+ random_pet.name[284] will be created
+ random_pet.name[285] will be created
+ random_pet.name[286] will be created
+ random_pet.name[287] will be created
+ random_pet.name[288] will be created
+ random_pet.name[289] will be created
+ random_pet.name[290] will be created
+ random_pet.name[291] will be created
+ random_pet.name[292] will be created
+ random_pet.name[293] will be created
+ random_pet.name[294] will be created
+ random_pet.name[295] will be created
+ random_pet.name[296] will be created
+ random_pet.name[297] will be created
+ random_pet.name[298] will be created
+ random_pet.name[299] will be created
+ random_pet.name[300] will be created
+ random_pet.name[301] will be created
+ random_pet.name[302] will be created
+ random_pet.name[303] will be created
+ random_pet.name[304] will be created
+ random_pet.name[305] will be created
+ random_pet.name[306] will be created
+ random_pet.name[307] will be created
+ random_pet.name[308] will be created
+ random_pet.name[309] will be created
+ random_pet.name[310] will be created
+ random_pet.name[311] will be created
+ random_pet.name[312] will be created
+ random_pet.name[313] will be created
+ random_pet.name[314] will be created
+ random_pet.name[315] will be created
+ random_pet.name[316] will be created
+ random_pet.name[317] will be created
+ random_pet.name[318] will be created
+ random_pet.name[319] will be created
+ random_pet.name[320] will be created
+ random_pet.name[321] will be created
+ random_pet.name[322] will be created
+ random_pet.name[323] will be created
+ random_pet.name[324] will be created
+ random_pet.name[325] will be created
+ random_pet.name[326] will be created
+ random_pet.name[327] will be created
+ random_pet.name[328] will be created
+ random_pet.name[329] will be created
+ random_pet.name[330] will be created
+ random_pet.name[331] will be created
+ random_pet.name[332] will be created
+ random_pet.name[333] will be created
+ random_pet.name[334] will be created
+ random_pet.name[335] will be created
+ random_pet.name[336] will be created
+ random_pet.name[337] will be created
+ random_pet.name[338] will be created
+ random_pet.name[339] will be created
+ random_pet.name[340] will be created
+ random_pet.name[341] will be created
+ random_pet.name[342] will be created
+ random_pet.name[343] will be created
+ random_pet.name[344] will be created
+ random_pet.name[345] will be created
+ random_pet.name[346] will be created
+ random_pet.name[347] will be created
+ random_pet.name[348] will be created
+ random_pet.name[349] will be created
+ random_pet.name[350] will be created
+ random_pet.name[351] will be created
+ random_pet.name[352] will be created
+ random_pet.name[353] will be created
+ random_pet.name[354] will be created
+ random_pet.name[355] will be created
+ random_pet.name[356] will be created
+ random_pet.name[357] will be created
+ random_pet.name[358] will be created
+ random_pet.name[359] will be created
+ random_pet.name[360] will be created
+ random_pet.name[361] will be created
+ random_pet.name[362] will be created
+ random_pet.name[363] will be created
+ random_pet.name[364] will be created
+ random_pet.name[365] will be created
+ random_pet.name[366] will be created
+ random_pet.name[367] will be created
+ random_pet.name[368] will be created
+ random_pet.name[369] will be created
+ random_pet.name[370] will be created
+ random_pet.name[371] will be created
+ random_pet.name[372] will be created
+ random_pet.name[373] will be created
+ random_pet.name[374] will be created
+ random_pet.name[375] will be created
+ random_pet.name[376] will be created
+ random_pet.name[377] will be created
+ random_pet.name[378] will be created
+ random_pet.name[379] will be created
+ random_pet.name[380] will be created
+ random_pet.name[381] will be created
+ random_pet.name[382] will be created
+ random_pet.name[383] will be created
+ random_pet.name[384] will be created
+ random_pet.name[385] will be created
+ random_pet.name[386] will be created
+ random_pet.name[387] will be created
+ random_pet.name[388] will be created
+ random_pet.name[389] will be created
+ random_pet.name[390] will be created
+ random_pet.name[391] will be created
+ random_pet.name[392] will be created
+ random_pet.name[393] will be created
+ random_pet.name[394] will be created
+ random_pet.name[395] will be created
+ random_pet.name[396] will be created
+ random_pet.name[397] will be created
+ random_pet.name[398] will be created
+ random_pet.name[399] will be created
+ random_pet.name[400] will be created
+ random_pet.name[401] will be created
+ random_pet.name[402] will be created
+ random_pet.name[403] will be created
+ random_pet.name[404] will be created
+ random_pet.name[405] will be created
+ random_pet.name[406] will be created
+ random_pet.name[407] will be created
+ random_pet.name[408] will be created
+ random_pet.name[409] will be created
+ random_pet.name[410] will be created
+ random_pet.name[411] will be created
+ random_pet.name[412] will be created
+ random_pet.name[413] will be created
+ random_pet.name[414] will be created
+ random_pet.name[415] will be created
+ random_pet.name[416] will be created
+ random_pet.name[417] will be created
+ random_pet.name[418] will be created
+ random_pet.name[419] will be created
+ random_pet.name[420] will be created
+ random_pet.name[421] will be created
+ random_pet.name[422] will be created
+ random_pet.name[423] will be created
+ random_pet.name[424] will be created
+ random_pet.name[425] will be created
+ random_pet.name[426] will be created
+ random_pet.name[427] will be created
+ random_pet.name[428] will be created
+ random_pet.name[429] will be created
+ random_pet.name[430] will be created
+ random_pet.name[431] will be created
+ random_pet.name[432] will be created
+ random_pet.name[433] will be created
+ random_pet.name[434] will be created
+ random_pet.name[435] will be created
+ random_pet.name[436] will be created
+ random_pet.name[437] will be created
+ random_pet.name[438] will be created
+ random_pet.name[439] will be created
+ random_pet.name[440] will be created
+ random_pet.name[441] will be created
+ random_pet.name[442] will be created
+ random_pet.name[443] will be created
+ random_pet.name[444] will be created
+ random_pet.name[445] will be created
+ random_pet.name[446] will be created
+ random_pet.name[447] will be created
+ random_pet.name[448] will be created
+ random_pet.name[449] will be created
+ random_pet.name[450] will be created
+ random_pet.name[451] will be created
+ random_pet.name[452] will be created
+ random_pet.name[453] will be created
+ random_pet.name[454] will be created
+ random_pet.name[455] will be created
+ random_pet.name[456] will be created
+ random_pet.name[457] will be created
+ random_pet.name[458] will be created
+ random_pet.name[459] will be created
+ random_pet.name[460] will be created
+ random_pet.name[461] will be created
+ random_pet.name[462] will be created
+ random_pet.name[463] will be created
+ random_pet.name[464] will be created
+ random_pet.name[465] will be created
+ random_pet.name[466] will be created
+ random_pet.name[467] will be created
+ random_pet.name[468] will be created
+ random_pet.name[469] will be created
+ random_pet.name[470] will be created
+ random_pet.name[471] will be created
+ random_pet.name[472] will be created
+ random_pet.name[473] will be created
+ random_pet.name[474] will be created
+ random_pet.name[475] will be created
+ random_pet.name[476] will be created
+ random_pet.name[477] will be created
+ random_pet.name[478] will be created
+ random_pet.name[479] will be created
+ random_pet.name[480] will be created
+ random_pet.name[481] will be created
+ random_pet.name[482] will be created
+ random_pet.name[483] will be created
+ random_pet.name[484] will be created
+ random_pet.name[485] will be created
+ random_pet.name[486] will be created
+ random_pet.name[487] will be created
+ random_pet.name[488] will be created
+ random_pet.name[489] will be created
+ random_pet.name[490] will be created
+ random_pet.name[491] will be created
+ random_pet.name[492] will be created
+ random_pet.name[493] will be created
+ random_pet.name[494] will be created
+ random_pet.name[495] will be created
+ random_pet.name[496] will be created
+ random_pet.name[497] will be created
+ random_pet.name[498] will be created
+ random_pet.name[499] will be created
+ random_pet.name[500] will be created
+ random_pet.name[501] will be created
+ random_pet.name[502] will be created
+ random_pet.name[503] will be created
+ random_pet.name[504] will be created
+ random_pet.name[505] will be created
+ random_pet.name[506] will be created
+ random_pet.name[507] will be created
+ random_pet.name[508] will be created
+ random_pet.name[509] will be created
+ random_pet.name[510] will be created
+ random_pet.name[511] will be created
+ random_pet.name[512] will be created
+ random_pet.name[513] will be created
+ random_pet.name[514] will be created
+ random_pet.name[515] will be created
+ random_pet.name[516] will be created
+ random_pet.name[517] will be created
+ random_pet.name[518] will be created
+ random_pet.name[519] will be created
+ random_pet.name[520] will be created
+ random_pet.name[521] will be created
+ random_pet.name[522] will be created
+ random_pet.name[523] will be created
+ random_pet.name[524] will be created
+ random_pet.name[525] will be created
+ random_pet.name[526] will be created
+ random_pet.name[527] will be created
+ random_pet.name[528] will be created
+ random_pet.name[529] will be created
+ random_pet.name[530] will be created
+ random_pet.name[531] will be created
+ random_pet.name[532] will be created
+ random_pet.name[533] will be created
+ random_pet.name[534] will be created
+ random_pet.name[535] will be created
+ random_pet.name[536] will be created
+ random_pet.name[537] will be created
+ random_pet.name[538] will be created
+ random_pet.name[539] will be created
+ random_pet.name[540] will be created
+ random_pet.name[541] will be created
+ random_pet.name[542] will be created
+ random_pet.name[543] will be created
+ random_pet.name[544] will be created
+ random_pet.name[545] will be created
+ random_pet.name[546] will be created
+ random_pet.name[547] will be created
+ random_pet.name[548] will be created
+ random_pet.name[549] will be created
+ random_pet.name[550] will be created
+ random_pet.name[551] will be created
+ random_pet.name[552] will be created
+ random_pet.name[553] will be created
+ random_pet.name[554] will be created
+ random_pet.name[555] will be created
+ random_pet.name[556] will be created
+ random_pet.name[557] will be created
+ random_pet.name[558] will be created
+ random_pet.name[559] will be created
+ random_pet.name[560] will be created
+ random_pet.name[561] will be created
+ random_pet.name[562] will be created
+ random_pet.name[563] will be created
+ random_pet.name[564] will be created
+ random_pet.name[565] will be created
+ random_pet.name[566] will be created
+ random_pet.name[567] will be created
+ random_pet.name[568] will be created
+ random_pet.name[569] will be created
+ random_pet.name[570] will be created
+ random_pet.name[571] will be created
+ random_pet.name[572] will be created
+ random_pet.name[573] will be created
+ random_pet.name[574] will be created
+ random_pet.name[575] will be created
+ random_pet.name[576] will be created
+ random_pet.name[577] will be created
+ random_pet.name[578] will be created
+ random_pet.name[579] will be created
+ random_pet.name[580] will be created
+ random_pet.name[581] will be created
+ random_pet.name[582] will be created
+ random_pet.name[583] will be created
+ random_pet.name[584] will be created
+ random_pet.name[585] will be created
+ random_pet.name[586] will be created
+ random_pet.name[587] will be created
+ random_pet.name[588] will be created
+ random_pet.name[589] will be created
+ random_pet.name[590] will be created
+ random_pet.name[591] will be created
+ random_pet.name[592] will be created
+ random_pet.name[593] will be created
+ random_pet.name[594] will be created
+ random_pet.name[595] will be created
+ random_pet.name[596] will be created
+ random_pet.name[597] will be created
+ random_pet.name[598] will be created
+ random_pet.name[599] will be created
+ random_pet.name[600] will be created
+ random_pet.name[601] will be created
+ random_pet.name[602] will be created
+ random_pet.name[603] will be created
+ random_pet.name[604] will be created
+ random_pet.name[605] will be created
+ random_pet.name[606] will be created
+ random_pet.name[607] will be created
+ random_pet.name[608] will be created
+ random_pet.name[609] will be created
+ random_pet.name[610] will be created
+ random_pet.name[611] will be created
+ random_pet.name[612] will be created
+ random_pet.name[613] will be created
+ random_pet.name[614] will be created
+ random_pet.name[615] will be created
+ random_pet.name[616] will be created
+ random_pet.name[617] will be created
+ random
Plan: 10000 to add, 0 to change, 0 to destroy.
By rdhar at 2026-05-31T18:58:00Z (view log).
OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

OpenTofu will perform the following actions:

  # random_pet.name[0] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[1] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[2] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[3] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[4] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[5] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[6] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[7] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[8] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[9] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[10] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[11] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[12] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[13] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[14] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[15] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[16] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[17] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[18] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[19] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[20] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[21] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[22] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[23] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[24] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[25] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[26] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[27] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[28] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[29] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[30] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[31] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[32] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[33] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[34] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[35] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[36] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[37] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[38] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[39] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[40] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[41] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[42] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[43] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[44] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[45] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[46] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[47] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[48] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[49] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[50] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[51] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[52] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[53] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[54] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[55] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[56] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[57] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[58] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[59] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[60] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[61] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[62] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[63] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[64] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[65] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[66] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[67] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[68] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[69] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[70] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[71] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[72] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[73] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[74] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[75] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[76] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[77] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[78] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[79] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[80] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[81] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[82] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[83] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[84] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[85] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[86] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[87] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[88] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[89] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[90] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[91] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[92] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[93] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[94] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[95] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[96] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[97] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[98] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[99] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[100] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[101] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[102] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[103] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[104] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[105] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[106] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[107] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[108] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[109] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[110] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[111] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[112] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[113] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[114] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[115] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[116] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[117] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[118] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[119] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[120] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[121] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[122] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[123] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[124] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[125] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[126] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[127] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[128] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[129] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[130] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[131] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[132] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[133] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[134] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[135] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[136] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[137] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[138] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[139] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[140] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[141] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[142] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[143] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[144] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[145] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[146] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[147] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[148] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[149] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[150] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[151] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[152] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[153] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[154] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[155] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[156] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[157] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[158] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[159] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[160] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[161] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[162] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[163] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[164] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[165] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[166] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[167] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[168] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[169] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[170] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[171] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[172] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[173] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[174] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[175] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[176] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[177] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[178] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[179] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[180] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[181] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[182] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[183] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[184] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[185] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[186] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[187] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[188] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[189] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[190] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[191] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[192] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[193] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[194] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[195] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[196] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[197] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[198] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[199] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[200] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[201] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[202] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[203] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[204] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[205] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[206] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[207] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[208] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[209] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[210] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[211] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[212] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[213] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[214] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[215] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[216] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[217] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[218] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[219] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[220] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[221] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[222] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[223] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[224] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[225] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[226] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[227] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[228] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[229] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[230] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[231] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[232] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[233] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[234] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[235] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[236] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[237] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[238] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[239] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[240] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[241] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[242] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[243] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[244] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[245] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[246] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

  # random_pet.name[247] will be created
  + resource "random_pet" "name" {
      + id        = (known after apply)
      + length    = 2
      + separator = "-"
    }

 
…

Comment thread action.yml Fixed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new build-artifacts input that allows users to specify files and directories to upload alongside the Terraform plan file and restore during apply. This solves issue #517 where interim build artifacts (such as zip files created by data.archive_file) are missing during the apply phase because only the tfplan file was previously transferred between workflow runs.

Key Changes

  • Adds build-artifacts input accepting newline or comma-separated file/directory paths
  • Implements staging/restore mechanism with JSON manifest for artifact tracking
  • Extends artifact upload/download to include staged build artifacts alongside tfplan

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
action.yml Adds build-artifacts input, staging/restore steps for artifacts, modifies upload steps to include staged artifacts, and adds cleanup logic
tests/fail_build_artifact_missing/main.tf Adds test case demonstrating the build artifact issue using data.archive_file and null_resource with local-exec provisioner
tests/fail_build_artifact_missing/.gitignore Adds gitignore for test directory to exclude Terraform files and generated build artifacts
tests/tf.sh Adds test execution for the build artifact missing scenario to verify the issue exists
README.md Documents the new build-artifacts input with usage examples and removes the workaround from the To-Do section

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread action.yml
# Add to manifest.
if [[ "$first" != "true" ]]; then echo ',' >> "$manifest_file"; fi
first=false
echo "{\"path\":\"$rel_path\",\"staging\":\"$staging_name\",\"type\":\"$artifact_type\"}" >> "$manifest_file"

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSON generation does not properly escape special characters in the path values. If a path contains double quotes, backslashes, or newlines, it could corrupt the JSON manifest or cause parsing errors during restoration. Consider using jq to properly generate the JSON entries instead of using echo with manual JSON string concatenation.

Copilot uses AI. Check for mistakes.
Comment thread action.yml
Comment on lines +250 to +263
while IFS= read -r artifact; do
rel_path=$(echo "$artifact" | jq -r '.path')
staging_name=$(echo "$artifact" | jq -r '.staging')
artifact_type=$(echo "$artifact" | jq -r '.type')

# Determine destination path.
if [[ "$rel_path" = /* ]]; then
# Absolute path.
dest_path="$rel_path"
else
# Relative path - restore relative to working directory.
dest_path="$workdir/$rel_path"
fi

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The path resolution allows absolute paths to be used as-is without validation. This could be a security concern if the build-artifacts input is not properly controlled, as it allows writing to any location on the filesystem during restore. Consider validating that absolute paths, if allowed, are within expected boundaries, or document this as a security consideration.

Suggested change
while IFS= read -r artifact; do
rel_path=$(echo "$artifact" | jq -r '.path')
staging_name=$(echo "$artifact" | jq -r '.staging')
artifact_type=$(echo "$artifact" | jq -r '.type')
# Determine destination path.
if [[ "$rel_path" = /* ]]; then
# Absolute path.
dest_path="$rel_path"
else
# Relative path - restore relative to working directory.
dest_path="$workdir/$rel_path"
fi
# Canonical base directory for restored artifacts.
base_dir=$(cd "$workdir" && pwd)
while IFS= read -r artifact; do
rel_path=$(echo "$artifact" | jq -r '.path')
staging_name=$(echo "$artifact" | jq -r '.staging')
artifact_type=$(echo "$artifact" | jq -r '.type')
# Determine and validate destination path.
if [[ "$rel_path" = /* ]]; then
# Absolute path from manifest - canonicalize.
dest_path=$(realpath "$rel_path" 2>/dev/null || echo "")
else
# Relative path - canonicalize relative to working directory.
dest_path=$(cd "$workdir" && realpath "$rel_path" 2>/dev/null || echo "")
fi
if [[ -z "$dest_path" ]]; then
echo "Invalid artifact path in manifest: $rel_path"
exit 1
fi
# Ensure destination is within the working directory.
case "$dest_path" in
"$base_dir" | "$base_dir"/*)
;;
*)
echo "Refusing to restore artifact outside working directory:"
echo " manifest path: $rel_path"
echo " resolved path: $dest_path"
exit 1
;;
esac

Copilot uses AI. Check for mistakes.
Comment thread action.yml
Comment on lines +394 to +403
- if: ${{ inputs.build-artifacts != '' && (steps.upload.outcome == 'success' || steps.upload-v3.outcome == 'success') }}
env:
INPUTS_ARG_CHDIR: ${{ inputs.arg-chdir || inputs.working-directory }}
shell: bash
run: |
# Clean up build artifacts staging directory after upload.
workdir="${INPUTS_ARG_CHDIR:-.}"
staging_dir="$workdir/.tfviapr-artifacts"
rm -rf "$staging_dir"
echo "Cleaned up build artifacts staging directory."

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the staging step fails partway through (e.g., after creating the staging directory but before successful completion), the cleanup step will not run because it's conditional on upload success. This could leave the .tfviapr-artifacts directory behind. Consider adding error handling or a cleanup on failure.

Copilot uses AI. Check for mistakes.
Comment thread action.yml
Comment on lines +270 to +272
cp -r "$staging_dir/$staging_name" "$dest_path"
else
cp "$staging_dir/$staging_name" "$dest_path"

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the cp command fails during restoration (e.g., due to permission issues or disk space), the script continues without detecting the error. Consider adding error checking after the cp commands to ensure artifacts are successfully restored before proceeding.

Suggested change
cp -r "$staging_dir/$staging_name" "$dest_path"
else
cp "$staging_dir/$staging_name" "$dest_path"
if ! cp -r "$staging_dir/$staging_name" "$dest_path"; then
echo "Error: Failed to restore directory artifact: $staging_dir/$staging_name -> $dest_path" >&2
exit 1
fi
else
if ! cp "$staging_dir/$staging_name" "$dest_path"; then
echo "Error: Failed to restore file artifact: $staging_dir/$staging_name -> $dest_path" >&2
exit 1
fi

Copilot uses AI. Check for mistakes.
Comment thread action.yml
Comment on lines +356 to +360
cp -r "$src_path" "$staging_dir/$staging_name"
artifact_type="directory"
else
cp "$src_path" "$staging_dir/$staging_name"
artifact_type="file"

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the cp command fails during staging (e.g., due to permission issues or disk space), the script continues without detecting the error. This could result in an incomplete manifest that references artifacts that were not actually staged. Consider adding error checking after the cp commands to ensure artifacts are successfully copied before adding them to the manifest.

Suggested change
cp -r "$src_path" "$staging_dir/$staging_name"
artifact_type="directory"
else
cp "$src_path" "$staging_dir/$staging_name"
artifact_type="file"
if cp -r "$src_path" "$staging_dir/$staging_name"; then
artifact_type="directory"
else
echo "Error: Failed to copy directory artifact: $src_path -> $staging_dir/$staging_name"
continue
fi
else
if cp "$src_path" "$staging_dir/$staging_name"; then
artifact_type="file"
else
echo "Error: Failed to copy file artifact: $src_path -> $staging_dir/$staging_name"
continue
fi

Copilot uses AI. Check for mistakes.
Comment thread action.yml
Comment on lines +334 to +344
while IFS= read -r artifact_path; do
# Resolve path relative to working directory.
if [[ "$artifact_path" = /* ]]; then
# Absolute path - use as-is.
src_path="$artifact_path"
rel_path="$artifact_path"
else
# Relative path - resolve from working directory.
src_path="$workdir/$artifact_path"
rel_path="$artifact_path"
fi

Copilot AI Jan 5, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The path handling does not sanitize or validate relative paths that contain parent directory references (..). This could allow paths like "../../../etc/passwd" to be processed, potentially causing artifacts to be staged from or restored to unintended locations. Consider validating that paths do not traverse outside the working directory.

Copilot uses AI. Check for mistakes.
Comment thread action.yml
# Unzip the plan file to the working directory, then clean up the zip file.
unzip "$GH_IDENTIFIER_NAME.zip" -d "$INPUTS_ARG_CHDIR"
unzip "$GH_IDENTIFIER_NAME.zip" -d "${INPUTS_ARG_CHDIR:-.}"
rm --force "${{ steps.identifier.outputs.name }}.zip"
@rdhar
rdhar marked this pull request as draft June 24, 2026 13:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants