Skyscanner / turbolift

A simple tool to help apply changes across many GitHub repositories simultaneously
Apache License 2.0
440 stars 34 forks source link

Race condition detected #149

Open sledigabel opened 6 days ago

sledigabel commented 6 days ago

There's a race condition detected in the current main (55ca75f52bc886cfaa992c73395f71ca4305e88e) where tests fail:

--- lint all the things
level=warning msg="[runner] Can't run linter goanalysis_metalinter: buildir: failed to load package goarch: could not load export data: cannot import \"internal/goarch\" (unknown bexport format version -1 (\"u\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x003\\x00\\x00\\x005\\x00\\x00\\x007\\x00\\x00\\x008\\x00\\x00\\x00e\\x00\\x00\\x00j\\x00\\x00\\x00\\x97\\x00\\x00\\x00\\xc4\\x00\\x00\\x00\\xf1\\x00\\x00\\x00\\xf1\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x06\\x00\\x00\\x00\\x15\\x00\\x00\\x00:\\x00\\x00\\x00H\\x00\\x00\\x00M\\x00\\x00\\x00P\\x00\\x00\\x00U\\x00\\x00\\x00_\\x00\\x00\\x00h\\x00\\x00\\x00{\\x00\\x00\\x00\\xa7\\x00\\x00\\x00\\xac\\x00\\x00\\x00\\xb2\\x00\\x00\\x00\\xb6\\x00\\x00\\x00\\xc0\\x00\\x00\\x00\\xc5\\x00\\x00\\x00\\xcc\\x00\\x00\\x00\\xd6\\x00\\x00\\x00\\xdb\\x00\\x00\\x00\\xe2\\x00\\x00\\x00\\xeb\\x00\\x00\\x00\\xf2\\x00\\x00\\x00\\xfb\\x00\\x00\\x00\\x01\\x01\\x00\\x00\\t\\x01\\x00\\x00\\x13\\x01\\x00\\x00\\x1e\\x01\\x00\\x00+\\x01\\x00\\x003\\x01\\x00\\x008\\x01\\x00\\x00?\\x01\\x00\\x00H\\x01\\x00\\x00O\\x01\\x00\\x00X\\x01\\x00\\x00^\\x01\\x00\\x00e\\x01\\x00\\x00l\\x01\\x00\\x00u\\x01\\x00\\x00{\\x01\\x00\\x00\\x82\\x01\\x00\\x00\\x86\\x01\\x00\\x00\\x8c\\x01\\x00\\x00\\x98\\x01\\x00\\x00\\xa1\\x01\\x00\\x00\\xa6\\x01\\x00\\x00\\xad\\x01\\x00\\x00\\xb4\\x01\\x00\\x00\\xb9\\x01\\x00\\x00\\xc3\\x01\\x00\\x00\\xc7\\x01\\x00\\x00\\xae\\x02\\x00\\x00\\xb1\\x02\\x00\\x00\\xb6\\x02\\x00\\x00\\xbb\\x02\\x00\\x00\\xc5\\x02\\x00\\x00\\xcd\\x02\\x00\\x00\\xd5\\x02\\x00\\x00\\xdd\\x02\\x00\\x00\\xe5\\x02\\x00\\x00\\xed\\x02\\x00\\x00\\xf5\\x02\\x00\\x00\\xfd\\x02\\x00\\x00\\x05\\x03\\x00\\x00\\r\\x03\\x00\\x00\\x15\\x03\\x00\\x00\\x1d\\x03\\x00\\x00%\\x03\\x00\\x00-\\x03\\x00\\x005\\x03\\x00\\x00=\\x03\\x00\\x00E\\x03\\x00\\x00M\\x03\\x00\\x00U\\x03\\x00\\x00]\\x03\\x00\\x00e\\x03\\x00\\x00m\\x03\\x00\\x00u\\x03\\x00\\x00}\\x03\\x00\\x00\\x85\\x03\\x00\\x00\\x8d\\x03\\x00\\x00\\x95\\x03\\x00\\x00\\x9d\\x03\\x00\\x00\\xa5\\x03\\x00\\x00\\xad\\x03\\x00\\x00\\xb5\\x03\\x00\\x00\\xbd\\x03\\x00\\x00\\xc5\\x03\\x00\\x00\\xcd\\x03\\x00\\x00\\xd5\\x03\\x00\\x00\\xdd\\x03\\x00\\x00\\xe5\\x03\\x00\\x00\\xed\\x03\\x00\\x00\\xf5\\x03\\x00\\x00\\xfd\\x03\\x00\\x00\\x05\\x04\\x00\\x00\\r\\x04\\x00\\x00\\x15\\x04\\x00\\x00\\x1d\\x04\\x00\\x00%\\x04\\x00\\x00-\\x04\\x00\\x004\\x04\\x00\\x007\\x04\\x00\\x00:\\x04\\x00\\x00=\\x04\\x00\\x00@\\x04\\x00\\x00N\\x04\\x00\\x00Z\\x04\\x00\\x00h\\x04\\x00\\x00v\\x04\\x00\\x00\\x84\\x04\\x00\\x00\\x92\\x04\\x00\\x00\\xa2\\x04\\x00\\x00\\xb2\\x04\\x00\\x00\\xc0\\x04\\x00\\x00\\xce\\x04\\x00\\x00\\xdc\\x04\\x00\\x00\\xea\\x04\\x00\\x00\\xf8\\x04\\x00\\x00\\x06\\x05\\x00\\x00\\x14\\x05\\x00\\x00\\\"\\x05\\x00\\x000\\x05\\x00\\x00>\\x05\\x00\\x00L\\x05\\x00\\x00Z\\x05\\x00\\x00h\\x05\\x00\\x00v\\x05\\x00\\x00\\x84\\x05\\x00\\x00\\x92\\x05\\x00\\x00\\xa0\\x05\\x00\\x00\\xae\\x05\\x00\\x00\\xbc\\x05\\x00\\x00\\xca\\x05\\x00\\x00\\xd8\\x05\\x00\\x00\\xe6\\x05\\x00\\x00\\xf4\\x05\\x00\\x00\\x02\\x06\\x00\\x00\\x10\\x06\\x00\\x00\\x1e\\x06\\x00\\x00,\\x06\\x00\\x00:\\x06\\x00\\x00H\\x06\\x00\\x00V\\x06\\x00\\x00d\\x06\\x00\\x00r\\x06\\x00\\x00\\x80\\x06\\x00\\x00\\x8e\\x06\\x00\\x00\\x9c\\x06\\x00\\x00\\xaa\\x06\\x00\\x00\\xb8\\x06\\x00\\x00\\xb9\\x06\\x00\\x00\\xbd\\x06\\x00\\x00\\xbe\\x06\\x00\\x00\\xbf\\x06\\x00\\x00\\xc0\\x06\\x00\\x00\\xc1\\x06\\x00\\x00\\xc2\\x06\\x00\\x00\\xc3\\x06\\x00\\x00\\xc4\\x06\\x00\\x00\\xc5\\x06\\x00\\x00\\xc6\\x06\\x00\\x00\\xc7\\x06\\x00\\x00\\xc8\\x06\\x00\\x00\\xc9\\x06\\x00\\x00\\xca\\x06\\x00\\x00\\xcb\\x06\\x00\\x00\\xcc\\x06\\x00\\x00\\xcd\\x06\\x00\\x00\\xce\\x06\\x00\\x00\\xcf\\x06\\x00\\x00\\xd0\\x06\\x00\\x00\\xd1\\x06\\x00\\x00\\xd2\\x06\\x00\\x00\\xd3\\x06\\x00\\x00\\xd4\\x06\\x00\\x00\\xd5\\x06\\x00\\x00\\xd6\\x06\\x00\\x00\\xd7\\x06\\x00\\x00\\xd8\\x06\\x00\\x00\\xd9\\x06\\x00\\x00\\xda\\x06\\x00\\x00\\xdb\\x06\\x00\\x00\\xdc\\x06\\x00\\x00\\xdd\\x06\\x00\\x00\\xde\\x06\\x00\\x00\\xdf\\x06\\x00\\x00\\xe0\\x06\\x00\\x00\\xe1\\x06\\x00\\x00\\xe2\\x06\\x00\\x00\\xe3\\x06\\x00\\x00\\xe4\\x06\\x00\\x00\\xe5\\x06\\x00\\x00\\xe6\\x06\\x00\\x00\\xe7\\x06\\x00\\x00\\xe8\\x06\\x00\\x00\\xf0\\x06\\x00\\x00\\xf8\\x06\\x00\\x00\\x00\\a\\x00\\x00\\b\\a\\x00\\x00\\x10\\a\\x00\\x00\\x18\\a\\x00\\x00 \\a\\x00\\x00(\\a\\x00\\x000\\a\\x00\\x008\\a\\x00\\x00@\\a\\x00\\x00H\\a\\x00\\x00P\\a\\x00\\x00X\\a\\x00\\x00`\\a\\x00\\x00h\\a\\x00\\x00p\\a\\x00\\x00x\\a\\x00\\x00\\x80\\a\\x00\\x00\\x88\\a\\x00\\x00\\x90\\a\\x00\\x00\\x98\\a\\x00\\x00\\xa0\\a\\x00\\x00\\xa8\\a\\x00\\x00\\xb0\\a\\x00\\x00\\xb8\\a\\x00\\x00\\xc0\\a\\x00\\x00\\xc8\\a\\x00\\x00\\xd0\\a\\x00\\x00\\xd8\\a\\x00\\x00\\xe0\\a\\x00\\x00\\xe8\\a\\x00\\x00\\xf0\\a\\x00\\x00\\xf8\\a\\x00\\x00\\x00\\b\\x00\\x00\\b\\b\\x00\\x00\\x10\\b\\x00\\x00\\x18\\b\\x00\\x00 \\b\\x00\\x00(\\b\\x00\\x000\\b\\x00\\x008\\b\\x00\\x00@\\b\\x00\\x00H\\b\\x00\\x00P\\b\\x00\\x00goarchinternal/goarch$GOROOT/src/internal/goarch/goarch.goArchFamilyTypeAMD64ARMARM64ArchFamilyBigEndianDefaultPhysPageSize$GOROOT/src/internal/goarch/zgoarch_arm64.goarm64GOARCHI386Int64AlignIs386IsAmd64IsAmd64p32IsArmIsArm64IsArm64beIsArmbeIsLoong64IsMipsIsMips64IsMips64leIsMips64p32IsMips64p32leIsMipsleIsPpcIsPpc64IsPpc64leIsRiscvIsRiscv64IsS390IsS390xIsSparcIsSparc64IsWasmLOONG64MIPSMIPS64MinFrameSizePCQuantumPPC64PtrSizeRISCV64S390XStackAlignWASM.\\x03\\x00\\x06\\x00\\x06\\x01\\x06\\x02\\x06\\x03\\x06\\x04\\x06\\x05\\x06\\x06\\x06\\a\\x06\\b\\x06\\t\\x06\")), possibly version skew - reinstall package"
--- test all the things
    github.com/skyscanner/turbolift/cmd     coverage: 0.0% of statements
    github.com/skyscanner/turbolift     coverage: 0.0% of statements
