Repository: diggerhq/digger
Pull request #68 (2023-03-27 10:28:55)

merge master into google-storage-lock


Patch:
diff --git a/action.yml b/action.yml
index ccfd6650..0370e393 100644
--- a/action.yml
+++ b/action.yml
@@ -1,4 +1,4 @@
-name: digger
+name: run-digger
 description: Manage terraform collaboration
 author: Digger
 
diff --git a/go.mod b/go.mod
index 9432d98a..9ab491aa 100644
--- a/go.mod
+++ b/go.mod
@@ -3,47 +3,31 @@ module digger
 go 1.18
 
 require (
-	cloud.google.com/go/storage v1.30.1
 	github.com/aws/aws-sdk-go v1.44.219
 	github.com/hashicorp/terraform-exec v0.18.1
 	github.com/mitchellh/mapstructure v1.5.0
 	github.com/stretchr/testify v1.8.2
+	golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0
+	google.golang.org/appengine v1.6.7
 	gopkg.in/yaml.v2 v2.4.0
 )
 
 require (
-	cloud.google.com/go v0.110.0 // indirect
-	cloud.google.com/go/compute v1.18.0 // indirect
-	cloud.google.com/go/compute/metadata v0.2.3 // indirect
-	cloud.google.com/go/iam v0.12.0 // indirect
 	github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect
-	github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
-	github.com/golang/protobuf v1.5.2 // indirect
-	github.com/google/go-cmp v0.5.9 // indirect
+	github.com/golang/protobuf v1.3.4 // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
-	github.com/google/uuid v1.3.0 // indirect
-	github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
-	github.com/googleapis/gax-go/v2 v2.7.1 // indirect
 	github.com/hashicorp/go-version v1.6.0 // indirect
 	github.com/hashicorp/terraform-json v0.15.0 // indirect
 	github.com/zclconf/go-cty v1.13.0 // indirect
-	go.opencensus.io v0.24.0 // indirect
 	golang.org/x/crypto v0.5.0 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/oauth2 v0.6.0 // indirect
-	golang.org/x/sys v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
-	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
-	google.golang.org/api v0.114.0 // indirect
-	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 // indirect
-	google.golang.org/grpc v1.53.0 // indirect
-	google.golang.org/protobuf v1.29.1 // indirect
+	golang.org/x/net v0.5.0 // indirect
+	golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be // indirect
+	golang.org/x/text v0.6.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 )
 
 require (
-	github.com/davecgh/go-spew v1.1.1
+	github.com/davecgh/go-spew v1.1.1 // indirect
 	github.com/google/go-github/v50 v50.1.0
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
diff --git a/go.sum b/go.sum
index 47885525..4afb5483 100644
--- a/go.sum
+++ b/go.sum
@@ -1,16 +1,3 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys=
-cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
-cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY=
-cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
-cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
-cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
-cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE=
-cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY=
-cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM=
-cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM=
-cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk=
 github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ=
 github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk=
@@ -19,61 +6,25 @@ github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6
 github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
 github.com/aws/aws-sdk-go v1.44.219 h1:YOFxTUQZvdRzgwb6XqLFRwNHxoUdKBuunITC7IFhvbc=
 github.com/aws/aws-sdk-go v1.44.219/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
 github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34=
 github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
 github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-github/v50 v50.1.0 h1:hMUpkZjklC5GJ+c3GquSqOP/T4BNsB7XohaPhtMOzRk=
 github.com/google/go-github/v50 v50.1.0/go.mod h1:Ev4Tre8QoKiolvbpOSG3FIi4Mlon3S2Nt9W5JYqKiwA=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
-github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
-github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A=
-github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
 github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
 github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
 github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
@@ -103,7 +54,6 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
 github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -112,7 +62,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
 github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
@@ -125,52 +74,35 @@ github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uU
 github.com/zclconf/go-cty v1.13.0 h1:It5dfKTTZHe9aeppbNOda3mN7Ag7sg6QkBNm6TkyFa0=
 github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0=
 github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
 golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 h1:pVgRXcIictcr+lBQIFeiwuwtDIs4eL21OuM9nyAADmo=
+golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
 golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
-golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
+golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
-golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -180,51 +112,17 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
-golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
+golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE=
-google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 h1:khxVcsk/FhnzxMKOyD+TDGwjbEOpcPuIpmafPGFmhMA=
-google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc=
-google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM=
-google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -235,5 +133,3 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/pkg/aws/dynamo_locking.go b/pkg/aws/dynamo_locking.go
index 4a8e1eda..37339048 100644
--- a/pkg/aws/dynamo_locking.go
+++ b/pkg/aws/dynamo_locking.go
@@ -14,6 +14,12 @@ type DynamoDbLock struct {
 	DynamoDb *dynamodb.DynamoDB
 }
 
+type Lock interface {
+	Lock(timeout int, transactionId int, resource string) (bool, error)
+	Unlock(resource string) (bool, error)
+	GetLock(resource string) (*int, error)
+}
+
 func (dynamoDbLock *DynamoDbLock) Lock(timeout int, transactionId int, resource string) (bool, error) {
 	now := time.Now().Format(time.RFC3339)
 	newTimeout := time.Now().Add(time.Duration(timeout) * time.Second).Format(time.RFC3339)
@@ -79,7 +85,6 @@ func (dynamoDbLock *DynamoDbLock) GetLock(lockId string) (*int, error) {
 	if err != nil {
 		return nil, err
 	}
-
 	if result.Item != nil {
 		transactionId := result.Item["transaction_id"].N
 		res, err := strconv.Atoi(*transactionId)
diff --git a/pkg/digger/digger.go b/pkg/digger/digger.go
index a99bfd2a..80467d63 100644
--- a/pkg/digger/digger.go
+++ b/pkg/digger/digger.go
@@ -1,6 +1,7 @@
 package digger
 
 import (
+	"digger/pkg/aws"
 	"digger/pkg/github"
 	"digger/pkg/models"
 	"digger/pkg/terraform"
@@ -46,12 +47,12 @@ func ProcessGitHubEvent(ghEvent models.Event, diggerConfig *DiggerConfig, prMana
 	return impactedProjects, prNumber, nil
 }
 
-func RunCommandsPerProject(commandsPerProject []ProjectCommand, repoOwner string, repoName string, eventName string, prNumber int, diggerConfig *DiggerConfig, prManager github.PullRequestManager, lock utils.Lock, workingDir string) error {
+func RunCommandsPerProject(commandsPerProject []ProjectCommand, repoOwner string, repoName string, eventName string, prNumber int, diggerConfig *DiggerConfig, prManager github.PullRequestManager, dynamoDbLock aws.Lock, workingDir string) error {
 	lockAcquisitionSuccess := true
 	for _, projectCommands := range commandsPerProject {
 		for _, command := range projectCommands.Commands {
 			projectLock := &utils.ProjectLockImpl{
-				InternalLock: lock,
+				InternalLock: dynamoDbLock,
 				PrManager:    prManager,
 				ProjectName:  projectCommands.ProjectName,
 				RepoName:     repoName,
@@ -173,12 +174,15 @@ type DiggerExecutor struct {
 	configDigger *DiggerConfig
 }
 
+func (d DiggerExecutor) LockId() string {
+	return d.repoName + "#" + d.projectName
+}
+
 func (d DiggerExecutor) Plan(prNumber int) {
-	lockId := d.repoName + "#" + d.projectName
 
 	terraformExecutor := terraform.Terraform{WorkingDir: path.Join(d.workingDir, d.projectDir)}
 
-	res, err := d.lock.Lock(lockId, prNumber)
+	res, err := d.lock.Lock(d.LockId(), prNumber)
 	if err != nil {
 		log.Fatalf("Error locking project: %v", err)
 	}
@@ -189,37 +193,33 @@ func (d DiggerExecutor) Plan(prNumber int) {
 			log.Fatalf("Error executing plan: %v", err)
 		}
 		plan := cleanupTerraformPlan(isNonEmptyPlan, err, stdout, stderr)
-		comment := "Plan for **" + lockId + "**\n" + plan
+		comment := "Plan for **" + d.LockId() + "**\n" + plan
 		d.prManager.PublishComment(prNumber, comment)
 	}
 
 }
 
 func (d DiggerExecutor) Apply(prNumber int) {
-	projectName := d.projectName
-	lockId := d.repoName + "#" + projectName
 	terraformExecutor := terraform.Terraform{WorkingDir: path.Join(d.workingDir, d.projectDir)}
-	if res, _ := d.lock.Lock(lockId, prNumber); res {
+	if res, _ := d.lock.Lock(d.LockId(), prNumber); res {
 		stdout, stderr, err := terraformExecutor.Apply()
 		applyOutput := cleanupTerraformApply(true, err, stdout, stderr)
-		comment := "Apply for **" + lockId + "**\n" + applyOutput
+		comment := "Apply for **" + d.LockId() + "**\n" + applyOutput
 		d.prManager.PublishComment(prNumber, comment)
-		d.lock.Unlock(lockId, prNumber)
+		d.lock.Unlock(d.LockId(), prNumber)
 	}
 
 }
 
 func (d DiggerExecutor) Unlock(prNumber int) {
-	lockId := d.repoName + "#" + d.projectName
-	d.lock.ForceUnlock(lockId, prNumber)
+	d.lock.ForceUnlock(d.LockId(), prNumber)
 
 }
 
 func (d DiggerExecutor) Lock(prNumber int) bool {
-	lockId := d.repoName + "#" + d.projectName
-	isLocked, err := d.lock.Lock(lockId, prNumber)
+	isLocked, err := d.lock.Lock(d.LockId(), prNumber)
 	if err != nil {
-		log.Fatalf("Failed to aquire lock: " + lockId)
+		log.Fatalf("Failed to aquire lock: " + d.LockId())
 	}
 	return isLocked
 }
diff --git a/pkg/digger/digger_config.go b/pkg/digger/digger_config.go
index 96cfbec5..452bdb25 100644
--- a/pkg/digger/digger_config.go
+++ b/pkg/digger/digger_config.go
@@ -1,12 +1,14 @@
 package digger
 
 import (
+	"errors"
 	"fmt"
-	"gopkg.in/yaml.v2"
 	"os"
 	"path"
 	"path/filepath"
 	"strings"
+
+	"gopkg.in/yaml.v2"
 )
 
 type WorkflowConfiguration struct {
@@ -25,6 +27,8 @@ type Project struct {
 	WorkflowConfiguration WorkflowConfiguration `yaml:"workflow_configuration"`
 }
 
+var ErrDiggerConfigConflict error = errors.New("more than one digger config file detected, please keep either 'digger.yml' or 'digger.yaml'")
+
 func (p *Project) UnmarshalYAML(unmarshal func(interface{}) error) error {
 	type rawProject Project
 	raw := rawProject{
@@ -44,17 +48,15 @@ func (p *Project) UnmarshalYAML(unmarshal func(interface{}) error) error {
 
 func NewDiggerConfig(workingDir string) (*DiggerConfig, error) {
 	config := &DiggerConfig{}
-	var fileName string
-	if workingDir == "" {
-		fileName = "digger.yml"
-	} else {
-		fileName = workingDir + "/digger.yml"
-	}
-	if data, err := os.ReadFile(fileName); err == nil {
-		if err := yaml.Unmarshal(data, config); err != nil {
-			return nil, fmt.Errorf("error parsing digger.yml: %v", err)
+	fileName, err := retrieveConfigFile(workingDir)
+	if err != nil {
+		if errors.Is(err, ErrDiggerConfigConflict) {
+			return nil, fmt.Errorf("error while retrieving config file: %v", err)
 		}
-	} else {
+	}
+
+	data, err := os.ReadFile(fileName)
+	if err != nil {
 		config.Projects = make([]Project, 1)
 		config.Projects[0] = Project{Name: "default", Dir: ".", WorkflowConfiguration: WorkflowConfiguration{
 			OnPullRequestPushed: []string{"digger plan"},
@@ -63,6 +65,11 @@ func NewDiggerConfig(workingDir string) (*DiggerConfig, error) {
 		}}
 		return config, nil
 	}
+
+	if err := yaml.Unmarshal(data, config); err != nil {
+		return nil, fmt.Errorf("error parsing '%s': %v", fileName, err)
+	}
+
 	return config, nil
 }
 
@@ -120,3 +127,39 @@ func (c *DiggerConfig) GetWorkflowConfiguration(projectName string) WorkflowConf
 type File struct {
 	Filename string
 }
+
+func isFileExists(path string) bool {
+	fi, err := os.Stat(path)
+	if os.IsNotExist(err) {
+		return false
+	}
+	// file exists make sure it's not a directory
+	return !fi.IsDir()
+}
+
+func retrieveConfigFile(workingDir string) (string, error) {
+	fileName := "digger"
+	if workingDir != "" {
+		fileName = path.Join(workingDir, fileName)
+	}
+
+	// Make sure we don't have more than one digger config file
+	ymlCfg := isFileExists(fileName + ".yml")
+	yamlCfg := isFileExists(fileName + ".yaml")
+	if ymlCfg && yamlCfg {
+		return "", ErrDiggerConfigConflict
+	}
+
+	// At this point we know there are no duplicates
+	// Return the first one that exists
+	if ymlCfg {
+		return "digger.yml", nil
+	}
+	if yamlCfg {
+		return "digger.yaml", nil
+	}
+
+	// Passing this point means digger config file is
+	// missing which is a non-error
+	return "", nil
+}
diff --git a/pkg/gcp/gcp_lock.go b/pkg/gcp/gcp_lock.go
deleted file mode 100644
index 772a66bc..00000000
--- a/pkg/gcp/gcp_lock.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package gcp
-
-import (
-	"cloud.google.com/go/storage"
-	"context"
-	"fmt"
-	"strconv"
-	"time"
-)
-
-type GoogleStorageLock struct {
-	Client *storage.Client
-	Bucket *storage.BucketHandle
-	ctx    context.Context
-}
-
-func (googleLock *GoogleStorageLock) Lock(transactionId int, resource string) (bool, error) {
-	existingLockTransactionId, err := googleLock.GetLock(resource)
-	if err != nil {
-		fmt.Printf("failed to get lock: %v\n", err)
-	}
-	if existingLockTransactionId != nil {
-		return false, nil
-	}
-
-	now := time.Now().Format(time.RFC3339)
-	fileName := resource
-
-	wc := googleLock.Bucket.Object(fileName).NewWriter(googleLock.ctx)
-	wc.ContentType = "text/plain"
-	wc.Metadata = map[string]string{
-		"LockId":    strconv.Itoa(transactionId),
-		"CreatedAt": now,
-	}
-
-	bucketAttrs, err := googleLock.Bucket.Attrs(googleLock.ctx)
-	if err != nil {
-		fmt.Printf("failed to get bucket attributes: %v\n", err)
-	}
-	bucketName := bucketAttrs.Name
-
-	if err := wc.Close(); err != nil {
-		fmt.Printf("createFile: unable to close bucket %q, file %q: %v\n", bucketName, fileName, err)
-	}
-	return true, nil
-}
-
-func (googleLock *GoogleStorageLock) Unlock(transactionId int, resource string) (bool, error) {
-	fileName := resource
-
-	existingLockTransactionId, err := googleLock.GetLock(resource)
-	if err != nil {
-		fmt.Printf("failed to get lock: %v\n", err)
-	}
-	if existingLockTransactionId == nil {
-		return false, nil
-	}
-
-	if transactionId != *existingLockTransactionId {
-		fmt.Printf("failed to Unlock, transactionId doesn't match: %d != %d\n", transactionId, *existingLockTransactionId)
-		return false, nil
-	}
-
-	// lock exist, transactionId matches, we can delete the lock
-
-	bucketAttrs, err := googleLock.Bucket.Attrs(googleLock.ctx)
-	if err != nil {
-		fmt.Printf("failed to get bucket attributes: %v\n", err)
-	}
-	bucketName := bucketAttrs.Name
-	print("bucketname: ")
-	println(bucketName)
-
-	fileObject := googleLock.Bucket.Object(fileName)
-	err = fileObject.Delete(googleLock.ctx)
-	if err != nil {
-		return false, fmt.Errorf("failed to delete lock file: %v\n", err)
-	}
-
-	return true, nil
-}
-
-func (googleLock *GoogleStorageLock) GetLock(resource string) (*int, error) {
-	fileName := resource
-
-	bucketAttrs, err := googleLock.Bucket.Attrs(googleLock.ctx)
-	if err != nil {
-		fmt.Printf("failed to get bucket attributes: %v\n", err)
-	}
-	bucketName := bucketAttrs.Name
-	print("bucketname: ")
-	println(bucketName)
-
-	fileObject := googleLock.Bucket.Object(fileName)
-	fileAttrs, err := fileObject.Attrs(googleLock.ctx)
-	if err != nil {
-		// TODO: not sure if it's the best way to handle it
-		if err.Error() == "storage: object doesn't exist" {
-			return nil, nil
-		}
-		return nil, err
-	}
-	fileMetadata := fileAttrs.Metadata
-	lockIdStr := fileMetadata["LockId"]
-	transactionId, err := strconv.Atoi(lockIdStr)
-	if err != nil {
-		fmt.Printf("failed to parse LockId in object's metadata: %v\n", err)
-	}
-	return &transactionId, nil
-}
diff --git a/pkg/utils/locking.go b/pkg/utils/locking.go
index abf1aceb..420ed8df 100644
--- a/pkg/utils/locking.go
+++ b/pkg/utils/locking.go
@@ -1,24 +1,19 @@
 package utils
 
 import (
+	"digger/pkg/aws"
 	"digger/pkg/github"
 	"fmt"
 	"strconv"
 )
 
 type ProjectLockImpl struct {
-	InternalLock Lock
+	InternalLock aws.Lock
 	PrManager    github.PullRequestManager
 	ProjectName  string
 	RepoName     string
 }
 
-type Lock interface {
-	Lock(timeout int, transactionId int, resource string) (bool, error)
-	Unlock(resource string) (bool, error)
-	GetLock(resource string) (*int, error)
-}
-
 type ProjectLock interface {
 	Lock(lockId string, prNumber int) (bool, error)
 	Unlock(lockId string, prNumber int) (bool, error)


Test patch:
diff --git a/pkg/digger/digger_config_test.go b/pkg/digger/digger_config_test.go
index f2363b12..44581b8d 100644
--- a/pkg/digger/digger_config_test.go
+++ b/pkg/digger/digger_config_test.go
@@ -3,9 +3,18 @@ package digger
 import (
 	"log"
 	"os"
+	"path"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
-import "github.com/stretchr/testify/assert"
+
+func setUp() (string, func()) {
+	tempDir := createTempDir()
+	return tempDir, func() {
+		deleteTempDir(tempDir)
+	}
+}
 
 func TestDiggerConfigFileDoesNotExist(t *testing.T) {
 	dg, err := NewDiggerConfig("")
@@ -14,16 +23,59 @@ func TestDiggerConfigFileDoesNotExist(t *testing.T) {
 	assert.Equal(t, dg.Projects[0].Dir, ".", "expected default project dir to be '.'")
 }
 
+func TestDiggerConfigWhenMultipleConfigExist(t *testing.T) {
+	tempDir, teardown := setUp()
+	defer teardown()
+
+	_, err := os.Create(path.Join(tempDir, "digger.yaml"))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	_, err = os.Create(path.Join(tempDir, "digger.yml"))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	dg, err := NewDiggerConfig(tempDir)
+	assert.Error(t, err, "expected error to be returned")
+	assert.ErrorContains(t, err, ErrDiggerConfigConflict.Error(), "expected error to match target error")
+	assert.Nil(t, dg, "expected diggerConfig to be nil")
+}
+
+func TestDiggerConfigWhenOnlyYamlExists(t *testing.T) {
+	tempDir, teardown := setUp()
+	defer teardown()
+
+	_, err := os.Create(path.Join(tempDir, "digger.yaml"))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	dg, err := NewDiggerConfig(tempDir)
+	assert.NoError(t, err, "expected error to be nil")
+	assert.NotNil(t, dg, "expected digger config to be not nil")
+}
+
+func TestDiggerConfigWhenOnlyYmlExists(t *testing.T) {
+	tempDir, teardown := setUp()
+	defer teardown()
+
+	_, err := os.Create(path.Join(tempDir, "digger.yml"))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	dg, err := NewDiggerConfig(tempDir)
+	assert.NoError(t, err, "expected error to be nil")
+	assert.NotNil(t, dg, "expected digger config to be not nil")
+}
+
 func TestDefaultValuesForWorkflowConfiguration(t *testing.T) {
-	tempDir := CreateTempDir()
-	defer func(name string) {
-		err := os.RemoveAll(name)
-		if err != nil {
-			log.Fatal(err)
-		}
-	}(tempDir)
+	tempDir, teardown := setUp()
+	defer teardown()
 
-	f, err := os.Create(tempDir + "/digger.yml")
+	f, err := os.Create(path.Join(tempDir, "digger.yaml"))
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -48,16 +100,23 @@ projects:
 	}
 
 	dg, err := NewDiggerConfig(tempDir)
-	assert.NoError(t, err, "expected error to be not nil")
+	assert.NoError(t, err, "expected error to be nil")
 	assert.Equal(t, dg.Projects[0].WorkflowConfiguration.OnPullRequestPushed[0], "digger plan")
 	assert.Equal(t, dg.Projects[0].WorkflowConfiguration.OnPullRequestClosed[0], "digger unlock")
 	assert.Equal(t, dg.Projects[0].WorkflowConfiguration.OnCommitToDefault[0], "digger apply")
 }
 
-func CreateTempDir() string {
+func createTempDir() string {
 	dir, err := os.MkdirTemp("", "tmp")
 	if err != nil {
 		log.Fatal(err)
 	}
 	return dir
 }
+
+func deleteTempDir(name string) {
+	err := os.RemoveAll(name)
+	if err != nil {
+		log.Fatal(err)
+	}
+}
diff --git a/pkg/gcp/gcp_lock_test.go b/pkg/gcp/gcp_lock_test.go
deleted file mode 100644
index 2104f54e..00000000
--- a/pkg/gcp/gcp_lock_test.go
+++ /dev/null
@@ -1,190 +0,0 @@
-package gcp
-
-import (
-	"cloud.google.com/go/storage"
-	"context"
-	"github.com/stretchr/testify/assert"
-	"log"
-	"math/rand"
-	"os"
-	"testing"
-	"time"
-)
-
-func SkipCI(t *testing.T) {
-	if os.Getenv("CI") != "" {
-		t.Skip("Skipping testing in CI environment")
-	}
-}
-
-func randomString(length int) string {
-	const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
-
-	var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
-
-	b := make([]byte, length)
-	for i := range b {
-		b[i] = charset[seededRand.Intn(len(charset))]
-	}
-	return string(b)
-}
-
-func GetGoogleStorageClient() (context.Context, *storage.Client) {
-	ctx := context.Background()
-
-	client, err := storage.NewClient(ctx)
-	if err != nil {
-		log.Fatalf("Failed to create Google Storage client: %v", err)
-	}
-	return ctx, client
-}
-
-func TestGoogleStorageLock_NewLock(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	locked, err := lock.Lock(100, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-}
-
-func TestGoogleStorageLock_LockLocked(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	locked, err := lock.Lock(100, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-
-	locked, err = lock.Lock(100, fileName)
-	assert.NoError(t, err)
-	assert.False(t, locked)
-}
-
-func TestGoogleStorageLock_UnlockLocked(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-	transactionId := 100
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	locked, err := lock.Lock(transactionId, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-
-	locked, err = lock.Unlock(transactionId, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-
-	lockTransactionId, err := lock.GetLock(fileName)
-	assert.NoError(t, err)
-	assert.Nil(t, lockTransactionId)
-}
-
-func TestGoogleStorageLock_UnlockLockedWithDifferentId(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-	transactionId := 100
-	anotherTransactionId := 200
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	locked, err := lock.Lock(transactionId, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-
-	locked, err = lock.Unlock(anotherTransactionId, fileName)
-	assert.NoError(t, err)
-	assert.False(t, locked)
-}
-
-func TestGoogleStorageLock_GetExistingLock(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-	transactionId := 100
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	locked, err := lock.Lock(transactionId, fileName)
-	assert.NoError(t, err)
-	assert.True(t, locked)
-
-	lockTransactionId, err := lock.GetLock(fileName)
-	assert.NoError(t, err)
-	assert.Equal(t, transactionId, *lockTransactionId)
-}
-
-func TestGoogleStorageLock_GetNotExistingLock(t *testing.T) {
-	SkipCI(t)
-	ctx, client := GetGoogleStorageClient()
-	defer func(client *storage.Client) {
-		err := client.Close()
-		if err != nil {
-			log.Fatalf("Failed to close Google Storage client: %v", err)
-		}
-	}(client)
-
-	bucketName := "digger-lock-test"
-	fileName := "digger-lock-" + randomString(16)
-
-	bucket := client.Bucket(bucketName)
-	lock := GoogleStorageLock{client, bucket, ctx}
-
-	lockTransactionId, err := lock.GetLock(fileName)
-	assert.NoError(t, err)
-	assert.Nil(t, lockTransactionId)
-}
diff --git a/pkg/integration/integration_test.go b/pkg/integration/integration_test.go
index 9dcc1cde..3d3f5061 100644
--- a/pkg/integration/integration_test.go
+++ b/pkg/integration/integration_test.go
@@ -15,7 +15,7 @@ import (
 	"testing"
 )
 
-func SkipCI(t *testing.T) {
+func skipCI(t *testing.T) {
 	if os.Getenv("CI") != "" {
 		t.Skip("Skipping testing in CI environment")
 	}
@@ -265,7 +265,7 @@ var githubContextNewPullRequestMinJson = `{
   }`
 
 func TestHappyPath(t *testing.T) {
-	SkipCI(t)
+	skipCI(t)
 
 	dir := terraform.CreateTestTerraformProject()
 
@@ -403,7 +403,7 @@ func TestHappyPath(t *testing.T) {
 }
 
 func TestMultiEnvHappyPath(t *testing.T) {
-	SkipCI(t)
+	skipCI(t)
 	t.Skip()
 
 	dir := terraform.CreateTestTerraformProject()
@@ -542,7 +542,7 @@ func TestMultiEnvHappyPath(t *testing.T) {
 }
 
 func TestGetNonExistingLock(t *testing.T) {
-	SkipCI(t)
+	skipCI(t)
 
 	err, projectLock := getProjetLockForTests()
 	resource := "test_dynamodb_non_existing_lock#default"
@@ -552,7 +552,7 @@ func TestGetNonExistingLock(t *testing.T) {
 }
 
 func TestGetExistingLock(t *testing.T) {
-	SkipCI(t)
+	skipCI(t)
 
 	err, projectLock := getProjetLockForTests()
 	resource := "test_dynamodb_existing_lock#default"
@@ -566,7 +566,7 @@ func TestGetExistingLock(t *testing.T) {
 }
 
 func TestUnLock(t *testing.T) {
-	SkipCI(t)
+	skipCI(t)
 
 	err, projectLock := getProjetLockForTests()
 	resource := "test_dynamodb_unlock#default"