GitHub
11/04/2025, 2:32 AMGitHub
11/04/2025, 4:27 AMApprovePolicies but we returning as if it ran the PolicyCheck command.
As far as I can tell this bug has been present since this code was introduced: af2a806#diff-eb466bb07e603dbf2a2a91c776b4d812bf330b3dc02fcaf762380b0078296937R174
I frankly don't quite understand what this does, but if you look at the rest of the doXYZ in plan_command_runner, they follow a particular pattern of referring to commands, and this one simply seems to have been typod.
## tests
N/A
## references
N/A
runatlantis/atlantisGitHub
11/04/2025, 5:11 AMGitHub
11/05/2025, 2:11 AMGitHub
11/05/2025, 2:14 AMGitHub
11/06/2025, 2:11 AMJobURL to the PlanSuccess model.
This PR also renames the LockURLGenerator to URLGenerator as it will be used for generating more than just the lock url. Currently the code already uses the router to fulfill this interface, so I have added the function GenerateProjectJobURL which it gets from the router.
## Why
In certain cases, it's necessary to hide Terraform plan output in GitHub comments—such as in public repositories where the output may contain sensitive information. However, users may still need access to the plan details via a secure URL, such as one behind a firewall or ingress.
By including the job URL in the GitHub comment template (in addition to the existing GitHub check link), we provide users with clear guidance on why the output is hidden and where they can access it instead.
## Tests
Tested locally by overriding the comment template and verifying the job URL was correctly included.
## References
• Atlantis Issue #5391
## Notes
• I encountered issues running pegomock unless I downgraded Go to 1.23.0 in go.mod.
• Currently, the job URL is added only to *plan success*—I considered adding it to PolicyCheckResults, but I’m unsure whether those results are accessible via a URL. Would appreciate any feedback on this!
runatlantis/atlantisGitHub
11/06/2025, 2:14 AMGitHub
11/07/2025, 2:03 AMGitHub
11/07/2025, 2:05 PM./atlantis server --bitbucket-user '<user>' --bitbucket-api-user '<user@example.com>' --bitbucket-token '<token>' --repo-allowlist '*' --log-level info
{"level":"info","ts":"2025-11-07T10:54:04.448-0300","caller":"server/server.go:343","msg":"Supported VCS Hosts: BitbucketCloud","json":{}} {"level":"info","ts":"2025-11-07T10:54:04.814-0300","caller":"server/server.go:504","msg":"Utilizing BoltDB","json":{}} {"level":"info","ts":"2025-11-07T10:54:04.827-0300","caller":"policy/conftest_client.go:168","msg":"failed to get default conftest version. Will attempt request scoped lazy loads DEFAULT_CONFTEST_VERSION not set","json":{}} {"level":"info","ts":"2025-11-07T10:54:04.827-0300","caller":"server/server.go:1114","msg":"Atlantis started - listening on port 4141","json":{}} {"level":"info","ts":"2025-11-07T10:54:04.827-0300","caller":"scheduled/executor_service.go:51","msg":"Scheduled Executor Service started","json":{}}
Without the flag:
./atlantis server --bitbucket-user '<user>' --bitbucket-token '<token>' --repo-allowlist '*' --log-level info
{"level":"info","ts":"2025-11-07T10:54:19.114-0300","caller":"server/server.go:343","msg":"Supported VCS Hosts: BitbucketCloud","json":{}} {"level":"info","ts":"2025-11-07T10:54:19.341-0300","caller":"server/server.go:504","msg":"Utilizing BoltDB","json":{}} {"level":"info","ts":"2025-11-07T10:54:19.350-0300","caller":"policy/conftest_client.go:168","msg":"failed to get default conftest version. Will attempt request scoped lazy loads DEFAULT_CONFTEST_VERSION not set","json":{}} {"level":"info","ts":"2025-11-07T10:54:19.352-0300","caller":"server/server.go:1114","msg":"Atlantis started - listening on port 4141","json":{}} {"level":"info","ts":"2025-11-07T10:54:19.352-0300","caller":"scheduled/executor_service.go:51","msg":"Scheduled Executor Service started","json":{}}
## references
• closes #5696
runatlantis/atlantisGitHub
11/08/2025, 1:47 AMGitHub
11/09/2025, 1:39 AMGitHub
11/10/2025, 1:13 AMGitHub
11/10/2025, 8:05 PMemail from user for bitbucket.
## why
My understanding of #5696 is that there has to be a separate "username" from "email" address in the new bitbucket authentication scheme, so I added a flag to tease that out:
atlantis % go run main.go server --bitbucket-user foo --bitbucket-token bar --repo-allowlist='hi'
Error: --bitbucket-email must be specified alongside --bitbucket-user
exit status 1
atlantis % go run main.go server --bitbucket-user foo --bitbucket-token bar --repo-allowlist='hi' --bitbucket-email=foo@bar
{"level":"info","ts":"2025-10-30T23:06:24.009-0400","caller":"server/server.go:345","msg":"Supported VCS Hosts: BitbucketCloud","json":{}}
DISCLAIMER: I've never used bitbucket before, and am just going off the description of a problem in #5696 to try to help out.
## tests
TODO: add tests
Also need to update documentation
## references
closes: #5696
runatlantis/atlantisGitHub
11/11/2025, 2:29 AMGitHub
11/11/2025, 3:44 AMGitHub
11/13/2025, 12:49 AMGitHub
11/14/2025, 12:17 AMGitHub
11/14/2025, 1:12 AM--ignore-vcs-status-names flag for the GitLab provider. Similar to #4978, this consults an ignore list when for commit status names when determining mergeability. If a commit status name can be parsed as {vcsstatusname}/... and that parsed vcsstatusname is present in the configured ignore list then it is skipped.
## why
Similar reasoning as expressed in #2848 for the existing GitHub-only feature - when multiple atlantis servers with different vcs-status-names operate on a single repo with a mergeable requirement they see pending pipeline statuses set by the other atlantis instances and report that the MR is not mergeable.
## tests
• I have tested my changes by adding unit test coverage. go test ./server/events/vcs passes, however an existing, unrelated, test failure at main/HEAD causes make test to fail.
## references
#2848
#4978
runatlantis/atlantisGitHub
11/14/2025, 4:38 AMGitHub
11/14/2025, 5:50 AMGitHub
11/15/2025, 1:16 AMGitHub
11/15/2025, 10:41 AM## [4.1.1] - 2025-11-12
### Security
• Fix prototype pollution issue in yaml merge (<<) operator.Commits • `cc482e7` 4.1.1 released • `50968b8` dist rebuild • `d092d86` lint fix • `383665f` fix prototype pollution in merge (<<) • `0d3ca7a` README.md: HTTP => HTTPS (#678) • `49baadd` doc: 'empty' style option for !!null • `ba3460e` Fix demo link (#618) • See full diff in compare view [Dependabot compatibility score](https://camo.githubusercontent.com/a6652d69213ed732db1d83bf133f0c8e6c472c25719efc164c44882409ccb891/68747470733a2f2f646570656e6461626f742d6261646765732e6769746875626170702e636f6d2f6261646765732f636f6d7061746962696c6974795f73636f72653f646570656e64656e63792d6e616d653d6a732d79616d6c267061636b6167652d6d616e616765723d6e706d5f616e645f7961726e2670726576696f75732d76657273696f6e3d342e312e30266e65772d76657273696f6e3d342e312e31) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.
---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
• @dependabot rebase will rebase this PR
• @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
• @dependabot merge will merge this PR after your CI passes on it
• @dependabot squash and merge will squash and merge this PR after your CI passes on it
• @dependabot cancel merge will cancel a previously requested merge and block automerging
• @dependabot reopen will reopen this PR if it is closed
• @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
• @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
• @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
• @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
• @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the Security Alerts page.
runatlantis/atlantisGitHub
11/15/2025, 6:12 PM" and the next word.
Additionally the wording was a bit confusing and long, this cleans it up a bit.
## tests
Before:
[Screenshot 2025-11-15 at 1 07 45 PM](https://private-user-images.githubusercontent.com/2678195/514791745-df7b7c14-c9d1-48c1-bf19-26c9b36ca2ff.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjMyMzA2OTAsIm5iZiI6MTc2MzIzMDM5MCwicGF0aCI6Ii8yNjc4MTk1LzUxNDc5MTc0NS1kZjdiN2MxNC1jOWQxLTQ4YzEtYmYxOS0yNmM5YjM2Y2EyZmYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MTExNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTExMTVUMTgxMzEwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Mzk3NjJlNTgzYWU0Zjc0ZGQ2YTljNzMzNGI5YWNhYWM1N2QzYWY5YmUxYzM4YTZjY2JlNzNhMmM3YTg1OTJkMyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.EJWkZMOFxcVShIUgAPUyNPUbLGdxFM9DJ3QaPJfQRzQ)
After:
[Screenshot 2025-11-15 at 1 05 56 PM](https://private-user-images.githubusercontent.com/2678195/514791793-2c8c0607-874f-475f-8614-59b764c4dc60.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NjMyMzA2OTAsIm5iZiI6MTc2MzIzMDM5MCwicGF0aCI6Ii8yNjc4MTk1LzUxNDc5MTc5My0yYzhjMDYwNy04NzRmLTQ3NWYtODYxNC01OWI3NjRjNGRjNjAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MTExNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTExMTVUMTgxMzEwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2RlYWNmOWZhZWUzNWE1YTdiYTljYjNkYTdhM2Y0MDM0MDM2NDI0ZTQxM2E4MWJkMjEzMjU3MTM3ZTk1NWVkYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.QXn4h28m9twNkrlSlIB33lNVnu_EDkEXLwPJ8fCkiu8)
## references
Follow up to #5935
runatlantis/atlantisGitHub
11/16/2025, 12:38 AMGitHub
11/16/2025, 6:25 AMTestApprovedPoliciesUpdateFailedPolicyStatus, the issue was that it was checking to make sure the policy passed, which, after the logic was moved, it always would, regardless of what user was specified.
atlantis % git diff
diff --git a/server/events/command_runner_test.go b/server/events/command_runner_test.go
index 84da1ffc..fabfe84d 100644
--- a/server/events/command_runner_test.go
+++ b/server/events/command_runner_test.go
@@ -1148,7 +1148,7 @@ func TestApprovedPoliciesUpdateFailedPolicyStatus(t *testing.T) {
CommandName: command.ApprovePolicies,
PolicySets: valid.PolicySets{
Owners: valid.PolicyOwners{
- Users: []string{testdata.User.Username},
+ Users: []string{"some different name that shouldn't work"},
},
},
},
atlantis % go test ./server/events -run TestApprovedPoliciesUpdateFailedPolicyStatus
ok <http://github.com/runatlantis/atlantis/server/events|github.com/runatlantis/atlantis/server/events> 0.412s
So the question is, why was TestFailedApprovalCreatesFailedStatusUpdate passing? It was checking to make sure that the command failed, so it should have failed immediately once the policy check was removed. The issue is that this test had a bug: it never specified a return value for ApprovePolicies, so got the "default" value of a ProjectResult. Part of the determination of whether pullStatus is "success" is the command name, and since ProjectResult contains command name, it got the "default" command name, which is Apply.
This is why I noticed it, because I am trying to remove command name from ProjectResult to prevent exactly this kind of bug (#5962).
```
atlantis % git diff
diff --git a/server/events/command_runner_test.go b/server/events/command_runner_test.go
index 84da1ffc..f7dc2c74 100644
--- a/server/events/command_runner_test.go
+++ b/server/events/command_runner_test.go
@@ -1104,6 +1104,14 @@ func TestFailedApprovalCreatesFailedStatusUpdate(t *testing.T) {
}, nil)
When(workingDir.GetPullDir(testdata.GithubRepo, testdata.Pull)).ThenReturn(tmp, nil)
+ When(projectCommandRunner.ApprovePolicies(Any[command.ProjectContext]())).Then(func(_ []Param) ReturnValues {
+ return ReturnValues{
+ command.ProjectResult{
+ Command: command.PolicyCheck,
+ PolicyCheckResults: &models.PolicyCheckResults{},
+ },
+ }
+ })
ch.RunCommentCommand(testdata.GithubRepo, &testdata.GithubRepo, &testdata.Pull, testdata.User, testdata.Pull.Num, &events.CommentCommand{Name: command.ApprovePolicies})
commitUpdater.VerifyWasCalledOnce().UpdateCombinedCount(
atlantis % go test ./server/events -run TestFailedApprovalCreatesFailedStatusUpdate
--- FAIL: TestFailedApprovalCreatesFailedStatusUpdate (0.04s)
command_runner_test.go1072 if "atlantis approve_policies" is run by non policy owner policy check status fails.
logger.go146 2025-11-16T005645.134-0500 DEBUG updating DB with pull results {"repo": "runatlantis/atlantis", "pull": "1"}
logger.go146 2025-11-16T005645.142-0500 DEBUG timer {"name": "atlantis_comment_approve_policies_execution_time", "value": "8.708583ms", "tags": {}, "type": "timer"}
testing_t_support.go41
/Users/lmassa/go/pkg/mod/github.com/petergtz/pegomock/v4@v4.2.0/testing_t_support.go:40 +0x48
github.com/petergtz/pegomock/v4.(*GenericMock).Verify(0x1400007e198, 0x0, {0x101d6d7e0, 0x1400001ebd0}, {0x101858735, 0x13}, {0x14000294cb0, 0x7, 0x7}, {0x140005c3048?, ...})
/Users/lmassa/go/pkg/mod/github.com/petergtz/pegomock/v4@v4.2.0/dsl.go:153 +0x520
github.com/runatlantis/atlantis/server/events/mocks.(*VerifierMockCommitStatusUpdater).UpdateCombinedCount(0x140005c3880, {_, }, {{, }, {, }, {, }, {, ...}, ...}, ...)
/Users/lmassa/atlantis/server/events/mocks/mock_commit_status_updater.go:182 +0x23c
github.com/runatlantis/atlantis/server/events_test.TestFailedApprovalCreatesFailedStatusUpdate(0x14000092e00)
/Users/lmassa/atlantis/server/events/command_runner_test.go:1117 +0x12e8
testing.tRunner(0x14000092e00, 0x101d5c220)
/Users/lmassa/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.4.darwin-arm64/src/testing/testing.go:1934 +0xc8
created by testing.(*T).Run in goroutine 1
/Users/lmassa/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.4.darwin-arm64/src/testing/testing.go:1997 +0x364
Mock invocation count for UpdateCombinedCount(Any(logging.SimpleLogging), Any(models.Repo), Any(models.PullRequest), Eq(1), Eq(3), Eq(0), Eq(2)) does not match expectation.
Expected: 1; but got: 0
Actual interactions with this mock were:
UpdateCombined(&logging.StructuredLogger{z:(*zap.SugaredLogger)(0x14000014078), levelzap.AtomicLevel{l(*atomic.Int32)(0x140000ab040)}, keepHistory:true, historybytes.Buffer{buf[]uint8{0x5b, 0x44, 0x42, 0x55, 0x47, 0x5d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x44, 0x42, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x75, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0xa}, off:0, lastRead:0}}, models.Repo{FullName:"runatlantis/atlantis", Owner:"runatlantis", Name:"atlantis", CloneURL:"https://user:password@github.com/runatlantis/atlantis.git", SanitizedCloneURL:"https://github.com/runatlantis/atlantis.git", VCSHostmodels.VCSHost{Hostname"github.com", Type:0}}, models.PullRequest{Num:1, HeadCommit:"", URL:"", HeadBranch:"", BaseBranch:"", Author:"", State:0, BaseRepomodels.Repo{FullName"runatlantis/atlantis", Owner:"runatlantis", Name:"atlantis", CloneURL:"https://user:password@github.com/runatlantis/atlantis.git", SanitizedCloneURL:"https://github.com/runatlantis/atlantis.git", VCSHostmodels.VCSHost{Hostname"github.com", Type:0}}}, 0, 3)
UpdateCombinedCount(&logging.StructuredLogger{z:(*zap.SugaredLogger)(0x14000014078), levelzap.AtomicLevel{l(*atomic.Int32)(0x140000ab040)}, keepHistory:true, historybytes.Buffer{buf[]uint8{0x5b, 0x44, 0x42, 0x55, 0x47, 0x5d, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x44, 0x42, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x70, 0x75, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0xa}, off:0, lastRead:0}}, models.Repo{FullName:"runatlantis/atlantis", Owner:"runatlantis", Name:"atlantis", CloneURL:"https://user:password@github.com/runatlantis/atlantis.git", SanitizedCloneURL:"https://github.com/runatlantis/atlantis.git", VCSHostmodels.VCSHost{Hostname"github.com", Type:0}}, models.PullRequest{Num:1, HeadCommit:"", URL:"", HeadBranch:"", BaseBranch:"", Author:"", State:0, BaseRepomodels.Repo{FullName"runatlantis/atlantis", Owner:"runatlan…
runatlantis/atlantisGitHub
11/17/2025, 1:16 AMtofu init in OpenTofu v1.10.6 and earlier could potentially use unbounded memory if there is a direct or indirect dependency on a maliciously-crafted module package distributed as a "tar" archive.
This would require the attacker to coerce a root module author to depend (directly or indirectly) on a module package they control, using the HTTP, Amazon S3, or Google Cloud Storage source types to refer to a tar archive.
This release incorporates the upstream fixes for CVE-2025-58183.
• When making requests to HTTPS servers, OpenTofu v1.10.6 and earlier could potentially use unbounded memory or crash with a "panic" error if TLS verification involves an excessively-long certificate chain or a chain including DSA public keys.
This affected all outgoing HTTPS requests made by OpenTofu itself, including requests to HTTPS-based state storage backends, module registries, and provider registries. For example, an attacker could coerce a root module author to depend (directly or indirectly) on a module they control which then refers to a module or provider from an attacker-controlled registry. That mode of attack would cause failures in tofu init, at module or provider installation time.
Provider plugins contain their own HTTPS client code, which may have similar problems. OpenTofu v1.10.7 cannot address similar problems within provider plugins, and so we recommend checking for similar advisories and fixes in the provider plugins you use.
This release incorporates upstream fixes for CVE-2025-58185, CVE-2025-58187, and CVE-2025-58188.
BUG FIXES:
• Fix crash in tofu test when using deprecated outputs (#3249)
• Fix missing provider functions when parentheses are used (#3402)
• for_each inside dynamic blocks can now call provider-defined functions. (#3429)
Full Changelog: opentofu/opentofu@v1.10.6...v1.10.7
---
### Configuration
📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻️ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
---
• If you want to rebase/retry this PR, check this box
---
This PR was generated by Mend Renovate. View the repository job log.
runatlantis/atlantisGitHub
11/18/2025, 3:07 AMGitHub
11/18/2025, 11:52 AMGitHub
11/18/2025, 11:53 AMGitHub
11/18/2025, 11:53 AM