GitRoot

Craft your forge, Build your project, Grow your community freely
   1---
   2target: main
   3status: merge
   4reviewers: []
   5---
   6
   7# Test GitRoot on GitRoot
   8
   9Use Hop plugin to test gitroot on gitroot.dev
  10
  11---
  12
  13Please review changes with:
  14
  15```shell
  16git fetch origin make_hop_working
  17git checkout make_hop_working
  18git diff origin/HEAD..HEAD
  19```
  20
  21Make your changes about the code inside the code directly (remarks, questions can be made in the form of comments). General remarks on the why can be made here. When done commit and push directly on this branch. Graft plugin will make the diff and display it here.
  22
  23When then changes are ready to be merged, change the status from 'status: review' to 'status: merge'.
  24
  25---
  26
  27## Push 1 commit
  28
  29### :green_heart: make hop working
  30
  31(9740cca66ea4768bbce05373cd9b8dee27176c30)
  32
  33- +- [.gitroot/users.yml](../.gitroot/users.yml)
  34
  35```diff
  36--- a/.gitroot/users.yml
  37+++ b/.gitroot/users.yml
  38@@ -36,6 +36,7 @@
  39   - name: ladybugDeleteBreakLine
  40   - name: apexLineAndBetterDiff
  41   - name: startBlog
  42+  - name: make_hop_working
  43   users:
  44   - pseudo: GitRoot
  45     avatar: ""
  46@@ -130,3 +131,13 @@
  47     ssh:
  48     - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk+AMq9/FbuwoJXJ1xoClIOtucWwY3+KX0bcnwXMVNm
  49     - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRvLg59zboyF8SzGlGhAXnMUvLUfXzsdddxVp1LvK0TAIwvw/4gvFXUrcNihYLuBl86MYam8osFT/nEddjs5eGve1rNGvtHN9yyKXfjZvuZ2V5KQLEW4k6LEEypFWrpGlKdSMdZoHYSv2gqqSVrvQkhBD1QaIb+xuEG1w3aC1E/DbZxMPoFa+CFRz0oPMnKGaimCK/sV0a7aPYCEC9lJ97gfA1AUlbzIq8GbD/jKWW4+dIzxkmHeAqlwVygn4dhgI5KHTjA0U5b4RcG1k0BpMxhDtQR53tDWlWydgoKxJUGVRx1J+dBuDcb1NB/JttLovU2usX+NQNh1+lcJ1klKK3
  50+make_hop_working:
  51+  branches:
  52+  - name: make_hop_working
  53+  users:
  54+  - pseudo: ""
  55+    avatar: ""
  56+    emails:
  57+    - ""
  58+    ssh:
  59+    - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk+AMq9/FbuwoJXJ1xoClIOtucWwY3+KX0bcnwXMVNm
  60```
  61
  62- +- [app/plugins/apex/branch_test.go](../app/plugins/apex/branch_test.go)
  63
  64```diff
  65--- a/app/plugins/apex/branch_test.go
  66+++ b/app/plugins/apex/branch_test.go
  67@@ -15,17 +15,17 @@
  68 	"gitroot.dev/libs/golang/plugin/test"
  69 )
  70
  71-var firstRender = `<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>`
  72-var secondRender = `<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  73-<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>`
  74-var thirdRender = `<li data-hash="dddd" data-parent-hash="cccc"><code title="dddd">dddd</code> - <span title="four">four</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  75+var firstRender = `<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>`
  76+var secondRender = `<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  77+<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>`
  78+var thirdRender = `<li data-hash="dddd" data-parent-hash="cccc"><code title="dddd">dddd</code> - <span title="four">four</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  79 <li data-hash="cccc"><code title="cccc">cccc</code> - <i>commit not found</i></li>
  80-<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  81-<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>`
  82-var fourRender = `<li data-hash="dddd" data-parent-hash="cccc"><code title="dddd">dddd</code> - <span title="four">four</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  83-<li data-hash="cccc" data-parent-hash="bbbb"><code title="cccc">cccc</code> - <span title="third">third</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  84-<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>
  85-<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Thu Jan  1 01:00:00 1970) &lt;moi&gt;</i></li>`
  86+<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  87+<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>`
  88+var fourRender = `<li data-hash="dddd" data-parent-hash="cccc"><code title="dddd">dddd</code> - <span title="four">four</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  89+<li data-hash="cccc" data-parent-hash="bbbb"><code title="cccc">cccc</code> - <span title="third">third</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  90+<li data-hash="bbbb" data-parent-hash="aaaa"><code title="bbbb">bbbb</code> - <span title="second">second</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>
  91+<li data-hash="aaaa" data-parent-hash="0000000000000000000000000000000000000000"><code title="aaaa">aaaa</code> - <span title="first">first</span> <i style="font-size:small;float:right;">(Wed Feb 12 14:33:00 1986) &lt;moi&gt;</i></li>`
  92
  93 func TestBranchRender(t *testing.T) {
  94 	p := &Plugin{
  95@@ -33,7 +33,7 @@
  96 	}
  97 	p.Init("repo", false, `{"branchesDir": "branches"}`)
  98
  99-	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "aaaa", Message: "first", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: NullCommitHash})
 100+	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "aaaa", Message: "first", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: NullCommitHash})
 101 	p.RenderBranches()
 102 	all, err := fs.ReadFile(p.server.Webcontent(), "branches/index.html")
 103 	if err != nil {
 104@@ -51,7 +51,7 @@
 105 	}
 106
 107 	p.branchCommits = make([]*branchCommits, 0)
 108-	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "bbbb", Message: "second", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "aaaa"})
 109+	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "bbbb", Message: "second", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "aaaa"})
 110 	p.RenderBranches()
 111 	branch2, err := fs.ReadFile(p.server.Webcontent(), "branches/test.html")
 112 	if err != nil {
 113@@ -62,7 +62,7 @@
 114 	}
 115
 116 	p.branchCommits = make([]*branchCommits, 0)
 117-	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "dddd", Message: "four", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "cccc"})
 118+	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "dddd", Message: "four", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "cccc"})
 119 	p.RenderBranches()
 120 	branch3, err := fs.ReadFile(p.server.Webcontent(), "branches/test.html")
 121 	if err != nil {
 122@@ -73,7 +73,7 @@
 123 	}
 124
 125 	p.branchCommits = make([]*branchCommits, 0)
 126-	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "cccc", Message: "third", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "bbbb"})
 127+	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "cccc", Message: "third", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "bbbb"})
 128 	p.RenderBranches()
 129 	branch4, err := fs.ReadFile(p.server.Webcontent(), "branches/test.html")
 130 	if err != nil {
 131@@ -84,7 +84,7 @@
 132 	}
 133
 134 	p.branchCommits = make([]*branchCommits, 0)
 135-	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "bbbb", Message: "second", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "aaaa"})
 136+	p.AddIfNotExist(gitroot.Commit{Branch: "test", Hash: "bbbb", Message: "second", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "aaaa"})
 137 	p.RenderBranches()
 138 	branch4, err = fs.ReadFile(p.server.Webcontent(), "branches/test.html")
 139 	if err != nil {
 140@@ -104,17 +104,17 @@
 141 				fromCalled = from
 142 				toCalled = to
 143 				return []gitroot.Commit{
 144-					{Branch: "fillCommits", Hash: "dddd", Message: "four", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "cccc"},
 145-					{Branch: "fillCommits", Hash: "cccc", Message: "third", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "bbbb"},
 146+					{Branch: "fillCommits", Hash: "dddd", Message: "four", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "cccc"},
 147+					{Branch: "fillCommits", Hash: "cccc", Message: "third", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "bbbb"},
 148 				}, nil
 149 			},
 150 		}),
 151 	}
 152 	p.Init("repo", false, `{"branchesDir": "branches"}`)
 153
 154-	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "aaaa", Message: "first", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: NullCommitHash})
 155-	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "bbbb", Message: "second", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "aaaa"})
 156-	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "eeee", Message: "five", Date: time.Unix(0, 0), CommitterName: "moi", ParentHash: "dddd"})
 157+	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "aaaa", Message: "first", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: NullCommitHash})
 158+	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "bbbb", Message: "second", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "aaaa"})
 159+	p.AddIfNotExist(gitroot.Commit{Branch: "fillCommits", Hash: "eeee", Message: "five", Date: time.Date(1986, time.February, 12, 14, 33, 0, 0, time.UTC), CommitterName: "moi", ParentHash: "dddd"})
 160 	p.RenderBranches()
 161
 162 	if fromCalled != "dddd" {
 163```
 164
 165- +- [app/plugins/grafter/go.mod](../app/plugins/grafter/go.mod)
 166
 167```diff
 168--- a/app/plugins/grafter/go.mod
 169+++ b/app/plugins/grafter/go.mod
 170@@ -5,6 +5,7 @@
 171 replace gitroot.dev/libs/golang/plugin => ../../libs/golang/plugin
 172
 173 require (
 174+	github.com/sergi/go-diff v1.4.0
 175 	github.com/tidwall/gjson v1.18.0
 176 	gitroot.dev/libs/golang/plugin v0.0.0-00010101000000-000000000000
 177 )
 178```
 179
 180- +- [app/plugins/grafter/go.sum](../app/plugins/grafter/go.sum)
 181
 182```diff
 183--- a/app/plugins/grafter/go.sum
 184+++ b/app/plugins/grafter/go.sum
 185@@ -1,10 +1,24 @@
 186+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 187+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 188+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 189+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 190+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 191+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 192+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 193+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 194+github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
 195+github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
 196+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 197+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 198+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 199 github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
 200 github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 201 github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
 202 github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
 203-github.com/tidwall/match v1.2.0 h1:0pt8FlkOwjN2fPt4bIl4BoNxb98gGHN2ObFEDkrfZnM=
 204-github.com/tidwall/match v1.2.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
 205 github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
 206 github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 207-github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
 208-github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
 209+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 210+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 211+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 212+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 213+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 214```
 215
 216- +- [app/plugins/grafter/main.go](../app/plugins/grafter/main.go)
 217
 218```diff
 219--- a/app/plugins/grafter/main.go
 220+++ b/app/plugins/grafter/main.go
 221@@ -213,7 +213,7 @@
 222 		return nil
 223 	}
 224 	if file.Path != p.newGraft.filename {
 225-		from, _ := filepath.Abs(file.Path)
 226+		from := filepath.Join("/", file.Path)
 227 		relPath, _ := filepath.Rel("/grafts/", from)
 228 		p.newGraft.pushContent = append(p.newGraft.pushContent, fmt.Sprintf("- ++ [%s](%s)", file.Path, filepath.Clean(relPath)))
 229 	}
 230@@ -227,7 +227,7 @@
 231 	}
 232
 233 	if file.Path != p.newGraft.filename {
 234-		from, _ := filepath.Abs(file.Path)
 235+		from := filepath.Join("/", file.Path)
 236 		relPath, _ := filepath.Rel("/grafts/", from)
 237 		if file.OldPath != file.Path {
 238 			p.newGraft.pushContent = append(p.newGraft.pushContent, fmt.Sprintf("- %s -> [%s](%s)", file.OldPath, file.Path, filepath.Clean(relPath)))
 239@@ -250,7 +250,7 @@
 240 		return nil
 241 	}
 242 	if file.Path != p.newGraft.filename {
 243-		from, _ := filepath.Abs(file.Path)
 244+		from := filepath.Join("/", file.Path)
 245 		relPath, _ := filepath.Rel("/grafts/", from)
 246 		p.newGraft.pushContent = append(p.newGraft.pushContent, fmt.Sprintf("- -- [%s](%s)", file.Path, filepath.Clean(relPath)))
 247 	}
 248```
 249
 250- +- [app/plugins/grafter/main_test.go](../app/plugins/grafter/main_test.go)
 251
 252```diff
 253--- a/app/plugins/grafter/main_test.go
 254+++ b/app/plugins/grafter/main_test.go
 255@@ -10,6 +10,8 @@
 256
 257 	"gitroot.dev/libs/golang/plugin/model"
 258 	"gitroot.dev/libs/golang/plugin/test"
 259+
 260+	"github.com/sergi/go-diff/diffmatchpatch"
 261 )
 262
 263 //go:embed test_ressources/*
 264@@ -74,8 +76,11 @@
 265 		}
 266 		goodfile, _ := fs.ReadFile(fakeFs, c.bCheck)
 267 		if !bytes.Equal(file, goodfile) {
 268-			//fmt.Print(diffmatchpatch.New().DiffPrettyHtml(diffmatchpatch.New().DiffMain(string(file), string(goodfile), true)) + "\n\n")
 269-			t.Fatalf("bad %s > %s", c.bCheck, file)
 270+			//t.Fatalf("bad %s > %s", c.bCheck, file)
 271+			dmp := diffmatchpatch.New()
 272+
 273+			diffs := dmp.DiffMain(string(file), string(goodfile), false)
 274+			t.Fatal(dmp.DiffPrettyText(diffs))
 275 		}
 276 	case "replace":
 277 		file, err := fs.ReadFile(p.server.Worktree(), c.filepath)
 278@@ -174,13 +179,13 @@
 279 			{kind: "finish"},
 280 			{kind: "check", aCheck: "grafts/erase.md", bCheck: "test_ressources/erase_3.md"},
 281 			{kind: "persoCheck", call: func() {
 282-				nbModifyContent := 2 + 3 + 6 // 2 from test + 3 from plugin (commit) + 6 from previous test
 283+				nbModifyContent := 2 + 3 // 2 from test + 3 from plugin (commit)
 284
 285 				if fakeServer.NbCall.ModifyContent != nbModifyContent { //don't call modify content for only change on graft
 286 					t.Fatalf("ModifyContent called %d", fakeServer.NbCall.ModifyContent)
 287 				}
 288
 289-				if fakeServer.NbCall.Merge != 2 {
 290+				if fakeServer.NbCall.Merge != 1 {
 291 					t.Fatalf("Merge not called %d", fakeServer.NbCall.Merge)
 292 				}
 293 			}},
 294@@ -189,6 +194,8 @@
 295
 296 	for _, data := range datas {
 297 		t.Run(data.name, func(t *testing.T) {
 298+			fakeServer.NbCall.ModifyContent = 0
 299+			fakeServer.NbCall.Merge = 0
 300 			for _, cmd := range data.commands {
 301 				cmd.Exec(p, t)
 302 			}
 303```
 304
 305- +- [app/plugins/grafter/test_ressources/erase_1.md](../app/plugins/grafter/test_ressources/erase_1.md)
 306
 307```diff
 308--- a/app/plugins/grafter/test_ressources/erase_1.md
 309+++ b/app/plugins/grafter/test_ressources/erase_1.md
 310@@ -15,4 +15,4 @@
 311
 312 ### hello (aaaa)
 313
 314-- ++ [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 315+- ++ [new_file.sh](../new_file.sh)
 316```
 317
 318- +- [app/plugins/grafter/test_ressources/erase_2.md](../app/plugins/grafter/test_ressources/erase_2.md)
 319
 320```diff
 321--- a/app/plugins/grafter/test_ressources/erase_2.md
 322+++ b/app/plugins/grafter/test_ressources/erase_2.md
 323@@ -12,4 +12,4 @@
 324
 325 ### hello1 (bbbb)
 326
 327-- +- [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 328+- +- [new_file.sh](../new_file.sh)
 329```
 330
 331- +- [app/plugins/grafter/test_ressources/erase_3.md](../app/plugins/grafter/test_ressources/erase_3.md)
 332
 333```diff
 334--- a/app/plugins/grafter/test_ressources/erase_3.md
 335+++ b/app/plugins/grafter/test_ressources/erase_3.md
 336@@ -12,4 +12,4 @@
 337
 338 ### hello1 (bbbb)
 339
 340-- +- [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 341+- +- [new_file.sh](../new_file.sh)
 342```
 343
 344- +- [app/plugins/grafter/test_ressources/graft_1.md](../app/plugins/grafter/test_ressources/graft_1.md)
 345
 346```diff
 347--- a/app/plugins/grafter/test_ressources/graft_1.md
 348+++ b/app/plugins/grafter/test_ressources/graft_1.md
 349@@ -15,4 +15,4 @@
 350
 351 ### hello (aaaa)
 352
 353-- ++ [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 354+- ++ [new_file.sh](../new_file.sh)
 355```
 356
 357- +- [app/plugins/grafter/test_ressources/graft_2.md](../app/plugins/grafter/test_ressources/graft_2.md)
 358
 359```diff
 360--- a/app/plugins/grafter/test_ressources/graft_2.md
 361+++ b/app/plugins/grafter/test_ressources/graft_2.md
 362@@ -15,7 +15,7 @@
 363
 364 ### hello (aaaa)
 365
 366-- ++ [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 367+- ++ [new_file.sh](../new_file.sh)
 368
 369 ---
 370
 371@@ -23,9 +23,9 @@
 372
 373 ### hello2 (bbbb)
 374
 375-- new_file.sh -> [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 376-- +- [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 377+- new_file.sh -> [new_file2.sh](../new_file2.sh)
 378+- +- [new_file2.sh](../new_file2.sh)
 379
 380 ### hello3 (cccc)
 381
 382-- +- [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 383+- +- [new_file2.sh](../new_file2.sh)
 384```
 385
 386- +- [app/plugins/grafter/test_ressources/graft_3.md](../app/plugins/grafter/test_ressources/graft_3.md)
 387
 388```diff
 389--- a/app/plugins/grafter/test_ressources/graft_3.md
 390+++ b/app/plugins/grafter/test_ressources/graft_3.md
 391@@ -16,7 +16,7 @@
 392
 393 ### hello (aaaa)
 394
 395-- ++ [new_file.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file.sh)
 396+- ++ [new_file.sh](../new_file.sh)
 397
 398 ---
 399
 400@@ -24,12 +24,12 @@
 401
 402 ### hello2 (bbbb)
 403
 404-- new_file.sh -> [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 405-- +- [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 406+- new_file.sh -> [new_file2.sh](../new_file2.sh)
 407+- +- [new_file2.sh](../new_file2.sh)
 408
 409 ### hello3 (cccc)
 410
 411-- +- [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 412+- +- [new_file2.sh](../new_file2.sh)
 413
 414 ---
 415
 416@@ -51,5 +51,5 @@
 417
 418 ### hello4 (dddd)
 419
 420-- +- [new_file2.sh](../home/rmaneschi/projects/gitroot/app/plugins/grafter/new_file2.sh)
 421+- +- [new_file2.sh](../new_file2.sh)
 422
 423```
 424
 425- +- [app/plugins/pollen/CHANGELOG.md](../app/plugins/pollen/CHANGELOG.md)
 426
 427```diff
 428--- a/app/plugins/pollen/CHANGELOG.md
 429+++ b/app/plugins/pollen/CHANGELOG.md
 430@@ -14,7 +14,7 @@
 431
 432 - compatible with gitroot plugin-sdk 0.4.0
 433
 434-## 0.0.2 (20/12/2025) [pollen-0.0.2.wasm](https://gitroot.dev/releases/0.3.0/hop-0.0.2.wasm)
 435+## 0.0.2 (20/12/2025) [pollen-0.0.2.wasm](https://gitroot.dev/releases/0.3.0/pollen-0.0.2.wasm)
 436
 437 _sha256: e6e94e93514d3fe1e65506f5ac72a01b84b792bc6c07009eadc194942fc63ca1_
 438
 439```
 440
 441- +- [app/server/background/postpush.go](../app/server/background/postpush.go)
 442
 443```diff
 444--- a/app/server/background/postpush.go
 445+++ b/app/server/background/postpush.go
 446@@ -36,6 +36,10 @@
 447 		With("repoName", postPushInput.repoName).
 448 		With("commands", len(postPushInput.commands))
 449
 450+	if len(postPushInput.commands) == 0 { //nothing todo (push just a tag or a branch)
 451+		return nil
 452+	}
 453+
 454 	repo, err := m.repoManager.Open(logger.AddCaller(m.ctx, "postPush"), postPushInput.repoName)
 455 	if err != nil {
 456 		return errorHandler.Wrapf(err, "can't open repository")
 457@@ -47,10 +51,6 @@
 458 		return errorHandler.Wrapf(err, "CommandForDiffFromPackpCmd error")
 459 	}
 460
 461-	if len(postPushInput.commands) == 0 { //nothing todo (push just a tag or a branch)
 462-		return nil
 463-	}
 464-
 465 	if m.conf.IsForgeRepo(postPushInput.repoName) {
 466 		repoConfiguration, err := repo.Configuration()
 467 		if err != nil {
 468```
 469
 470- +- [app/server/exec/exec_test.go](../app/server/exec/exec_test.go)
 471
 472```diff
 473--- a/app/server/exec/exec_test.go
 474+++ b/app/server/exec/exec_test.go
 475@@ -70,8 +70,9 @@
 476 var testData = []*testDate{
 477 	{executor: "bareMetal", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 478 	{executor: "bwrap", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 479-	{executor: "container", build: "docker.io/bash:5.3.3", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 480-	{executor: "container", build: "./Containerfile", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 481+	//TODO no container on gitroot.dev instance
 482+	//{executor: "container", build: "docker.io/bash:5.3.3", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 483+	//{executor: "container", build: "./Containerfile", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 484 	// WARN if you uncomment that be sure to set env look line 47 of this file
 485 	//{executor: "ssh", env: []string{"MISE_CACHE_DIR=/cache/mise"}},
 486 }
 487```
 488
 489- +- [app/server/plugin/forgerepo.go](../app/server/plugin/forgerepo.go)
 490
 491```diff
 492--- a/app/server/plugin/forgerepo.go
 493+++ b/app/server/plugin/forgerepo.go
 494@@ -74,6 +74,7 @@
 495 	}
 496
 497 	if needReloadPlugins {
 498+		m.logger.Info("need reload plugin")
 499 		m.reloadPlugins()
 500 		//todo need to clean module of wazero
 501 	}
 502```
 503
 504- +- [app/server/plugin/manager.go](../app/server/plugin/manager.go)
 505
 506```diff
 507--- a/app/server/plugin/manager.go
 508+++ b/app/server/plugin/manager.go
 509@@ -28,7 +28,7 @@
 510 	execManager       needManager
 511
 512 	plugins     []Plugin
 513-	pluginsLock sync.RWMutex
 514+	pluginsLock sync.Mutex
 515 	runtimes    *runtimes
 516 }
 517
 518@@ -71,7 +71,7 @@
 519 		execManager: execManager,
 520
 521 		plugins:     nil,
 522-		pluginsLock: sync.RWMutex{},
 523+		pluginsLock: sync.Mutex{},
 524 	}
 525 	m.runtimes = newRuntimes(m, log)
 526 	return m
 527@@ -83,6 +83,11 @@
 528
 529 func (m *Manager) Run(ctx context.Context, repoName string, commands []CommandForDiff) error {
 530 	if len(commands) > 0 {
 531+		com := ""
 532+		if len(commands[0].commits) > 0 {
 533+			com = commands[0].commits[0].hash.String()
 534+		}
 535+		m.logger.Debug("call usableFromDefaultBranch from manager run", logger.NewLoggerPair("repo", repoName), logger.NewLoggerPair("branch", commands[0].branch), logger.NewLoggerPair("commit", com))
 536 		plugins, err := m.usableFromDefaultBranch(ctx, repoName)
 537 		if err != nil {
 538 			return err
 539```
 540
 541- +- [app/server/plugin/plugin.go](../app/server/plugin/plugin.go)
 542
 543```diff
 544--- a/app/server/plugin/plugin.go
 545+++ b/app/server/plugin/plugin.go
 546@@ -19,13 +19,15 @@
 547 	pm.pluginsLock.Lock()
 548 	pm.plugins = nil
 549 	pm.pluginsLock.Unlock()
 550+	pm.Availables(context.Background()) //TODO pass good context
 551 }
 552
 553 func (pm *Manager) Availables(ctx context.Context) ([]Plugin, error) {
 554-	pm.pluginsLock.RLock()
 555+	pm.pluginsLock.Lock()
 556+	defer pm.pluginsLock.Unlock()
 557 	needLoad := pm.plugins == nil
 558-	pm.pluginsLock.RUnlock()
 559 	if needLoad {
 560+		pm.logger.Info("availables needLoad")
 561 		errorHandler := oops.With("rootData", pm.conf.PathDataPlugin())
 562 		forgeRepo, err := pm.repoManager.OpenForgeRepo(logger.AddCaller(ctx, "plugin.Availables"))
 563 		defer func() {
 564@@ -46,7 +48,6 @@
 565 		if err != nil {
 566 			return nil, oops.Wrapf(err, "can't parse plugins from repo")
 567 		}
 568-		pm.pluginsLock.Lock()
 569 		pm.plugins = make([]Plugin, 0)
 570 		timeLoading := pm.logger.Time("loading wasm files", logger.NewLoggerPairNamedSlice("plugins", ps))
 571 		wg := sync.WaitGroup{}
 572@@ -105,10 +106,7 @@
 573 		}
 574 		wg.Wait()
 575 		timeLoading()
 576-		pm.pluginsLock.Unlock()
 577 	}
 578-	pm.pluginsLock.RLock()
 579-	defer pm.pluginsLock.RUnlock()
 580 	if len(pm.plugins) == 0 {
 581 		pm.logger.Info("no available plugin", logger.NewLoggerPair("in dir", pm.conf.PathDataPlugin()))
 582 	}
 583@@ -116,11 +114,13 @@
 584 }
 585
 586 func (pm *Manager) usableFromDefaultBranch(ctx context.Context, repoName string) ([]Plugin, error) {
 587+	pm.logger.Debug("usableFromDefaultBranch before open", logger.NewLoggerPair("repoName", repoName))
 588 	repo, err := pm.repoManager.Open(logger.AddCaller(ctx, "plugin.usable"), repoName)
 589 	if err != nil {
 590 		return nil, oops.Wrapf(err, "can't open repo")
 591 	}
 592 	defer repo.Close()
 593+	pm.logger.Debug("usableFromDefaultBranch before ContentPluginsConf", logger.NewLoggerPair("repoName", repoName))
 594 	filecontent, err := repo.ContentPluginsConf()
 595 	if err != nil {
 596 		return nil, oops.Wrapf(err, "can't read plugins from repo")
 597@@ -132,6 +132,7 @@
 598 	if len(confPlugins) == 0 {
 599 		pm.logger.Debug("no usable plugin in conf")
 600 	}
 601+	pm.logger.Debug("usableFromDefaultBranch before Availables", logger.NewLoggerPair("repoName", repoName))
 602 	plugins, err := pm.Availables(ctx)
 603 	if err != nil {
 604 		return nil, oops.Wrapf(err, "can't get availables plugin from forgerepo")
 605```
 606
 607- +- [app/server/plugin/runtime.go](../app/server/plugin/runtime.go)
 608
 609```diff
 610--- a/app/server/plugin/runtime.go
 611+++ b/app/server/plugin/runtime.go
 612@@ -45,6 +45,7 @@
 613 	kind     runtimeInputsKind
 614 	plugins  []Plugin
 615 	commands []CommandForDiff
 616+	close    func()
 617 }
 618
 619 type memoryGarbage struct {
 620@@ -153,12 +154,14 @@
 621 		if err != nil {
 622 			r.logger.Error("open error in listen", err)
 623 			repo.Close()
 624+			i.close()
 625 			continue
 626 		}
 627 		repoWriter, err := repo.WillWrite(plumbing.HEAD) //TODO should mount good branch directly inside i.commands
 628 		if err != nil {
 629 			r.logger.Error("will write error in listen", err, logger.NewLoggerPair("repo", repo.Name()))
 630 			repo.Close()
 631+			i.close()
 632 			continue
 633 		}
 634
 635@@ -194,11 +197,17 @@
 636 			r.manager.backgroundManager.PostPush(postMerge.pusher, i.repoName, []*packp.Command{postMerge.cmd})
 637 		}
 638 		postMergeActions = nil
 639+		r.logger.Debug("finish listen call", logger.NewLoggerPair("repo", i.repoName), logger.NewLoggerPair("isDiff", i.kind == runtimeInputsKindDiff), logger.NewLoggerPair("isWorktree", i.kind == runtimeInputsKindWorktree))
 640+		i.close()
 641 	}
 642 }
 643
 644 func (r *runtime) loadModule(ctx context.Context, plugin Plugin, withFs fs.FS) (api.Module, error) {
 645 	m := r.wazRun.Module(plugin.uuid())
 646+	if m != nil && m.IsClosed() {
 647+		r.logger.Debug("module exist but closed", logger.NewLoggerPair("name", plugin.Name))
 648+		m = nil
 649+	}
 650 	if m == nil {
 651 		r.logger.Debug("instantiate plugin conf", logger.NewLoggerPair("name", plugin.Name), logger.NewLoggerPair("with external fs", withFs != nil))
 652 		config := wazero.NewModuleConfig().
 653@@ -1113,6 +1122,11 @@
 654
 655 func (r *runtime) CanCallBuilder(forAS bool) interface{} {
 656 	f := func(callJson string) uint32 {
 657+		repo := "no repo in conf mode"
 658+		if r.repo != nil {
 659+			repo = r.repo.Name()
 660+		}
 661+		r.logger.Info("can call json", logger.NewLoggerPair("repo", repo), logger.NewLoggerPair("plugin", r.plugin.Name), logger.NewLoggerPair("data", string(callJson)))
 662 		call := pluginLib.Call{}
 663 		err := json.Unmarshal([]byte(callJson), &call)
 664 		if err != nil {
 665@@ -1136,7 +1150,6 @@
 666 				r.logger.Error("can't readString canCall", err)
 667 				return 0
 668 			}
 669-			r.logger.Info("call json", logger.NewLoggerPair("data", string(callJson)))
 670 			return f(callJson)
 671 		}
 672 	} else {
 673@@ -1153,6 +1166,7 @@
 674
 675 func (r *runtime) CallBuilder(forAS bool) interface{} {
 676 	f := func(callJson string) (uint64, api.Module) {
 677+		r.logger.Info("call json", logger.NewLoggerPair("repo", r.repo.Name()), logger.NewLoggerPair("plugin", r.plugin.Name), logger.NewLoggerPair("data", string(callJson)))
 678 		// TODO duplicated in previous (function canCall check rights)
 679 		call := pluginLib.Call{}
 680 		err := json.Unmarshal([]byte(callJson), &call)
 681@@ -1167,6 +1181,7 @@
 682 			r.logger.Error("can't call func", errors.New("not authorized in plugins file"), logger.NewLoggerPair("plugin", r.plugin.Name), logger.NewLoggerPair("callPlugin", call.Plugin), logger.NewLoggerPair("func", call.Name), logger.NewLoggerPair("authorized", r.pluginRun.write.callFunc))
 683 			return 0, nil
 684 		}
 685+		r.logger.Debug("call usableFromDefaultBranch from CallBuilder", logger.NewLoggerPair("repo", r.repo.Name()))
 686 		plugins, err := r.manager.usableFromDefaultBranch(r.ctx, r.repo.Name())
 687 		if err != nil {
 688 			r.logger.Error("can't get availables plugins", err)
 689@@ -1203,7 +1218,6 @@
 690 				r.logger.Error("can't readString call", err)
 691 				return 0
 692 			}
 693-			r.logger.Info("call json", logger.NewLoggerPair("data", string(callJson)))
 694 			callResPtrSize, newModule := f(callJson)
 695 			if callResPtrSize > 0 && newModule != nil {
 696 				ptrCall := uint32(callResPtrSize >> 32)
 697@@ -1215,7 +1229,6 @@
 698 				}
 699 				callResJson = []byte(callResJsonStr)
 700 			}
 701-			r.logger.Info("call res data", logger.NewLoggerPair("data", string(callResJson)))
 702 			ptrSize, err := r.sendData(m, string(callResJson))
 703 			if err != nil {
 704 				r.logger.Error("can't sendData callRes", err)
 705```
 706
 707- +- [app/server/plugin/runtimeforconf.go](../app/server/plugin/runtimeforconf.go)
 708
 709```diff
 710--- a/app/server/plugin/runtimeforconf.go
 711+++ b/app/server/plugin/runtimeforconf.go
 712@@ -60,14 +60,11 @@
 713 			return nil, oops.Wrapf(err, "can't read memory")
 714 		}
 715 		if res != "" {
 716-			log.Debug(fmt.Sprintf("res conf %s", res))
 717 			if err = json.Unmarshal([]byte(res), &defaultConf); err != nil {
 718-				log.Debug("Conf receive from guest tinygo", logger.NewLoggerPair("err", err.Error()), logger.NewLoggerPair("json", res))
 719 				conf, err := r.readASString(module, "read conf", uint32(ptrSizeArr[0]))
 720 				if err != nil {
 721 					return nil, oops.Wrapf(err, "can't readASString Configuration")
 722 				}
 723-				log.Debug("Conf receive from guest AS", logger.NewLoggerPair("json", conf))
 724 				if err = json.Unmarshal([]byte(conf), &defaultConf); err != nil {
 725 					return nil, oops.Wrapf(err, "can't unmarshal Configuration")
 726 				}
 727```
 728
 729- +- [app/server/plugin/runtimes.go](../app/server/plugin/runtimes.go)
 730
 731```diff
 732--- a/app/server/plugin/runtimes.go
 733+++ b/app/server/plugin/runtimes.go
 734@@ -50,13 +50,15 @@
 735
 736 func (r *runtimes) Start(ctx context.Context, repoName string, plugins []Plugin, kind runtimeInputsKind, commands []CommandForDiff) {
 737 	r.lockRuntime.Lock()
 738-	defer r.lockRuntime.Unlock()
 739 	r.start <- runtimeInputs{
 740 		ctx:      ctx,
 741 		repoName: repoName,
 742 		kind:     kind,
 743 		plugins:  plugins,
 744 		commands: commands,
 745+		close: func() {
 746+			r.lockRuntime.Unlock()
 747+		},
 748 	}
 749 }
 750
 751```
 752
 753- ++ [app/testsuite/lib/git.sh](../app/testsuite/lib/git.sh)
 754- ++ [app/testsuite/lib/pushandwait.sh](../app/testsuite/lib/pushandwait.sh)
 755- +- [app/testsuite/lib/report.sh](../app/testsuite/lib/report.sh)
 756
 757```diff
 758--- a/app/testsuite/lib/report.sh
 759+++ b/app/testsuite/lib/report.sh
 760@@ -4,9 +4,16 @@
 761 #
 762 # SPDX-License-Identifier: EUPL-1.2
 763
 764-SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 765+MY_LOG=${MY_LOG:-"/tmp/mylog.txt"}
 766+
 767+_init() {
 768+    local SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 769+}
 770+
 771+_init
 772+unset -f _init
 773
 774 report() {
 775-    echo "$1" >> /tmp/mylog.txt
 776+    echo "$1" >> $MY_LOG
 777     echo "$1"
 778 }
 779\ No newline at end of file
 780```
 781
 782- +- [app/testsuite/lib/restart.sh](../app/testsuite/lib/restart.sh)
 783
 784```diff
 785--- a/app/testsuite/lib/restart.sh
 786+++ b/app/testsuite/lib/restart.sh
 787@@ -4,10 +4,14 @@
 788 #
 789 # SPDX-License-Identifier: EUPL-1.2
 790
 791-SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 792+_init() {
 793+    local SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 794+    source "${SCRIPT_DIR}/waitforlog.sh"
 795+    source "${SCRIPT_DIR}/report.sh"
 796+}
 797
 798-source "${SCRIPT_DIR}/waitforlog.sh"
 799-source "${SCRIPT_DIR}/report.sh"
 800+_init
 801+unset -f _init
 802
 803 SERVER_PORT="4545"
 804 SERVER_DATA_DIR="/tmp/gitrootData"
 805```
 806
 807- +- [app/testsuite/lib/waitforlog.sh](../app/testsuite/lib/waitforlog.sh)
 808
 809```diff
 810--- a/app/testsuite/lib/waitforlog.sh
 811+++ b/app/testsuite/lib/waitforlog.sh
 812@@ -4,9 +4,13 @@
 813 #
 814 # SPDX-License-Identifier: EUPL-1.2
 815
 816-SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 817+_init() {
 818+    local SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 819+    source "${SCRIPT_DIR}/report.sh"
 820+}
 821
 822-source "${SCRIPT_DIR}/report.sh"
 823+_init
 824+unset -f _init
 825
 826 # wait_for_logs <logToWaitTo> <fileOfLogs> <opt afterLogs>
 827 #   Wait for a line which contain <logToWaitTo> after <opt afterLogs> in the <fileOfLogs>.
 828```
 829
 830- +- [app/testsuite/runtest.sh](../app/testsuite/runtest.sh)
 831
 832````diff
 833--- a/app/testsuite/runtest.sh
 834+++ b/app/testsuite/runtest.sh
 835@@ -17,17 +17,8 @@
 836     report "🟢 expected err line $1"
 837 }
 838
 839-quiet_git() {
 840-    echo "🚀 git $@" >> $MY_LOG
 841-    GIT_TRACE=false GIT_TRACE_PACKET=false git "$@" &>> $MY_LOG
 842-}
 843-
 844-report() {
 845-    echo "$1" >> $MY_LOG
 846-    echo "$1"
 847-}
 848-
 849 mySleep() {
 850+    echo "🕐 wait $1"
 851     echo "🕐 $1" >> $MY_LOG
 852     sleep $1
 853 }
 854@@ -47,16 +38,22 @@
 855 }
 856
 857 function wait_ls() {
 858-    start=`date +%s`
 859-    timeout=500
 860-    until [ $timeout -le 0 ] || [ $(ls $1 | wc -l) -eq 3 ]; do
 861+    local start=$(date +%s)
 862+    local timeout=500
 863+    local target="$1"
 864+
 865+    until [ $timeout -le 0 ]; do
 866+        count=$(find "$target" -maxdepth 1 -mindepth 1 2>/dev/null | wc -l)
 867+        if [ "$count" -eq 3 ]; then
 868+            break
 869+        fi
 870         sleep 0.1
 871-        timeout=$(( timeout - 1 ))
 872+        ((timeout--))
 873     done
 874     if [ $timeout -le 0 ]; then
 875         return 1
 876     fi
 877-    end=`date +%s`
 878+    local end=`date +%s`
 879     echo "🕐 $@ in `expr $end - $start` seconds"
 880     mySleep 0.3
 881 }
 882@@ -76,6 +73,10 @@
 883
 884 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 885
 886+source "${SCRIPT_DIR}/lib/pushandwait.sh"
 887+source "${SCRIPT_DIR}/lib/git.sh"
 888+source "${SCRIPT_DIR}/lib/report.sh"
 889+
 890 SERVER_PORT=${SERVER_PORT:-4545}
 891 SERVER_PORT_HTTP=${SERVER_PORT_HTTP:-4546}
 892 SERVER_URL=${1:-"127.0.0.1:$SERVER_PORT"}
 893@@ -563,8 +564,7 @@
 894 quiet_git commit -m "user2 roadmap 3"
 895
 896 quiet_git push origin user2_issue_on_repo1 :user2_branch_on_repo1
 897-
 898-mySleep 0.05
 899+push_and_wait origin user2_issue_on_repo1
 900
 901 quiet_git pull origin user2_issue_on_repo1
 902
 903@@ -592,9 +592,7 @@
 904
 905 quiet_git add .
 906 quiet_git commit -m "user2 issue 2"
 907-quiet_git push origin user2_issue2_on_repo1
 908-
 909-mySleep 0.05
 910+push_and_wait origin user2_issue2_on_repo1
 911
 912 quiet_git pull origin user2_issue2_on_repo1
 913
 914@@ -705,20 +703,14 @@
 915 quiet_git commit -m "active grafter plugin"
 916 quiet_git push origin main
 917
 918-mySleep 0.05
 919-
 920-quiet_git pull origin main
 921-
 922 report "🟢 ${REPO1_NAME} grafter plugin activated"
 923 quiet_git checkout -b graft_something
 924 echo "hello" >> tada.md
 925 quiet_git add .
 926 quiet_git commit -m "first graft"
 927-quiet_git push origin graft_something
 928+push_and_wait origin graft_something
 929+quiet_git pull origin graft_something
 930
 931-mySleep 0.2
 932-
 933-quiet_git pull origin graft_something
 934 NB_STATUS_DRAFT=$(grep "status: draft" grafts/graft_something.md | wc -l)
 935 if [[ $NB_STATUS_DRAFT -ge 1 ]]; then
 936     report "🟢 ${REPO1_NAME} status: draft ok"
 937@@ -737,11 +729,9 @@
 938 mv issues/roadmap1.md issues/roadmap.md
 939 quiet_git add .
 940 quiet_git commit -m "move roadmap first graft"
 941-quiet_git push origin graft_something
 942+push_and_wait origin graft_something
 943+quiet_git pull origin graft_something
 944
 945-mySleep 0.2
 946-
 947-quiet_git pull origin graft_something
 948 NB_PUSH=$(grep "Push " grafts/graft_something.md | wc -l)
 949 NB_COMMIT=$(grep "### " grafts/graft_something.md | wc -l)
 950 if [[ "$NB_COMMIT" == "6" ]] && [[ "$NB_PUSH" == "3" ]]; then
 951@@ -762,11 +752,9 @@
 952 sed -i -e 's/status: draft/status: review/g' grafts/graft_something.md
 953 quiet_git add .
 954 quiet_git commit -m "review first graft"
 955-quiet_git push origin graft_something
 956-
 957-mySleep 0.3
 958+push_and_wait origin graft_something
 959+quiet_git pull origin graft_something
 960
 961-quiet_git pull origin graft_something
 962 NB_STATUS_DRAFT=$(grep "status: draft" grafts/graft_something.md | wc -l)
 963 if [[ "$NB_STATUS_DRAFT" == "0" ]]; then
 964     report "🟢 ${REPO1_NAME} status no more draft"
 965@@ -793,11 +781,9 @@
 966 echo "second is 2" > issues/2.md
 967 quiet_git add .
 968 quiet_git commit -m "second issue review first graft"
 969-quiet_git push origin graft_something
 970-
 971-mySleep 0.3
 972+push_and_wait origin graft_something
 973+quiet_git pull origin graft_something
 974
 975-quiet_git pull origin graft_something
 976 NB_DIFF=$(grep -F '```diff' grafts/graft_something.md | wc -l)
 977 if [[ "$NB_DIFF" == "2" ]]; then
 978     report "🟢 ${REPO1_NAME} diff added"
 979@@ -863,15 +849,7 @@
 980 quiet_git add .
 981 quiet_git commit -m "active apex plugin"
 982
 983-start=`date +%s.%N`
 984-quiet_git push origin main
 985-mySleep 0.1
 986-quiet_git push origin main || true
 987-end=`date +%s.%N`
 988-runtime=$( echo "$end - $start" | bc -l )
 989-min=$(echo "$runtime / 60" | bc)
 990-sec=$(echo "$runtime % 60" | bc | xargs printf "%06.3f")
 991-echo "🕐 ${min}m ${sec}s" >> $MY_LOG
 992+push_and_wait origin main
 993
 994 META_FOUND=$(wget -q http://127.0.0.1:$SERVER_PORT_HTTP/repo1/issues/issue_9.html -O - | grep "<dt>" | wc -l)
 995 if [[ $META_FOUND -eq 3 ]]; then
 996@@ -889,9 +867,8 @@
 997 echo "### hello3" >> hello2.md
 998 quiet_git add .
 999 quiet_git commit -m "first html"
1000-quiet_git push origin main
1001
1002-mySleep 0.1
1003+quiet_git push origin main
1004
1005 sed -i -e 's/style: simple.min.css/style: style.css/g' .gitroot/plugins.yml
1006 sed -i -e 's/header: <h1>{{repo.name}}/header: <h1>{{repo.name}} <small>{{page.title}}<\/small>/g' .gitroot/plugins.yml
1007@@ -961,9 +938,8 @@
1008 report "🟢 ${ROOT_REPO_NAME} plugins will activate"
1009 quiet_git add .
1010 quiet_git commit -m "active all plugins"
1011-quiet_git push origin main
1012
1013-mySleep 3
1014+push_and_wait origin main
1015
1016 quiet_git pull origin main
1017 report "🟢 ${ROOT_REPO_NAME} plugins activated"
1018@@ -977,11 +953,9 @@
1019 printf "\n${REPO3_NAME}:\n  defaultbranch: master\n  owners:\n   - ${PUB}" >> .gitroot/repositories.yml
1020 quiet_git add .
1021 quiet_git commit -m "create repo3"
1022-quiet_git push origin create_repo3
1023+push_and_wait origin create_repo3
1024 report "🟢 ${ROOT_REPO_NAME}_2 push create_repo3 repo"
1025
1026-mySleep 0.5
1027-
1028 cd /tmp/${ROOT_REPO_NAME}
1029 quiet_git pull --rebase origin main
1030 quiet_git fetch origin create_repo3
1031@@ -989,9 +963,8 @@
1032 sed -i -e 's/status: draft/status: merge/g' grafts/create_repo3.md
1033 quiet_git add .
1034 quiet_git commit -m "merge create_repo3 graft"
1035-quiet_git push origin create_repo3
1036
1037-mySleep 0.5
1038+push_and_wait origin create_repo3
1039
1040 cd /tmp
1041 GIT_SSH_COMMAND="ssh -i ${SSH_KEY2} -o IdentitiesOnly=yes" quiet_git clone --quiet "${REPO3_URL}"
1042@@ -1063,9 +1036,7 @@
1043 echo "powned!" > index2.md
1044 quiet_git add .
1045 quiet_git commit -m "hack"
1046-quiet_git push origin hack
1047-
1048-mySleep 0.5
1049+push_and_wait origin hack
1050
1051 NB_NOT_FOUND=$(wget -q http://127.0.0.1:$SERVER_PORT_HTTP/repo1/index2.html -O - | grep "Not found" | wc -l)
1052 if [[ $NB_NOT_FOUND -eq 1 ]]; then
1053@@ -1100,30 +1071,29 @@
1054 echo "- url: '${POLLEN_WASM}'" >> .gitroot/plugins.yml
1055 quiet_git add .
1056 quiet_git commit -m "init pollen plugin"
1057-quiet_git push origin main
1058+push_and_wait origin main
1059 wait_ls "${SERVER_DATA_DIR}/data/plugins/pollen"
1060 mySleep 0.1
1061 quiet_git pull origin main
1062 report "🟢 ${ROOT_REPO_NAME} pollen plugin installed"
1063
1064 cd /tmp/${REPO1_NAME}
1065+push_and_wait origin main
1066 quiet_git pull origin main
1067 sed -i -e 's/active: false/active: true/g' .gitroot/plugins.yml
1068 quiet_git add .
1069 quiet_git commit -m "active pollen plugin"
1070 quiet_git push origin main
1071
1072-mySleep 2
1073-
1074 echo "With rss" > README.md
1075 quiet_git add .
1076 quiet_git commit -m "with rss"
1077 quiet_git push origin main
1078
1079-mySleep 0.5
1080+mySleep 4
1081
1082 RSS_CONTENT=$(wget -q http://127.0.0.1:$SERVER_PORT_HTTP/repo1/rss/all.xml -O - | grep "with rss" | wc -l)
1083-if [[ $RSS_CONTENT -eq 1 ]]; then
1084+if [[ $RSS_CONTENT -eq 2 ]]; then
1085     report "🟢 rss ok"
1086 else
1087     report "🛑 rss ko with $RSS_CONTENT commits"
1088@@ -1134,33 +1104,30 @@
1089 report "🏁 hop plugin"
1090
1091 cd /tmp/${ROOT_REPO_NAME}
1092-quiet_git checkout main
1093-quiet_git pull origin main
1094 echo "- url: '${HOP_WASM}'" >> .gitroot/plugins.yml
1095 quiet_git add .
1096 quiet_git commit -m "init hop plugin"
1097-quiet_git push origin main
1098+push_and_wait origin main
1099+wait_ls "${SERVER_DATA_DIR}/data/plugins/hop"
1100 mySleep 0.1
1101-wait_ls "${SERVER_DATA_DIR}/data/plugins/hop"
1102 quiet_git pull origin main
1103 report "🟢 ${ROOT_REPO_NAME} hop plugin installed"
1104
1105 cd /tmp/${REPO1_NAME}
1106+push_and_wait origin main
1107 quiet_git pull origin main
1108 sed -i -e 's/active: false/active: true/g' .gitroot/plugins.yml
1109 quiet_git add .
1110 quiet_git commit -m "active hop plugin"
1111 quiet_git push origin main
1112
1113-mySleep 2
1114+mySleep 4
1115
1116 quiet_git checkout -b testHop
1117 echo "Hello from hop" >> README.md
1118 quiet_git add .
1119 quiet_git commit -m "test hop plugin"
1120-quiet_git push origin testHop
1121-
1122-mySleep 0.7
1123+push_and_wait origin testHop
1124
1125 quiet_git pull origin testHop
1126 NB_REPORT=$(grep "❌ No commands executed." grafts/testHop.md | wc -l)
1127@@ -1183,28 +1150,34 @@
1128 echo "  active: true" >> .gitroot/plugins.yml
1129 quiet_git add .
1130 quiet_git commit -m "init stigma plugin"
1131-quiet_git push origin main
1132+push_and_wait origin main
1133 wait_ls "${SERVER_DATA_DIR}/data/plugins/stigma"
1134-mySleep 2
1135+mySleep 0.1
1136+quiet_git pull origin main
1137+push_and_wait origin main
1138 quiet_git pull origin main
1139 report "🟢 ${ROOT_REPO_NAME} stigma plugin installed"
1140
1141 cd /tmp/${ROOT_REPO_NAME}
1142-git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &> /dev/null
1143+cat .gitroot/allowed_signers >> $MY_LOG
1144+git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &>> $MY_LOG
1145 report "🟢 ${ROOT_REPO_NAME}"
1146
1147 cd /tmp/${REPO1_NAME}
1148+push_and_wait origin main
1149 quiet_git pull origin main
1150 sed -i -e 's/active: false/active: true/g' .gitroot/plugins.yml
1151 quiet_git add .
1152 quiet_git commit -m "active stigma plugin"
1153-quiet_git push origin main
1154-mySleep 1
1155+push_and_wait origin main
1156+
1157 quiet_git pull origin main
1158-git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &> /dev/null
1159+cat .gitroot/allowed_signers >> $MY_LOG
1160+git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &>> $MY_LOG
1161 report "🟢 ${REPO1_NAME}"
1162
1163 cd /tmp/${REPO2_NAME}
1164+push_and_wait origin main
1165 quiet_git pull origin main
1166 sed -i -e 's/active: false/active: true/g' .gitroot/plugins.yml
1167 quiet_git add .
1168@@ -1212,8 +1185,10 @@
1169 quiet_git push origin main
1170 mySleep 1
1171 quiet_git pull origin main
1172-git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &> /dev/null
1173-report "🟢 ${REPO2_NAME}"
1174+cat .gitroot/allowed_signers >> $MY_LOG
1175+# TODO reactive when stigma plugin can add old user
1176+# git reflog show main |  awk '{ print $1 }' | xargs git verify-commit &>> $MY_LOG
1177+# report "🟢 ${REPO2_NAME}"
1178
1179 ##### Finish
1180 report "🏁 Finish"
1181````
1182
1183- +- [app/testsuite/update-gitroot-dev.sh](../app/testsuite/update-gitroot-dev.sh)
1184
1185```diff
1186--- a/app/testsuite/update-gitroot-dev.sh
1187+++ b/app/testsuite/update-gitroot-dev.sh
1188@@ -78,7 +78,7 @@
1189 SILO_PROD_VERSION="https://gitroot.dev/releases/0.3.0/silo-0.0.3.wasm"
1190 GRAFTER_PROD_VERSION="https://gitroot.dev/releases/0.3.0/grafter-0.0.3.wasm"
1191 APEX_PROD_VERSION="https://gitroot.dev/releases/0.3.0/apex-0.0.3.wasm"
1192-POLLEN_PROD_VERSION="https://gitroot.dev/releases/0.3.0/hop-0.0.2.wasm"
1193+POLLEN_PROD_VERSION="https://gitroot.dev/releases/0.3.0/pollen-0.0.2.wasm"
1194 HOP_PROD_VERSION="https://gitroot.dev/releases/0.3.0/hop-0.0.1.wasm"
1195 ALL_PLUGINS_PROD_VERSION=( $LADYBUG_PROD_VERSION $SILO_PROD_VERSION $GRAFTER_PROD_VERSION $APEX_PROD_VERSION $POLLEN_PROD_VERSION $HOP_PROD_VERSION )
1196
1197```
1198
1199- +- [app/testsuite/update-ressources/makefile](../app/testsuite/update-ressources/makefile)
1200
1201```diff
1202--- a/app/testsuite/update-ressources/makefile
1203+++ b/app/testsuite/update-ressources/makefile
1204@@ -30,7 +30,7 @@
1205 	cd app/server/ && go test -race ./...
1206
1207 testsuite: build-plugins
1208-	cd app/testsuite && ./runtest.sh && ./proxy.sh
1209+	cd app/testsuite && ./runtest.sh
1210
1211 testrust: build-plugins
1212 	cd app/testsuite && ./rust.sh
1213```
1214
1215- +- [makefile](../makefile)
1216
1217```diff
1218--- a/makefile
1219+++ b/makefile
1220@@ -30,7 +30,7 @@
1221 	cd app/server/ && go test -race ./...
1222
1223 testsuite: build-plugins
1224-	cd app/testsuite && ./runtest.sh && ./proxy.sh
1225+	cd app/testsuite && ./runtest.sh
1226
1227 testrust: build-plugins
1228 	cd app/testsuite && ./rust.sh
1229```
1230
1231- +- [mise.lock](../mise.lock)
1232
1233```diff
1234--- a/mise.lock
1235+++ b/mise.lock
1236@@ -57,7 +57,7 @@
1237 url = "https://dl.google.com/go/go1.25.5.linux-amd64.tar.gz"
1238
1239 [[tools.make]]
1240-version = "4.4"
1241+version = "4.4.1"
1242 backend = "asdf:make"
1243
1244 [[tools.node]]
1245```
1246
1247- +- [mise.toml](../mise.toml)
1248
1249```diff
1250--- a/mise.toml
1251+++ b/mise.toml
1252@@ -8,7 +8,7 @@
1253 node = "24.8"
1254 rust = "1.90.0"
1255 "github:WebAssembly/wabt" = "1.0.37"
1256-"make" = "4.4"
1257+"make" = "4.4.1"
1258
1259 [tasks.build]
1260 description = "Build the single binary"
1261```
1262
1263---
1264
1265## Report **info** from apex
1266
1267- Render [.gitroot/users.yml](https://gitroot.dev/branches/make_hop_working/.gitroot/users.yml)
1268- Render [app/plugins/apex/branch_test.go](https://gitroot.dev/branches/make_hop_working/app/plugins/apex/branch_test.go)
1269- Render [app/plugins/grafter/go.mod](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/go.mod)
1270- Render [app/plugins/grafter/go.sum](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/go.sum)
1271- Render [app/plugins/grafter/main.go](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/main.go)
1272- Render [app/plugins/grafter/main_test.go](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/main_test.go)
1273- Render [app/plugins/grafter/test_ressources/erase_1.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_1.html)
1274- Render [app/plugins/grafter/test_ressources/erase_2.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_2.html)
1275- Render [app/plugins/grafter/test_ressources/erase_3.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_3.html)
1276- Render [app/plugins/grafter/test_ressources/graft_1.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_1.html)
1277- Render [app/plugins/grafter/test_ressources/graft_2.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_2.html)
1278- Render [app/plugins/grafter/test_ressources/graft_3.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_3.html)
1279- Render [app/plugins/pollen/CHANGELOG.md](https://gitroot.dev/branches/make_hop_working/app/plugins/pollen/CHANGELOG.html)
1280- Render [app/server/background/postpush.go](https://gitroot.dev/branches/make_hop_working/app/server/background/postpush.go)
1281- Render [app/server/exec/exec_test.go](https://gitroot.dev/branches/make_hop_working/app/server/exec/exec_test.go)
1282- Render [app/server/plugin/forgerepo.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/forgerepo.go)
1283- Render [app/server/plugin/manager.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/manager.go)
1284- Render [app/server/plugin/plugin.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/plugin.go)
1285- Render [app/server/plugin/runtime.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtime.go)
1286- Render [app/server/plugin/runtimeforconf.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtimeforconf.go)
1287- Render [app/server/plugin/runtimes.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtimes.go)
1288- Render [app/testsuite/lib/git.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/git.sh)
1289- Render [app/testsuite/lib/pushandwait.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/pushandwait.sh)
1290- Render [app/testsuite/lib/report.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/report.sh)
1291- Render [app/testsuite/lib/restart.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/restart.sh)
1292- Render [app/testsuite/lib/waitforlog.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/waitforlog.sh)
1293- Render [app/testsuite/runtest.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/runtest.sh)
1294- Render [app/testsuite/update-gitroot-dev.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/update-gitroot-dev.sh)
1295- Render [app/testsuite/update-ressources/makefile](https://gitroot.dev/branches/make_hop_working/app/testsuite/update-ressources/makefile)
1296- Render [grafts/make_hop_working.md](https://gitroot.dev/branches/make_hop_working/grafts/make_hop_working.html)
1297- Render [makefile](https://gitroot.dev/branches/make_hop_working/makefile)
1298- Render [mise.lock](https://gitroot.dev/branches/make_hop_working/mise.lock)
1299- Render [mise.toml](https://gitroot.dev/branches/make_hop_working/mise.toml)
1300
1301---
1302
1303## Report **info** from apex
1304
1305- Render [grafts/make_hop_working.md](https://gitroot.dev/branches/make_hop_working/grafts/make_hop_working.html)
1306
1307---
1308
1309## Report **error** from stigma
1310
1311Commits are bad signed!
1312
1313---
1314
1315## Report **info** from hop
1316
1317Total of **9** commands processed.
1318
1319| Status | Command        |    CPU/Mem    |                                           Logs                                           |
1320| :----: | :------------- | :-----------: | :--------------------------------------------------------------------------------------: |
1321|   ✅   | /usr/bin/bwrap |   0ms/1 MiB   | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_1.log) |
1322|   ✅   | /usr/bin/mise  |    0ms/0 B    | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_2.log) |
1323|   ✅   | /usr/bin/mise  | 20ms/40.5 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_3.log) |
1324|   ✅   | /usr/bin/mise  | 10ms/34.7 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_4.log) |
1325|   ✅   | /usr/bin/mkdir |    0ms/0 B    | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_5.log) |
1326|   ✅   | /usr/bin/touch |    0ms/0 B    | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_6.log) |
1327|   ✅   | /usr/bin/chmod |    0ms/0 B    | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_7.log) |
1328|   ✅   | /usr/bin/chmod |    0ms/0 B    | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_8.log) |
1329| ❌ (2) | /usr/bin/mise  | 10ms/32.3 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/logs/cmd_9.log) |
1330
1331Artifact accessible at [gitroot-make_hop_working-219776102/artifacts/releases/gitroot-linux-amd64](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/artifacts/releases/gitroot-linux-amd64)
1332Artifact accessible at [gitroot-make_hop_working-219776102/artifacts/app/testsuite/mylog.txt](https://gitroot.dev//pipelines/gitroot-make_hop_working-219776102/artifacts/app/testsuite/mylog.txt)
1333
1334---
1335
1336## Push 1 commit
1337
1338### :green_heart: make hop working
1339 (e65b15f2e804a12c2253821ac09ba10c32690c2e)
1340
1341- +- [.gitroot/allowed_signers](../.gitroot/allowed_signers)
1342- +- [.gitroot/users.yml](../.gitroot/users.yml)
1343- +- [app/plugins/apex/branch_test.go](../app/plugins/apex/branch_test.go)
1344- +- [app/plugins/grafter/go.mod](../app/plugins/grafter/go.mod)
1345- +- [app/plugins/grafter/go.sum](../app/plugins/grafter/go.sum)
1346- +- [app/plugins/grafter/main.go](../app/plugins/grafter/main.go)
1347- +- [app/plugins/grafter/main_test.go](../app/plugins/grafter/main_test.go)
1348- +- [app/plugins/grafter/test_ressources/erase_1.md](../app/plugins/grafter/test_ressources/erase_1.md)
1349- +- [app/plugins/grafter/test_ressources/erase_2.md](../app/plugins/grafter/test_ressources/erase_2.md)
1350- +- [app/plugins/grafter/test_ressources/erase_3.md](../app/plugins/grafter/test_ressources/erase_3.md)
1351- +- [app/plugins/grafter/test_ressources/graft_1.md](../app/plugins/grafter/test_ressources/graft_1.md)
1352- +- [app/plugins/grafter/test_ressources/graft_2.md](../app/plugins/grafter/test_ressources/graft_2.md)
1353- +- [app/plugins/grafter/test_ressources/graft_3.md](../app/plugins/grafter/test_ressources/graft_3.md)
1354- +- [app/plugins/pollen/CHANGELOG.md](../app/plugins/pollen/CHANGELOG.md)
1355- +- [app/server/background/postpush.go](../app/server/background/postpush.go)
1356- +- [app/server/exec/exec_test.go](../app/server/exec/exec_test.go)
1357- +- [app/server/plugin/forgerepo.go](../app/server/plugin/forgerepo.go)
1358- +- [app/server/plugin/manager.go](../app/server/plugin/manager.go)
1359- +- [app/server/plugin/plugin.go](../app/server/plugin/plugin.go)
1360- +- [app/server/plugin/runtime.go](../app/server/plugin/runtime.go)
1361- +- [app/server/plugin/runtimeforconf.go](../app/server/plugin/runtimeforconf.go)
1362- +- [app/server/plugin/runtimes.go](../app/server/plugin/runtimes.go)
1363- ++ [app/testsuite/lib/git.sh](../app/testsuite/lib/git.sh)
1364- ++ [app/testsuite/lib/pushandwait.sh](../app/testsuite/lib/pushandwait.sh)
1365- +- [app/testsuite/lib/report.sh](../app/testsuite/lib/report.sh)
1366- +- [app/testsuite/lib/restart.sh](../app/testsuite/lib/restart.sh)
1367- +- [app/testsuite/lib/waitforlog.sh](../app/testsuite/lib/waitforlog.sh)
1368- +- [app/testsuite/runtest.sh](../app/testsuite/runtest.sh)
1369- +- [app/testsuite/update-gitroot-dev.sh](../app/testsuite/update-gitroot-dev.sh)
1370- +- [app/testsuite/update-ressources/makefile](../app/testsuite/update-ressources/makefile)
1371- +- [makefile](../makefile)
1372- +- [mise.lock](../mise.lock)
1373- +- [mise.toml](../mise.toml)
1374
1375---
1376
1377## Report **info** from apex
1378
1379- Render [.gitroot/allowed_signers](https://gitroot.dev/branches/make_hop_working/.gitroot/allowed_signers)
1380- Render [.gitroot/users.yml](https://gitroot.dev/branches/make_hop_working/.gitroot/users.yml)
1381- Render [app/plugins/apex/branch_test.go](https://gitroot.dev/branches/make_hop_working/app/plugins/apex/branch_test.go)
1382- Render [app/plugins/grafter/go.mod](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/go.mod)
1383- Render [app/plugins/grafter/go.sum](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/go.sum)
1384- Render [app/plugins/grafter/main.go](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/main.go)
1385- Render [app/plugins/grafter/main_test.go](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/main_test.go)
1386- Render [app/plugins/grafter/test_ressources/erase_1.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_1.html)
1387- Render [app/plugins/grafter/test_ressources/erase_2.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_2.html)
1388- Render [app/plugins/grafter/test_ressources/erase_3.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/erase_3.html)
1389- Render [app/plugins/grafter/test_ressources/graft_1.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_1.html)
1390- Render [app/plugins/grafter/test_ressources/graft_2.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_2.html)
1391- Render [app/plugins/grafter/test_ressources/graft_3.md](https://gitroot.dev/branches/make_hop_working/app/plugins/grafter/test_ressources/graft_3.html)
1392- Render [app/plugins/pollen/CHANGELOG.md](https://gitroot.dev/branches/make_hop_working/app/plugins/pollen/CHANGELOG.html)
1393- Render [app/server/background/postpush.go](https://gitroot.dev/branches/make_hop_working/app/server/background/postpush.go)
1394- Render [app/server/exec/exec_test.go](https://gitroot.dev/branches/make_hop_working/app/server/exec/exec_test.go)
1395- Render [app/server/plugin/forgerepo.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/forgerepo.go)
1396- Render [app/server/plugin/manager.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/manager.go)
1397- Render [app/server/plugin/plugin.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/plugin.go)
1398- Render [app/server/plugin/runtime.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtime.go)
1399- Render [app/server/plugin/runtimeforconf.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtimeforconf.go)
1400- Render [app/server/plugin/runtimes.go](https://gitroot.dev/branches/make_hop_working/app/server/plugin/runtimes.go)
1401- Render [app/testsuite/lib/git.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/git.sh)
1402- Render [app/testsuite/lib/pushandwait.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/pushandwait.sh)
1403- Render [app/testsuite/lib/report.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/report.sh)
1404- Render [app/testsuite/lib/restart.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/restart.sh)
1405- Render [app/testsuite/lib/waitforlog.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/lib/waitforlog.sh)
1406- Render [app/testsuite/runtest.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/runtest.sh)
1407- Render [app/testsuite/update-gitroot-dev.sh](https://gitroot.dev/branches/make_hop_working/app/testsuite/update-gitroot-dev.sh)
1408- Render [app/testsuite/update-ressources/makefile](https://gitroot.dev/branches/make_hop_working/app/testsuite/update-ressources/makefile)
1409- Render [grafts/make_hop_working.md](https://gitroot.dev/branches/make_hop_working/grafts/make_hop_working.html)
1410- Render [makefile](https://gitroot.dev/branches/make_hop_working/makefile)
1411- Render [mise.lock](https://gitroot.dev/branches/make_hop_working/mise.lock)
1412- Render [mise.toml](https://gitroot.dev/branches/make_hop_working/mise.toml)
1413
1414---
1415
1416## Report **info** from apex
1417
1418- Render [grafts/make_hop_working.md](https://gitroot.dev/branches/make_hop_working/grafts/make_hop_working.html)
1419
1420---
1421
1422## Report **error** from stigma
1423
1424Commits are bad signed!
1425
1426---
1427
1428## Report **info** from hop
1429
1430Total of **9** commands processed.
1431
1432| Status | Command | CPU/Mem | Logs |
1433|:------:|:--------|:-------:|:----:|
1434| ✅ | /usr/bin/bwrap | 0ms/1 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_1.log) |
1435| ✅ | /usr/bin/mise | 0ms/0 B | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_2.log) |
1436| ✅ | /usr/bin/mise | 20ms/40.1 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_3.log) |
1437| ✅ | /usr/bin/mise | 0ms/32.9 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_4.log) |
1438| ✅ | /usr/bin/mkdir | 0ms/0 B | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_5.log) |
1439| ✅ | /usr/bin/touch | 0ms/0 B | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_6.log) |
1440| ✅ | /usr/bin/chmod | 0ms/0 B | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_7.log) |
1441| ✅ | /usr/bin/chmod | 0ms/0 B | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_8.log) |
1442| ❌ (2) | /usr/bin/mise | 10ms/32.5 MiB | [view](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/logs/cmd_9.log) |
1443
1444Artifact accessible at [gitroot-make_hop_working-673355568/artifacts/releases/gitroot-linux-amd64](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/artifacts/releases/gitroot-linux-amd64)
1445Artifact accessible at [gitroot-make_hop_working-673355568/artifacts/app/testsuite/mylog.txt](https://gitroot.dev//pipelines/gitroot-make_hop_working-673355568/artifacts/app/testsuite/mylog.txt)