Skip to content

Instantly share code, notes, and snippets.

@slonka
Created April 7, 2023 09:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save slonka/0e24760cf8963ab1efd8aeb7fc8c7fb6 to your computer and use it in GitHub Desktop.
Save slonka/0e24760cf8963ab1efd8aeb7fc8c7fb6 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<!-- saved from url=(0073)file:///private/var/folders/ts/xg_0vxrd0yj9n7pckrc0fq5r0000gn/T/diff.html -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Pretty Diff</title>
<style>
body {
text-align: center;
}
#wrapper {
display: inline-block;
margin-top: 1em;
min-width: 800px;
text-align: left;
}
h2 {
background: #fafafa;
background: -moz-linear-gradient(#fafafa, #eaeaea);
background: -webkit-linear-gradient(#fafafa, #eaeaea);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa',endColorstr='#eaeaea')";
border: 1px solid #d8d8d8;
border-bottom: 0;
color: #555;
font: 14px sans-serif;
overflow: hidden;
padding: 10px 6px;
text-shadow: 0 1px 0 white;
margin: 0;
}
.copy {
float: right;
}
.file-diff {
border: 1px solid #d8d8d8;
margin-bottom: 1em;
overflow: auto;
padding: 0.5em 0;
}
.file-diff > div {
width: 100%;
}
pre {
margin: 0;
font-family: "Bitstream Vera Sans Mono", Courier, monospace;
font-size: 12px;
line-height: 1.4em;
text-indent: 0.5em;
}
.file {
color: #aaa;
}
.delete {
background-color: #fdd;
}
.insert {
background-color: #dfd;
}
.info {
color: #a0b;
}
</style>
</head>
<body>
<div id="wrapper">
<h2>tmp/1.txt<button class="copy" onclick="navigator.clipboard.writeText(&quot;tmp/1.txt&quot;)">copy path</button></h2><div class="file-diff"><div><pre class="file">diff --git a/tmp/1.txt b/tmp/2.txt</pre>
<pre class="file">index 4b06279b..29d190a7 100644</pre>
<pre class="delete">--- a/tmp/1.txt</pre>
<pre class="insert">+++ b/tmp/2.txt</pre>
<pre class="info">@@ -4,12 +4,11 @@ import (</pre>
<pre class="context"> "encoding/json"</pre>
<pre class="context"> "fmt"</pre>
<pre class="context"> "github.com/kumahq/ci-tools/cmd/internal/github"</pre>
<pre class="insert">+ "github.com/kumahq/ci-tools/cmd/internal/version"</pre>
<pre class="insert">+ "github.com/kumahq/ci-tools/cmd/internal/versionfile"</pre>
<pre class="context"> "github.com/spf13/cobra"</pre>
<pre class="context"> "gopkg.in/yaml.v3"</pre>
<pre class="delete">- "regexp"</pre>
<pre class="context"> "sort"</pre>
<pre class="delete">- "strconv"</pre>
<pre class="delete">- "strings"</pre>
<pre class="context"> "time"</pre>
<pre class="context"> )</pre>
<pre class="context"> </pre>
<pre class="info">@@ -19,18 +18,6 @@ var minVersion string</pre>
<pre class="context"> var includeDev bool</pre>
<pre class="context"> var activeBranches bool</pre>
<pre class="context"> </pre>
<pre class="delete">-type VersionEntry struct {</pre>
<pre class="delete">- Edition string `yaml:"edition"`</pre>
<pre class="delete">- Version string `yaml:"version"`</pre>
<pre class="delete">- Release string `yaml:"release"`</pre>
<pre class="delete">- Latest bool `yaml:"latest,omitempty"`</pre>
<pre class="delete">- ReleaseDate string `yaml:"releaseDate"`</pre>
<pre class="delete">- EndOfLifeDate string `yaml:"endOfLifeDate"`</pre>
<pre class="delete">- Branch string `yaml:"branch"`</pre>
<pre class="delete">-}</pre>
<pre class="delete">-</pre>
<pre class="delete">-var releasedOnRegexp = regexp.MustCompile("^&gt; Released on ([0-9]{4}/[0-9]{2}/[0-9]{2})")</pre>
<pre class="delete">-</pre>
<pre class="context"> var versionFile = &amp;cobra.Command{</pre>
<pre class="context"> Use: "version-file",</pre>
<pre class="context"> Short: "Recreate the versions.yaml using github releases",</pre>
<pre class="info">@@ -43,66 +30,35 @@ var versionFile = &amp;cobra.Command{</pre>
<pre class="context"> if err != nil {</pre>
<pre class="context"> return err</pre>
<pre class="context"> }</pre>
<pre class="delete">- minMajor, minMinor, _ := MustSplitSemVer(minVersion)</pre>
<pre class="insert">+ minMajor, minMinor, _ := version.MustSplitSemVer(minVersion)</pre>
<pre class="context"> byVersion := map[string][]github.GQLRelease{}</pre>
<pre class="context"> for i := range res {</pre>
<pre class="delete">- major, minor, _ := MustSplitSemVer(res[i].Name)</pre>
<pre class="insert">+ major, minor, _ := version.MustSplitSemVer(res[i].Name)</pre>
<pre class="context"> if major &lt; minMajor || (major == minMajor &amp;&amp; minor &lt; minMinor) {</pre>
<pre class="context"> continue</pre>
<pre class="context"> }</pre>
<pre class="context"> release := fmt.Sprintf("%d.%d.x", major, minor)</pre>
<pre class="context"> byVersion[release] = append(byVersion[release], res[i])</pre>
<pre class="context"> }</pre>
<pre class="delete">- var out []VersionEntry</pre>
<pre class="delete">- for v, releases := range byVersion {</pre>
<pre class="delete">- latest := false</pre>
<pre class="delete">- for _, r := range releases {</pre>
<pre class="delete">- latest = latest || r.IsLatest</pre>
<pre class="delete">- }</pre>
<pre class="delete">- sort.Slice(releases, func(i, j int) bool {</pre>
<pre class="delete">- iv, _ := strconv.Atoi(strings.Split(releases[i].Name, ".")[2])</pre>
<pre class="delete">- jv, _ := strconv.Atoi(strings.Split(releases[j].Name, ".")[2])</pre>
<pre class="delete">- return iv &lt; jv</pre>
<pre class="delete">- })</pre>
<pre class="delete">- releaseDate, err := ExtractReleaseDate(releases[0])</pre>
<pre class="insert">+ var out []versionfile.VersionEntry</pre>
<pre class="insert">+ for releaseName, releases := range byVersion {</pre>
<pre class="insert">+ res, err := versionfile.BuildVersionEntry(edition, releaseName, lifetimeMonths, releases)</pre>
<pre class="context"> if err != nil {</pre>
<pre class="delete">- return fmt.Errorf("failed to extract release date for %s because of: %s", releases[0].Name, err.Error())</pre>
<pre class="delete">- }</pre>
<pre class="delete">- EOLDate := releaseDate.AddDate(0, lifetimeMonths, 0)</pre>
<pre class="delete">- entry := VersionEntry{</pre>
<pre class="delete">- Release: v,</pre>
<pre class="delete">- Edition: edition,</pre>
<pre class="delete">- Version: releases[len(releases)-1].Name,</pre>
<pre class="delete">- Latest: latest,</pre>
<pre class="delete">- ReleaseDate: releaseDate.Format(time.DateOnly),</pre>
<pre class="delete">- EndOfLifeDate: EOLDate.Format(time.DateOnly),</pre>
<pre class="delete">- Branch: ExtractBranch(releases[0].Name),</pre>
<pre class="insert">+ return err</pre>
<pre class="context"> }</pre>
<pre class="delete">- out = append(out, entry)</pre>
<pre class="insert">+ out = append(out, res)</pre>
<pre class="context"> }</pre>
<pre class="context"> sort.Slice(out, func(i, j int) bool {</pre>
<pre class="delete">- majorI, minorI, _ := MustSplitSemVer(strings.ReplaceAll(out[i].Release, "x", "0"))</pre>
<pre class="delete">- majorJ, minorJ, _ := MustSplitSemVer(strings.ReplaceAll(out[j].Release, "x", "0"))</pre>
<pre class="delete">- if majorI == majorJ {</pre>
<pre class="delete">- return minorI &lt; minorJ</pre>
<pre class="delete">- }</pre>
<pre class="delete">- return majorI &lt; majorJ</pre>
<pre class="insert">+ return out[i].Less(out[j])</pre>
<pre class="context"> })</pre>
<pre class="context"> if includeDev {</pre>
<pre class="delete">- out = append(out, VersionEntry{</pre>
<pre class="delete">- Release: "dev",</pre>
<pre class="delete">- Edition: edition,</pre>
<pre class="delete">- Version: "preview",</pre>
<pre class="delete">- Branch: "master",</pre>
<pre class="delete">- ReleaseDate: "2020-01-01",</pre>
<pre class="delete">- EndOfLifeDate: "2030-01-01",</pre>
<pre class="delete">- })</pre>
<pre class="insert">+ out = append(out, versionfile.Dev(edition))</pre>
<pre class="context"> }</pre>
<pre class="context"> if activeBranches {</pre>
<pre class="context"> var branches []string</pre>
<pre class="context"> for _, v := range out {</pre>
<pre class="context"> t, _ := time.Parse(time.DateOnly, v.EndOfLifeDate)</pre>
<pre class="delete">- if time.Now().Before(t) {</pre>
<pre class="insert">+ if v.EndOfLifeDate == "" || time.Now().Before(t) {</pre>
<pre class="context"> branches = append(branches, v.Branch)</pre>
<pre class="context"> }</pre>
<pre class="context"> }</pre>
<pre class="info">@@ -112,19 +68,6 @@ var versionFile = &amp;cobra.Command{</pre>
<pre class="context"> },</pre>
<pre class="context"> }</pre>
<pre class="context"> </pre>
<pre class="delete">-func ExtractBranch(name string) string {</pre>
<pre class="delete">- major, minor, _ := MustSplitSemVer(name)</pre>
<pre class="delete">- return fmt.Sprintf("release-%d.%d", major, minor)</pre>
<pre class="delete">-}</pre>
<pre class="delete">-</pre>
<pre class="delete">-func ExtractReleaseDate(r github.GQLRelease) (time.Time, error) {</pre>
<pre class="delete">- res := releasedOnRegexp.FindStringSubmatch(r.Description)</pre>
<pre class="delete">- if len(res) == 2 {</pre>
<pre class="delete">- return time.Parse("2006/01/02", res[1])</pre>
<pre class="delete">- }</pre>
<pre class="delete">- return r.PublishedAt, nil</pre>
<pre class="delete">-}</pre>
<pre class="delete">-</pre>
<pre class="context"> func init() {</pre>
<pre class="context"> versionFile.Flags().StringVar(&amp;config.repo, "repo", "kumahq/kuma", "The repository to query")</pre>
<pre class="context"> versionFile.Flags().StringVar(&amp;edition, "edition", "kuma", "The edition of the product")</pre></div></div>
</div>
</body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment