terramate-io / terramate

Terramate CLI is an open-source Infrastructure as Code (IaC) Orchestration and Code Generation tool for Terraform, OpenTofu and Terragrunt.
https://terramate.io
Mozilla Public License 2.0
3.12k stars 86 forks source link

fix: broken pagination in Github API calls #1692

Closed snakster closed 2 months ago

snakster commented 2 months ago

What this PR does / why we need it:

This PR fixes a bug in handling paginated responses from the Github API that can be triggered while fetching metadata for PR reviews and GHA checks.

Which issue(s) this PR fixes:

Special notes for your reviewer:

We have no automated tests for this, so I only verified doing a manual test.

Setup:

$ export GITHUB_EVENT_PATH=${terramate_repo}/cmd/terramate/e2etests/cloud/interop/testdata/event_pull_request.json
$ cd ${terramate_repo}/cmd/terramate/e2etests/cloud/interop/testdata/interop-stacks/basic-drift
$ CI=true GITHUB_ACTIONS=1 terramate run --sync-drift-status --terraform-plan-file="out.tfplan" -- terraform plan --detailed-exitcode -out=out.tfplan

Before, error:

WRN failed to retrieve PR reviews error="context deadline exceeded" github_repository=terramate-io/terramate head_commit=daaf4f0505b853071a09b9f72daec559919730ed normalized_repository=github.com/terramate-io/terramate

After, success:

terramate: Entering stack in /cmd/terramate/e2etests/cloud/interop/testdata/interop-stacks/basic-drift
terramate: Executing command "terraform plan --detailed-exitcode -out=out.tfplan"

Does this PR introduce a user-facing change?

