Skip to content

Commit 7afd471

Browse files
committed
Merge branch 'main' into fix/vcs-status-custom-policy
Signed-off-by: bakuljajan <[email protected]>
2 parents caf974d + f3ed6c4 commit 7afd471

File tree

71 files changed

+1910
-469
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1910
-469
lines changed

.github/renovate.json5

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
automerge: true,
1010
baseBranches: [
1111
'main',
12-
'/^release-.*/',
12+
'release-0.31',
13+
'release-0.32',
1314
],
1415
platformAutomerge: true,
1516
labels: [

.github/workflows/atlantis-image.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ jobs:
7676
go-version-file: "go.mod"
7777

7878
- name: Set up QEMU
79-
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3
79+
uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3
8080
with:
8181
image: tonistiigi/binfmt:latest
8282
platforms: arm64,arm
@@ -146,7 +146,7 @@ jobs:
146146
- name: "Build ${{ env.PUSH == 'true' && 'and push' || '' }} ${{ env.DOCKER_REPO }} image"
147147
id: build
148148
if: contains(fromJson('["push", "pull_request"]'), github.event_name)
149-
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
149+
uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6
150150
with:
151151
cache-from: type=gha
152152
cache-to: type=gha,mode=max
@@ -213,7 +213,7 @@ jobs:
213213
214214
- name: "Build and load into Docker"
215215
if: contains(fromJson('["push", "pull_request"]'), github.event_name)
216-
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
216+
uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6
217217
with:
218218
cache-from: type=gha
219219
cache-to: type=gha,mode=max

.github/workflows/codeql.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777

7878
# Initializes the CodeQL tools for scanning.
7979
- name: Initialize CodeQL
80-
uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3
80+
uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3
8181
with:
8282
languages: ${{ matrix.language }}
8383
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -91,7 +91,7 @@ jobs:
9191
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
9292
# If this step fails, then you should remove it and run the build manually (see below)
9393
- name: Autobuild
94-
uses: github/codeql-action/autobuild@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3
94+
uses: github/codeql-action/autobuild@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3
9595

9696
# ℹ️ Command-line programs to run using the OS shell.
9797
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -104,7 +104,7 @@ jobs:
104104
# ./location_of_script_within_repo/buildscript.sh
105105

106106
- name: Perform CodeQL Analysis
107-
uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3
107+
uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3
108108
with:
109109
category: "/language:${{matrix.language}}"
110110

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
if: needs.changes.outputs.should-run-tests == 'true'
4949
name: Tests
5050
runs-on: ubuntu-24.04
51-
container: ghcr.io/runatlantis/testing-env:latest@sha256:79991418aec4e5dcb1f18dc7b7bdf6ee37302a30a1e374c7bcf3eba9aadef68d
51+
container: ghcr.io/runatlantis/testing-env:latest@sha256:45ec58ba11af5196fb70ced526ccb1996f0e58a7dbd93f7dcba96eed49209583
5252
steps:
5353
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
5454

.github/workflows/testing-env-image.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
4444

4545
- name: Set up QEMU
46-
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3
46+
uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3
4747
with:
4848
image: tonistiigi/binfmt:latest
4949
platforms: arm64,arm
@@ -60,7 +60,7 @@ jobs:
6060

6161
- run: echo "TODAY=$(date +"%Y.%m.%d")" >> $GITHUB_ENV
6262
- name: Build and push testing-env:${{env.TODAY}} image
63-
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6
63+
uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6
6464
with:
6565
cache-from: type=gha
6666
cache-to: type=gha,mode=max

.github/workflows/website.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
5050

5151
- name: markdown-lint
52-
uses: DavidAnson/markdownlint-cli2-action@eb5ca3ab411449c66620fe7f1b3c9e10547144b0 # v18
52+
uses: DavidAnson/markdownlint-cli2-action@a23dae216ce3fee4db69da41fed90d2a4af801cf # v19
5353
with:
5454
config: .markdownlint.yaml
5555
globs: 'runatlantis.io/**/*.md'

Dockerfile

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# syntax=docker/dockerfile:1@sha256:93bfd3b68c109427185cd78b4779fc82b484b0b7618e36d0f104d4d801e66d25
22
# what distro is the image being built for
3-
ARG ALPINE_TAG=3.21.0@sha256:21dc6063fd678b478f57c0e13f47560d0ea4eeba26dfc947b2a4f81f686b9f45
3+
ARG ALPINE_TAG=3.21.2@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099
44
ARG DEBIAN_TAG=12.8-slim@sha256:d365f4920711a9074c4bcd178e8f457ee59250426441ab2a5f8106ed8fe948eb
5-
ARG GOLANG_TAG=1.23.4-alpine@sha256:6c5c9590f169f77c8046e45c611d3b28fe477789acd8d3762d23d4744de69812
5+
ARG GOLANG_TAG=1.23.4-alpine@sha256:c23339199a08b0e12032856908589a6d41a0dab141b8b3b21f156fc571a3f1d3
66

77
# renovate: datasource=github-releases depName=hashicorp/terraform versioning=hashicorp
88
ARG DEFAULT_TERRAFORM_VERSION=1.10.3
@@ -13,7 +13,11 @@ ARG DEFAULT_CONFTEST_VERSION=0.56.0
1313

1414
# Stage 1: build artifact and download deps
1515

16-
FROM golang:${GOLANG_TAG} AS builder
16+
FROM --platform=$BUILDPLATFORM golang:${GOLANG_TAG} AS builder
17+
18+
# These are automatically populated by Docker
19+
ARG TARGETOS
20+
ARG TARGETARCH
1721

1822
ARG ATLANTIS_VERSION=dev
1923
ENV ATLANTIS_VERSION=${ATLANTIS_VERSION}
@@ -42,7 +46,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
4246
COPY . /app
4347
RUN --mount=type=cache,target=/go/pkg/mod \
4448
--mount=type=cache,target=/root/.cache/go-build \
45-
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X 'main.version=${ATLANTIS_VERSION}' -X 'main.commit=${ATLANTIS_COMMIT}' -X 'main.date=${ATLANTIS_DATE}'" -v -o atlantis .
49+
CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -trimpath -ldflags "-s -w -X 'main.version=${ATLANTIS_VERSION}' -X 'main.commit=${ATLANTIS_COMMIT}' -X 'main.date=${ATLANTIS_DATE}'" -v -o atlantis .
4650

4751
FROM debian:${DEBIAN_TAG} AS debian-base
4852

@@ -155,7 +159,7 @@ COPY --from=deps /usr/bin/git-lfs /usr/bin/git-lfs
155159
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
156160

157161
# renovate: datasource=repology depName=alpine_3_21/ca-certificates versioning=loose
158-
ENV CA_CERTIFICATES_VERSION="20241010"
162+
ENV CA_CERTIFICATES_VERSION="20241121-r1"
159163

160164
# Install packages needed to run Atlantis.
161165
# We place this last as it will bust less docker layer caches when packages update

cmd/server.go

+25-12
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const (
7272
CheckoutStrategyFlag = "checkout-strategy"
7373
ConfigFlag = "config"
7474
DataDirFlag = "data-dir"
75+
DefaultTFDistributionFlag = "default-tf-distribution"
7576
DefaultTFVersionFlag = "default-tf-version"
7677
DisableApplyAllFlag = "disable-apply-all"
7778
DisableAutoplanFlag = "disable-autoplan"
@@ -141,7 +142,7 @@ const (
141142
SSLCertFileFlag = "ssl-cert-file"
142143
SSLKeyFileFlag = "ssl-key-file"
143144
RestrictFileList = "restrict-file-list"
144-
TFDistributionFlag = "tf-distribution"
145+
TFDistributionFlag = "tf-distribution" // deprecated for DefaultTFDistributionFlag
145146
TFDownloadFlag = "tf-download"
146147
TFDownloadURLFlag = "tf-download-url"
147148
UseTFPluginCache = "use-tf-plugin-cache"
@@ -421,8 +422,8 @@ var stringFlags = map[string]stringFlag{
421422
description: fmt.Sprintf("File containing x509 private key matching --%s.", SSLCertFileFlag),
422423
},
423424
TFDistributionFlag: {
424-
description: fmt.Sprintf("Which TF distribution to use. Can be set to %s or %s.", TFDistributionTerraform, TFDistributionOpenTofu),
425-
defaultValue: DefaultTFDistribution,
425+
description: "[Deprecated for --default-tf-distribution].",
426+
hidden: true,
426427
},
427428
TFDownloadURLFlag: {
428429
description: "Base URL to download Terraform versions from.",
@@ -437,6 +438,10 @@ var stringFlags = map[string]stringFlag{
437438
" Only set if using TFC/E as a remote backend." +
438439
" Should be specified via the ATLANTIS_TFE_TOKEN environment variable for security.",
439440
},
441+
DefaultTFDistributionFlag: {
442+
description: fmt.Sprintf("Which TF distribution to use. Can be set to %s or %s.", TFDistributionTerraform, TFDistributionOpenTofu),
443+
defaultValue: DefaultTFDistribution,
444+
},
440445
DefaultTFVersionFlag: {
441446
description: "Terraform version to default to (ex. v0.12.0). Will download if not yet on disk." +
442447
" If not set, Atlantis uses the terraform binary in its PATH.",
@@ -840,12 +845,13 @@ func (s *ServerCmd) run() error {
840845

841846
// Config looks good. Start the server.
842847
server, err := s.ServerCreator.NewServer(userConfig, server.Config{
843-
AllowForkPRsFlag: AllowForkPRsFlag,
844-
AtlantisURLFlag: AtlantisURLFlag,
845-
AtlantisVersion: s.AtlantisVersion,
846-
DefaultTFVersionFlag: DefaultTFVersionFlag,
847-
RepoConfigJSONFlag: RepoConfigJSONFlag,
848-
SilenceForkPRErrorsFlag: SilenceForkPRErrorsFlag,
848+
AllowForkPRsFlag: AllowForkPRsFlag,
849+
AtlantisURLFlag: AtlantisURLFlag,
850+
AtlantisVersion: s.AtlantisVersion,
851+
DefaultTFDistributionFlag: DefaultTFDistributionFlag,
852+
DefaultTFVersionFlag: DefaultTFVersionFlag,
853+
RepoConfigJSONFlag: RepoConfigJSONFlag,
854+
SilenceForkPRErrorsFlag: SilenceForkPRErrorsFlag,
849855
})
850856

851857
if err != nil {
@@ -921,8 +927,11 @@ func (s *ServerCmd) setDefaults(c *server.UserConfig, v *viper.Viper) {
921927
if c.RedisPort == 0 {
922928
c.RedisPort = DefaultRedisPort
923929
}
924-
if c.TFDistribution == "" {
925-
c.TFDistribution = DefaultTFDistribution
930+
if c.TFDistribution != "" && c.DefaultTFDistribution == "" {
931+
c.DefaultTFDistribution = c.TFDistribution
932+
}
933+
if c.DefaultTFDistribution == "" {
934+
c.DefaultTFDistribution = DefaultTFDistribution
926935
}
927936
if c.TFDownloadURL == "" {
928937
c.TFDownloadURL = DefaultTFDownloadURL
@@ -953,7 +962,7 @@ func (s *ServerCmd) validate(userConfig server.UserConfig) error {
953962
return fmt.Errorf("invalid log level: must be one of %v", ValidLogLevels)
954963
}
955964

956-
if userConfig.TFDistribution != TFDistributionTerraform && userConfig.TFDistribution != TFDistributionOpenTofu {
965+
if userConfig.DefaultTFDistribution != TFDistributionTerraform && userConfig.DefaultTFDistribution != TFDistributionOpenTofu {
957966
return fmt.Errorf("invalid tf distribution: expected one of %s or %s",
958967
TFDistributionTerraform, TFDistributionOpenTofu)
959968
}
@@ -1172,6 +1181,10 @@ func (s *ServerCmd) deprecationWarnings(userConfig *server.UserConfig) error {
11721181
// }
11731182
//
11741183

1184+
if userConfig.TFDistribution != "" {
1185+
deprecatedFlags = append(deprecatedFlags, TFDistributionFlag)
1186+
}
1187+
11751188
if len(deprecatedFlags) > 0 {
11761189
warning := "WARNING: "
11771190
if len(deprecatedFlags) == 1 {

cmd/server_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ var testFlags = map[string]interface{}{
7373
CheckoutStrategyFlag: CheckoutStrategyMerge,
7474
CheckoutDepthFlag: 0,
7575
DataDirFlag: "/path",
76+
DefaultTFDistributionFlag: "terraform",
7677
DefaultTFVersionFlag: "v0.11.0",
7778
DisableApplyAllFlag: true,
7879
DisableMarkdownFoldingFlag: true,
@@ -977,6 +978,46 @@ func TestExecute_AutoplanFileList(t *testing.T) {
977978
}
978979
}
979980

981+
func TestExecute_ValidateDefaultTFDistribution(t *testing.T) {
982+
cases := []struct {
983+
description string
984+
flags map[string]interface{}
985+
expectErr string
986+
}{
987+
{
988+
"terraform",
989+
map[string]interface{}{
990+
DefaultTFDistributionFlag: "terraform",
991+
},
992+
"",
993+
},
994+
{
995+
"opentofu",
996+
map[string]interface{}{
997+
DefaultTFDistributionFlag: "opentofu",
998+
},
999+
"",
1000+
},
1001+
{
1002+
"errs on invalid distribution",
1003+
map[string]interface{}{
1004+
DefaultTFDistributionFlag: "invalid_distribution",
1005+
},
1006+
"invalid tf distribution: expected one of terraform or opentofu",
1007+
},
1008+
}
1009+
for _, testCase := range cases {
1010+
t.Log("Should validate default tf distribution when " + testCase.description)
1011+
c := setupWithDefaults(testCase.flags, t)
1012+
err := c.Execute()
1013+
if testCase.expectErr != "" {
1014+
ErrEquals(t, testCase.expectErr, err)
1015+
} else {
1016+
Ok(t, err)
1017+
}
1018+
}
1019+
}
1020+
9801021
func setup(flags map[string]interface{}, t *testing.T) *cobra.Command {
9811022
vipr := viper.New()
9821023
for k, v := range flags {

docker-compose.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ services:
1414
depends_on:
1515
- atlantis
1616
redis:
17-
image: redis:7.4-alpine@sha256:c1e88455c85225310bbea54816e9c3f4b5295815e6dbf80c34d40afc6df28275
17+
image: redis:7.4-alpine@sha256:1bf97f21f01b0e7bd4b7b34a26d3b9d8086e41e70c10f262e8a9e0b49b5116a0
1818
restart: always
1919
ports:
2020
- 6379:6379

go.mod

+1-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
code.gitea.io/sdk/gitea v0.19.0
77
github.com/Masterminds/sprig/v3 v3.3.0
88
github.com/alicebob/miniredis/v2 v2.34.0
9-
github.com/bradleyfalzon/ghinstallation/v2 v2.12.0
9+
github.com/bradleyfalzon/ghinstallation/v2 v2.13.0
1010
github.com/briandowns/spinner v1.23.1
1111
github.com/cactus/go-statsd-client/v5 v5.1.0
1212
github.com/go-ozzo/ozzo-validation v3.6.0+incompatible
@@ -45,7 +45,6 @@ require (
4545
github.com/stretchr/testify v1.10.0
4646
github.com/uber-go/tally/v4 v4.1.16
4747
github.com/urfave/negroni/v3 v3.1.1
48-
github.com/xanzy/go-gitlab v0.115.0
4948
gitlab.com/gitlab-org/api/client-go v0.118.0
5049
go.etcd.io/bbolt v1.3.11
5150
go.uber.org/zap v1.27.0
@@ -144,6 +143,3 @@ require (
144143
google.golang.org/protobuf v1.36.0 // indirect
145144
gopkg.in/ini.v1 v1.67.0 // indirect
146145
)
147-
148-
// upstream pr to patch go-github to use v68, https://github.com/bradleyfalzon/ghinstallation/pull/137
149-
replace github.com/bradleyfalzon/ghinstallation/v2 => github.com/chenrui333/ghinstallation/v2 v2.12.1-0.20241231170237-36dcfb064b2f

go.sum

+2-4
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
7575
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
7676
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=
7777
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
78+
github.com/bradleyfalzon/ghinstallation/v2 v2.13.0 h1:5FhjW93/YLQJDmPdeyMPw7IjAPzqsr+0jHPfrPz0sZI=
79+
github.com/bradleyfalzon/ghinstallation/v2 v2.13.0/go.mod h1:EJ6fgedVEHa2kUyBTTvslJCXJafS/mhJNNKEOCspZXQ=
7880
github.com/briandowns/spinner v1.23.1 h1:t5fDPmScwUjozhDj4FA46p5acZWIPXYE30qW2Ptu650=
7981
github.com/briandowns/spinner v1.23.1/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
8082
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
@@ -90,8 +92,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
9092
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
9193
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
9294
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
93-
github.com/chenrui333/ghinstallation/v2 v2.12.1-0.20241231170237-36dcfb064b2f h1:TN3fEfE18MJ+o3Y4PMUWu1S9IVYL7a82G3LVa8zJ7/c=
94-
github.com/chenrui333/ghinstallation/v2 v2.12.1-0.20241231170237-36dcfb064b2f/go.mod h1:EJ6fgedVEHa2kUyBTTvslJCXJafS/mhJNNKEOCspZXQ=
9595
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
9696
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
9797
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -461,8 +461,6 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
461461
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
462462
github.com/urfave/negroni/v3 v3.1.1 h1:6MS4nG9Jk/UuCACaUlNXCbiKa0ywF9LXz5dGu09v8hw=
463463
github.com/urfave/negroni/v3 v3.1.1/go.mod h1:jWvnX03kcSjDBl/ShB0iHvx5uOs7mAzZXW+JvJ5XYAs=
464-
github.com/xanzy/go-gitlab v0.115.0 h1:6DmtItNcVe+At/liXSgfE/DZNZrGfalQmBRmOcJjOn8=
465-
github.com/xanzy/go-gitlab v0.115.0/go.mod h1:5XCDtM7AM6WMKmfDdOiEpyRWUqui2iS9ILfvCZ2gJ5M=
466464
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
467465
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
468466
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=

runatlantis.io/docs/repo-level-atlantis-yaml.md

+15
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ projects:
6666
branch: /main/
6767
dir: .
6868
workspace: default
69+
terraform_distribution: terraform
6970
terraform_version: v0.11.0
7071
delete_source_branch_on_merge: true
7172
repo_locking: true # deprecated: use repo_locks instead
@@ -262,6 +263,20 @@ See [Custom Workflow Use Cases: Terragrunt](custom-workflows.md#terragrunt)
262263

263264
See [Custom Workflow Use Cases: Running custom commands](custom-workflows.md#running-custom-commands)
264265

266+
### Terraform Distributions
267+
268+
If you'd like to use a different distribution of Terraform than what is set
269+
by the `--default-tf-version` flag, then set the `terraform_distribution` key:
270+
271+
```yaml
272+
version: 3
273+
projects:
274+
- dir: project1
275+
terraform_distribution: opentofu
276+
```
277+
278+
Atlantis will automatically download and use this distribution. Valid values are `terraform` and `opentofu`.
279+
265280
### Terraform Versions
266281

267282
If you'd like to use a different version of Terraform than what is in Atlantis'

0 commit comments

Comments
 (0)