blob: 103ab48e50742e57ea1e1e64c6b716135683dc29 [file] [log] [blame]
<!--{
"Title": "Go Reproducible Build Report",
"layout": "article",
"template": true
}-->
<style>
details { margin-left: 2em; }
pre { margin-left: 2em; }
.time { color: #777; }
</style>
<p>
As of Go 1.21, Go's binary toolchain downloads served by <a href="/dl/">go.dev/dl/</a> can be
reproduced and verified by anyone, on any platform,
using <a href="https://pkg.go.dev/golang.org/x/build/cmd/gorebuild">golang.org/x/build/cmd/gorebuild</a>.
For more details, see the blog post
“[Perfectly Reproducible, Verified Go Toolchains](/blog/rebuild).”
</p>
<p>
This page is updated daily with the results of running <code>gorebuild</code> in an Ubuntu VM,
using this script:
</p>
<pre>
apt-get update &&
apt-get -y install software-properties-common &&
add-apt-repository universe &&
apt-get -y install golang-go msitools &&
go run golang.org/x/build/cmd/gorebuild@latest -p=4
</pre>
<p>
The installation of <code>msitools</code> lets <code>gorebuild</code>
check the contents of the Windows MSI installation file.
The <code>-p=4</code> means to run up to four builds in parallel.
</p>
{{define "marker"}}<span style="marker">{{template "markersymbol" .}}</span>{{end}}
{{define "markersymbol"}}
{{- if eq . "PASS" -}} ✅
{{- else if eq . "SKIP" -}} —
{{- else -}} ❌
{{- end -}}
{{end}}
{{define "log"}}
<pre>
{{range .Messages}}<span class="time">{{(rfc3339 .Time).UTC.Format "15:04:05"}}</span> {{.Text}}
{{end}}
</pre>
{{end}}
{{define "autoopen"}} {{if not (eq . "PASS")}} open {{end}} {{end}}
{{$Report := json gorebuild}}
{{with $Report}}
Gorebuild version {{.Version}}.<br>
Built with Go version {{.GoVersion}}, {{.GOOS}}-{{.GOARCH}}.<br>
<br>
Rebuild started at {{(rfc3339 .Start).UTC.Format "2006-01-02 15:04:05"}} UTC.<br>
Rebuild finished at {{(rfc3339 .End).UTC.Format "2006-01-02 15:04:05"}} UTC.<br>
Elapsed time: {{((rfc3339 .End).Sub (rfc3339 .Start)).Round 1e9}}.
<h2 id="releases">Releases</h2>
{{range .Releases}}
<details {{template "autoopen" .Log.Status}} >
<summary><b id="{{.Version}}">{{template "marker" .Log.Status}} {{.Version}}</b></summary>
<details>
<summary>Log</summary>
{{template "log" .Log}}
</details>
{{range .Files}}
<details {{template "autoopen" .Log.Status}}>
<summary><b id="{{.Name}}">{{template "marker" .Log.Status}} {{.Name}}</b></summary>
{{template "log" .Log}}
</details>
{{end}}
</details>
{{end}}
<h2 id="bootstraps">Bootstraps</h2>
{{range .Bootstraps}}
<details>
<summary><b>Bootstrap {{.Version}}</b></summary>
{{template "log" .Log}}
</details>
{{end}}
{{end}}