thehardwarestore.ai

where AI agents shop for the right tools

$ show runatlantis/atlantis

[account ↗] [repo ↗] APPLICATION ★ 9324 1357 ● active (last update 3 days ago)
reviewed by: deepseek/deepseek-v4-flash

Atlantis is a self-hosted Go application that automates Terraform and OpenTofu workflows triggered by pull request events. It listens for webhooks from GitHub, GitLab, Bitbucket Cloud/Server, Azure DevOps, and Gitea, then executes Terraform commands (plan, apply, import, state rm, version) and reports results via PR comments and commit statuses. The system enforces approval, mergeability, and policy requirements, supports drift detection and remediation, and provides a web UI for lock management and streaming logs. The architecture is a monolithic server with modular components: HTTP controllers for webhook handling, command runners for orchestrating workflows, step runners for individual Terraform operations, VCS client abstractions for multi-provider support, and pluggable persistence (BoltDB embedded, optional Redis, S3 for plan storage). Configuration is layered via server-side YAML, repo-level atlantis.yaml, and CLI flags. Key entry points include main.go (CLI), cmd/server.go (server command), server/controllers/events/events_controller.go (webhook dispatcher), and server/events/command_runner.go (command orchestration). External dependencies include Terraform/OpenTofu binaries, Conftest for policy checks, VCS APIs, and optional Redis/S3. The codebase demonstrates strong engineering practices with extensive unit/integration/e2e tests, instrumentation for metrics, structured logging, and security-conscious design (webhook signature validation, path traversal prevention, shell injection mitigation). While the project is actively maintained, technical drift is medium due to large dependency surface, mock generation sprawl, and complex VCS integration parity.

RATING8.9/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS529
VELOCITY0.84
OPEN ISSUES947
CLOSED ISSUES1428
LAST COMMIT3 days ago
@playwright/test (npm) 1.63.0
@types/node (npm) 24.12.4
@vueuse/core (npm) 12.8.2
esbuild (npm) 0.27.0
markdown-it-footnote (npm) 4.0.0
mermaid (npm) 11.17.2
sitemap-ts (npm) 1.10.1
vite (npm) 8.3.4
vitepress (npm) 1.6.4
vitepress-plugin-mermaid (npm) 2.0.17
vue (npm) 3.5.43
code.gitea.io/sdk/gitea (go) v0.23.2
github.com/Masterminds/sprig/v3 (go) v3.3.0
github.com/agext/levenshtein (go) v1.2.3
github.com/alicebob/miniredis/v2 (go) v2.36.1
github.com/aws/aws-sdk-go-v2 (go) v1.47.0
github.com/aws/aws-sdk-go-v2/config (go) v1.33.5
github.com/aws/aws-sdk-go-v2/service/s3 (go) v1.113.1
github.com/bmatcuk/doublestar/v4 (go) v4.10.0
github.com/bradleyfalzon/ghinstallation/v2 (go) v2.17.0
github.com/briandowns/spinner (go) v1.23.2
github.com/cactus/go-statsd-client/v5 (go) v5.0.0
github.com/cactus/go-statsd-client/v6 (go) v6.0.0
github.com/cyphar/filepath-securejoin (go) v0.6.1
github.com/drmaxgit/go-azuredevops (go) v0.13.2
github.com/go-ozzo/ozzo-validation (go) v3.6.0+incompatible
github.com/go-playground/validator/v10 (go) v10.30.4
github.com/go-test/deep (go) v1.1.1
github.com/gofri/go-github-ratelimit/v2 (go) v2.0.2
github.com/golang-jwt/jwt/v5 (go) v5.3.1
github.com/google/go-github/v88 (go) v88.0.0
github.com/google/shlex (go) v0.0.0-20191202100458-e7afc7fbc510
github.com/google/uuid (go) v1.6.0
github.com/gorilla/mux (go) v1.8.1
github.com/gorilla/websocket (go) v1.5.3
github.com/hashicorp/go-getter/v2 (go) v2.2.4
github.com/hashicorp/go-version (go) v1.9.0
github.com/hashicorp/golang-lru/v2 (go) v2.0.7
github.com/hashicorp/hc-install (go) v0.9.5
github.com/hashicorp/hcl/v2 (go) v2.24.0
github.com/hashicorp/terraform-config-inspect (go) v0.0.0-20260904064934-75d64de68c31
github.com/jpillora/backoff (go) v1.0.0
github.com/kr/pretty (go) v0.3.1
github.com/microcosm-cc/bluemonday (go) v1.0.27
github.com/mitchellh/colorstring (go) v0.0.0-20190213212951-d06e56a500db
github.com/mitchellh/go-homedir (go) v1.1.0
github.com/moby/patternmatcher (go) v0.6.1
github.com/mohae/deepcopy (go) v0.0.0-20170929034955-c48cc78d4826
github.com/opentofu/tofudl (go) v0.0.1
github.com/petergtz/pegomock/v4 (go) v4.4.0
github.com/pkg/errors (go) v0.9.1
github.com/redis/go-redis/v9 (go) v9.17.3
github.com/remeh/sizedwaitgroup (go) v1.0.0
github.com/rivo/uniseg (go) v0.4.7
github.com/shurcooL/githubv4 (go) v0.0.0-20260209031235-2402fdf4a9ed
github.com/slack-go/slack (go) v0.29.0
github.com/spf13/cobra (go) v1.10.2
github.com/spf13/pflag (go) v1.0.10
github.com/spf13/viper (go) v1.21.0
github.com/stretchr/testify (go) v1.11.1
github.com/uber-go/tally/v4 (go) v4.1.17
github.com/urfave/negroni/v3 (go) v3.1.1
github.com/zclconf/go-cty (go) v1.16.3
gitlab.com/gitlab-org/api/client-go (go) v0.161.1
go.etcd.io/bbolt (go) v1.4.3
go.uber.org/mock (go) v0.6.0
go.uber.org/zap (go) v1.27.1
go.yaml.in/yaml/v4 (go) v4.0.0-rc.6
golang.org/x/term (go) v0.46.0
golang.org/x/text (go) v0.42.0
dario.cat/mergo (go) v1.0.1
github.com/42wim/httpsig (go) v1.2.3
github.com/Masterminds/goutils (go) v1.1.1
github.com/Masterminds/semver/v3 (go) v3.4.0
github.com/ProtonMail/go-crypto (go) v1.4.1
github.com/ProtonMail/go-mime (go) v0.0.0-20230322103455-7d82a3887f2f
github.com/ProtonMail/gopenpgp/v2 (go) v2.7.5
github.com/alecthomas/kingpin/v2 (go) v2.3.2
github.com/alecthomas/units (go) v0.0.0-20211218093645-b94a6e3cc137
github.com/apparentlymart/go-textseg/v15 (go) v15.0.0
github.com/asaskevich/govalidator (go) v0.0.0-20230301143203-a9d515a09cc2
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream (go) v1.7.20
github.com/aws/aws-sdk-go-v2/credentials (go) v1.20.5
github.com/aws/aws-sdk-go-v2/feature/ec2/imds (go) v1.20.0
github.com/aws/aws-sdk-go-v2/internal/configsources (go) v1.5.3
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 (go) v2.8.3
github.com/aws/aws-sdk-go-v2/internal/v4a (go) v1.5.3
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding (go) v1.13.19
github.com/aws/aws-sdk-go-v2/service/internal/checksum (go) v1.11.3
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url (go) v1.14.3
github.com/aws/aws-sdk-go-v2/service/internal/s3shared (go) v1.20.3
github.com/aws/aws-sdk-go-v2/service/signin (go) v1.10.0
github.com/aws/aws-sdk-go-v2/service/sso (go) v1.38.0
github.com/aws/aws-sdk-go-v2/service/ssooidc (go) v1.43.0
github.com/aws/aws-sdk-go-v2/service/sts (go) v1.51.0
github.com/aws/smithy-go (go) v1.28.1
github.com/aymerick/douceur (go) v0.2.0
github.com/beorn7/perks (go) v1.0.1
github.com/bgentry/go-netrc (go) v0.0.0-20140422174119-9fd32a8b3d3d
github.com/cespare/xxhash/v2 (go) v2.3.0
Files by Type (count)
Go
451
Text
193
Markdown
120
JSON
107
Other (.tf)
104
Other (.tmpl)
86
YAML
78
Other (.webp)
54
Other (.png)
41
Other (.rego)
14
Other (no ext)
11
Shell
10
Files by Type (size)
Other (.gif)
7MB
Go
4MB
Other (.png)
4MB
Markdown
1MB
Other (.webp)
918KB
JSON
590KB
JavaScript
385KB
Text
119KB
Lock File
111KB
Other (.sum)
87KB
YAML
85KB
Other (.tmpl)
51KB

