Skip to content

Commit 16db895

Browse files
Implementation of git presenter
0 parents  commit 16db895

14 files changed

Lines changed: 964 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
name: Build
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- name: Set up Go
16+
uses: actions/setup-go@v4
17+
with:
18+
go-version: '1.21'
19+
20+
- name: Run tests
21+
run: go test ./internal/controller ./internal/presentation ./internal/presenter ./internal/slide
22+
23+
- name: Run go vet
24+
run: go vet ./...
25+
26+
- name: Run go fmt check
27+
run: |
28+
if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then
29+
echo "Go code is not formatted:"
30+
gofmt -s -l .
31+
exit 1
32+
fi
33+
34+
build:
35+
needs: test
36+
runs-on: ubuntu-latest
37+
strategy:
38+
matrix:
39+
goos: [linux, windows, darwin]
40+
goarch: [amd64, arm64]
41+
exclude:
42+
- goos: windows
43+
goarch: arm64
44+
45+
steps:
46+
- uses: actions/checkout@v4
47+
48+
- name: Set up Go
49+
uses: actions/setup-go@v4
50+
with:
51+
go-version: '1.21'
52+
53+
- name: Build binary
54+
env:
55+
GOOS: ${{ matrix.goos }}
56+
GOARCH: ${{ matrix.goarch }}
57+
run: |
58+
mkdir -p dist
59+
if [ "$GOOS" = "windows" ]; then
60+
go build -o dist/git-presenter-${{ matrix.goos }}-${{ matrix.goarch }}.exe ./cmd/git-presenter
61+
else
62+
go build -o dist/git-presenter-${{ matrix.goos }}-${{ matrix.goarch }} ./cmd/git-presenter
63+
fi
64+
65+
- name: Upload artifacts
66+
uses: actions/upload-artifact@v3
67+
with:
68+
name: git-presenter-${{ matrix.goos }}-${{ matrix.goarch }}
69+
path: dist/
70+
71+
release:
72+
needs: build
73+
runs-on: ubuntu-latest
74+
if: startsWith(github.ref, 'refs/tags/')
75+
76+
steps:
77+
- uses: actions/checkout@v4
78+
79+
- name: Download all artifacts
80+
uses: actions/download-artifact@v3
81+
with:
82+
path: dist
83+
84+
- name: Create Release
85+
uses: softprops/action-gh-release@v1
86+
with:
87+
files: |
88+
dist/git-presenter-linux-amd64/git-presenter-linux-amd64
89+
dist/git-presenter-linux-arm64/git-presenter-linux-arm64
90+
dist/git-presenter-darwin-amd64/git-presenter-darwin-amd64
91+
dist/git-presenter-darwin-arm64/git-presenter-darwin-arm64
92+
dist/git-presenter-windows-amd64/git-presenter-windows-amd64.exe
93+
body: |
94+
## Installation
95+
96+
### Linux (x86_64)
97+
```bash
98+
wget https://github.com/pythonandchips/git-presenter/releases/download/${{ github.ref_name }}/git-presenter-linux-amd64
99+
chmod +x git-presenter-linux-amd64
100+
sudo mv git-presenter-linux-amd64 /usr/local/bin/git-presenter
101+
```
102+
103+
### Linux (ARM64)
104+
```bash
105+
wget https://github.com/pythonandchips/git-presenter/releases/download/${{ github.ref_name }}/git-presenter-linux-arm64
106+
chmod +x git-presenter-linux-arm64
107+
sudo mv git-presenter-linux-arm64 /usr/local/bin/git-presenter
108+
```
109+
110+
### macOS (Intel)
111+
```bash
112+
wget https://github.com/pythonandchips/git-presenter/releases/download/${{ github.ref_name }}/git-presenter-darwin-amd64
113+
chmod +x git-presenter-darwin-amd64
114+
sudo mv git-presenter-darwin-amd64 /usr/local/bin/git-presenter
115+
```
116+
117+
### macOS (Apple Silicon)
118+
```bash
119+
wget https://github.com/pythonandchips/git-presenter/releases/download/${{ github.ref_name }}/git-presenter-darwin-arm64
120+
chmod +x git-presenter-darwin-arm64
121+
sudo mv git-presenter-darwin-arm64 /usr/local/bin/git-presenter
122+
```
123+
124+
### Windows (x86_64)
125+
Download `git-presenter-windows-amd64.exe` and add to your PATH.
126+
env:
127+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