?       github.com/skyscanner/turbolift/internal/colors [no test files]
?       github.com/skyscanner/turbolift/cmd/flags   [no test files]
    github.com/skyscanner/turbolift/internal/logging        coverage: 0.0% of statements
    github.com/skyscanner/turbolift/internal/testsupport        coverage: 0.0% of statements
    github.com/skyscanner/turbolift/internal/prompt     coverage: 0.0% of statements
--- FAIL: TestItLogsForkAndCloneErrorsButContinuesToTryAll (0.00s)
    fake_github.go:101: 
            Error Trace:    fake_github.go:101
                                        clone_test.go:105
            Error:          Not equal: 
                            expected: [][]string{[]string{"work/org/repo1"}, []string{"work/org", "org/repo1"}, []string{"work/org/repo2"}, []string{"work/org", "org/repo2"}}
                            actual  : [][]string{[]string{"work/org", "org/repo1"}, []string{"work/org", "org/repo2"}}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,5 +1,2 @@
                            -([][]string) (len=4) {
                            - ([]string) (len=1) {
                            -  (string) (len=14) "work/org/repo1"
                            - },
                            +([][]string) (len=2) {
                              ([]string) (len=2) {
                            @@ -7,5 +4,2 @@
                               (string) (len=9) "org/repo1"
                            - },
                            - ([]string) (len=1) {
                            -  (string) (len=14) "work/org/repo2"
                              },
            Test:           TestItLogsForkAndCloneErrorsButContinuesToTryAll
--- FAIL: TestItDoesNotPullFromUpstreamWhenCloningWithoutFork (0.00s)
    fake_github.go:101: 
            Error Trace:    fake_github.go:101
                                        clone_test.go:180
            Error:          Not equal: 
                            expected: [][]string{[]string{"work/org1", "org1/repo1"}, []string{"work/org2", "org2/repo2"}}
                            actual  : [][]string{[]string{"work/org1/repo1"}, []string{"work/org1", "org1/repo1"}, []string{"work/org2/repo2"}, []string{"work/org2", "org2/repo2"}}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([][]string) (len=2) {
                            +([][]string) (len=4) {
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/org1/repo1"
                            + },
                              ([]string) (len=2) {
                            @@ -4,2 +7,5 @@
                               (string) (len=10) "org1/repo1"
                            + },
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/org2/repo2"
                              },
            Test:           TestItDoesNotPullFromUpstreamWhenCloningWithoutFork
--- FAIL: TestItClonesReposFoundInReposFile (0.00s)
    fake_github.go:101: 
            Error Trace:    fake_github.go:101
                                        clone_test.go:259
            Error:          Not equal: 
                            expected: [][]string{[]string{"work/org", "org/repo1"}, []string{"work/org", "org/repo2"}}
                            actual  : [][]string{[]string{"work/org/repo1"}, []string{"work/org", "org/repo1"}, []string{"work/org/repo2"}, []string{"work/org", "org/repo2"}}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([][]string) (len=2) {
                            +([][]string) (len=4) {
                            + ([]string) (len=1) {
                            +  (string) (len=14) "work/org/repo1"
                            + },
                              ([]string) (len=2) {
                            @@ -4,2 +7,5 @@
                               (string) (len=9) "org/repo1"
                            + },
                            + ([]string) (len=1) {
                            +  (string) (len=14) "work/org/repo2"
                              },
            Test:           TestItClonesReposFoundInReposFile
--- FAIL: TestItClonesReposInMultipleOrgs (0.00s)
    fake_github.go:101: 
            Error Trace:    fake_github.go:101
                                        clone_test.go:280
            Error:          Not equal: 
                            expected: [][]string{[]string{"work/orgA", "orgA/repo1"}, []string{"work/orgB", "orgB/repo2"}}
                            actual  : [][]string{[]string{"work/orgA/repo1"}, []string{"work/orgA", "orgA/repo1"}, []string{"work/orgB/repo2"}, []string{"work/orgB", "orgB/repo2"}}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([][]string) (len=2) {
                            +([][]string) (len=4) {
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/orgA/repo1"
                            + },
                              ([]string) (len=2) {
                            @@ -4,2 +7,5 @@
                               (string) (len=10) "orgA/repo1"
                            + },
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/orgB/repo2"
                              },
            Test:           TestItClonesReposInMultipleOrgs
--- FAIL: TestItClonesReposFromOtherHosts (0.00s)
    fake_github.go:101: 
            Error Trace:    fake_github.go:101
                                        clone_test.go:301
            Error:          Not equal: 
                            expected: [][]string{[]string{"work/orgA", "mygitserver.com/orgA/repo1"}, []string{"work/orgB", "orgB/repo2"}}
                            actual  : [][]string{[]string{"work/orgA/repo1"}, []string{"work/orgA", "mygitserver.com/orgA/repo1"}, []string{"work/orgB/repo2"}, []string{"work/orgB", "orgB/repo2"}}

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1,2 +1,5 @@
                            -([][]string) (len=2) {
                            +([][]string) (len=4) {
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/orgA/repo1"
                            + },
                              ([]string) (len=2) {
                            @@ -4,2 +7,5 @@
                               (string) (len=26) "mygitserver.com/orgA/repo1"
                            + },
                            + ([]string) (len=1) {
                            +  (string) (len=15) "work/orgB/repo2"
                              },
            Test:           TestItClonesReposFromOtherHosts
FAIL
coverage: 93.6% of statements
FAIL    github.com/skyscanner/turbolift/cmd/clone   0.283s
ok      github.com/skyscanner/turbolift/cmd/commit  (cached)    coverage: 88.6% of statements
==================
WARNING: DATA RACE
Read at 0x00c00009f758 by goroutine 7:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x1f0
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009f758 by goroutine 8:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:154 +0x328
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 7 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 8 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c00009f740 by goroutine 7:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x200
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009f740 by goroutine 8:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x258
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 7 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 8 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c000208100 by goroutine 7:
  runtime.slicebytetostring()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/string.go:91 +0x0
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c000208100 by goroutine 8:
  runtime.slicecopy()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/slice.go:355 +0x0
  bytes.growSlice()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:249 +0xf4
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x244
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 7 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 8 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileTemplateIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:39 +0x3dc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
--- FAIL: TestItWarnsIfDescriptionFileTemplateIsUnchanged (0.00s)
    testing.go:1399: race detected during execution of test
==================
WARNING: DATA RACE
Read at 0x00c00009f9c8 by goroutine 9:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x1f0
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009f9c8 by goroutine 10:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:154 +0x328
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 9 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 10 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c00009f9b0 by goroutine 9:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x200
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009f9b0 by goroutine 10:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x258
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 9 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 10 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c000208240 by goroutine 9:
  runtime.slicebytetostring()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/string.go:91 +0x0
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c000208240 by goroutine 10:
  runtime.slicecopy()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/slice.go:355 +0x0
  bytes.growSlice()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:249 +0xf4
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x244
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 9 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 10 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrTitleIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:60 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
--- FAIL: TestItWarnsIfOnlyPrTitleIsUnchanged (0.00s)
    testing.go:1399: race detected during execution of test
==================
WARNING: DATA RACE
Read at 0x00c00009fc38 by goroutine 11:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x1f0
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009fc38 by goroutine 12:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:154 +0x328
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 11 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 12 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c00009fc20 by goroutine 11:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x200
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009fc20 by goroutine 12:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x258
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 11 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 12 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c000208380 by goroutine 11:
  runtime.slicebytetostring()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/string.go:91 +0x0
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:230 +0x1e4
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c000208380 by goroutine 12:
  runtime.slicecopy()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/slice.go:355 +0x0
  bytes.growSlice()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:249 +0xf4
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x244
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 11 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 12 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x124
  github.com/skyscanner/turbolift/cmd/create_prs.runCommand()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:225 +0x120
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfOnlyPrBodyIsUnchanged()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:81 +0x3bc
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
--- FAIL: TestItWarnsIfOnlyPrBodyIsUnchanged (0.00s)
    testing.go:1399: race detected during execution of test
==================
WARNING: DATA RACE
Read at 0x00c00009fea8 by goroutine 13:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x244
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:243 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009fea8 by goroutine 14:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:154 +0x328
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 13 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 14 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x178
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:238 +0x174
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c00009fe90 by goroutine 13:
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x254
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:243 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c00009fe90 by goroutine 14:
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x258
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 13 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 14 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x178
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:238 +0x174
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c0002084c0 by goroutine 13:
  runtime.slicebytetostring()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/string.go:91 +0x0
  bytes.(*Buffer).String()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:71 +0x28c
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:243 +0x238
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40

Previous write at 0x00c0002084c0 by goroutine 14:
  runtime.slicecopy()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/runtime/slice.go:355 +0x0
  bytes.growSlice()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:249 +0xf4
  bytes.(*Buffer).grow()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:151 +0x244
  bytes.(*Buffer).Write()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/bytes/buffer.go:179 +0xb4
  fmt.Fprint()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/fmt/print.go:263 +0x84
  github.com/briandowns/spinner.(*Spinner).Start.func1()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:312 +0x458

Goroutine 13 (running) created at:
  testing.(*T).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x5e0
  testing.runTests.func1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2168 +0x80
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.runTests()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2166 +0x6e0
  testing.(*M).Run()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:2034 +0xb74
  main.main()
      _testmain.go:71 +0x110

Goroutine 14 (running) created at:
  github.com/briandowns/spinner.(*Spinner).Start()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/briandowns/spinner@v1.15.0/spinner.go:281 +0x170
  github.com/skyscanner/turbolift/internal/logging.(*Logger).StartActivity()
      /Users/sebastienledigabel/dev/perso/turbolift/internal/logging/logging.go:77 +0x228
  github.com/skyscanner/turbolift/cmd/create_prs.run()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs.go:66 +0x1f0
  github.com/spf13/cobra.(*Command).execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:856 +0x85c
  github.com/spf13/cobra.(*Command).ExecuteC()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:960 +0x490
  github.com/spf13/cobra.(*Command).Execute()
      /Users/sebastienledigabel/dev/go/pkg/mod/github.com/spf13/cobra@v1.1.3/command.go:897 +0x178
  github.com/skyscanner/turbolift/cmd/create_prs.runCommandWithAlternativeDescriptionFile()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:238 +0x174
  github.com/skyscanner/turbolift/cmd/create_prs.TestItWarnsIfDescriptionFileIsEmpty()
      /Users/sebastienledigabel/dev/perso/turbolift/cmd/create_prs/create_prs_test.go:104 +0x35c
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1690 +0x184
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.23.1/libexec/src/testing/testing.go:1743 +0x40
==================
--- FAIL: TestItWarnsIfDescriptionFileIsEmpty (0.00s)
    testing.go:1399: race detected during execution of test
FAIL
coverage: 82.8% of statements
FAIL    github.com/skyscanner/turbolift/cmd/create_prs  0.495s
ok      github.com/skyscanner/turbolift/cmd/foreach (cached)    coverage: 93.1% of statements
ok      github.com/skyscanner/turbolift/cmd/init    (cached)    coverage: 80.0% of statements
ok      github.com/skyscanner/turbolift/cmd/prstatus    (cached)    coverage: 97.1% of statements
ok      github.com/skyscanner/turbolift/cmd/updateprs   (cached)    coverage: 83.1% of statements
ok      github.com/skyscanner/turbolift/internal/campaign   (cached)    coverage: 93.4% of statements
ok      github.com/skyscanner/turbolift/internal/executor   (cached)    coverage: 48.2% of statements
ok      github.com/skyscanner/turbolift/internal/git    (cached)    coverage: 6.2% of statements
ok      github.com/skyscanner/turbolift/internal/github (cached)    coverage: 16.1% of statements
FAIL
make: *** [test] Error 1
sledigabel commented 6 days ago

the first bit is on my branch, ignore. but the race condition was introduced in #145.

Given the scope of the PR it's prob not a big deal, but prob something we should address.

Also the race condition needs to run in CI too - this is how we should figure this thing out.