no
github-actions[bot] commented 2 months ago
metric: time/op
CloudReadLines-4: old 1.02ms ± 5%: new 1.02ms ± 6%: delta: 0.00%
CloudReadLine-4: old 7.26ms ± 1%: new 7.36ms ± 1%: delta: 1.37%
ListFiles-4: old 52.6µs ± 1%: new 53.2µs ± 2%: delta: 0.00%
Generate-4: old 2.60s ± 2%: new 2.58s ± 4%: delta: 0.00%
GenerateRegex-4: old 1.81s ± 2%: new 1.74s ± 2%: delta: -4.05%
TokensForExpressionComplex-4: old 1.28ms ± 1%: new 1.27ms ± 1%: delta: -0.80%
TokensForExpressionPlainStringNoNewline-4: old 907ns ± 2%: new 895ns ± 1%: delta: -1.26%
TokensForExpressionStringWith100Newlines-4: old 22.0µs ± 1%: new 22.1µs ± 2%: delta: 0.00%
TokensForExpressionObjectWith100KeysWithNumberValues-4: old 1.46ms ± 1%: new 1.45ms ± 0%: delta: 0.00%
TokensForExpression-4: old 1.26ms ± 0%: new 1.27ms ± 1%: delta: 0.00%
PartialEvalComplex-4: old 432µs ± 0%: new 436µs ± 1%: delta: 0.88%
PartialEvalSmallString-4: old 3.60µs ± 0%: new 3.61µs ± 0%: delta: 0.00%
PartialEvalHugeString-4: old 1.87ms ± 0%: new 1.88ms ± 1%: delta: 0.00%
PartialEvalHugeInterpolatedString-4: old 4.93ms ± 2%: new 4.91ms ± 2%: delta: 0.00%
PartialEvalObject-4: old 21.8µs ± 1%: new 21.6µs ± 1%: delta: -0.51%
TmAllTrueLiteralList-4: old 6.27ms ± 0%: new 6.27ms ± 0%: delta: 0.00%
TmAllTrueFuncall-4: old 161µs ± 0%: new 161µs ± 1%: delta: 0.00%
TmAnyTrueLiteralList-4: old 148ms ± 1%: new 147ms ± 0%: delta: -0.51%
TmAnyTrueFuncall-4: old 162µs ± 1%: new 161µs ± 0%: delta: -1.05%
TmTernary-4: old 2.82µs ± 1%: new 2.83µs ± 1%: delta: 0.00%
TmTry-4: old 52.1µs ± 1%: new 52.4µs ± 1%: delta: 0.48%
metric: alloc/op
CloudReadLines-4: old 3.12MB ± 0%: new 3.12MB ± 0%: delta: 0.00%
CloudReadLine-4: old 3.37MB ± 0%: new 3.37MB ± 0%: delta: 0.00%
ListFiles-4: old 22.0kB ± 0%: new 22.0kB ± 0%: delta: 0.00%
Generate-4: old 2.32GB ± 0%: new 2.32GB ± 0%: delta: -0.00%
GenerateRegex-4: old 956MB ± 0%: new 955MB ± 0%: delta: -0.03%
TokensForExpressionComplex-4: old 412kB ± 0%: new 412kB ± 0%: delta: -0.00%
TokensForExpressionPlainStringNoNewline-4: old 592B ± 0%: new 592B ± 0%: delta: 0.00%
TokensForExpressionStringWith100Newlines-4: old 12.4kB ± 0%: new 12.4kB ± 0%: delta: 0.00%
TokensForExpressionObjectWith100KeysWithNumberValues-4: old 402kB ± 0%: new 402kB ± 0%: delta: 0.00%
TokensForExpression-4: old 412kB ± 0%: new 412kB ± 0%: delta: 0.00%
PartialEvalComplex-4: old 356kB ± 0%: new 356kB ± 0%: delta: 0.00%
PartialEvalSmallString-4: old 1.74kB ± 0%: new 1.74kB ± 0%: delta: 0.00%
PartialEvalHugeString-4: old 166kB ± 0%: new 166kB ± 0%: delta: 0.00%
PartialEvalHugeInterpolatedString-4: old 4.38MB ± 0%: new 4.38MB ± 0%: delta: 0.00%
PartialEvalObject-4: old 20.4kB ± 0%: new 20.4kB ± 0%: delta: 0.00%
TmAllTrueLiteralList-4: old 1.74MB ± 0%: new 1.74MB ± 0%: delta: 0.00%
TmAllTrueFuncall-4: old 45.5kB ± 0%: new 45.5kB ± 0%: delta: 0.00%
TmAnyTrueLiteralList-4: old 37.9MB ± 0%: new 37.9MB ± 0%: delta: -0.00%
TmAnyTrueFuncall-4: old 45.6kB ± 0%: new 45.6kB ± 0%: delta: -0.00%
TmTernary-4: old 1.20kB ± 0%: new 1.20kB ± 0%: delta: 0.00%
TmTry-4: old 11.2kB ± 0%: new 11.2kB ± 0%: delta: 0.00%
metric: allocs/op
CloudReadLines-4: old 5.54k ± 0%: new 5.54k ± 0%: delta: 0.00%
CloudReadLine-4: old 60.0k ± 0%: new 60.0k ± 0%: delta: 0.00%
ListFiles-4: old 321 ± 0%: new 321 ± 0%: delta: 0.00%
Generate-4: old 25.9M ± 0%: new 25.9M ± 0%: delta: 0.00%
GenerateRegex-4: old 18.6M ± 0%: new 18.6M ± 0%: delta: 0.00%
TokensForExpressionComplex-4: old 4.93k ± 0%: new 4.93k ± 0%: delta: -0.01%
TokensForExpressionPlainStringNoNewline-4: old 21.0 ± 0%: new 21.0 ± 0%: delta: 0.00%
TokensForExpressionStringWith100Newlines-4: old 228 ± 0%: new 228 ± 0%: delta: 0.00%
TokensForExpressionObjectWith100KeysWithNumberValues-4: old 3.29k ± 0%: new 3.29k ± 0%: delta: 0.00%
TokensForExpression-4: old 4.93k ± 0%: new 4.93k ± 0%: delta: -0.01%
PartialEvalComplex-4: old 2.86k ± 0%: new 2.86k ± 0%: delta: 0.00%
PartialEvalSmallString-4: old 23.0 ± 0%: new 23.0 ± 0%: delta: 0.00%
PartialEvalHugeString-4: old 35.0 ± 0%: new 35.0 ± 0%: delta: 0.00%
PartialEvalHugeInterpolatedString-4: old 23.1k ± 0%: new 23.1k ± 0%: delta: 0.00%
PartialEvalObject-4: old 125 ± 0%: new 125 ± 0%: delta: 0.00%
TmAllTrueLiteralList-4: old 13.6k ± 0%: new 13.6k ± 0%: delta: 0.00%
TmAllTrueFuncall-4: old 460 ± 0%: new 460 ± 0%: delta: 0.00%
TmAnyTrueLiteralList-4: old 252k ± 0%: new 252k ± 0%: delta: -0.00%
TmAnyTrueFuncall-4: old 462 ± 0%: new 462 ± 0%: delta: 0.00%
TmTernary-4: old 28.0 ± 0%: new 28.0 ± 0%: delta: 0.00%
TmTry-4: old 147 ± 0%: new 147 ± 0%: delta: 0.00%