README.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# git-presenter (Go Implementation)
2+
3+
When presenting code live on stage you have a few choices:
4+
5+
* Change code live on stage and risk making a mistake and the code not working.
6+
* Place code in a slide and not be able to run the code live.
7+
8+
Git-presenter solves this problem by giving a presentation style interface for your code.
9+
10+
## Pre-requisites
11+
12+
* Git
13+
* Go 1.19 or later
14+
15+
## Installation
16+
17+
### From Source
18+
19+
```bash
20+
git clone https://github.com/pythonandchips/git-presenter.git
21+
cd git-presenter/go
22+
go build -o bin/git-presenter ./cmd/git-presenter
23+
```
24+
25+
### Build and Install
26+
27+
```bash
28+
go build -o $HOME/bin/git-presenter ./cmd/git-presenter
29+
```
30+
31+
Make sure `$HOME/bin` is in your PATH.
32+
33+
## Usage
34+
35+
* Commit to git as you develop your code.
36+
* When the code is ready use the "git-presenter init" command to initialise
37+
* Once it is initialised you can start the presentation with "git-presenter start"
38+
* Make more commits if need be and use "git-presenter update"
39+
* Then use the following command to navigate the presentation
40+
* next/n: move to next slide
41+
* back/b: move back a slide
42+
* end/e: move to end of presentation
43+
* start/s: move to start of presentation
44+
* list/l : list slides in presentation
45+
* help/h: display this message
46+
47+
### Command mode
48+
49+
The default for git presenter is interactive mode however if you want to use git presenter from a text editor you can use command mode.
50+
51+
To start a presentation in command mode use "git-presenter start -c"
52+
53+
Once started you run "git-presenter {{command}}" e.g. to move to the next slide run "git-presenter next"
54+
55+
## Development
56+
57+
### Running Tests
58+
59+
```bash
60+
go test ./internal/controller ./internal/presentation ./internal/presenter ./internal/slide
61+
```
62+
63+
### Building
64+
65+
```bash
66+
go build -o bin/git-presenter ./cmd/git-presenter
67+
```
68+
69+
## Architecture
70+
71+
The Go implementation follows clean architecture principles with the following components:
72+
73+
- **GitPresenter** (`internal/presenter/`): Main entry point that coordinates the presentation system
74+
- **Controller** (`internal/controller/`): Handles initialization, starting, and updating presentations
75+
- **Presentation** (`internal/presentation/`): Manages the presentation state and slide navigation
76+
- **Slide** (`internal/slide/`): Represents individual slides (git commits)
77+
78+
## Other resources
79+
80+
There are couple of videos showing git presenter and how to use it:
81+
* [video 1](https://vimeo.com/38949496)
82+
* [video 2](https://vimeo.com/39225144)
83+
84+
## Contributing to git-presenter
85+
86+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
87+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
88+
* Fork the project
89+
* Start a feature/bugfix branch
90+
* Commit and push until you are happy with your contribution
91+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
92+
* Please try not to mess with the go.mod, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
93+
94+
### Development Methodology
95+
96+
This implementation follows:
97+
- **Test-Driven Development (TDD)**: All features are implemented with tests first
98+
- **Clean Architecture**: Separated concerns with clear boundaries
99+
- **Tidy First**: Structural and behavioral changes are kept separate
100+
101+
## Contributors
102+
103+
* [Luís Ferreira - Zamith](https://github.com/zamith) on the original ruby version
104+
* Go implementation created using Claude Code
105+
106+
## Copyright
107+
108+
Copyright (c) 2025 Colin Gemmell
109+
110+
Permission is hereby granted, free of charge, to any person obtaining
111+
a copy of this software and associated documentation files (the
112+
"Software"), to deal in the Software without restriction, including
113+
without limitation the rights to use, copy, modify, merge, publish,
114+
distribute, sublicense, and/or sell copies of the Software, and to
115+
permit persons to whom the Software is furnished to do so, subject to
116+
the following conditions:
117+
118+
The above copyright notice and this permission notice shall be
119+
included in all copies or substantial portions of the Software.
120+
121+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
122+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
123+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
124+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
125+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
126+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
127+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

bin/git-presenter

9.04 MB
Binary file not shown.

cmd/git-presenter/main.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"git-presenter/internal/presenter"
7+
)
8+
9+
func main() {
10+
if len(os.Args) < 2 {
11+
fmt.Println("Usage: git-presenter <command> [options]")
12+
fmt.Println("Commands: init, start, update, next, back, end, start, list, help")
13+
os.Exit(1)
14+
}
15+
16+
command := os.Args[1]
17+
interactive := true
18+
19+
if len(os.Args) >= 3 && os.Args[2] == "-c" {
20+
interactive = false
21+
}
22+
23+
currentDir, err := os.Getwd()
24+
if err != nil {
25+
fmt.Printf("Error getting current directory: %v\n", err)
26+
os.Exit(1)
27+
}
28+
29+
gitPresenter := presenter.NewGitPresenter(currentDir, interactive)
30+
31+
err = gitPresenter.Execute(command)
32+
if err != nil {
33+
fmt.Printf("Error executing command: %v\n", err)
34+
os.Exit(1)
35+
}
36+
}

go.mod

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module git-presenter
2+
3+
go 1.24.5
4+
5+
require (
6+
dario.cat/mergo v1.0.0 // indirect
7+
github.com/Microsoft/go-winio v0.6.2 // indirect
8+
github.com/ProtonMail/go-crypto v1.1.6 // indirect
9+
github.com/cloudflare/circl v1.6.1 // indirect
10+
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
11+
github.com/emirpasic/gods v1.18.1 // indirect
12+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
13+
github.com/go-git/go-billy/v5 v5.6.2 // indirect
14+
github.com/go-git/go-git/v5 v5.16.2 // indirect
15+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
16+
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
17+
github.com/kevinburke/ssh_config v1.2.0 // indirect
18+
github.com/pjbgf/sha1cd v0.3.2 // indirect
19+
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
20+
github.com/skeema/knownhosts v1.3.1 // indirect
21+
github.com/xanzy/ssh-agent v0.3.3 // indirect
22+
golang.org/x/crypto v0.37.0 // indirect
23+
golang.org/x/net v0.39.0 // indirect
24+
golang.org/x/sys v0.32.0 // indirect
25+
gopkg.in/warnings.v0 v0.1.2 // indirect
26+
gopkg.in/yaml.v2 v2.4.0 // indirect
27+
)

go.sum

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
2+
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
3+
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
4+
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
5+
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
6+
github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
7+
github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
8+
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
9+
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
10+
github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
11+
github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
12+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
13+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14+
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
15+
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
16+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
17+
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
18+
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
19+
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
20+
github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM=
21+
github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
22+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
23+
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
24+
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
25+
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
26+
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
27+
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
28+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
29+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
30+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
31+
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
32+
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
33+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
34+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
35+
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
36+
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
37+
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
38+
github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
39+
github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
40+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
41+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
42+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
43+
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
44+
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
45+
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
46+
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
47+
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
48+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
49+
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
50+
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
51+
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
52+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
53+
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
54+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
55+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
56+
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
57+
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
58+
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
59+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
60+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
61+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
62+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
63+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
64+
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
65+
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
66+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
67+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
68+
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
69+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)