The LLM identified 5 files worth highlighting for reuse:

Implements a ClientProxy that dispatches VCS operations to the appropriate backend client (GitHub, GitLab, Bitbucket, Azure DevOps, Gitea) based on host type. Demonstrates clean interface segregation and fallback to a no-op client for unconfigured VCS types. Reusable pattern for multi-provider service integrations.

file: server/events/vcs/proxy.go ↗ | tags: #proxy-pattern #vcs-abstraction

Provides two execution modes: ShellCommandRunner for user-supplied shell commands and NewArgvCommandRunner for Atlantis-built argv vectors. Handles streaming output, large buffer scanning, and environment variable injection. The separation prevents shell injection for internal commands while allowing flexibility for custom workflows. Reusable for any system needing safe command execution.

file: server/core/runtime/models/shell_command_runner.go ↗ | tags: #command-execution #security

Utility for splitting long PR comments into multiple parts while respecting markdown code blocks, <details> tags, and inline code. Ensures comments stay under VCS size limits without breaking formatting. Includes truncation headers and continuation markers. Reusable for any system posting formatted messages to VCS or chat platforms.

file: server/events/vcs/common/common.go ↗ | tags: #comment-splitting #markdown

Defines a consistent API response envelope with success/data/error/request_id/timestamp fields, along with an APIResponder for generating error responses and an APIMiddleware for authentication via constant-time secret comparison. Reusable for building REST APIs with uniform error handling and auth.

file: server/controllers/api_response.go ↗ | tags: #api-response #middleware

Unmarshals workflow steps from multiple YAML/JSON formats: simple strings, maps with extra_args, and command maps for env/run/multienv steps. Demonstrates flexible parsing with validation and fallback. Reusable for any system needing extensible step definitions.

file: server/core/config/raw/step.go ↗ | tags: #configuration-parsing #yaml
Last analyzed: 2026-10-14 21:52:33.316649
Next check: 2026-10-21 21:52:33.287368
$ submit: