github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/test/e2e/ignore/ignore_test.go (about) 1 package ignoretest 2 3 import ( 4 "context" 5 "io/fs" 6 "os" 7 8 "github.com/benchkram/bob/bob" 9 "github.com/benchkram/bob/bob/playbook" 10 "github.com/benchkram/errz" 11 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Test bob build", func() { 17 Context("in a fresh environment", func() { 18 const ( 19 taskname = "ignoredInputs" 20 inputfile = "fileToWatch" 21 ignorefile = "fileToIgnore" 22 ) 23 It("initializes bob playground", func() { 24 Expect(bob.CreatePlayground(bob.PlaygroundOptions{Dir: dir})).NotTo(HaveOccurred()) 25 }) 26 27 It("create files for build task", func() { 28 someText := []byte("hello this is a text in a file\n") 29 30 err := os.WriteFile(inputfile, someText, fs.ModePerm) 31 Expect(err).NotTo(HaveOccurred()) 32 err = os.WriteFile(ignorefile, someText, fs.ModePerm) 33 Expect(err).NotTo(HaveOccurred()) 34 }) 35 36 It("needs to be built the first time", func() { 37 ctx := context.Background() 38 Expect(b.Build(ctx, taskname)).NotTo(HaveOccurred()) 39 }) 40 41 It("needs no rebuild after that", func() { 42 checkTaskState(b, taskname, playbook.StateNoRebuildRequired) 43 }) 44 45 It("change of ignored file doesn't need rebuild", func() { 46 someText := []byte("another line\n") 47 48 err := os.WriteFile(ignorefile, someText, fs.ModeAppend) 49 Expect(err).NotTo(HaveOccurred()) 50 51 checkTaskState(b, taskname, playbook.StateNoRebuildRequired) 52 }) 53 54 It("change of input file requires rebuild", func() { 55 someText := []byte("another line\n") 56 57 err := os.WriteFile(inputfile, someText, fs.ModeAppend) 58 Expect(err).NotTo(HaveOccurred()) 59 60 // Check for completed since this function will call rerun 61 // Therefor this task will be in state completed afterwards 62 checkTaskState(b, taskname, playbook.StateCompleted) 63 }) 64 }) 65 }) 66 67 func checkTaskState(b *bob.B, taskname string, expectedState playbook.State) { 68 aggregate, err := b.Aggregate() 69 Expect(err).NotTo(HaveOccurred()) 70 71 err = b.Nix().BuildNixDependenciesInPipeline(aggregate, taskname) 72 errz.Fatal(err) 73 74 pb, err := aggregate.Playbook(taskname) 75 Expect(err).NotTo(HaveOccurred()) 76 77 err = pb.Build(context.Background()) 78 Expect(err).NotTo(HaveOccurred()) 79 80 ts, err := pb.TaskStatus(taskname) 81 Expect(err).NotTo(HaveOccurred()) 82 83 Expect(ts.State()).To(Equal(expectedState)) 84 }