Commit Graph

656 Commits

Author SHA1 Message Date
Quan Hoang
8b20bebf16 Determine Terraform Cloud workspace from configuration (#2432) 2022-09-30 13:36:53 -07:00
giuli007
2cd8bd9ccc Delete previous plans on autoplan or atlantis plan (#1633)
* Delete previous plans on autoplan or atlantis plan

When using non-default workspaces, plans are stored
in pr-and-workspace-specific directories.
If a PR is subsequently updated it might happen that
some of the plans are no longer relevant with regards
to the latest changes.
This change ensures that plans are always deleted
when a generic plan is triggered either by autoplan
or by a "atlantis plan" command.
NB Plans are not cleaned up when specific projects are
planned explicitly with "atlantis plan -p/-d/-w".

* Also delete locks along with plans when running
autoplan or generic plan command

* Fix Plan deletion tests after 0.19.8 rebase

* Fix Plan deletion tests after v0.19.9-pre.20220912 rebase

* Rename struct field to follow camelCase naming convention

Co-authored-by: giuli007 <giuglioz@gmail.com>
2022-09-23 14:31:24 -07:00
Alberto Llamas
9829fa23c2 Fix: Error when enabling prometheus metrics (#2379) (#2528)
Prometheus metrics names have some restrictions that must match the regex `[a-zA-Z_:][a-zA-Z0-9_:]*`
2022-09-20 21:27:30 -07:00
Rui Chen
6fd8130fe1 lint: gofmt -w -s . (#2504)
Signed-off-by: Rui Chen <rui@chenrui.dev>

Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-09-12 18:08:46 -07:00
Stas Ostrovskyi
b8297bb1f8 fix: Set mergeable correctly when branch protection doesn't require reviewers (#2470)
* Allow no required reviewers

* Fix comment in tests

Co-authored-by: Stas Ostrovskyi <stasostrovskyi@users.noreply.github.com>
2022-09-08 13:54:50 -07:00
Rui Chen
b5e985c158 lint: remove deprecated io/util package (#2503)
As of go1.16, io/util package has been deprecated

See issue, https://github.com/golang/go/issues/42026

Signed-off-by: Rui Chen <rui@chenrui.dev>

Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-09-08 13:45:00 -04:00
Andrei Vydrin
2d7ee9dfa8 feat: support parallel with execution order groups (#2403) 2022-09-08 06:14:59 -07:00
Yurii Soldak
9f31e49be8 Use single github v4 client (#2480) 2022-09-08 06:04:35 -07:00
Paul O'Connor
4143c87559 bug: Fix GitHub Markdown for added and deleted resources (#2418)
* bug: Fix GitHub Markdown for added and deleted resources

* Fix spacing in test
2022-09-07 17:48:10 -07:00
Daniel Thompson
ab2cdb833a External Locking DB: Redis (#2491)
* Initial build out of redis backend

* Regenerate locking mocks and matchers

* More test cleanup

* More test fixes

* Added tests for redis

* Test fix

* Linting fix

* Dcos update

* Update redis.go

* Update server.go

* Adding nolint to RedisDB struct
2022-09-07 16:57:06 -07:00
Yurii Soldak
a4a49bf46f Use proper http client for github v4 api (#2479)
* Use proper http client for github v4 api

* Remove extra print lines

Co-authored-by: Ray Terrill <rayterrill@users.noreply.github.com>
2022-09-07 16:51:23 -07:00
Håvard Anda Estensen
e1862f0e2d Omit type declaration of vars (#2476) 2022-08-30 09:45:04 -07:00
Jonas
5bf7c93f3e ignore GitLab Draft MRs (#2468)
* feat: ignore GitLab Draft MRs

* deepcopy and overwrite unit under test

* add tests for close actions
2022-08-25 10:47:21 -07:00
Ray Terrill
89d33a0737 Make required atlantis/apply status check work with mergeable (#2436)
* Make required apply work with mergeable

* Fix lint hint

* Migrate mergeable approval check to graphql, update tests

* Adding support for check suites

* Adding feature flag protection for new functionality

* Fix linting falsepos

* Adjusted logic to handle required check runs, added doc
2022-08-18 09:46:50 -07:00
Pantelis Karamolegkos
8691b5f79d Removing the check about whether a slack channel exists (#2386) 2022-07-28 08:43:13 -07:00
Rémi Lapeyre
b409cb8470 Add the /plan and /apply endpoints (#997)
* Add the /plan and /apply endpoints

* Resolve conflicts

* Fix wrong merge

* Add missing methods for mocks

* Fix linting error

* Fix linting error

* Move api plan/apply into APIController

* Extract commond code into helper functions

* Implement GetCloneURL for GitHub

Co-authored-by: Li Lin <li.lin@hashicorp.com>
2022-07-27 11:36:49 -07:00
ribejara-te
e0e29bddee fix: repository cloning race condition (#2341) (#2348)
* fix: repository cloning race condition (#2341)

* fix: switched from sync to golang.org/x/sync/semaphore

* fix: check value of sem.Acquire(...)
2022-07-27 10:37:07 -07:00
Li Lin
e153cea2bf Revert "[fix] Ignore commit checks for atlantis apply on Github (#2311)" (#2388)
* Revert "[fix] Ignore commit checks for atlantis apply on Github (#2311)"

This reverts commit a3db712920.
2022-07-13 17:11:03 -07:00
Paul O'Connor
7a6b5b85bb Only highlight Terraform changes on GitHub (#2337) 2022-07-12 08:58:39 -07:00
Li Lin
6b0fe76f4e Add --var-file-allowlist in server configuration (#2362) 2022-07-07 10:32:18 -07:00
Rui Chen
2ae89d609c deps: upgrade github.com/docker/docker (#2366)
* deps: upgrade github.com/docker/docker

Signed-off-by: Rui Chen <rui@chenrui.dev>

* pkg: `docker/docker` -> moby/moby

Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-07-06 20:54:48 -04:00
Andrey Vydrin
569031ab23 feat: add execution order group (#2178)
* feat: add execution order group

to apply/plan by order

* fix: use official golanci-lint script
2022-06-29 12:01:54 -07:00
PePe Amengual
77706cb578 Revert "fix: Delete locks and workdirs with potentially stale previous plans which fixes 1624 (#1704)" (#2316)
This reverts commit 82ac706273.
2022-06-28 17:54:57 -07:00
Dominic Barnes
5da69620cf trim whitespace from comments before parsing (#2287) 2022-06-22 11:34:12 -07:00
Aiden Scandella
ff1094fa04 feat: stream output for custom workflows (#2261)
* Start threading job output to RunStepRunner

* Strip ANSI

* Fix lint

* Use waitgroup to avoid test flakiness

* Move waitgroup higher

* Add ANSI test and use strings.Builder

* Fix lint

* Use errors.Wrap per style guide

* Create ShellCommandRunner to encapsulate streaming

* WIP: shell command runner

* Update signatures to propagate error finding version

* Fix log output

* Fix error checking

* Fix accidental whitespace stripping

* Remove unused struct field

* Fix error checking in terraform client

* Add unit tests to verify command output handler was called

* Remove err from async interface

* Remove duplicative log now that shell command runner does it

* Hide output in stream for env/multienv

* Add comment explaining goroutines

* Use printf for better macOS compatibility
2022-06-22 09:29:41 -07:00
Michel Z. Santello
df0d58d29b fix: vcs-status-name hardcoded in PullIsMergeable function (#2312)
* feat: add userConfig.VCSStatusName to applyCommandRunner context

* fix: use vcsstatusname from context

* chore: normalize tests

* chore: update interface mock
2022-06-16 09:26:20 -07:00
Rui Chen
6f7f8f2c5c test: update tests per command package refactoring (#2317) 2022-06-13 17:16:13 -04:00
Chico Venancio
a3db712920 [fix] Ignore commit checks for atlantis apply on Github (#2311)
* [fix] Ignore commit checks for atlantis apply on Github

* Fix typo

* Fmt

* lint
2022-06-13 09:40:05 -07:00
giuli007
82ac706273 fix: Delete locks and workdirs with potentially stale previous plans which fixes 1624 (#1704)
* Delete previous plans on autoplan or atlantis plan

When using non-default workspaces, plans are stored
in pr-and-workspace-specific directories.
If a PR is subsequently updated it might happen that
some of the plans are no longer relevant with regards
to the latest changes.
This change ensures that plans are always deleted
when a generic plan is triggered either by autoplan
or by a "atlantis plan" command.
NB Plans are not cleaned up when specific projects are
planned explicitly with "atlantis plan -p/-d/-w".

* Use DeleteLockCommand to delete locks and workdirs
containing previous plans

Co-authored-by: giuli007 <giuglioz@gmail.com>
2022-06-10 21:18:01 -07:00
Quan Hoang
3744535dac Further parse Gitlab MergeRequest Update events (#1301) 2022-06-09 20:42:58 -07:00
nitrocode
82cf170d8f Ignore gpg signing for tests (#2296) 2022-06-05 20:06:24 -07:00
Aiden Scandella
8bc3c087bc fix: working dir tests initial branch assumes "master" (#2264)
This fixes the tests to not rely in the implicit value of the
"defaultBranch" git configuration value, since they later assume that
it's "master".

For example, if you run:

```sh
git config --global init.defaultBranch main
```

And then run these tests, you get:

```sh
--- FAIL: TestClone_CheckoutMergeNoneExisting (0.68s)
    working_dir_test.go:71: err running "git checkout master": error:
    pathspec 'master' did not match any file(s) known to git

    --- FAIL: TestClone_CheckoutMergeNoReclone (0.68s)
        working_dir_test.go:127: err running "git checkout master":
        error: pathspec 'master' did not match any file(s) known to git

        --- FAIL: TestClone_CheckoutMergeNoRecloneFastForward (0.68s)
            logger.go:130: 2022-05-17T10:05:33.665-0700 INFO    creating
            dir "/tmp/3762936464/repos/0/default"
                working_dir_test.go:198: unexpected error: running git
                clone --branch master --single-branch
                file:///tmp/3657236513 /tmp/3762936464/repos/0/default:
                Cloning into '/tmp/3762936464/repos/0/default'...
                        warning: Could not find remote branch master to
                        clone.
                                fatal: Remote branch master not found in
                                upstream origin
                                        : exit status 128
                                        --- FAIL:
                                        TestClone_CheckoutMergeConflict
                                        (0.68s)
      working_dir_test.go:232: err running "git checkout master": error:
      pathspec 'master' did not match any file(s) known to git

      --- FAIL: TestClone_MasterHasDiverged (0.68s)
          working_dir_test.go:344: err running "git clone --branch
          master --single-branch /tmp/1931262087 .": Cloning into '.'...
                  warning: Could not find remote branch master to clone.
                          fatal: Remote branch master not found in
                          upstream origin

                          --- FAIL: TestHasDiverged_MasterHasDiverged
(0.68s)
      working_dir_test.go:415: err running "git clone --branch master
      --single-branch /tmp/2356723317 .": Cloning into '.'...
              warning: Could not find remote branch master to clone.
                      fatal: Remote branch master not found in upstream
                      origin

                      FAIL
                      FAIL
                      github.com/runatlantis/atlantis/server/events
                      7.269s
                      FAIL
```
2022-05-17 10:55:02 -07:00
Aiden Scandella
517358e612 Fix branch CI pipeline due to unchecked err in test (#2263)
Currently this is failing on PRs

```
server/events/vcs/gitlab_client_test.go:301:14: Error return value of `w.Write` is not checked (errcheck)
                                                w.Write([]byte(response))
```
2022-05-17 10:33:39 -07:00
Michel Z. Santello
02a1bb6507 [fix] ignore commit status for apply jobs (#2135) (#2137)
* fix: update commit status check logic to match the commit status name

* Update server/events/vcs/gitlab_client.go

chore: simplify ignored statuses logic

Co-authored-by: Emil 'Skeen' Madsen <sovende@gmail.com>

* feat(gitlab_client_test): add PullIsMergeable test case

Co-authored-by: Emil 'Skeen' Madsen <sovende@gmail.com>
2022-05-16 14:05:47 -07:00
Istvan Tapaszto
a491542b48 feat: MultiEnv step added (#1793)
* MultiEnv step added

* Values removed from the output

* Fixing tests

* multienv_step_runner_test added

* Documentation of new feature added

* Documentatation of new feature  modified

* multienv_step test file extension changed

* Fixed multinev_step_runner test

* Enhanced debug logging in multienv_step_runner

* Enhanced errorhandling

* Test command modified

* Test command modified

* Test command modified

* Test command modified

* Errorhandling modified

* Test command modified

* Test command modified

* Create empty map in test

* Fixing test ExpOut

* Testing, refactoring, eliminating extra debug log

* MultiEnv result modified from json to plain string

* MultiEnv step Run parameter updated

* Import added

* project_command_runner updated

* project_command_runner updated

* multienv_step_runner_test updated

* multienv doc modified

* Update runatlantis.io/docs/custom-workflows.md

Co-authored-by: PePe Amengual <jose.amengual@gmail.com>

Co-authored-by: Istvan Tapaszto <istvan.tapaszto@msci.com>
Co-authored-by: PePe Amengual <jose.amengual@gmail.com>
2022-05-13 14:30:08 -07:00
PePe Amengual
485c4b508f Revert "fix: add path to WorkingDir methods (#2180)" (#2253)
This reverts commit 1a8344489f.
2022-05-13 10:19:29 -07:00
Rui Chen
b1fb97047b links(github): replace help.github.com with docs.github.com links (#2227)
* links(github): replace help.github.com with docs.github.com links

* fix another link

Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-04-29 17:35:42 -04:00
KevinSnyderCodes
1a8344489f fix: add path to WorkingDir methods (#2180)
* fix: add path to WorkingDir methods

`WorkingDirLocker` and `WorkingDir` are closely related -- the former acquires a lock, which ensures that the latter can safely operate on a given file path.

In #2131 we added `path` to the `WorkingDirLocker` lock key, but neglected to add the same to `WorkingDir`.

This commit adds `path` as an argument to certain `WorkingDir` methods, and includes `path` in the directory that we use to clone the repository for a given project.

Since `path` can include certain special characters such as `/`, we encode `path` as base32 when using it as part of a file path. This should ensure no special characters are used in the filesystem, and that the value can be decoded if desired (unlike hashes such as md5).

Additional changes:

- All calls to changed methods have been updated, including unit tests
- Mocks have been regenerated for `WorkingDir` and `WorkingDirLocker`
- `working_dir_test.go`
  - Commands that operate on filesystem paths have been updated to include the base32 encoded `path` value
  - When running `git init`, we include `-b master` as additional arguments, to ensure that `master` is our default branch (expected by the unit tests)

* Try fixing E2E tests

* Fix DefaultPendingPlanFinder

In addition to iterating over `workspaceDirs`, also iterate over `pathDirs`, and use both `workspace` and `path` to build `repoDir`.

* Fix DefaultPendingPlanFinder unit tests

* Fix DefaultProjectCommandBuilder unit tests

Co-authored-by: Kevin Snyder <kevinsnyder@KevinSnydersMBP.lan>
Co-authored-by: Kevin Snyder <kevinsnyder@ip-192-168-1-188.ec2.internal>
2022-04-08 11:55:35 -07:00
Joshua S
25eea31689 fix: allow Github App to clone forks of a private repository (#2044)
fix: only fetch "pull/$PR_NUMBER/head" when githubAppEnabled
2022-04-08 11:51:31 -07:00
PePe Amengual
7199ea4a7e fix: reverting change to command status logic (#2173) 2022-03-31 11:51:49 -04:00
KevinSnyderCodes
3ffd1c57df fix: unit tests for DefaultWorkingDirLocker.TryLock() (#2159)
* fix: add path to DefaultWorkingDirLocker.TryLock()

In the release notes for v0.13.0: https://github.com/runatlantis/atlantis/blob/master/CHANGELOG.md#features-4

> Running in parallel is only supported if you're using workspaces to separate your projects. Projects in separate directories can not be run in parallel currently.

This commit adds `path` as an argument to `DefaultWorkingDirLocker.TryLock()` and includes `path` in the `workspaceKey` used to check if a project is locked. This should allow projects in separate directories to run in parallel.

To my knowledge, there is no functional reason that projects in separate directories cannot run in parallel.

All calls to `DefaultWorkingDirLocker.TryLock()` have been updated. A new unit test `TestTryLockWithDifferentPaths` has been added to test the behavior of locking two separate directories with the same workspace name.

* Add documntation for parallel_plan and parallel_apply options

* Fix working_dir_locker_test.go

- Fix expected error message for `TestTryLock()`
- Use `.` as default path for calls to `DefaultWorkingDirLocker.TryLock()`

Co-authored-by: Kevin Snyder <kevinsnyder@ip-192-168-4-61.ec2.internal>
Co-authored-by: Kevin Snyder <kevinsnyder@ip-10-60-10-94.ec2.internal>
Co-authored-by: Kevin Snyder <kevinsnyder@Kevin-Snyders-MacBook-Pro.local>
Co-authored-by: Kevin Snyder <kevinsnyder@ip-10-60-10-189.ec2.internal>
Co-authored-by: Rui Chen <rui@chenrui.dev>
2022-03-22 15:05:00 -07:00
KevinSnyderCodes
5288389897 fix: allow projects in separate directories to run in parallel (#2131)
* fix: add path to DefaultWorkingDirLocker.TryLock()

In the release notes for v0.13.0: https://github.com/runatlantis/atlantis/blob/master/CHANGELOG.md#features-4

> Running in parallel is only supported if you're using workspaces to separate your projects. Projects in separate directories can not be run in parallel currently.

This commit adds `path` as an argument to `DefaultWorkingDirLocker.TryLock()` and includes `path` in the `workspaceKey` used to check if a project is locked. This should allow projects in separate directories to run in parallel.

To my knowledge, there is no functional reason that projects in separate directories cannot run in parallel.

All calls to `DefaultWorkingDirLocker.TryLock()` have been updated. A new unit test `TestTryLockWithDifferentPaths` has been added to test the behavior of locking two separate directories with the same workspace name.

* Add documntation for parallel_plan and parallel_apply options

Co-authored-by: Kevin Snyder <kevinsnyder@ip-192-168-4-61.ec2.internal>
Co-authored-by: Kevin Snyder <kevinsnyder@ip-10-60-10-94.ec2.internal>
2022-03-21 16:08:52 -07:00
Sarvar Muminov
90e92e3a13 chore: move CommandContext and CommandResult to models (#193) (#2093)
* Moved CommandContext and CommandResult to models (#193)

* Moved CommandContext and CommandResult to models

* move from models to command

rename CommandContext -> Context
rename CommandResult -> Result

* moved command related helpers into command package

* move ProjectCommandContext and ProjectResult to command/project package

* move project command context and project result

* revert unrelated code

* move tests

* fix left over

* fix linting

* fix tests

* remove unused import

* fix project context dependencies

* fix depenedecies

* fix typo
2022-03-21 10:36:13 -07:00
Nish Krishnan
d1d1539ced feat: Add stats support for basic operations (#2147) 2022-03-18 15:18:13 -07:00
Raymond Chen
4e4568501d fix: fix unmarshall error in graphql call (#2128)
* Fix unmarshall error in GraphQL call #2090

* Add unit tests for GetTeamNamesForUser

* Fix lint error
2022-03-09 14:37:58 -08:00
rui
797b12de34 fix(gitlab): update tests (relates to #1971) (#2120)
Signed-off-by: Rui Chen <rui@chenrui.dev>
2022-03-07 12:06:56 -05:00
Maxime Brunet
24e8cf7a79 fix(bitbucketcloud)!: Use AccountID as username instead of Nickname (#2034)
* fix(bitbucketcloud)!: Use AccountID as username instead of Nickname

* Update PullRequest.Author as well

* Remove unused Nickname field
2022-03-07 11:57:10 -05:00
Frank
898118501c fix(gitlab): change pending to running state (#1971)
* fix(gitlab-client): change pending to running state

* change default state
2022-03-07 11:24:26 -05:00
Maxime Brunet
f9a41c9bc6 fix(bitbucketcloud): Ensure status key has at most 40 characters (#2037)
* fix(bitbucketcloud): Ensure status key has at most 40 characters

* Use fmt.Sprintf()
2022-03-07 11:19:55 -05:00
Andre Ziviani
1a7cc360a9 feat: add a pending status for apply when running plan command (#2053)
* add a pending status for apply when running plan command

* fix status updater logic, we should only update the status after we check if the PR is mergeable like the doc next to it says

* do not dismiss the PR if the only our "atlantis/apply" status is pending/failing

* fix logic and tests

* linting
2022-03-04 14:49:54 -05:00